xml 压缩_研究最新的XML压缩技术

本文探讨了XML压缩的重要性,特别是在处理大型XML文档时的需求。XML压缩器通过利用XML结构实现比传统文本压缩更高的压缩率,从而节省网络带宽和存储空间。文章介绍了两类XML压缩器:通用文字压缩器(如gzip、bzip2和PPM)和XML感知压缩器,后者根据对XML结构和查询支持的了解进一步分为两类。XMill作为XML感知压缩器的代表,通过将结构和数据分离实现高效压缩。此外,文章还讨论了可查询XML压缩器,如XGrind和XPress,它们支持在压缩格式上直接执行查询。最后,强调了在选择XML压缩器时,需要在压缩率和查询支持之间找到平衡。
摘要由CSDN通过智能技术生成

xml 压缩

XML是由于HTML和万维网的广泛普及而出现的最有用和最重要的技术之一。 XML解决了许多问题,因为它提供了不同体系结构之间的中立数据表示,以最小的努力弥合了软件系统之间的鸿沟,并存储了大量的半结构化数据。

XML通常被称为自描述数据,因为它被设计为对文档中的每个记录重复执行该模式。 这种自我描述的功能为XML提供了极大的灵活性,但同时也引入了冗长的XML文档的问题,从而导致文档尺寸过大。 由于XML的使用持续增长,并且由于XML文档的大型存储库目前无处不在,因此对有效XML压缩工具的需求很大。

图1说明了使用XML压缩器来减少通过网络传输XML数据的成本的优势。 为了解决大型XML文档的大小问题,一些具有XML意识的压缩器利用XML文档的众所周知的结构来实现比常规文本压缩器更好的压缩率。 XML压缩工具的许多优点包括减少数据交换所需的网络带宽,减少存储所需的磁盘空间以及将处理和查询XML文档的主内存需求最小化。

图1.使用XML压缩器在网络上传输XML数据的优势示例
使用XML压缩器通过网络传输XML数据的优点的示例示例图

原则上,可以根据两个主要特征对XML压缩器进行分类。 图2展示了第一个分类,该分类基于他们对XML文档结构的了解。 根据此分类,压缩机分为两个主要组:

  • 通用文字压缩器 。 因为XML数据存储为文本文件,所以压缩XML文档的第一种逻辑方法是使用传统的通用文本压缩工具(例如gzip,bzip2)。 这组XML压缩器是XML盲的,也就是说,它们将XML文档视为普通的纯文本文档,因此应用了传统的文本压缩技术。
  • XML意识压缩器 。 这类压缩器旨在利用XML文档结构的意识来获得比常规文本压缩器更好的压缩率。 可以根据它们对XML文档模式信息可用性的依赖程度进一步对这组压缩器进行分类,如下所示:
    • 依赖于模式的压缩器 。 编码器和解码器都必须有权访问文档架构信息以实现压缩过程(例如rngzip)。
    • 与模式无关的压缩器 。 模式信息的可用性不是实现编码和解码过程所必需的(例如XMill,SCMPPM)。
图2.根据XML压缩器对XML文档结构的了解对其进行分类
根据XML压缩器对XML文档结构的了解进行分类的示意图

图3展示了XML压缩器的第二种分类,其基于它们支持查询的能力,如下所示:

  • 不可查询(归档)XML压缩器 。 这组XML压缩器不允许以压缩格式(例如gzip,bzip2,XMill)处理任何查询。 该组的主要重点是实现最高压缩率。 默认情况下,通用文本压缩器属于不可查询的压缩器组。
  • 可查询的XML压缩器 。 这组XML压缩器允许以其压缩格式处理查询。 该组的压缩率通常比档案XML压缩器的压缩率差。 但是,该组的主要重点是避免在查询执行期间对文档进行完全解压缩。 实际上,对压缩XML格式执行直接查询的功能对于托管在资源受限的计算设备(例如移动设备和GPS系统)上的许多应用程序很重要。 默认情况下,所有可查询的压缩器也是XML感知的压缩器。 您可以通过它们对XML文档的结构部分和数据部分的编码方式进一步对这组压缩器进行分类:
    • 同态压缩机 。 XML文档的原始结构得以保留,您可以以与原始格式相同的方式访问和解析压缩格式(例如XGrind)。
    • 非同态压缩机 。 XML文档的编码过程将结构部分与数据部分(例如XQueC)分开。 因此,压缩格式的结构与原始XML文档的结构不同。
图3. XML压缩器根据其对执行查询的支持进行分类
XML压缩器根据其对执行查询的支持进行分类的示意图

