EXI(高效XML交换)即将推出。。。XML API准备好了吗?
W3的EXI(高效XML交换)即将标准化。 它声称是“最后的二进制标准” 它是一种存储XML数据的标准,针对 处理和存储与XML模式捆绑在一起(使数据 强类型和强结构)。嗯,有很多 声称拥有优势。我印象最深的是加工和包装 内存效率测量 我在问自己,所有已建立的国家将会发生什么 XML API 这一段与我的问题有关: 4.2现有的XML处理API 由于EXI是XML信息集的编码,所以EXI实现可以支持用于XML处理的任何常用XML API,因此EXI对现有XML API没有直接影响。但是,使用现有的XMLAPI还需要将EXI文档中出现的所有名称和文本转换为字符串。将来,如果更高层可以直接使用这些数据作为EXI文档中出现的类型化值,可能会实现更高的效率。例如,如果更高层需要类型化数据,则遍历其字符串形式可能会产生性能损失,因此直接支持类型化数据的扩展API在与EXI一起使用时可以提高性能 发件人: 我的理解如下:“将EXI与现有API一起使用? 没有性能提升!(除非您全部重写) 让我们以Java生态系统为例: 在最新的JDK 6中,我们有很多XML API (随着每一个主要的JDK版本的发布,添加的JDK越来越多。) 据我判断,他们中的大多数(如果不是全部的话)都在使用这两种方法 内存中的DOM树,或序列化(“文本”)表示 转换/处理/验证/。。。XML数据 你们觉得这些会怎么样 引入EXI的API 谢谢大家的意见EXI(高效XML交换)即将推出。。。XML API准备好了吗?,xml,api,web-standards,exi,Xml,Api,Web Standards,Exi,W3的EXI(高效XML交换)即将标准化。 它声称是“最后的二进制标准” 它是一种存储XML数据的标准,针对 处理和存储与XML模式捆绑在一起(使数据 强类型和强结构)。嗯,有很多 声称拥有优势。我印象最深的是加工和包装 内存效率测量 我在问自己,所有已建立的国家将会发生什么 XML API 这一段与我的问题有关: 4.2现有的XML处理API 由于EXI是XML信息集的编码,所以EXI实现可以支持用于XML处理的任何常用XML API,因此EXI对现有XML API没有直接影响。但是,使用现有
对于那些不了解EXI的人:我个人宁愿不使用EXI。它似乎把XML的所有笨拙、不好的地方都塞进了二进制格式,基本上消除了XML(纯文本格式)的保存优势 行业的总趋势似乎是朝着更轻量级的数据传输模型(例如HTTP REST)发展,而不是像SOAP这样的重量级模型。就我个人而言,我对二进制XML的想法并不是特别兴奋 任何声称是“最后一个二进制标准”的东西都可能是错误的。让我们把EXI看作是“更好的XML GZIP”。仅供参考,它对API没有影响,因为您仍然可以使用所有API(DOM、SAX、StAX、JAXB…)。只有这样,为了获得EXI,您必须获得写入它的streamwriter或读取它的streamreader 执行EXI的最有效方法是StAX。但确实,新的API可能会因为EXI而出现。但是谁说DOM是高效的,并且是为现代语言精心设计的;-) 如果您正在处理大型XML文件(我得到了一些数百MB的文件),您肯定知道为什么需要EXI:节省大量空间,节省大量内存和处理时间 这与HTTP内容编码的目的没有什么不同:您不需要使用它,只是如果双方都理解它,这是执行交换的一种非常有效的方法 顺便说一句,由于SOAP膨胀,EXI将成为内容加密任何XML而不是HTTP IMHO的首选方式;-)一旦EXI在浏览器上站稳脚跟,它也可以让任何终端用户受益:更快的传输,更快的分析=同一台机器有史以来最好的体验
EXI并不反对字符串表示,只是使它有点不同。哦,顺便说一句,在使用UTF(比如默认的UTF8)时,您已经对32位unicode码点使用了“压缩编码”。。。这意味着,在线数据已经与实际数据不同;-) 您不需要任何新的API来获得EXI的性能增益。W3C进行的所有EXI测试和性能度量都使用JDK中内置的标准SAXAPI。有关最新的测试,请参阅。在这些测试中,在没有任何特殊API的情况下,EXI解析平均比XML快14.5倍
有一天,如果人们认为这是值得的,我们可能会看到一些类型化XML API出现。如果发生这种情况,您将从EXI获得更好的性能。但是,要获得W3C报告的优异性能,这并不是必需的。EXI的问题是需要从应用程序代码中抽象出来。我在一个中间件产品上工作,其中XML的可读性在某些方面(日志记录、故障查找等)是关键,但在其他方面(内部应用程序之间的通信以限制I/O负载)可能会被牺牲 我们目前使用SOAP在客户机、中间件和供应商web应用程序之间进行通信。我想用EXI替换它,同时在其他领域保留人类可读的XML。为了用EXI替换SOAP通信,我需要:
<xs:complexType name="example">
<xs:sequence>
<xs:element name="bool1" type="xs:boolean" minOccurs="0" />
<xs:element name="bool2" type="xs:boolean" minOccurs="0" />
</xs:sequence>
</xs:complexType>
+---- A value of 0 means this element (bool1) is not specified,
| 1 indicates it is specified
|+--- A value of x means this element is undefined,
|| 0 means the bool is set to false, 1 is set to true
||+-- A value of 0 means this element (bool2) is not specified,
||| 1 indicates it is specified
|||+- A value of x means this element is undefined
|||| 0 means the bool is set to false, 1 is set to true
||||
0x0x 4 0100 # neither bools are specified
0x10 8 00100000 # bool1 is not specified, bool2 is set to false
0x11 8 00101000 # bool1 is not specified, bool2 is set to true
100x 9 000000010 # bool1 is set to false, bool2 is not specified
110x 9 000010010 # bool1 is set to true, bool2 is not specified
1010 13 0000000000000 # bool1 is set to false, bool2 is set to false
1011 13 0000000001000 # bool1 is set to false, bool2 is set to true
1110 13 0000100000000 # bool1 is set to true, bool2 is set to false
1111 13 0000100001000 # bool1 is set to true, bool2 is set to true
^ ^
+-encoding--+
Which can be represented with this tree
0-0-0-0-0-0-0-0-0-0-0-0-0 (1010)
\ \ \ \ \
| | | | 1-0-0-0 (1011)
| | | |
| | | 1-0 (100x)
| | |
| | 1-0-0-0-0-0-0-0-0 (1110)
| | \ \
| | | 1-0-0-0 (1111)
| | |
| | 1-0 (110x)
| |
| 1-0-0-0-0-0 (0x10)
| \
| 1-0-0-0 (0x11)
|
1-0-0 (0x0x)