Das folgende Beispiel zeigt die Verwendung von ESQL bei der Arbeit mit Namespaces.
Namespacekonstanten werden beim Start des Hauptmoduls deklariert; daher können Sie in den ESQL-Anweisungen Präfixe anstatt der vollständigen URIs der Namespaces verwenden. Die Namespacekonstanten wirken sich nur auf den ESQL-Code aus, nicht auf die Präfixe, die in der Ausgabenachricht erstellt werden. Die Präfixe in der generierten Ausgabenachricht werden durch die Namespacedeklarationen in der Nachrichtenbaumstruktur gesteuert. Namespacedeklarationen können mithilfe des Feldtyps 'XML.NamespaceDecl' in die Baumstruktur aufgenommen werden. Diese Elemente werden dann für die Generierung von Namespacedeklarationen in der Ausgabenachricht verwendet.
Wenn der Parser bei der Generierung der Ausgabenachricht einen Namespace feststellt, für den keine entsprechende Namespacedeklaration vorliegt, wird automatisch ein Präfix generiert; dieses Präfix hat das Format 'NSn', wobei 'n' eine positive ganze Zahl ist.
CREATE COMPUTE MODULE xmlns_doc_flow_Compute
CREATE FUNCTION Main() RETURNS BOOLEAN
BEGIN
CALL CopyMessageHeaders();
-- Deklaration der Namespacekonstanten --
Diese werden nur von ESQL verwendet
DECLARE sp1 NAMESPACE 'http://www.ibm.com/space1';
DECLARE sp2 NAMESPACE 'http://www.ibm.com/space2';
DECLARE sp3 NAMESPACE 'http://www.ibm.com/space3';
-- Namespacedeklaration für das Präfix 'space1'
SET OutputRoot.XMLNS.message.(XML.NamespaceDecl)xmlns:space1 = 'http://www.ibm.com/space1';
SET OutputRoot.XMLNS.message.sp1:data1 = 'Hello!';
-- Standardmäßige Namespacedeklaration (leeres Präfix)
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;
Wenn dieser ESQL-Code verarbeitet wird, wird die folgende
Ausgabenachricht generiert: <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>