通用文字压缩器

XML是树状结构数据的文本表示形式。 压缩XML文档的一种直接的逻辑方法是使用传统的通用文本压缩工具。 在过去几十年中设计出的许多算法可以有效地压缩文本数据。 该组中最受欢迎和最有效的代表是gzip,bzip2和PPM压缩器。

gzip压缩器基于DEFLATE无损数据压缩算法,该算法结合使用LZ77算法和霍夫曼编码。 为了压缩数据,LZ77算法使用对已经通过编码器和解码器的匹配数据的引用来替换部分数据。 霍夫曼编码使用一种特定的方法来选择每个符号的表示形式,其中使用较短位串的最常见字符用于不那么常见的源符号。

bzip2压缩器使用Burrows-Wheeler变换将频繁重复出现的字符序列转换为相同字母的字符串,然后应用前移变换,最后进行霍夫曼编码。 Burrows-Wheeler变换按照以下方式排列字符的顺序:如果原始字符串具有多个经常出现的子字符串,则转换后的字符串将在多个位置处将单个字符连续重复多次。 此方法对压缩很有用,因为它易于压缩包含重复字符的字符串。 实际上,bzip2压缩以比使用gzip压缩的压缩率更高的压缩率压缩文件,但其性能也较慢。

PPM是基于上下文建模和预测的自适应统计数据压缩技术。 它使用有限上下文统计建模技术,该技术将几个固定顺序的上下文模型混合在一起,以预测输入序列中的下一个字符。 根据频率计数计算模型中每个上下文的预测概率,并进行自适应更新。 使用算术编码将实际出现的符号相对于其预测分布进行编码。 尽管PPM很简单,并且是目前为止展示的最高效的压缩机,但它在计算上也是最昂贵的。

实际上,一般的文本压缩器用于存档目的或用于减少数据交换过程中的网络带宽。 通常,这些压缩器之间要在两个主要指标之间进行权衡:压缩率和压缩/解压缩时间。 一方面,PPM压缩可实现最佳压缩率,而gzip则可实现最小压缩率。 另一方面,gzip在压缩/解压缩时间方面具有最佳性能,而PPM的压缩/解压缩时间要慢得多。 bzip2位于两个指标的中间。 因此,就这两个指标而言,用户对要使用的压缩机的选择主要取决于用户场景的要求。

不可查询(归档)XML压缩器

这组XML压缩器不允许以压缩格式处理任何查询,因为它们的主要重点是获得最高压缩率。 本节讨论该组两个主要类别的代表:

  • 与模式无关的压缩器
  • 与模式有关的压缩器

与模式无关的压缩方案

这类压缩方案不需要用于编码和解码过程的方案信息。 XMill是具有XML意识的压缩器的第一个实现,它引入了新颖的思想,即将XML文档的结构与数据分离,并根据树中的相对路径和数据类型将数据值分组到同质容器中。

在XMill中,分别收集和压缩源XML文档的结构部分和数据值部分。 在结构部分,将XML标签和属性以基于字典的方式进行编码,然后再将其传递给后端通用文本压缩方案。 XMill的结构编码方案为每个不同的元素和属性名称分配一个整数代码,该整数代码用作元素和属性名称字典的键。 在数据部分,根据数据值的路径和数据类型将其分为同质和语义相关的容器。 然后,使用专用于该容器的数据类型的专用压缩器分别压缩每个容器。 该分组操作用于定位重复,因此提高了压缩程度。

在最新版本的XMill源分发中,可以将压缩格式的中间二进制文件传递到三个备用后端通用压缩器之一:gzip,bzip2和PPM。 图4概述了XMill压缩器的一般体系结构,其中包括XML解析器,结构和数据容器,一个或多个压缩方案以及压缩的XML文件(包含压缩的结构和压缩的数据)。

图4. XMill压缩器的一般架构
XMill压缩机的一般架构图

图5说明了将XML文件拆分为结构容器和数据容器的示例。 元素和属性表存储XML文档的结构容器。 每个唯一路径(元素或属性)的值存储在单独的表(容器)中。 因此,每个容器中的值变得均匀并且可以更有效地压缩。 此示例包括单独的元素(客户,客户/客户,客户/客户/名字,客户/客户/姓氏,客户/客户/发票,客户/客户/发票/项目以及客户/客户/发票/项目/项目)和属性(客户/客户/ @ id和客户/客户/发票/ @总计)表。

图5.将XML文件拆分为结构容器和数据容器的示例
将XML文件拆分为结构容器和数据容器的示例图

图6展示了XMill压缩器的命令行选项。

