XMLNSC パーサーを使用したメッセージの操作

XMLNSC ドメインは、XMLNS ドメインの拡張であり、 これはさらに、オリジナルの XML ドメインの拡張です。

XMLNS ドメインの意図は、ネーム・スペース・サポートを追加することであり、 互換性の理由から、既存のアプリケーションが影響を受けないように新規ドメインが作成されました。新規 XMLNSC ドメインの意図は、よりコンパクトなツリーを作成することであり、それにより、大きなメッセージを処理する際のメモリー使用量を減らすことです。 ここでも互換性の理由から、既存のアプリケーションが影響を受けないように新規ドメインが作成されました。

メッセージ・ツリー構造

XMLNSC パーサーは、 XML および XMLNS パーサーで使用される名前エレメントと値エレメント が別になっているものを使用する代わりに、単一の名前値エレメントを使用して、 タグ付きテキストを表現するための、よりコンパクトなツリーを取得します。 次のメッセージをご覧ください。
<Folder1>
<Folder2 Attribute1='AttributeValue1'>
<Field1><Value1></Field1>
<Field2 Attribute2='AttributeValue2'><Value2></Field2>
</Folder2>
</Folder1>

XMLNSC ドメインで、 これは 2 つの名前エレメント (Folder1 および Folder2)、 そして Attribute1Field1Field2、および Attribute2 の 4 つの名前値エレメントによって表されます。

XML および XMLNS ドメインは、 2 つのフィールドがそれぞれ値エレメントを子として持つ名前エレメントによって表される点が異なります。 これは小さな相異に思えることがありますが、メッセージにはしばしばそのようなリーフ・フィールドがあります。以下に例を示します。
<Folder1>
<Folder2>
<Field1><Value1></Field1>
<Field2><Value2></Field2>
....
<Field100><Value100></Field100>
</Folder2>
</Folder1>

この場合、XMLNSC パーサーは 2 つの名前および 100 の 名前値エレメントによってメッセージを表し、XML および XMLNS パーサーは 102 の名前エレメントと 100 の値エレメントを使用してメッセージを表すと共に、 さらに 103 の値エレメントを使用してフォーマット済みメッセージ内に暗黙に示された空白を表します。

属性およびタグ付きテキスト

属性およびタグ付きテキストはどちらも名前値エレメントによって表されるので、 それらはエレメント・タイプの使用方法によって区別されます。 タイプを指定しない場合、タグ付きテキストが想定されます。 そのため、上記の最初のメッセージ例は、以下の SQL ステートメントから生成されます。
SET Origin.Folder1.Folder2.(XMLNSC.Attribute)Attribute1 = 
'AttributeValue1';
SET Origin.Folder1.Folder2.Field1 = ‘Value1’;
SET Origin.Folder1.Folder2.(XMLNSC.Attribute)Attribute2 = 
'AttributeValue2';
SET Origin.Folder1.Folder2.Field2 = ‘Value2’;

上記の SQL は XML パーサーで使用されるものとほとんど同一に見えますが、 使用されるタイプ定数は XMLNSC パーサーに属するものなので、完全に同じではありません。XML などの他のパーサーに属する定数を使用することは、XML.Attribute などの名前の類似した定数に異なる値があるために、予期しない結果を生じます。

混合テキストの処理

デフォルトでは、混合テキストが存在してもそれはフォーマット設定だけのためのもので意味はないため、 単に廃棄されます。

ただし、構文解析の際に、開始タグと終了タグとの間 (つまり、開始 -> 開始終了 -> 終了、および 終了 -> 開始) に存在するテキスト以外のテキストは、単一のエレメントで表されるモードも提供されています。 値エレメント・タイプは PCDATACDATA、 およびこれら 2 つの混合であるハイブリッドをサポートします。

