XML 文書に、バイナリー・データや無効な文字を含める必要がある場合、データをバイナリー・ストリングとしてエンコードするのが、最も安全な方法です。
XML 用のバイナリー・エンコード
hexBinary: <nonXMLChars>0001020304050607080B0C0E0F</nonXMLChars>
base64Binary: <nonXMLChars>AAECAwQFBgcICwwODw==</nonXMLChars>
base64Binary エンコード方式では、使用可能な XML 文字が活用され、同等の hexBinary と比べて、base64 でエンコードしたバイナリー・フィールドは、平均的には 3 分の 2 のサイズになります。 Base64Binary は、MIME フォーマットや、XML に基づくさまざまな標準で、幅広く使用されています。
base64 データをデコードできないアプリケーションにデータを送信する場合、およびメッセージ・サイズの増大が問題ではない場合には、より単純な hexBinary エンコード方式の使用を選択することもできます。
バイナリー・データの構文解析
XMLNSC パーサーは、バイナリー・データを含む単純タイプのエレメントまたは属性の指針に従って、hexBinary または base64Binary データを自動的にデコードします。 メッセージ・ツリーにはデコードされた BLOB 値が含まれます。
XMLNS ドメインを使用している場合、バイナリー・データをストリングとして構文解析する必要があります。 これは、メッセージ・ツリー中で CHARACTER 値として表されます。 データが hexBinary としてエンコードされた場合、ESQL CAST 関数を使用してそれを BLOB 値に変換することができます。 データが base64Binary でエンコードされている場合、BASE64DECODE 関数を使用するのが最も簡単な方法です。詳しくは、BASE64DECODE 関数を参照してください。
バイナリー・データの生成
出力 XML 中に、hexBinary または base64Binary のいずれかのエンコード方式でバイナリー・データを生成することができます。
hexBinary の場合、BLOB データを hexBinary ストリングに変換するには、ESQL CAST ステートメントを使用します。
-- 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 ストリングが含まれます。