XML-binary Optimized Packaging

XML-binary Optimized Packaging (XOP) 仕様は、2005 年 1 月 25 日に World Wide Web (W3C) により標準化されました。SOAP Message Transmission Optimization Mechanism (MTOM) では、XOP を、HTTP を介した SOAP および MIME のコンテキストで使用しています。

XML はデータ転送で広く使用されています。XML は平文で人間が読め、また、構造化されているので、正しいフォーマットの文書の交換によく使用されるフォーマットです。 例えば、Web サービスにおける SOAP メッセージングは XML (または、SOAP 1.2 では XML Infoset) に基づいています。ユーザーは XML モデルを使用しながらも、PDF や GIF、JPEG などの既存のフォーマットを活用したいと考えます。XML を既存のデータ・フォーマットと統合することは、XML コミュニティーでの長年の課題でした。ユーザーはたいてい、XML 1.0 構文にはすぐに合わない既存のデータ・フォーマットを諦めることなく、構造化された拡張可能な XML のマークアップ構文規則を活用したいと考えます。

Web サービスにおいて SOAP メッセージングが広まるにつれ、メッセージと一緒に画像やワークフロー・データなどのテキスト・ベース以外のデータを送信する方法が、次の課題になりました。例えば、2 つのアプリケーション間で、スキャンした文書を .jpeg フォーマットで送信する場合などです。問題は、さまざまなアプリケーション間で、このデータが認識されるかどうかです。

XML および Web サービスの価値の多くは、コンテンツを操作するための汎用 XML ツールを使用できる機能にあります。XML を記述し、操作するための多くの XML ツールおよび標準 (構文解析プログラム、XPath、XQuery、XSLT、XML 暗号化、およびデジタル署名および XML スキーマなど) は、画像などのテキスト・データ以外のデータを操作するように設計されていません。 これらの XML ツールは非 XML コンテンツは操作しません。これらのツールにはテキストが必要です。 問題は、非テキスト・データ (バイナリー・データ とも呼ばれます) を XML に組み込む、または添付する方法です。言い換えれば、SOAP メッセージにバイナリー・ファイルを添付する方法が必要です。

エンコードは、バイナリー・データを XML の世界に直接組み込むことができる、唯一の方法です。通常、Base 64 を使用してバイナリー・データをテキストとしてエンコードすることにより、XML 文書にバイナリー・データを組み込むことができます。 Base 64 は、そのままで簡単に実装でき、複数のプラットフォーム間での相互運用性がある、一時期存在していたシリアライゼーションです。 xsi:base64binary データ型は、XML スキーマでこのシリアライゼーションをサポートしています。 Base 64 はバイナリー・データを、XML 文書に入れ込むことができるテキスト表記にエンコードします。 Base 64 はバイナリー・データを取得して、1 回に 3 オクテットをエンコードすることにより、そのバイナリー・データを一連の ASCII 文字に変換します。 各オクテットは、ASCII 標準の印刷可能な 4 文字として表現される 8 ビットで構成されているため、バイナリーを表記するために 64 の ASCII 文字を使用します。 すべてのプラットフォームは、この規則を使用してデコードおよびエンコードできます。 6 ビット ASCII は広くサポートされており、特殊文字を処理する必要はありません。 ただし、大きなメッセージの場合はパフォーマンスに影響があります。

迅速な操作が必要なアプリケーションでは Base 64 はソリューションになりません。 そのようなコンテンツを索引付け、照会、変換、暗号化、署名、または記述したい場合は、別の手段を使用する必要があります。

そこで、SOAP with Attachments (SwA) と呼ばれる最初の添付仕様が開発されました。 SwA の基本的な概念は、バイナリー・メッセージの部分 (添付ファイル) を Multipurpose Internet Mail Extensions (MIME) 添付ファイルと考えることです。MIME は、非 ASCII メール・メッセージ添付ファイルのフォーマット設定を行うための、広く実装されている仕様です。 SwA は、単純に URI を使用することにより、SOAP 本体に MIME メッセージ部分 (添付ファイル) への参照を含めることができると指定します。 バイナリー部分は参照により添付されます。