値の取得および設定に関する特別な構文エレメントの動作は、まだありません。 エレメントは、明示的にアドレッシングすることにより、SQL からのみアクセスできます。 この目的で、以下の追加の定数が提供されています。
XMLNSC.ValueXMLNSC.PCDataValueXMLNSC.CDataValueXMLNSC.HybridValue
モードは、新規のメッセージ・オプション値によって制御されます。 この目的で、以下の定数が提供されています。
XMLNSC.MixedContentRetainNone = 0x0000000000000000
XMLNSC.MixedContentRetainAll  = 0x0001000000000000
これらの定数は、SQL CREATE ステートメント (PARSE セクション) およびASBITSTREAM 関数の両方の Option 文節で使用できます。 以下に例を示します。
DECLARE X BLOB ASBITSTREAM(InputRoot.XMLNSC.Data OPTIONS 
XMLNSC.MixedContentRetainAll);
...
CREATE LASTCHILD OF outputRoot PARSE(X OPTIONS 
XMLNSC.MixedContentRetainNone);

コメントの取り扱い

デフォルトでは、コメントが存在してもそれは意味のない補助的な情報なので、単に廃棄されます。

ただし、構文解析の際に、文書内にあるコメント (文書記述そのものを除く) が Comment という名前の名前値エレメントによって表されるモードも提供されています。この目的で、以下の追加のコメントが提供されています。
XMLNSC.Comment
モードは、新規のメッセージ・オプション値によって制御されます。 この目的で、以下の定数が提供されています。
XMLNSC.CommentsRetainNone = 0x0000000000000000
XMLNSC.CommentsRetainAll  = 0x0002000000000000
以下に例を示します。
DECLARE X BLOB ASBITSTREAM(InputRoot.XMLNSC.Data OPTIONS 
XMLNSC.CommentsRetainAll);
...
CREATE LASTCHILD OF outputRoot PARSE(X OPTIONS XMLNSC.CommentsRetainNone);

処理命令の取り扱い

デフォルトでは、処理命令が存在してもそれは意味のない補助的な情報なので、単に廃棄されます。

ただし、構文解析の際に、文書内にある処理命令 (文書記述そのものを除く) が 適切な名前と値を持つ名前値エレメントによって表されるモードも提供されています。この目的で、以下の追加の定数が提供されています。
XMLNSC.ProcessingInstruction
モードは、新規のメッセージ・オプション値によって制御されます。 この目的で、以下の定数が提供されています。
XMLNSC.ProcessingInstructionsRetainNone = 0x0000000000000000
XMLNSC.ProcessingInstructionsRetainAll  = 0x0004000000000000
以下に例を示します。
DECLARE X BLOB ASBITSTREAM(InputRoot.XMLNSC.Data 
OPTIONS XMLNSC.ProcessingInstructionsRetainAll);
...
CREATE LASTCHILD OF outputRoot PARSE(X OPTIONS 
XMLNSC.ProcessingInstructionsRetainNone);

既存のフローのマイグレーション

新規のドメインが導入されたということは、 XMLNSC パーサーを使用するときに、パス内で XMLNSC を 使用するように ESQL を再コーディングする必要があるということです。 次の例をご覧ください。
SET OutputRoot.XML.Person.Salary    = CAST(InputRoot.XML.Person.Salary AS INTEGER) * 3;
SET OutputRoot.XMLNS.Person.Salary  = CAST(InputRoot.XMLNS.Person.Salary AS INTEGER) * 3;
SET OutputRoot.XMLNSC.Person.Salary = CAST(InputRoot.XMLNSC.Person.Salary AS INTEGER) * 3;
それぞれの場合に、入力キューでは XML ビット・ストリームが予期されて、 出力キューへは以下の形式で書き込まれます。
<Person><Salary>42</Salary></Person>

3 つのケースは、 これらのエレメントを取得するために異なるパーサーを使用する点が異なります。 そのため、着信メッセージの MQRFH2 ヘッダーでは異なるドメイン名が予期されて、 出力メッセージの MQRFH2 ヘッダーには異なるドメイン名が書き込まれます。

