XML-Parser und -Domänen

Die XML-Nachrichtendomäne schließt alle Nachrichten ein, die dem W3C XML-Standard entsprechen.

Die XMLNS-Domäne ist eine Erweiterung der XML-Domäne und enthält Nachrichten, die dem gleichen Standard entsprechen und die Namespace-Funktion der XML-Spezifikation nutzen. Nachrichten in dieser Domäne werden vom XML-Parser verarbeitet.

Der XML-Parser ist ein Programm, das einen Bitstrom oder Strukturbaum interpretiert, der eine Nachricht repräsentiert, die zur XML-Domäne gehört, und generiert bei der Eingabe die entsprechende Baumstruktur vom Bitstrom bzw. bei der Ausgabe den Bitstrom von der Baumstruktur. Der Bitstrom ist eine Darstellung einer XML-Datei. (Der XML-Parser interpretiert ebenfalls einen Bitstrom oder Strukturbaum, der eine Nachricht darstellt, die zur JMS-Domäne gehört; es gibt keinen JMS-Parser.)

Ihre Anwendungen können (mit oder ohne Unterstützung von Namespaces) mit den WebSphere Message Broker-Brokern auf zwei Weisen XML-Nachrichten austauschen:

  1. Sie können die Nachrichtenschablone vordefinieren (modellieren), um ein Nachrichtenverzeichnis zu erstellen. Sollten Sie dies tun, werden Ihre XML-Nachrichten vom MRM-Parser analysiert und auf die gleiche Weise wie alle von Ihnen modellierten Nachrichten verarbeitet.
  2. Sie können selbstdefinierende Nachrichten verwenden, die Sie auf keine Weise vor dem Senden spezifizieren.

    Eine selbstdefinierende Nachricht kann von jedem integrierten Knoten gehandhabt werden. Die gesamte Nachricht kann in einer Datenbank gespeichert und Header der Nachricht hinzugefügt oder aus ihr entfernt werden, wenn diese den Nachrichtenfluss passiert.

Eine selbstdefinierende Nachricht wird auch als generische XML-Nachricht bezeichnet. Sie verfügt über kein aufgezeichnetes Format, transportiert aber die Informationen bezüglich ihres Inhalts und der Struktur innerhalb der Nachricht in Form eines Dokuments, das sich an die XML-Spezifikation hält. Ihre Definition ist an keiner anderen Stelle gespeichert. Wenn der Broker eine XML-Nachricht empfängt, wird sie vom XML-Parser interpretiert, und eine interne Nachrichtenbaumstruktur wird entsprechend den XML-Definitionen erstellt, die in dieser Nachricht enthalten sind.

Details, wie der XML-Parser Nullelemente und -werte handhabt, finden Sie in Der XML-Parser und Nullwerte.

Die mit WebSphere Message Broker bereitgestellten Informationen bieten keine vollständige Definition oder Beschreibung von XML-Terminologie, -Konzepten und Nachrichtenkonstrukten: Es handelt sich um eine Zusammenfassung, die Aspekte hervorhebt, die wichtig sind, wenn Sie XML-Nachrichten mit Brokern und Nachrichtenflüssen verwenden.

Weitere Informationen zu XML erhalten Sie auf der developerWorks-Website.

Syntaxanalyse einer XML-Beispielnachricht

Die in dieser Beschreibung verwendeten Namenselemente (z. B. 'XmlDecl') werden von WebSphere Message Broker zur Verfügung gestellt 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. Sie können diese Konstanten, die in der vom Traceknoten erzeugten Ausgabe verwendet werden, sehen, wenn für eine Nachricht oder einen Teil der Nachricht ein Trace durchgeführt wird.

Eine einfache XML-Nachricht kann 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>
		<!-- This is a comment  -->
	</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.

Syntaxanalyse einer XML-Beispielnachricht in der XML-Domäne

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'
    )

Syntaxanalyse einer XML-Beispielnachricht in der XMLNSC-Domäne

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 gemischen 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 allerding 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'
          )
        )
   )
Zugehörige Verweise
Integrierte Knoten
XML-Konstrukte
Bemerkungen | Marken | Downloads | Bibliothek | Unterstützung | Rückmeldung
Copyright IBM Corporation 1999, 2005 Letzte Aktualisierung: Nov 17, 2005
ac00600_