XMLNSC: ネーム・スペース宣言
XMLNSC パーサーは、ネーム・スペースのフル・サポートを提供します。
XMLNSC パーサーは、メッセージを構文解析する際に作成するすべての構文エレメントに正しいネーム・スペースを設定し、ネーム・スペース宣言をメッセージ・ツリーに保管します。 パーサーは、メッセージ・ツリーを出力する際に、ネーム・スペース宣言を使用して適切な接頭部を選択します。
メッセージ・ツリー中のエレメントおよび属性にアクセスする際には、前の表にリストされている定数を使用しないでください。その代わり、上の表の両方の値に一致する、汎用フィールド・タイプ定数を使用してください。
XMLNSC パーサーは、ネーム・スペース宣言を表すために、以下のフィールド・タイプを使用します。 メッセージ・ツリー中でネーム・スペース宣言を作成するときには、この表にリストされているフィールド・タイプ定数を使用します。
| XML 構成 | XMLNSC フィールド・タイプ定数 | 値 |
|---|---|---|
| ネーム・スペース宣言 | |
|
| XML 構成 | XMLNSC フィールド・タイプ定数 | 目的 |
|---|---|---|
| ネーム・スペース宣言 | XMLNSC.NamespaceDecl | 単一引用符と二重引用符内のネーム・スペース宣言を突き合わせます |
ESQL コード例
例 1 : 空でない接頭部の宣言
DECLARE space1 NAMESPACE 'namespace1';
SET OutputRoot.XMLNSC.space1:root.(XMLNSC.NamespaceDecl)xmlns:ns1 = space1;
SET OutputRoot.XMLNSC.space1:root.space1:example = 'ABCDE';これによって、次の XML メッセージが作成されます。<ns1:root xmlns:ns1="namespace1">
<ns1:example>ABCDE</ns1:example>
</ns1:root>ネーム・スペース定数 space1 は、ESQL のローカル変数にすぎないことに注意してください。NameSpaceDecl エレメントが定義し、出力メッセージに表示されるネーム・スペース接頭部 ns1 に、これが影響を与えることはありません。しかし、ここで示すように、space1 は、ns1 の NameSpaceDecl を初期化するために使用できます。 これによって、実際には非常に長いストリングになるのが一般的な、ネーム・スペース URI (この例では「namespace1」) を複写する必要がなくなります。
例 2 : 空の接頭部の宣言
DECLARE space1 NAMESPACE 'namespace1';
SET OutputRoot.XMLNSC.space1:root.(XMLNSC.NamespaceDecl)xmlns = space1;
SET OutputRoot.XMLNSC.space1:root.space1:example = 'ABCDE';これによって、次の XML メッセージが作成されます。<root xmlns="namespace1">
<example>ABCDE</example>
</root>構文エレメント root および example が空でないネーム・スペースを持つ必要のあることに注意してください。 デフォルトのネーム・スペース宣言は、接頭部を持たないすべての子エレメントがネーム・スペース namespace1 にあることを意味します。例 3 : 正しくない使用法の例
DECLARE space1 NAMESPACE 'namespace1';
SET OutputRoot.XMLNSC.root.(XMLNSC.NamespaceDecl)xmlns = space1;
SET OutputRoot.XMLNSC.root.example = 'ABCDE';この例のようにすると、XMLNSC パーサーはメッセージ・ツリーを作成しようとする際に、メッセージ BIP5014 を出します。 エレメント root および example は両方とも、デフォルトのネーム・スペース宣言の有効範囲内にあります。したがって ESQL では、これらのエレメントは、そのネーム・スペースにバインドされたネーム・スペース接頭部により修飾される必要があります。例 4: 接頭部を使用したネーム・スペース宣言の追加
SET OutputRoot.(XMLNSC.DoubleNamespaceDecl)xmlns:ns2 = space1;この SET ステートメント例は、ネーム・スペース xmlns に名前 ns2 を使用したネーム・スペース宣言を作成します。CREATE LASTCHILD OF OutputRoot IDENTITY (XMLNSC.DoubleNamespaceDecl)xmlns:ns2 VALUE space1;CREATE LASTCHILD OF OutputRoot TYPE XMLNSC.DoubleNamespaceDecl NAMESPACE 'xmlns' NAME 'ns2' VALUE space1;上記の CREATE ステートメントの例も、ネーム・スペース xmlns に名前 ns2 を使用したネーム・スペース宣言を作成します。しかし、次の CREATE ステートメントの例は、名前 xmlns:ns2 を使用したネーム・スペース宣言をデフォルト・ネーム・スペースに作成します。
CREATE LASTCHILD OF OutputRoot TYPE XMLNSC.DoubleNamespaceDecl NAME 'xmlns:ns2' VALUE space1;