XML-binary Optimized Packaging
Overview
XML-binary Optimized Packaging (XOP) is a mechanism defined for efficient serialization of XML Information Sets that contain binary data, as well as deserialization back into the XML Information Set. The XML serialization of an XML Infoset is text based, so any binary data will need to be encoded using base64. Using XOP avoids this by extracting the binary data out of the XML Infoset so that the XML Infoset does not contain binary data and the binary data can be serialized differently.
Operation
XOP operates on a single XML Infoset.
The binary parts of the original XML infoset are extracted out, leaving an "XOP Infoset" (which is essentially the original XML Infoset with the binary parts replaced by external references). The references in the XOP Infoset are represented using the "xop:Include" element. The XOP Infoset plus the extracted content can be serialized into a representation called the "XOP Package". The XOP Package can be sent or stored.
To reconstitute the XML Infoset, the XOP Package is deserialized into the XOP Infoset plus the extracted content, and then the extracted content is put back into the XOP Infoset.
XOP Packages
XOP can be used with a number of different packaging mechanisms. A packaging mechanism defines how the XOP Infoset and the binary chunks are represented.
The XOP specification defines how MIME can be used as a packaging mechanism. When used with MIME, the XOP Infoset is represented as XML in the root MIME part, and the binary chunks are represented in the other MIME parts. Those other MIME parts can be serialized as binary data, avoiding the need to base64 encode them if they were left inside the XML Infoset.
XOP does not mandate the use of the MIME packaging mechanism, so other packaging mechanisms could be used.
Usage in SOAP Web services
The MIME packaging mechanism is the most widely used, since XOP is usually used to represent SOAP messages with MTOM.
For example:
MIME-Version: 1.0
Content-Type: Multipart/Related;boundary=MIME_boundary;
...
--MIME_boundary
Content-Type: application/xop+xml;
...
<soap:Envelope ...
<soap:Body>...
<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>
...
--MIME_boundary
Content-Type: image/png
Content-Transfer-Encoding: binary
Content-ID: <http://example.org/me.png>
// binary octets for png
References
- XML-Binary Optimized Packaging (article from Dr Dobbs)
External links
- W3C's XML-binary Optimized Packaging W3C Recommendation