Nachrichten in der XMLNS-Domäne bearbeiten

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;
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: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.

Zugehörige Konzepte
Nachrichtenflüsse - Übersicht
XML-Parser und -Domänen
Übersicht zu ESQL
Zugehörige Tasks
Einen Nachrichtenfluss entwerfen
Nachrichtenflussinhalte definieren
Nachrichten in der XML-Domäne bearbeiten
Zugehörige Verweise
ESQL-Referenz
DECLARE-Anweisung
SET-Anweisung
Bemerkungen | Marken | Downloads | Bibliothek | Unterstützung | Rückmeldung
Copyright IBM Corporation 1999, 2006 Letzte Aktualisierung: 23. Aug. 2006
ac17330_