最佳的XML压缩算法?

Aet*_*hex 31 xml compression algorithm zip text

我几乎不知道有关压缩的事情,所以忍受我(这可能是一个愚蠢而痛苦的明显问题).

所以假设我有一个带有几个标签的XML文件.

<verylongtagnumberone>
  <verylongtagnumbertwo>
    text
  </verylongtagnumbertwo>
</verylongtagnumberone>
Run Code Online (Sandbox Code Playgroud)

现在假设我的多个XML文件中有许多这些非常长的标签,其中包含许多属性.我需要将它们压缩到尽可能小的尺寸.最好的方法是使用特定于XML的算法,该算法为vlt1或vlt2分配单个标签假名.然而,这并不像我想要的那样"开放",我想使用像DEFLATE或LZ这样的常用算法.如果存档是.zip文件,它也会有效.

由于我正在处理纯文本(没有像图像这样的二进制文件),我想要一个适合纯文本的算法.哪一个产生最小的文件大小(首选无损算法)?

顺便说一下,场景是这样的:我正在为包含XML文件的文档(如ODF或MS Office XML)创建一个标准,打包在.zip中.

编辑:'加密'的事情是一个错字; 它应该是'压缩'.

iva*_*off 31

有一个名为EXI(高效XML交换)的W3(尚未发布)标准.

应成为将来压缩XML数据的数据格式(声称是最后一种必要的二进制格式).针对XML进行优化,它比任何传统压缩算法更有效地压缩XML.

使用EXI,您可以动态操作压缩的XML数据(无需解压缩或重新压缩).

EXI =(XML + XMLSchema)为二进制.

在这里你使用开源实现(不知道它是否已经稳定):
非常有用

  • ASN.1的一些不合标准(或某些东西)是EXI的候选者.二进制文件**是邪恶的.EXI不是常识中的二进制文件.您不需要编写自己的实现来读/写此二进制文件,也不必定义自己的结构和类型系统.所有这些都是由XML + XmlSchema为您完成的. (6认同)
  • 呃.. XML的设计是因为"二进制文件是邪恶的".我们现在有这些EXI的东西.这个证明XML只是重新发明轮子.我们不应该使用ASN.1吗? (4认同)
  • 自2011-03-10以来,EXI现已成为W3C推荐标准:http://www.w3.org/TR/exi/ (3认同)

小智 6

是的,*.zip在实践中最好.这篇USENIX论文中包含的Gory deets 表明,"最佳"压缩器不值得计算成本和特定领域的压缩器不会平均打败zip.

免责声明:根据谷歌的说法,我写了这篇论文,被引用了60多次.


iva*_*off 5

“压缩” XML的另一种替代方法是FI(快速信息集)。

以FI存储的XML仅包含每个标记和属性一次,所有其他出现都引用第一个,从而节省了空间。

看到:

关于java.sun.com的非常好的文章,当然
还有Wikipedia条目

从压缩的角度来看,与EXI的区别在于,快速信息集(结构化明文)的效率较低。

其他重要区别是:FI是具有许多实现的成熟标准。
其中之一:快速信息集项目@ dev.java.net