XMLバイナリ最適化パッケージング(XOP)は、バイナリデータを含むXML情報セット(インフォセット)のシリアル化、およびXML情報セットへの逆シリアル化のために定義されたメカニズムです。
XOPを使用すると、XMLインフォセットのバイナリデータ部分をXMLシリアライザを経由せずにシリアライズできます。XMLインフォセットのXMLシリアライズはテキストベースであるため、バイナリデータはbase64を使用してエンコードする必要があります。XOPを使用すると、XMLインフォセットからバイナリデータを抽出することで、XMLインフォセットにバイナリデータが含まれなくなり、バイナリデータを別の方法でシリアライズできるため、この問題を回避できます。
したがって、XOPはシリアル化のサイズを削減でき(base64エンコーディングは約33%のサイズオーバーヘッドがあるため)、(実装方法によっては)処理効率の向上も期待できます。ただし、このサイズ増加は、データの送信または保存に必要な追加リソースの増加につながります。
XOPは処理レベルをさらに高めるため、複雑さが増し、処理オーバーヘッドも増加します。
XOPパッケージの表現には若干のオーバーヘッドが発生します。バイナリデータが大きい場合は無視できる程度ですが、バイナリデータが小さい場合は無視できないほど大きくなる可能性があります。
XOPは単一のXML情報セットに対して動作します。
元の XML 情報セットからバイナリ部分が抽出され、「XOP 情報セット」(基本的に、バイナリ部分が外部参照に置き換えられた元の XML 情報セット)が残ります。XOP 情報セット内の参照は、「xop:Include」要素を使用して表現されます。XOP 情報セットと抽出されたコンテンツは、「XOP パッケージ」と呼ばれる表現にシリアル化できます。XOP パッケージは送信または保存できます。
XML情報セットを再構成するために、XOPパッケージはXOP情報セットと抽出されたコンテンツに逆シリアル化され、その後、抽出されたコンテンツがXML情報セットに戻されます。
XOPは、さまざまなパッケージングメカニズムで使用できます。パッケージングメカニズムは、XOP情報セットとバイナリチャンクがどのように表現されるかを定義します。
XOP仕様では、 MIMEをパッケージングメカニズムとして使用する方法が定義されています。MIMEと併用する場合、XOP情報セットはルートMIMEパートでXMLとして表現され、バイナリチャンクは他のMIMEパートで表現されます。これらの他のMIMEパートはバイナリデータとしてシリアル化できるため、XML情報セット内に残しておく場合のようにbase64エンコードする必要がなくなります。
XOPはMIMEパッケージングメカニズムの使用を義務付けていないため、他のパッケージングメカニズムを使用することも可能です。
MIMEパッケージングメカニズムが最も広く使用されています。これは、XOPが通常、MTOMを使用してSOAPメッセージを表現するために使用されるためです。
例えば:
...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>// PNG 用のバイナリ オクテット--MIME_boundary Content-Type: image / png Content-Transfer-Encoding: binary Content-ID: <http:// example.org / me.png >