このトピックでは、XMLNS ドメインに属し、汎用 XML パーサーによって構文解析されるメッセージを処理する場合の情報を提供しています。 XML ドメインの拡張である XMLNS ドメインは、ネーム・スペースをサポートします。 XML ドメインのメッセージの操作にある XML メッセージに関する指針に従ってください。それとともに、メッセージ本体の内容の操作のトピックにある情報も適用してください。
以下の例は、ESQL を使ってネーム・スペースを処理する方法を示しています。 この例のメイン・モジュールの先頭ではネーム・スペース定数を宣言しているため、ESQL ステートメントでネーム・スペース URI 全体ではなく、接頭部を使用することができます。
このネーム・スペース定数は ESQL だけに影響を与え、出力メッセージ内の接頭部を制御しません。 生成される出力メッセージ内の接頭部は、ネーム・スペース宣言によって制御されます。 XML.NamespaceDecl 相関名を使用して、ネーム・スペース宣言をツリーに組み込むことができます。 その後、そのエレメントを使用して、出力メッセージ内にネーム・スペース宣言を生成します。
出力メッセージが生成されるとき、エレメントまたは属性を修飾するネーム・スペースに対応するネーム・スペース宣言が存在しない場合には、NSn という形式の接頭部のネーム・スペースが自動生成されます (n は正の整数)。
CREATE COMPUTE MODULE xmlns_doc_flow_Compute CREATE FUNCTION Main() RETURNS BOOLEAN BEGIN CALL CopyMessageHeaders(); -- Declaration of namespace constants DECLARE sp1 NAMESPACE 'http://www.ibm.com/space1'; DECLARE sp2 NAMESPACE 'http://www.ibm.com/space2'; DECLARE sp3 NAMESPACE 'http://www.ibm.com/space3'; -- Namespace declaration to associate prefix 'space1' with the namespace SET OutputRoot.XMLNS.message.(XML.NamespaceDecl)xmlns:space1 = 'http://www.ibm.com/space1'; SET OutputRoot.XMLNS.message.sp1:data1 = 'Hello!'; -- Default Namespace declaration SET OutputRoot.XMLNS.message.sp2:data2.(XML.NamespaceDecl)xmlns = 'http://www.ibm.com/space2'; SET OutputRoot.XMLNS.message.sp2:data2.sp2:subData1 = 'Hola!'; SET OutputRoot.XMLNS.message.sp2:data2.sp2:subData2 = 'Guten Tag!'; SET OutputRoot.XMLNS.message.sp3:data3 = 'Bonjour!'; SET OutputRoot.Properties.MessageDomain = 'XMLNS'; RETURN TRUE; END; CREATE PROCEDURE CopyMessageHeaders() BEGIN DECLARE I INTEGER 1; DECLARE J INTEGER CARDINALITY(InputRoot.*[]); WHILE I < J DO SET OutputRoot.*[I] = InputRoot.*[I]; SET I = I + 1; END WHILE; END; END MODULE;
<message xmlns:space1="http://www.ibm.com/space1"> <space1:data1>Hello!</space1:data1> <data2 xmlns="http://www.ibm.com/space2"> <subData1>Hola!</subData1> <subData2>Guten Tag!</subData2> </data2> <NS1:data3 xmlns:NS1="http://www.ibm.com/space3">Bonjour!</NS1:data3> </message>
名前付き XML エレメントを (複合エレメントの場合はその子孫も) 不透明として 構文解析することも指定できます。つまり、 不透明エレメントの開始タグと終了タグの間に含まれる 実際の XML ビット・ストリームを含む値 (UTF-16 エンコード) で、メッセージ・ツリーに 単一の名前付きエレメントを作成します。このオプションを指定すると、 エレメントの内容がメッセージ・フロー内で重要でない場合に、 パフォーマンスが向上します。
XML エレメントを不透明として構文解析することを指定するには、PARSE 文節で ESQL CREATE ステートメントを使用して XML ドキュメントを構文解析します。PARSE 文節の FORMAT 修飾子を ストリング定数「XMLNS_OPAQUE」 (大/小文字を区別します) に 設定し、PARSE 文節の TYPE 修飾子を不透明として構文解析する XML エレメントの 名前に設定します。TYPE 文節は、ネーム・スペースなしエレメント名を指定する (任意の ネーム・スペースに一致させる) か、ネーム・スペース接頭部または完全ネーム・スペース URI を持つ エレメント名を指定する (特定のネーム・スペースに一致させる) ことができます。
次の例をご覧ください。
DECLARE soap NAMESPACE 'http://schemas.xmlsoap.org/soap/envelope/'; DECLARE BitStream BLOB ASBITSTREAM(InputRoot.XMLNS ENCODING InputRoot.Properties.Encoding CCSID InputRoot.Properties.CodedCharSetId); --No Namespace CREATE LASTCHILD OF OutputRoot DOMAIN('XMLNS') PARSE (BitStream ENCODING InputRoot.Properties.Encoding CCSID InputRoot.Properties.CodedCharSetId FORMAT 'XMLNS_OPAQUE' TYPE 'Body'); --Namespace Prefix CREATE LASTCHILD OF OutputRoot DOMAIN('XMLNS') PARSE (BitStream ENCODING InputRoot.Properties.Encoding CCSID InputRoot.Properties.CodedCharSetId FORMAT 'XMLNS_OPAQUE' TYPE 'soap:Body'); --Namespace URI CREATE LASTCHILD OF OutputRoot DOMAIN('XMLNS') PARSE (BitStream ENCODING InputRoot.Properties.Encoding CCSID InputRoot.Properties.CodedCharSetId FORMAT 'XMLNS_OPAQUE' TYPE '{http://schemas.xmlsoap.org/soap/envelope/}Body');
XML エレメントの 不透明構文解析は XMLNS ドメインのみで使用できます。この指定方法は、将来のリリースで 変更されることがあります。
CREATE およびその使用方法の例の詳細については、CREATE ステートメントを参照してください。