IBM Integration Bus, Version 9.0.0.7 Operating Systems: AIX, HP-Itanium, Linux, Solaris, Windows, z/OS

See information about the latest product version

バイナリー・データの処理

XML 文書に、バイナリー・データや無効な文字を含める必要がある場合、データをバイナリー・ストリングとしてエンコードするのが、最も安全な方法です。

XML 用のバイナリー・エンコード

XML 文書でバイナリー・データをエンコードするには、2 つの方法があります。
hexBinary:	<nonXMLChars>0001020304050607080B0C0E0F</nonXMLChars>

base64Binary:	<nonXMLChars>AAECAwQFBgcICwwODw==</nonXMLChars>

base64Binary エンコード方式では、使用可能な XML 文字が活用され、同等の hexBinary と比べて、base64 でエンコードしたバイナリー・フィールドは、平均的には 3 分の 2 のサイズになります。 Base64Binary は、MIME フォーマットや、XML に基づくさまざまな標準で、幅広く使用されています。

base64 データをデコードできないアプリケーションにデータを送信する場合、およびメッセージ・サイズの増大が問題ではない場合には、より単純な hexBinary エンコード方式の使用を選択することもできます。

バイナリー・データの構文解析

バイナリー・データを構文解析する最も直接的な方法は、メッセージ・モデルで XMLNSC パーサーを使用することです。
  1. 入力 XML を記述する XML スキーマを見つけるかまたは構成します。
  2. メッセージ・フロー中で、以下のようにノード・プロパティーを設定します。
    • 「デフォルト」ページで「メッセージ・ドメイン」XMLNSC に設定します。
    • 「妥当性検査」ページで、「妥当性検査」「内容と値」に設定します。
    • XMLNSC プロパティーの中で、チェック・ボックス・オプションの「XML スキーマ・タイプを使用するツリーの作成」を選択します。

XMLNSC パーサーは、バイナリー・データを含む単純タイプのエレメントまたは属性の指針に従って、hexBinary または base64Binary データを自動的にデコードします。 メッセージ・ツリーにはデコードされた BLOB 値が含まれます。

XMLNS ドメインを使用している場合、バイナリー・データをストリングとして構文解析する必要があります。 これは、メッセージ・ツリー中で CHARACTER 値として表されます。 データが hexBinary としてエンコードされた場合、ESQL CAST 関数を使用してそれを BLOB 値に変換することができます。 データが base64Binary でエンコードされている場合、BASE64DECODE 関数を使用するのが最も簡単な方法です。詳しくは、BASE64DECODE 関数を参照してください。

バイナリー・データの生成

出力 XML 中に、hexBinary または base64Binary のいずれかのエンコード方式でバイナリー・データを生成することができます。

hexBinary の場合、BLOB データを hexBinary ストリングに変換するには、ESQL CAST ステートメントを使用します。

base64Binary の場合、以下の 2 つのオプションがあります。
  • BASE64ENCODE 関数を呼び出します。詳しくは、BASE64ENCODE 関数を参照してください。
  • XMLNSC パーサーを使用して、この例に示されているように、構文エレメント上のタイプ・フィールドを変更する。
    -- ESQL code to generate base64-encoded binary data
    DECLARE myBLOB BLOB;
    -- Populate myBLOB with your binary data
    CREATE LASTCHILD OF OutputRoot.XMLNSC.message
           TYPE BITOR(XMLNSC.Attribute, XMLNSC.base64Binary)
           NAME myBase64Element
           VALUE myBLOB; 

    フィールド・タイプを XMLNSC.base64Binary に設定しても、メッセージ・ツリー内の論理値は変更されないことに注意してください。 メッセージ・フロー内で、それがまだ BLOB である場合にそのストリング表記を要求すると、hexBinary ストリングとしてレポートされます。 ただし、メッセージ・ツリーが (出力ノード内でまたは ASBITSTREAM への呼び出しによって) ビット・ストリームに変換されると、base64 変換は自動的に実行され、出力 XML には正しい base64 ストリングが含まれます。


ac67173_.htm | 最終更新 Monday, 27 March 2017