EXI Prototype for .NET
使用OSS Nokalva的EXI工具.NET为您的XML数据实现前所未有的紧凑性。 OSS EXI Tools for .NET是一组实现高效XML交换(EXI)格式1.0(第二版)W3C推荐标准的工具。
OSS EXI工具.NET允许.NET应用程序读取和写入符合EXI推荐标准的数据流。
EXI是W3C推荐的高效XML交换(EXI)格式1.0(第二版)中指定的XML的非常紧凑的表示。与标准(文本)XML相比,EXI提高了串行化和解析速度,并允许更有效地使用内存和电池寿命。 EXI流通常比等效的XML文档小很多倍,并且需要较少的CPU时间来读取或写入。
EXI可以对XML文档进行编码的两种主要方式 - 无模式模式和模式通知模式。在无模式模式下,无论模式是否可用于编码器,EXI都可以编码任何XML文档。在模式通知模式下,EXI具有利用从XML模式提取的信息的独特能力,以提高编码的效率,而不需要通常严格遵守数据到模式。然而,如果用户确定数据将根据模式有效,则EXI编码甚至可以更有效。
使用模式信息使得EXI编码更有效,因为它允许EXI处理器在EXI流内的任何点处对流中的下一项做出某些预测。例如,如果模式指定元素“A”(在特定上下文中)必须总是后跟元素“B”,则当前一元素为“A”时元素“B”的出现被编码为零位(在严格模式下)。
在无模式模式中,在编码或解码操作期间,EXI处理器基于迄今遇到的文档的实际内容连续地修改对每个项目进行编码的方式。例如,当EXI编码器在元素“P”的内容中遇到元素“C”时,假设当当前父元素是元素时,名为“C”的元素比具有其他名称的元素具有更高的出现概率命名为“P”,并且创建缩写方式以编码在名为“P”的元素下名为“C”的元素的出现。下一次在名为“P”的元素(具有相同名称的相同或后续元素)下遇到名为“C”的元素时,EXI编码器将能够使用“C”的缩写编码,从而节省空间。
总之,EXI的用户可以在三个主要选项之间进行选择:(a)根本不使用模式(无模式),(b)以仅支持有效XML文档(模式通知,严格)的方式使用模式,和(c)以支持与模式的偏离的方式使用模式(模式通知的,非严格的)。模式通知,严格模式是三者中最高效的。无模式模式是最容易使用的,因为它不涉及模式。
与许多其他XML压缩技术一样,EXI使用字符串表临时存储正在编码的XML文档中出现的某些类型的字符串,例如命名空间URI,本地名称,属性值等,以允许后续出现的相同字符串使用短字符串标识符进行编码。在无模式模式中,所有字符串表在编码或解码操作开始时被复位。在模式通知模式中,包含命名空间URI和本地名称的字符串表预填充了从模式中提取的字符串或在XML模式建议中定义的字符串,以便那些字符串在每个编码或解码操作开始时就已经知道。
EXI中有其他选项影响EXI流的内容。其中一些选项,称为保真选项,控制EXI处理器在EXI流中包括某些类型的项目的能力,例如XML注释,处理指令和命名空间声明。如果用户对在EXI编码中保留的这样的项目之一不感兴趣,则他们可以通过不必包括该类型的项目来选择将使得EXI编码更有效的选项。因此,例如,如果用户声明命名空间声明和前缀不需要保留,则EXI流编码器将放弃编码这些东西的能力,并且所得到的EXI流可以更紧凑。还有另一个保真选项,它控制使用简单类型保存属性和元素的原始字符串值。当未选择此选项时,将更有效地编码这些值(例如,类型为xsd:integer的属性值将被编码为二进制整数而不是字符串),但读者无法重建读回EXI流时的精确原始字符串。在许多应用中,这种信息丢失是可接受的,因此不应该选择该选项。
EXI的最后一个主要特性是支持字节对齐和压缩。用户可以选择四个对齐选项之一:(a)位打包对齐,(b)字节对齐对齐,(c)预压缩和(d)压缩。位打包和压缩是更紧凑的(压缩通常,但不总是,比位打包更紧凑)。位填充和字节对齐是较快的(字节对齐可能比位填充稍快)。预压缩和压缩都将EXI流内的编码数据排列成特定的布局,其中可能相似的所有编码数据项都靠近在一起。这种布置提高了应用于数据的压缩算法的有效性。预压缩本身不执行任何压缩,因为它的唯一目的是为外部压缩步骤(EXI处理器外部)准备要应用于EXI流的EXI流。压缩进一步并且将标准DEFLATE算法应用于类似编码数据项的每个块,以产生最终的EXI流。
组件
OSS EXI工具包括两个主要组件:
•模式预处理器实用程序(ossEXIpre.exe)和
•EXI / .NET运行时库(ossEXIdn.dll)。
模式预处理器实用程序是读取XML模式并生成序列化模式文件的命令行应用程序。 作为模式预处理器输入的模式必须包含符合W3C XML模式1.0的一个或多个模式文档文件。 输出是一个XML文件(序列化模式文件),它传递从模式提取的信息,并以专有格式表示,这是EXI / .NET运行时库理解的。 EXI的无模式模式不需要使用模式预处理器。
模式预处理功能也可在EXI / .NET运行时库中使用。
EXI / .NET运行时库是一个.NET DLL,用于读取和写入EXI流以及将XML文档和片段转换为EXI和将EXI流转换为XML。