Dieses Thema enthält Informationen, die sich speziell auf die Verarbeitung von Nachrichten beziehen, die der XMLNS-Domäne angehören und vom generischen XML-Parser syntaktisch analysiert werden. Die XMLNS-Domäne ist eine Erweiterung der XML-Domäne und bietet ein e Namespace-Unterstützung. Halten Sie sich an die Richtlinien für XML-Nachrichten, die im Abschnitt Nachrichten in der XML-Domäne bearbeiten genannt werden, sowie an die Informationen im Abschnitt Inhalt des Hauptteils einer Nachricht bearbeiten.
Das folgende Beispiel zeigt die Verwendung von ESQL bei der Arbeit mit Namespaces. In dem Beispiel werden Namespace-Konstanten am Anfang des Hauptmoduls deklariert, damit Sie anstelle der vollständigen Namespace-URIs Präfixe in den ESQL-Anweisungen verwenden können.
Die Namespace-Konstanten wirken sich nur auf den ESQL-Code aus; sie steuern nicht die Präfixe, die in der Ausgabenachricht generiert werden. Die Präfixe in der generierten Ausgabenachricht werden von Namespace-Deklarationen gesteuert. Sie können unter Verwendung des Korrelationsnamens 'XML.NamespaceDecl' Namespace-Deklarationen in der Baumstruktur einfügen. Diese Elemente werden dann für die Generierung von Namespace-Deklarationen in der Ausgabenachricht verwendet.
Wenn der Namespace, über den ein Element oder Attribut qualifiziert wird, bei der Generierung der Ausgabenachricht keine entsprechende Namespace-Deklaration hat, wird automatisch eine generiert, wobei Präfixe der Form NSn verwendet werden. Hierbei steht n für eine positive ganze Zahl.
CREATE COMPUTE MODULE xmlns_doc_flow_Compute CREATE FUNCTION Main() RETURNS BOOLEAN BEGIN CALL CopyMessageHeaders(); -- Deklaration von Namespace-Konstanten 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-Deklaration für die Zuordnung des Präfixes 'space1' zum Namespace SET OutputRoot.XMLNS.message.(XML.NamespaceDecl)xmlns:space1 = 'http://www.ibm.com/space1'; SET OutputRoot.XMLNS.message.sp1:data1 = 'Hello!'; -- Standard-Namespace-Deklaration 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>
Sie können auch angeben, dass ein benanntes XML-Element (und dessen untergeordnete Elemente, falls es sich um eine komplexes Element handelt) auf nicht transparente Weise syntaktisch analysiert werden soll. Dies bedeutet, dass ein einzelnes benanntes Element in der Nachrichtenbaumstruktur mit einem Wert (codiert in UTF-16) erstellt wird, der den tatsächlichen XML-Bitstrom enthält, der sich zwischen dem Start- und Endtag des nicht transparenten Elements befindet. Diese Option kann zu Leistungsverbesserungen führen, wenn der Inhalt eines Elements innerhalb des Nachrichtenflusses nicht erheblich ist.
Um festzulegen, dass ein XML-Element auf nicht transparente Weise syntaktisch analysiert werden soll, geben Sie eine ESQL CREATE-Anweisung mit einer PARSE-Klausel für die Syntaxanalyse des XML-Dokuments an. Geben Sie für das Qualifikationsmerkmal FORMAT der PARSE-Klausel die konstante Zeichenfolge 'XMLNS_OPAQUE' an, wobei die Groß-/Kleinschreibung beachtet werden muss, und geben Sie für das Qualifikationsmerkmal TYPE der PARSE-Klausel den Namen des XML-Elements an, das auf nicht transparente Weise syntaktisch analysiert werden soll. In der TYPE-Klausel kann der Elementname ohne Namespace (so dass jeder Namespace zutrifft) oder mit einem Namespace-Präfix oder einer vollständigen Namespace-URI (so dass ein bestimmter Namespace zutrifft) angegeben werden.
Betrachten Sie das folgende Beispiel:
DECLARE soap NAMESPACE 'http://schemas.xmlsoap.org/soap/envelope/'; DECLARE BitStream BLOB ASBITSTREAM(InputRoot.XMLNS ENCODING InputRoot.Properties.Encoding CCSID InputRoot.Properties.CodedCharSetId); --Ohne Namespace CREATE LASTCHILD OF OutputRoot DOMAIN('XMLNS') PARSE (BitStream ENCODING InputRoot.Properties.Encoding CCSID InputRoot.Properties.CodedCharSetId FORMAT 'XMLNS_OPAQUE' TYPE 'Body'); --Namespace-Präfix 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');
Die nicht transparente Syntaxanalyse von XML-Elementen ist nur in XMLNS-Domänen verfügbar, und die Steuerung darüber, wie dies angegeben wird, kann sich in nachfolgenden Releases ändern.
Weitere Informationen zu CREATE sowie Beispiele zu dessen Verwendung finden Sie unter CREATE-Anweisung.