图6. XMill压缩器的命令行选项
XMill压缩器的命令行选项的屏幕截图

图7说明了使用XMill压缩器压缩XML文档(tpc.xml,大小为282 KB)的效果,其中输出压缩文件(tpc.xmi,大小为41 KB)的大小代表原始XML大小的15%。文件。

图7.使用XMill压缩器压缩XML文件的输出
使用XMill compressot压缩XML文件的输出的屏幕截图

XMLPPM是一种流XML压缩器,它使用称为MHM的多路复用分层PPM模型。 XMLPPM被认为是通过部分匹配压缩方案(PPM)对通用预测的一种改编。 在XMLPPM中,首先使用SAX解析器解析XML文件,以生成SAX事件流。 每个事件都使用称为ESAX(编码的SAX)的字节码表示形式进行编码。 ESAX字节码基于其语法结构(元素,字符,属性和其他符号),使用几种复用的PPM模型之一进行编码。 已建议将SCMPPM压缩器作为XMLPPM压缩器的变体。 SCMPPM将称为结构上下文建模(SCM)的技术与PPM压缩方案相结合。 与XMLPPM相比,它使用更大的PPM模型集,因为它使用单独的模型来压缩每个元素符号下的文本内容。

XMill和XMLPPM的压缩率和压缩/解压缩时间非常依赖于它们的后端通用压缩器(gzip,bzip2或PPM)并与之相关。 因此,它们与通用后端压缩机具有相同的权衡。

与模式有关的压缩方案

此类压缩器在其编码和解码过程中需要XML文档的模式信息的可用性。 例如,XAUST XML压缩器将DTD的模式信息转换为一组确定性有限自动机(DFA),在DTD中每个元素一个。 然后,每个过渡都由一个元素标记,并且与过渡相关联的动作是对DFA仿真器的调用,该元素用于标记该过渡的DFA。 XAUST将同一元素的所有数据分组到一个容器中,然后使用单个模型对4阶算术压缩器进行增量压缩。 使用DTD架构信息,XAUST能够跟踪文档的结构,并能够对预期符号进行准确的预测。 只要预测符号是唯一的,就无需对其进行编码,因为解码器会从DTD生成相同的模型,从而可以生成唯一的预期符号。

RNGzip XML工具压缩符合给定Relax NG模式的XML文档。 在RNGzip中,发送者和接收者必须事先就完全相同的模式达成一致。 从这个意义上讲,模式就像一个用于加密和解密的共享密钥。 RNGzip使用Relax NG模式验证器根据指定的模式构建确定性树自动机。 然后,给定一个XML文档,它检查XML是否被自动机接受。 有了这个自动机,接收者可以通过传输很少的信息来重建整个XML文档。 如果自动机中有一个选择点,则RNGzip只是传输进行了哪个转换,如果遇到文本转换,则传输匹配的文本。

从理论上讲,与模式无关的压缩器可能会比与模式无关的压缩器获得更高的压缩率。 但是它们不是可取的,也不是常用的,因为XML文档的架构信息可能并不总是可用,因此失去了XML表示半结构化数据灵活性的优势。 这种类型的压缩器仅在用于压缩具有预定义模式的XML文档时才有效。

可查询的XML压缩器

可查询XML压缩器的主要重点是允许在不解压缩整个文档的情况下直接根据其压缩格式评估查询。 该组的压缩率通常比档案XML压缩器的压缩率差。 这种类型的压缩器对于托管在资源受限的计算设备(例如移动设备和GPS系统)上的许多应用程序非常重要。 本节讨论该组两个主要类别的代表:

  • 同态压缩机
  • 非同态压缩机

同态可查询XML压缩器

此类压缩器以压缩格式保留XML文档的原始结构,因此可以以与原始格式相同的方式对其进行访问和解析。 XGrind是第一个支持XML的压缩方案,它支持查询而无需对压缩的XML文档进行完全解压缩。 XGrind不会将数据与结构分开。 它保留了XML文档的原始结构。

XGrind压缩格式的同态性质为XGrind提供了许多有趣的功能:

  • 可以将压缩的XML文档视为原始XML文档,其标签和元素/属性值被其相应的编码替换。 因此,可以将XGrind视为扩展的SAX解析器。
  • XML索引技术可以按与常规XML文档相似的方式构建在压缩文档上。 在XGrind中,元素和属性名称使用基于字典的编码方案进行编码,而字符数据使用半自适应霍夫曼编码进行压缩。 XGrind的查询处理器只能处理压缩值的完全匹配和前缀匹配查询,以及解压缩值的部分匹配和范围查询。 XGrind不支持某些操作,例如,压缩域中的非相等选择。 因此,XGrind无法执行任何连接,聚合,嵌套查询或构造操作。

