当前您所在的位置:首页>开发控件 版本控制 >开发控件

OSS EXI Prototype for C/C++

EXI Prototype for C/C++

使用OSS EXI Tools for C/C++为您的XML数据实现前所未有的紧凑性。 用于OSS EXI Tools for C/C++是一组实现高效XML交换(EXI)格式1.0(第二版)W3C推荐标准的工具。

OSS EXI Tools for C/C++使C / C ++应用程序能够读取和写入符合Efficient XML Interchange W3C Recommendation的数据流。

 

OSS EXI Tools for C/C++已经通过W3C 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流。

组件

用于C / C ++的OSS EXI工具包括两个主要组件:

•模式预处理器实用程序(ossEXIpre.exe)和

•EXI / C运行时库(ossEXIc.dll)。

模式预处理器实用程序是读取XML模式并生成序列化模式文件的命令行应用程序。作为模式预处理器输入的模式必须包含符合W3C XML模式1.0的一个或多个模式文档文件。输出是传递从模式提取并以专有格式表示的信息的XML文件(序列化模式文件),其由EXI / C运行时库理解。 EXI的无模式模式不需要使用模式预处理器。

模式预处理器依赖于XML模式解析功能和.NET框架的XML模式对象模型(版本4.5或更高版本)。 .NET框架仅由模式预处理器需要。它不是EXI / C运行时库(见下文)需要或使用的,因此在目标系统上不需要。

EXI / C运行时库是一个本地Windows DLL,用于读取和写入EXI流,以及将XML文档和片段转换为EXI和EXI流转换为XML。

 

EXI Prototype for C/C++-API

EXI / C运行时库的API是C风格的API,可以由C应用程序和C ++应用程序使用。

EXI / C运行时库支持创建或处理EXI流的两种不同方法。在第一种方法中,用户应用程序通过为每个节点调用一个或多个API函数来一次读取或写入EXI文档或片段一个节点。在第二种方法中,用户应用程序对API函数进行单次调用,该函数将整个文档或片段从XML转换为EXI或从EXI转换为XML。对于只需要读取或写入EXI流(不涉及XML)的应用程序,第一种方法更快。当开发人员必须将EXI添加到读取或写入XML的现有应用程序时,第二种方法可能更方便。

EXI / C运行时库还包括一些旨在提高EXI编码/解码性能的高级功能。其中之一是为非字符串XSD数据类型(例如,xsd:integer,xsd:float,xsd:base64Binary等)的值传递二进制值而不是跨API的字符串(两个方向)对于枚举数据类型的值。

EXI / C运行时库也可用于读取和写入XML 1.0文档和片段。在将整个文档或片段从XML转换为EXI或从EXI转换为XML的过程中,此功能由EXI / C运行时库在内部使用,但也可通过API提供给用户应用程序。大多数读取和写入文档或片段的节点的API函数对于XML和EXI是通用的。

EXI / C运行时库的流读取能力(对于EXI和XML)遵循“拉解析器”模型。

为了方便起见,还包括类似于Apache Xerces-C ++的SAX2 API(SAX2XMLReader和处理程序类)的类似于SAX2的C ++ API。此API的使用是可选的。

 

EXI Prototype for C/C++-API - 特性

一致性和主要特性(EXI)

用于C / C ++的OSS EXI工具是高效XML交换(EXI)格式1.0(第二版)W3C推荐的完整实现。因此,他们完全支持EXI的以下功能:

•模式通知的EXI流

•仅使用XSD内置数据类型的模式通知的EXI流

•无模式EXI流

•文档/片段

•所有对齐选项(位打包,字节对齐,预压缩)

•EXI压缩(使用DEFLATE)

•严格/非严格(与模式的偏差)

•保真选项(保留注释,pis,dtd,前缀,词汇值)

•处理xsi:type和xsi:nil

•处理自包含元素(在编码和解码时)

•读取和写入EXI流头中包含的EXI选项文档

•数据类型表示形式映射

•从模式面得到限制字符集,

以及在编码和解码EXI流时都遵循EXI推荐所需的所有其他特征。

一致性和主要特性(XML)

用于C / C ++的OSS EXI工具也是作为非验证处理器的可扩展标记语言(XML)1.0(第五版)W3C推荐标准的一致性实现,具有以下特征:

•它们支持以下字符编码:UTF-8,UTF-16 little-endian和UTF-16 big-endian(无其他)

•它们读取和处理内部DTD子集

•它们可以读取和处理外部DTD子集,所有外部实体和所有参数实体

•它们提供默认属性,并根据DTD中指定的属性类型执行属性值的空格标准化

它们支持读取和写入XML文档和XML片段

•它们支持使用符合XML 1.0(第三版)W3C Recommendation中的命名空间的命名空间

•它们还支持不使用命名空间的XML文档和片段。

北京哲想软件有限公司