外部アプリケーションをこれらの変更から保護するため、 「XMLNSC コンパクト・パーサーを XMLNS ドメインに使用」プロパティーをフローの入力ノードおよびこれらのステートメントを含む計算ノードに指定できます。

最初の例では、着信メッセージの MQRFH2 ヘッダーが XMLNS ドメインを指定するとき、 XMLNSC パーサーが使用されてメッセージの本文が構文解析されます。 計算ノードでは、発信する MQRFH2XMLNSC パーサーではなく XMLNS パーサーを指定して、入力メッセージおよび出力メッセージが変更されないようにします。

着信メッセージに MQRFH2 ヘッダーが含まれず、 入力ノードのメッセージ・ドメイン属性がドメインの指定に使用される場合、 それを XMLNSC に設定するか、または XMLNS に設定すると共に 「XMLNSC コンパクト・パーサーを XMLNS ドメインに使用」プロパティーも設定します。

出力メッセージに MQRFH2 ヘッダーが含まれない場合、 ドメインは出力メッセージ内のどこにも出現せず、 計算ノードの「XMLNSC コンパクト・パーサーを XMLNS ドメインに使用」プロパティーを設定してもその効果はありません。

XML ヘッダーの構成

以下の ESQL は、XML ドメイン内で有効です。
SET OutputRoot.XML.(XML.XmlDecl)*.(XML.Version)* = '1.0';
XMLNS にマイグレーションするには、ルートを変更するだけでこれが機能します。
SET OutputRoot.XMLNS.(XML.XmlDecl)*.(XML.Version)* = '1.0';

XMLNS パーサーが使用されていますが、 エレメント・タイプ定数は XML パーサーに属するものであることに注意してください。 これが機能するのは、XML および XMLNS パーサーで使用される タイプ値が同じであるためです。 ただし、XMLNSC パーサーではタイプ値が異なるので、 常にそれ自体のタイプ定数を使用する必要があります

XMLNSC ドメインでは、XML バージョン用の特別なタイプはありません。それは単に XML 宣言の属性として扱われます。 上記の例と同等の構文は、以下のとおりです。
SET OutputRoot.XMLNSC.(XMLNSC.XmlDeclaration)*.(XMLNSC.Attribute)Version = '1.0';

メッセージ・ツリーのコピー

ツリーをコピーするとき、ブローカーは XMLXMLNSCを異なるパーサーとして扱います。 つまり、ソース・ツリー内のすべての属性はターゲット・ツリー内のエレメントにマップされます。 この状態になるのは、同じフロー内で両方のパーサーを (1 つを入力用に、1 つを出力用に) 使用しているときだけです。そのため、両方のフローのためにコンパクト・パーサーを使用することが勧められています。

入力フローと出力フローとで異なるパーサーを使用する必要がある 場合、 パス内のエレメントのタイプを明示的に指定するか、またはFIELDVALUE 関数を使用して サブツリーではなくスカラー値がコピーされるようにしなければならないことがあります。

XML ドメインのメッセージの操作にある XML メッセージに関する指針に従ってください。それとともに、メッセージ本体の内容の操作のトピックにある情報も適用してください。

相関名を使用する XMLNSC ドメイン内の構文エレメントへのアクセス

次の表では、各 XML 構文エレメントの相関名が提供されています。 XMLNSC ドメインで作業を行うとき、 これらの名前を使用して入力メッセージのエレメントを参照し、出力メッセージのエレメント、属性、および値を設定します。
表 1. XML 構文エレメントの相関名
構文エレメント 相関名 定数値
フォルダー XMLNSC.Folder 0x01000000
文書タイプ 1 XMLNSC.DocumentType 0x01000300
XML 宣言 2 XMLNSC.XmlDeclaration 0x01000400
     
