Die XML-Nachrichtendomäne enthält alle Nachrichten, die dem W3C-XML-Standard entsprechen.
Nachrichten in dieser Domäne werden vom XML-, XMLNS- oder XMLNSC-Parser verarbeitet. Die XMLNS-Domäne ist eine Erweiterung der XML-Domäne und enthält Nachrichten, die demselben Standard entsprechen und die Namespace-Funktion der XML-Spezifikation nutzen. Die Nachrichten in dieser Domäne werden vom XML-Parser verarbeitet.
Der XML-Parser ist ein Programm, das einen Bitstrom oder eine Baumstruktur interpretiert, der bzw. die eine zur XML-Domäne gehörende Nachricht darstellt. Anschließend generiert der Parser die entsprechende Baumstruktur aus dem Bitstrom bei der Eingabe oder einen Bitstrom aus der Baumstruktur bei der Ausgabe. Der Bitstrom ist eine Darstellung einer XML-Datei. (Der XML-Parser interpretiert auch einen Bitstrom oder eine Baumstruktur, die eine den JMS-Domänen angehörende Nachricht darstellt, da es keinen JMS-Parser gibt.)
Ihre Anwendungen können auf zwei Arten XML-Nachrichten mit den Brokern von WebSphere Message Broker austauschen (mit oder ohne Namespace-Unterstützung):
Eine selbstdefinierende Nachricht kann von jedem integrierten Knoten verarbeitet werden. Die gesamte Nachricht kann in einer Datenbank gespeichert werden. Während sie durch den Nachrichtenfluss übergeben wird, können ihr Header hinzugefügt oder aus ihr entfernt werden.
Eine selbstdefinierende Nachricht wird auch als 'generische XML-Nachricht' bezeichnet. Sie hat kein festgelegtes Format, in ihr sind jedoch die Informationen zu Inhalt und Struktur in einem Dokument innerhalb der XML-Spezifikation gespeichert. Ihre Definition ist also an keiner anderen Stelle gespeichert. Sobald eine XML-Nachricht vom Broker empfangen wird, wird sie vom XML-Parser interpretiert. Anschließend wird gemäß der in dieser Nachricht enthaltenen XML-Definitionen eine interne Nachrichtenbaumstruktur erstellt.
Details, wie der XML-Parser Nullelemente und -werte handhabt, finden Sie in Der XML-Parser und Nullwerte.
Die mit WebSphere Message Broker bereitgestellten Informationen enthalten keine umfassende Definition oder Beschreibung der XML-Terminologie, -Konzepte und -Nachrichtenkonstrukte: sie stellen lediglich eine Zusammenfassung dar, in der wichtige Aspekte bei der Verwendung von XML-Nachrichten in Verbindung mit Brokern und Nachrichtenflüsse hervorgehoben werden.
Weitere Informationen zu XML finden Sie auf der Website developerWorks.
Die in dieser Beschreibung verwendeten Namenselemente (z. B. XmlDecl) werden von WebSphere Message Broker bereitgestellt und als Korrelationsnamen bezeichnet. Sie sind für die symbolische Nutzung innerhalb von ESQL verfügbar, das die Verarbeitung von Nachrichteninhalten definiert, die von den Knoten (z. B. einem Rechen- oder Filterknoten) innerhalb eines Nachrichtenflusses durchgeführt wird. Sie sind nicht Teil der XML-Spezifikation. Jeder XML-Parser definiert seine eigene Gruppe von Korrelationsnamen, da die Behandlung des XML-Inhalts unterschiedlich ist.
Die Korrelationsnamen für XML-Namenselemente (z. B. 'Element' und 'XmlDecl') entsprechen einem konstanten Wert der Form 0x01000000 usw. Diese Konstanten, die in der vom Traceknoten erstellten Ausgabe verwendet werden, werden angezeigt, wenn für eine Nachricht oder einen Nachrichtenbereich eine Traceverarbeitung ausgeführt wird.
Eine einfache XML-Nachricht könnte folgendermaßen aussehen:
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE Envelope PUBLIC "http://www.ibm.com/dtds" "example.dtd" [<!ENTITY Example_ID "ST_TimeoutNodes Timeout Request Input Test Message">] > <Envelope version="1.0"> <Header> <Example>&Example_ID;</Example> <!-- Dies ist ein Kommentar --> </Header> <Body version="1.0"> <Element01>Value01</Element01> <Element02/> <Element03> <Repeated>ValueA</Repeated> <Repeated>ValueB</Repeated> </Element03> <Element04><P>This is <B>bold</B> text</P></Element04> </Body> </Envelope>
In den folgenden Abschnitten wird die Ausgabe des Traceknotens gezeigt, die bei der Syntaxanalyse der oben genannten Nachricht in den XML- und XMLNSC-Parsern erstellt wurde. Damit werden die Unterschiede in den internen Strukturen veranschaulicht, die zur Darstellung der Daten bei der Verarbeitung durch den Broker verwendet werden.
Beachten Sie, dass auf Grund von Leerzeichen, Tabulatoren und Zeilenumbrüchen im ursprünglichen XML-Dokument in der Baumstruktur WhiteSpace-Elemente vorhanden sind, mit denen das ursprüngliche XML-Dokument formatiert wird. Die tatsächlichen Zeichen im Trace wurden zur Verdeutlichung der Darstellung durch 'WhiteSpace' ersetzt. Leerzeichen innerhalb eines XML-Elements haben keine geschäftliche Bedeutung und werden durch das Inhalt-Syntaxelement dargestellt.Beachten Sie, dass XmlDecl, DTD und Kommentare in der XML-Domäne mit Hilfe von ausdrücklichen Syntaxelementen mit Korrelationsnamen dargestellt werden.
(0x01000010):XML = ( (0x05000018):XML = ( (0x06000011): = '1.0' (0x06000012): = 'UTF-8' (0x06000014): = 'no' ) (0x06000002): = 'WhiteSpace' (0x05000020):Envelope = ( (0x06000004): = 'http://www.ibm.com/dtds' (0x06000008): = 'example.dtd' (0x05000021): = ( (0x05000011):Example_ID = ( (0x06000041): = 'ST_TimeoutNodes Timeout Request Input Test Message' ) ) ) (0x06000002): = 'WhiteSpace' (0x01000000):Envelope = ( (0x03000000):version = '1.0' (0x02000000): = 'WhiteSpace' (0x01000000):Header = ( (0x02000000): = 'WhiteSpace' (0x01000000):Example = ( (0x06000020): = 'Example_ID' (0x02000000): = 'ST_TimeoutNodes Timeout Request Input Test Message' (0x06000021): = 'Example_ID' ) (0x02000000): = 'WhiteSpace' (0x06000018): = ' This is a comment ' (0x02000000): = 'WhiteSpace' ) (0x02000000): = 'WhiteSpace' (0x01000000):Body = ( (0x03000000):version = '1.0' (0x02000000): = 'WhiteSpace' (0x01000000):Element01 = ( (0x02000000): = 'Value01' ) (0x02000000): = 'WhiteSpace' (0x01000000):Element02 = (0x02000000): = 'WhiteSpace' (0x01000000):Element03 = ( (0x02000000): = 'WhiteSpace' (0x01000000):Repeated = ( (0x02000000): = 'ValueA' ) (0x02000000): = 'WhiteSpace' (0x01000000):Repeated = ( (0x02000000): = 'ValueB' ) (0x02000000): = 'WhiteSpace' ) (0x02000000): = 'WhiteSpace' (0x01000000):Element04 = ( (0x01000000):P = ( (0x02000000): = 'This is ' (0x01000000):B = ( (0x02000000): = 'bold' ) (0x02000000): = ' text' ) ) (0x02000000): = 'WhiteSpace' ) (0x02000000): = 'WhiteSpace' )
Im folgenden Trace werden die Elemente gezeigt, die zur Darstellung der gleichen XML-Struktur im Standardmodus des XMLNSC-Kompaktparsers erstellt werden. In diesem Modus behält der Kompaktparser keine Kommentare, Verarbeitungsanweisungen oder gemischten Text bei.
Beim Vergleich ist eindeutig zu erkennen, dass bei der Verwendung des Kompaktparsers eine große Anzahl an Syntaxelementen eingespart werden kann, die zur Darstellung der gleichen Geschäftsinhalte der XML-Beispielnachricht verwendet werden.
Wenn Sie keinen gemischten Text beibehalten müssen Sie beachten, dass für die 'WhiteSpace'-Elemente ohne Geschäftsdateninhalte in der Nachrichtenbaumstruktur des Brokers während der Ausführung kein Speicherplatz erforderlich ist. Dies führt allerdings auch dazu, dass der gemischte Text in "Element04.P" gelöscht wird und nur der Wert des untergeordneten Ordners "Element04.P.B" in der Baumstruktur zurückbehalten wird; der Text 'This is ' und ' text' in "P" wird gelöscht. Dieser XML-Strukturtyp wird normalerweise Geschäftsdatenformaten zugeordnet; deshalb ist im Allgemeinen die Verwendung des XMLNSC-Kompaktparsers vorzuziehen. Wenn jedoch dieser Verarbeitungstyp erforderlich ist, sollten Sie entweder nicht den XMLNSC-Parser verwenden, oder ihn nur verwenden, wenn der Modus "retain mixed text" (gemischten Text beibehalten) aktiviert ist.
Auch die Handhabung der XML-Deklaration unterscheidet sich im Kompaktparser, wenn die Attribute 'Version', 'Encoding' und 'Standalone' als untergeordnete Elemente der XML-Deklaration und nicht als spezielle Elemente mit Korrelationsnamen gespeichert werden.
(0x01000000):XMLNSC = ( (0x01000400):XmlDeclaration = ( (0x03000100):Version = '1.0' (0x03000100):Encoding = 'UTF-8' (0x03000100):StandAlone = 'no' ) (0x01000000):Envelope = ( (0x03000100):version = '1.0' (0x01000000):Header = ( (0x03000000):Example = 'ST_TimeoutNodes Timeout Request Input Test Message' ) (0x01000000):Body = ( (0x03000100):version = '1.0' (0x03000000):Element01 = 'Value01' (0x01000000):Element02 = (0x01000000):Element03 = ( (0x03000000):Repeated = 'ValueA' (0x03000000):Repeated = 'ValueB' ) (0x01000000):Element04 = ( (0x01000000):P = ( (0x03000000):B = 'bold' ) ) )
Die meisten der Beispiele in der Beispielprogrammgalerie verwenden den XML-Parser zum Verarbeiten von Nachrichten. Sehen Sie sich beispielsweise das Beispielprogramm 'Coordinated Request Reply', das Beispielprogramm 'Large Messaging' und das Beispielprogramm 'Message Routing' an.