XMLNSC ドメインは、XMLNS ドメインの拡張であり、 これはさらに、オリジナルの XML ドメインの拡張です。
XMLNS ドメインの意図は、ネーム・スペース・サポートを追加することであり、 互換性の理由から、既存のアプリケーションが影響を受けないように新規ドメインが作成されました。新規 XMLNSC ドメインの意図は、よりコンパクトなツリーを作成することであり、それにより、大きなメッセージを処理する際のメモリー使用量を減らすことです。 ここでも互換性の理由から、既存のアプリケーションが影響を受けないように新規ドメインが作成されました。
メッセージ・ツリー構造
<Folder1> <Folder2 Attribute1='AttributeValue1'> <Field1><Value1></Field1> <Field2 Attribute2='AttributeValue2'><Value2></Field2> </Folder2> </Folder1>
XMLNSC ドメインで、 これは 2 つの名前エレメント (Folder1 および Folder2)、 そして Attribute1、Field1、 Field2、および Attribute2 の 4 つの名前値エレメントによって表されます。
<Folder1> <Folder2> <Field1><Value1></Field1> <Field2><Value2></Field2> .... <Field100><Value100></Field100> </Folder2> </Folder1>
この場合、XMLNSC パーサーは 2 つの名前および 100 の 名前値エレメントによってメッセージを表し、XML および XMLNS パーサーは 102 の名前エレメントと 100 の値エレメントを使用してメッセージを表すと共に、 さらに 103 の値エレメントを使用してフォーマット済みメッセージ内に暗黙に示された空白を表します。
属性およびタグ付きテキスト
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 などの名前の類似した定数に異なる値があるために、予期しない結果を生じます。
混合テキストの処理
デフォルトでは、混合テキストが存在してもそれはフォーマット設定だけのためのもので意味はないため、 単に廃棄されます。
ただし、構文解析の際に、開始タグと終了タグとの間 (つまり、開始 -> 開始、 終了 -> 終了、および 終了 -> 開始) に存在するテキスト以外のテキストは、単一の値エレメントで表されるモードも提供されています。 値エレメント・タイプは PCDATA、CDATA、 およびこれら 2 つの混合であるハイブリッドをサポートします。
XMLNSC.ValueXMLNSC.PCDataValueXMLNSC.CDataValueXMLNSC.HybridValue
XMLNSC.MixedContentRetainNone = 0x0000000000000000 XMLNSC.MixedContentRetainAll = 0x0001000000000000
DECLARE X BLOB ASBITSTREAM(InputRoot.XMLNSC.Data OPTIONS XMLNSC.MixedContentRetainAll); ... CREATE LASTCHILD OF outputRoot PARSE(X OPTIONS XMLNSC.MixedContentRetainNone);
コメントの取り扱い
デフォルトでは、コメントが存在してもそれは意味のない補助的な情報なので、単に廃棄されます。
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);
既存のフローのマイグレーション
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;
<Person><Salary>42</Salary></Person>
3 つのケースは、 これらのエレメントを取得するために異なるパーサーを使用する点が異なります。 そのため、着信メッセージの MQRFH2 ヘッダーでは異なるドメイン名が予期されて、 出力メッセージの MQRFH2 ヘッダーには異なるドメイン名が書き込まれます。
外部アプリケーションをこれらの変更から保護するため、 「XMLNSC コンパクト・パーサーを XMLNS ドメインに使用」プロパティーをフローの入力ノードおよびこれらのステートメントを含む計算ノードに指定できます。
最初の例では、着信メッセージの MQRFH2 ヘッダーが XMLNS ドメインを指定するとき、 XMLNSC パーサーが使用されてメッセージの本文が構文解析されます。 計算ノードでは、発信する MQRFH2 が XMLNSC パーサーではなく XMLNS パーサーを指定して、入力メッセージおよび出力メッセージが変更されないようにします。
着信メッセージに MQRFH2 ヘッダーが含まれず、 入力ノードのメッセージ・ドメイン属性がドメインの指定に使用される場合、 それを XMLNSC に設定するか、または XMLNS に設定すると共に 「XMLNSC コンパクト・パーサーを XMLNS ドメインに使用」プロパティーも設定します。
出力メッセージに MQRFH2 ヘッダーが含まれない場合、 ドメインは出力メッセージ内のどこにも出現せず、 計算ノードの「XMLNSC コンパクト・パーサーを XMLNS ドメインに使用」プロパティーを設定してもその効果はありません。
XML ヘッダーの構成
SET OutputRoot.XML.(XML.XmlDecl)*.(XML.Version)* = '1.0';
SET OutputRoot.XMLNS.(XML.XmlDecl)*.(XML.Version)* = '1.0';
XMLNS パーサーが使用されていますが、 エレメント・タイプ定数は XML パーサーに属するものであることに注意してください。 これが機能するのは、XML および XMLNS パーサーで使用される タイプ値が同じであるためです。 ただし、XMLNSC パーサーではタイプ値が異なるので、 常にそれ自体のタイプ定数を使用する必要があります。
SET OutputRoot.XMLNSC.(XMLNSC.XmlDeclaration)*.(XMLNSC.Attribute)Version = '1.0';
メッセージ・ツリーのコピー
ツリーをコピーするとき、ブローカーは XML と XMLNSCを異なるパーサーとして扱います。 つまり、ソース・ツリー内のすべての属性はターゲット・ツリー内のエレメントにマップされます。 この状態になるのは、同じフロー内で両方のパーサーを (1 つを入力用に、1 つを出力用に) 使用しているときだけです。そのため、両方のフローのためにコンパクト・パーサーを使用することが勧められています。
入力フローと出力フローとで異なるパーサーを使用する必要がある 場合、 パス内のエレメントのタイプを明示的に指定するか、またはFIELDVALUE 関数を使用して サブツリーではなくスカラー値がコピーされるようにしなければならないことがあります。
XML ドメインのメッセージの操作にある XML メッセージに関する指針に従ってください。それとともに、メッセージ本体の内容の操作のトピックにある情報も適用してください。
相関名を使用する XMLNSC ドメイン内の構文エレメントへのアクセス
構文エレメント | 相関名 | 定数値 |
---|---|---|
フォルダー | 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 |
SET OutputRoot.XMLNSC.(XMLNSC.DocumentType)BodyDocument.(XMLNSC.EntityDefinition)TestDef = 'Compact Tree Parser XML Test Module Version 1.0';
-- 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.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);