EXI(高效XML交换)即将推出。。。XML 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没有直接影响。但是,使用现有

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的人:

我个人宁愿不使用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通信,我需要:

  • 等待EXI被合并到现有SOAP堆栈(Axis/SAAJ)中,或者
  • 用我自己的SOAP替换我现有的Axis/SAAJ SOAP客户端/供应商实现 EXI之上的协议
  • JSON和EXI之间的比较是公平的,但两者的用例是不同的。JSON没有元数据标准,而XML有XML模式。对于XML,有几个标准机构定义特定行业的数据交换模式。还有一系列建立在XML之上的协议/标准,如SOAP、XML签名、XML加密、WS-Security、SAML等。JSON不存在这些协议/标准

    因此,对于B2B消息交换和其他需要使用行业标准与外部系统集成的情况,XML是一个更好的选择。EXI可以将JSON的一些好处带到这个世界上,但它必须是inco
    <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)