ただし、SwA には以下のようないくつかの欠点もあります。
  • SwA には使用可能度あるいはインターオペラビリティーが不足しています。SOAP インフラストラクチャーが SOAP エンベロープの周りで作成されましたが、添付ファイルではうまく機能しませんでした。 SwA を使用した添付ファイルとは、2 つのデータ・モデルが 1 つのメッセージ内で使用されることを意味します。 これらの 2 つのデータ・モデルは既存の XML テクノロジーと一緒に動作しません。
  • SwA は、SOAP の構成可能な文字を処理しません。基本的に、WS-Security のような各種の標準は添付ファイルを処理するように作成されていませんでした。WS-Security はデジタル署名やデジタル暗号化が必要なすべてのデータを扱う必要があり、それはまた、添付ファイル内のすべてのデータを扱う必要があるという意味でもあります。 しかし、データにアクセスできない場合は機能せず、シグニチャーは事実上無効になります。

たいてい、ユーザーは既存の非 XML フォーマットをそのままにしておき、XML ツールおよびインフラストラクチャーによって不透明なオクテットのシーケンスとして扱いたいと考えます。こうした方法により、.jpeg や .wav などの広く使用されているフォーマットが、問題なく XML と共存できます。 XOP は base64 でエンコードしたデータの使用を少し現実的にしています。 現時点では、XOP は base64 でエンコードしたデータしか最適化しません。

XOP を使用するということは、XML 型の base64Binary のインスタンスは、使用可能にした場合に MIME 添付ファイルを使用して転送されることを意味します。XOP が使用されている場合は、実装が自動的にこれをエンコードします。 添付ファイルは Base64 でエンコードしたデータとして扱われるため、XOP は XML メッセージのデータ・モデルを維持します。 XML スタックが XOP エンコードを認識すれば、アプリケーションを変更する必要は全くありません。 例えば、.jpeg 画像にアクセスしようとする場合、そのコンテンツの文字の値を base64 でエンコードしたストリングとして取得できます。

XOP は、ユーザーが使い慣れ、他の多くのデータに既に使用しているデータ交換における、MIME メッセージについての考え方を示します。 XOP フォーマットでは、複数パーツの MIME を使用して、base64 エンコードを使用せずに生のバイナリー・データを XML 1.0 文書に組み込めるようになっています。

付随仕様である SOAP Message Transmission Optimization Method (MTOM) は、次にこのフォーマットを SOAP にバインドする方法を指定します。XOP および MTOM 標準は SOAP 1.2 のパフォーマンスを向上させます。XOP および MTOM を一緒に使用することにより、バイナリー・データをテキスト・ベースの XML と一緒に使用するための優先的な方法が提供されます。 MTOM と XOP を結合すると、Infoset を維持しながら、有線でバイナリーとして送信する必要があるメッセージ・パーツを選択することができます。これらの標準により、SOAP エンベロープの外部にあるバイナリー・データの添付ファイルをメッセージ・パーツとして使用することができます。 ただし、SwA とは異なり、バイナリー・データはあたかも SOAP エンベロープ内にあるかのように、つまり 1 つの Infoset として処理されます。

XOP は、バイナリー・コンテンツを持つ XML Infoset 用のシリアライゼーションの仕組み (SOAP および MIME パッケージングだけではなく、すべての XML Infoset およびすべてのパッケージング・メカニズムに当てはまるもの) を定義します。 一方、XML は汎用パッケージング・メカニズムとしては優れていません。

XOP パッケージは、拡張可能なパッケージング・フォーマット (MIME など) 内に XML Infoset のシリアライゼーションを置くことにより、作成されます。XOP は、ワイヤーでの実際のパッケージング用に MIME を再利用しますので気をつけてください。 次に、base64 でエンコードされたバイナリー・データのコンテンツの選択した部分が抽出され、再エンコードされます。つまり、データは base64 からデコードされ、パッケージに置かれます。 これらの選択した部分のロケーションは、URI を使用してパッケージ済みデータにリンクした特別のエレメントで XML 内でマーク付けされます。

SOAP 処理エンジンは、メッセージがワイヤーをヒットする直前に、バイナリー・データの一時的な Base 64 エンコードを実行します。 この一時的なエンコードにより、SOAP プロセッサーは Base 64 データを処理することができます。例えば、データの WS-Signature を受け取り、それをヘッダーに挿入することができます。もう一方の端での高価なデコードが必要なく、処理は逆に行われます。

MTOM および XOP の実装は Java™ (JAX-WS) で使用可能です。

次の例は、XOP 処理 (SOAP) 前の XML Infoset を示しています。
<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 Infoset を示しています。
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