フィールドまたは属性値 XMLNSC.Value 0x02000000
PCData 値 XMLNSC.PCDataValue 0x02000000
CData 値 XMLNSC.CDataValue 0x02000001
ハイブリッド値 XMLNSC.HybridValue 0x02000002
     
エンティティー参照 XMLNSC.EntityReference 0x02000100
     
フィールド XMLNSC.Field 0x03000000
PCData XMLNSC.PCDataField 0x03000000
CData XMLNSC.CDataField 0x03000001
Hybrid XMLNSC.HybridField 0x03000002
     
属性 XMLNSC.Attribute 0x03000100
単一引用符 XMLNSC.SingleAttribute 0x03000101
二重引用符 XMLNSC.DoubleAttribute 0x03000100
     
ネーム・スペース宣言 XMLNSC.NamespaceDecl 0x03000102
単一引用符 XMLNSC.SingleNamespaceDecl 0x03000103
二重引用符 XMLNSC.DoubleNamespaceDecl 0x03000102
     
ビット・ストリーム・データ XMLNSC.BitStream 0x03000200
     
エンティティー定義 1 XMLNSC.EntityDefinition 0x03000300
単一引用符 XMLNSC.SingleEntityDefinition 0x03000301
二重引用符 XMLNSC.DoubleEntityDefinition 0x03000300
     
コメント XMLNSC.Comment 0x03000400
     
処理命令 XMLNSC.ProcessingInstruction 0x03000401
注:
  1. 文書タイプは、エンティティー定義にのみ使用されます。 以下に例を示します。
    SET OutputRoot.XMLNSC.(XMLNSC.DocumentType)BodyDocument.(XMLNSC.EntityDefinition)TestDef =
    		          'Compact Tree Parser XML Test Module Version 1.0';
  2. XML 宣言は、バージョンその他に対する子エレメントを含む特別なフォルダーであることに注意してください。 以下に例を示します。
    -- Create the XML declaration
    SET OutputRoot.XMLNSC.(XMLNSC.XmlDeclaration)*.Version = 1.0;
    SET OutputRoot.XMLNSC.(XMLNSC.XmlDeclaration)*.Encoding = 'UTF8';
    SET OutputRoot.XMLNSC.(XMLNSC.XmlDeclaration)*.Standalone = 'yes';

XMLNSC パーサー・モード

デフォルトで、XMLNSC パーサーは通常ビジネス上の意味を持たない文書エレメントを廃棄します。 ただし、これらのエレメントの保持を強制するパーサー・モードが使用可能です。 これらのモードをノードのプロパティーに構成して、メッセージを XMLNSC ドメインで構文解析することを指定できます。

XMLNSC パーサーの有効なパーサー・モードは、以下のとおりです。
XMLNSC.MixedContentRetainNone
XMLNSC.MixedContentRetainAll
XMLNSC.CommentsRetainNone
XMLNSC.CommentsRetainAll
XMLNSC.ProcessingInstructionsRetainNone
XMLNSC.ProcessingInstructionsRetainAll
以下の例では、XMLNSC.ProcessingInstructionsRetainAll および XMLNSC.ProcessingInstructionsRetainNone モードを 使用して、構文解析の際に文書処理命令を保持します。
DECLARE X BLOB ASBITSTREAM(InputRoot.XMLNSC.Data OPTIONS XMLNSC.ProcessingInstructionsRetainAll);
...
CREATE LASTCHILD OF outputRoot PARSE(X OPTIONS XMLNSC.ProcessingInstructionsRetainNone);
関連概念
メッセージ・フローの概要
XML パーサーおよびドメイン
ESQL の概要
関連タスク
メッセージ・フローの設計
メッセージ・フローの内容の定義
XML ドメインのメッセージの操作
関連資料
ESQL 参照
SET ステートメント
FIELDVALUE 関数
ASBITSTREAM 関数
CREATE ステートメント
特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック
Copyright IBM Corporation 1999, 2006 Last updated: 5 01, 2006
ac26040_