以下の例は、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 --
These are only used by ESQL
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 for prefix 'space1'
SET OutputRoot.XMLNS.message.(XML.NamespaceDecl)xmlns:space1 = 'http://www.ibm.com/space1';
SET OutputRoot.XMLNS.message.sp1:data1 = 'Hello!';
-- Default namespace declaration ( empty prefix )
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!';
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;
この ESQL が処理されると、次の出力メッセージが生成されます。 <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="http://www.ibm.com/space3>Bonjour!</NS1:data3>
</message>