XPress是另一个同态可查询XML压缩器,它使用特征的组合来有效地压缩和检索XML数据。 为了对XML文档的标签和路径进行编码,它在不同的时间间隔上使用了反向算术编码方法。 使用间隔之间的包含关系,可以在压缩的XML数据上评估路径表达式。 XPress的压缩方案是半自适应的,它使用输入文件的初步扫描来收集统计信息,并且数据的编码规则与数据的位置无关。 它还根据数据的自动推断类型信息对数据值使用适当的编码器。

非同态可查询XML压缩器

此类压缩器在XML文档的编码过程中将结构部分与数据部分分开。 因此,与同态类不同,压缩格式的结构与原始XML文档的结构不同,并且在解压缩过程中需要以不同的方式进行解析。 他们。 但是,可以实现更好的压缩率。 例如,XSeq是一种基于语法的可查询XML压缩方案,被认为是著名的基于语法的文本字符串压缩算法Sequitur的改编。

在XSeq中,将输入XML文件的标记分成一组容器,然后使用Sequitur对其进行压缩。 Sequitur压缩算法是一种线性时间在线算法,可为给定的字符串输入形成上下文无关的语法。 使用定义的上下文无关文法,XSeq避免了不相关压缩数据的顺序扫描,并且仅处理要与给定查询匹配的数据值。 此外,无上下文语法允许XSeq直接在压缩文件上处理查询,而无需完全或部分解压缩。 为了关联存储在不同容器中的数据值并加快查询评估时间,XSeq使用了一组索引,这些索引存储在压缩文件中并在处理规则内容之前加载到内存中。 例如,它使用结构索引,通过它可以在不进行解压缩的情况下快速将每个数据值定位在容器中,而标头索引包含指向文件中每个容器入口的指针列表。

TREECHOP XML压缩器是另一种可查询的XML压缩器,其中压缩过程通过对XML文档进行基于SAX的解析开始,然后将解析的令牌以深度优先的顺序写到压缩流中。 每个节点的代码字以其父节点的代码字为前缀,并且如果XML文档树中的两个节点具有相同的路径,则它们共享相同的代码字。 每个CDATA节,注释,处理指令和非叶子节点都分配有一个二进制代码字。 该代码字是根据树节点的路径唯一分配的。 因为树节点编码是按深度优先顺序写入压缩流的,所以解压缩器有可能使用自适应编码信息增量地重新生成原始XML文档。 在TREECHOP中,可以使用单个扫描通过压缩流来执行精确匹配和范围查询。

XQuec系统基于XML文档中的分隔结构和内容,对压缩的XML文档使用碎片和存储模型。 此外,它取决于如何对容器进行分组的正确选择,以确保属于同一组的容器也一起出现在查询谓词中。 为了对压缩域中的谓词进行评估,它确保谓词中涉及的容器属于同一组,并使用在压缩域中支持该谓词的算法对其进行压缩。 有关谓词的信息是使用可用的查询工作负载来推断的。 XQueC利用查询工作负载信息根据源模型将容器划分为集合,并为每个集合正确分配最合适的压缩算法。 XQueC还设计了一个用于评估XML查询的代数。 这种代数被基于成本的优化器所利用,可以自由地将常规运算符和压缩感知运算符混合在一起。

结论

在这篇概述文章中,您了解了最新的XML压缩技术。 XMill在该领域的第一个实现中介绍了XML压缩机制的主要创新。 它引入了将XML文档的结构部分与数据部分分离,然后将相关数据项分组到可以单独压缩的同质容器中的想法。 这种分离改进了用通用压缩机或其他压缩机制压缩这些同质容器的进一步步骤,因为它们可以更轻松地检测到冗余数据。

剩下的大多数XML压缩器都以不同的方式模拟了这个想法。 压缩时间和解压缩时间度量标准在区分不同的XML压缩技术中起着至关重要的作用。 原则上,依赖于模式的XML压缩器不是可取的,也不是实践中常用的压缩器,因为XML文档的模式信息并非始终可用,并且格式不要求(DTD,XML Schema,RElaxNG)。 尽管可查询XML压缩器对于许多应用程序非常重要,但是尚没有公开的基于语法的XML压缩技术和可查询XML压缩器的可靠实现。 这两个领域为进一步的研究和开发提供了许多有趣的途径。


翻译自: https://www.ibm.com/developerworks/xml/library/x-datacompression/index.html

xml 压缩

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值