XML 二进制优化打包

XML 二进制优化打包 (XOP) 规范由万维网联盟 (W3C) 在 2005 年 1 月 25 日标准化。SOAP 消息传输优化机制 (MTOM) 在 SOAP 和 MIME over HTTP 的上下文中使用 XOP。

XML 广泛用于数据传输。XML 是用于交换格式良好的文档的流行格式,这是因为它是纯文本,符合人类阅读习惯且是结构化的。例如,Web Service 中的 SOAP 消息传递基于 XML(或基于与 SOAP 1.2 配合使用的 XML 信息集)。人们希望既可利用旧的格式,如 PDF、GIF、JPEG 和类似格式,又可以继续使用 XML 模型。将 XML 与预先存在的数据格式集成是用户长久以来的愿望,也是 XML community 仍然存在的问题。用户常常希望既可利用 XML 的结构化可扩展标记约定又不用放弃不符合 XML 1.0 语法的现有数据格式。

随着 Web Service 中的 SOAP 消息传递越来越普遍,下一步是如何将基于非文本的数据(例如图像和工作流程数据)与消息一起发送。例如,您可能希望在两个应用程序之间发送 .jpeg 格式的扫描文档。问题是此数据在各应用程序之间是否能识别。

XML 和 Web Service 的值大都在于使用通用 XML 工具来处理内容的能力。描述和处理 XML 的许多 XML 工具和标准(例如解析器、XPath、XQuery、XSLT、XML 加密、数字签名和 XML 模式)并非旨在使用非文本数据(例如图像)。这些 XML 工具不会处理非 XML 内容;这些工具需要文本。难题就是如何用 XML 嵌入或附加非文本的数据(也称为二进制数据)。换句话说,需要将二进制文件附加至 SOAP 消息的方法。

编码是可将二进制数据直接嵌入 XML 世界的唯一方法。通常使用基本 64 位对二进制数据进行编码来将它作为文本嵌入到 XML 文档中。基本 64 位是已存在一定时间的一种序列化方法,可现成轻松实现,并且具有平台间互操作性。xsi:base64binary 数据类型在 XML 模式中支持此序列化。基本 64 位将二进制数据编码为可插入 XML 文档中的文本表示法。基本 64 位取用您的二进制数据并通过一次编码三个八位元来将它转换为一系列 ASCII 字符。由于每个八位元包括八位,且这八位将它们表示为 ASCII 标准中的四个可打印字符,因此它使用 64 个 ASCII 字符来表示二进制数据。所有平台都可使用此约定进行解码和编码。6 位 ASCII 广受支持,不需要处理任何特殊字符。但是,对于较大型消息存在性能影响。

对于需要快速操作的应用程序,基本 64 位可能不适用。如果想要索引到此类内容,对它进行查询、变换、加密、签署或描述,那么您需要使用其他机制。

已开发第一个附件规范,称为 SOAP with Attachments (SwA)。SwA 的基本概念是将二进制消息部分(附件)看作多用途因特网邮件扩展 (MIME) 附件。MIME 是用于格式化非 ASCII 邮件消息附件的广泛实现的规范。SwA 指定只需使用 URI,SOAP 正文就可包含对 MIME 消息部件(附件)的引用。二进制部件通过引用附加。

SwA 具有以下一些缺点:
  • SwA 在可使用性与互操作性方面存在不足。SOAP 基础结构是沿 SOAP 包络创建的,而 SOAP 包络不善于处理附件。使用 SwA 的附件意味着在一条消息中使用两个数据模型。这两种数据模型不能用现有 XML 技术操作。
  • SwA 不能处理 SOAP 的可复合字符。WS-Security 之类的标准本质上未编写为可处理附件。WS-Security 需要处理需要数字签名或加密的所有数据,这意味着所有数据也都在附件中。但如果 WS-Security 不能访问数据,那么 WS-Security 就不能进行处理,签名也变得无效。

用户通常希望让其现有非 XML 格式保持不变,XML 工具和基础结构将其看作八位元的不透明顺序。这样就允许 XML 内可以同时存在各种常用格式,例如 .jpeg 和 .wav 格式。XOP 使得使用基本 64 位编码数据更为现实。现在,XOP 只允许对基本 64 位编码的数据进行优化。

使用 XOP 意味着 XML 类型 base64Binary 的实例(如果启用)将通过使用 MIME 附件进行传输。如果正在使用 XOP,那么该实现可自动对它进行编码。XOP 维护 XML 消息的数据模型,这是因为附件被看作基本 64 位编码数据。如果 XML 堆栈了解 XOP 编码,那么根本就不需要更改您的应用程序。例如,当它想要访问 .jpeg 图片时,它可以将内容的字符值获取为基本 64 位编码字符串。

XOP 为人们提供了考虑在数据交换中使用 MIME 消息的方法,这些消息适合并且已用于许多其他数据。XOP 格式使用多重部件 MIME 将原始二进制数据包含到 XML 1.0 文档中,无需基本 64 位的编码。

然后,结合使用的规范(即 SOAP 消息传输优化方法,MTOM)指定如何将此格式绑定到 SOAP。XOP 和 MTOM 标准应增强 SOAP 1.2 性能。XOP 与 MTOM 一起提供将二进制数据与基于文本的 XML 混合在一起的首选方法。 通过 MTOM 和 XOP 二者结合,我们可以选择消息的哪些部分需要作为二进制连线发送,同时仍保留信息集。这些标准使包含 SOAP 包络外部二进制数据的附件可以作为消息部分。 但是,与 SwA 不同,这样会将二进制数据看作就在 SOAP 包络中,即只有一个信息集。

XOP 为具有不适合 SOAP 和 MIME 打包、但适合任何 XML 信息集和任何打包机制的二进制内容的 XML 信息集定义序列化机制。另一方面,XML 不是很好的通用打包机制。

通过将一连串 XML 信息集置于可扩展打包格式(例如 MIME)中来创建 XOP 包。注意,XOP 不会将 MIME 复用于线上的实际打包。然后,将抽取并重新编码其内容的选定部分(为基本 64 位编码二进制数据),表示根据基本 64 位对数据进行解码并放入包中。那些选定部分的位置在 XML 中用通过使用 URI 链接至所打包数据的特殊元素标记。

SOAP 处理引擎就在消息命中线路之前执行二进制数据的临时基本 64 位编码。通过这种临时编码,SOAP 处理器可以处理基本 64 位数据;例如,可以获取数据的 WS-Signature 并将其放置到头中。无须在另一端进行多余的解码操作,该过程以相反的方向工作。

可以在 Java™ (JAX-WS) 中使用 MTOM 和 XOP 实现。

以下示例显示进行 XOP 处理 (SOAP) 之前的 XML 信息集:
<soap:Envelope
      xmlns:soap='http://www.w3.org/2003/05/soap-envelope'
      xmlns:xmlmime='http://www.w3.org/2004/11/xmlmime'>
  <soap:Body>
    <m:data xmlns:m='http://example.org/stuff'>
      <m:photo xmlmime:contentType='image/png'>/aWKKapGGyQ=</m:photo>
      <m:sig xmlmime:contentType='application/pkcs7-signature'>Faa7vROi2VQ=</m:sig>
    </m:data>
  </soap:Body>
</soap:Envelope>
以下示例显示序列化为 XOP 包 (SOAP) 的 XML 信息集
MIME-Version: 1.0
Content-Type: Multipart/Related;boundary=MIME_boundary;
    type="application/xop+xml";
    start="<mymessage.xml@example.org>";
    startinfo="application/soap+xml; action=\"ProcessData\""
Content-Description: A SOAP message with my pic and sig in it

--MIME_boundary
Content-Type: application/xop+xml; 
    charset=UTF-8; 
    type="application/soap+xml; action=\"ProcessData\""
Content-Transfer-Encoding: 8bit
Content-ID: <mymessage.xml@example.org>

<soap:Envelope
    xmlns:soap='http://www.w3.org/2003/05/soap-envelope'
    xmlns:xmlmime='http://www.w3.org/2004/11/xmlmime'>
  <soap:Body>
    <m:data xmlns:m='http://example.org/stuff'>
      <m:photo 
  xmlmime:contentType='image/png'><xop:Include 
    xmlns:xop='http://www.w3.org/2004/08/xop/include' 
    href='cid:http://example.org/me.png'/></m:photo>
      <m:sig 
  xmlmime:contentType='application/pkcs7-signature'><xop:Include 
    xmlns:xop='http://www.w3.org/2004/08/xop/include' 
    href='cid:http://example.org/my.hsh'/></m:sig>
    </m:data>
  </soap:Body>
</soap:Envelope>

--MIME_boundary
Content-Type: image/png
Content-Transfer-Encoding: binary
Content-ID: <http://example.org/me.png>

// binary octets for png

--MIME_boundary
Content-Type: application/pkcs7-signature
Content-Transfer-Encoding: binary
Content-ID: <http://example.org/my.hsh>

// binary octets for signature

--MIME_boundary--

指示主题类型的图标 概念主题



时间戳记图标 最近一次更新时间: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cwbs_xop
文件名:cwbs_xop.html