Unterstützung von Namensbereichen

Das XPath-Ausdruckserstellungsprogramm bietet qualifizierte Unterstützung für Namensbereiche.

Der Dialog des XPath-Ausdruckserstellungsprogramms enthält eine Tabelle mit Namensbereichseinstellungen, die:
  • vereinfachte Ausdrücke unterstützt, die einen qualifizierten Namensbereichsabgleich zur Laufzeit ermöglichen;
  • auf der Basis von importierten Schemadefinitionen und generierten Ausdrücken automatisch generiert werden kann (abhängig von der beim Erstellen eines Ausdrucks im Dialog getroffenen Auswahl);
  • es Ihnen ermöglicht, eigene Einträge hinzuzufügen.

Die Tabelle enthält als Teil der Knotenattributdaten die an die Laufzeitumgebung übergebenen implementierbaren Daten. Die Tabelle wird vom Knoten zur Änderung von Ausdrücken über die Präfix-zu-URI-Substitution verwendet. Die endgültigen Ausdrücke unterstützen den Namensbereichsabgleich, da sie beim Einsatz durch die ihnen zugeordnete Nachrichtenverarbeitungsengine, d. h. die XPath 1.0- oder ESQL-Laufzeitengine für eine Zielbaumstruktur verarbeitet werden.

Wenn Sie einen ESQL-Feldreferenzausdruck in ein schreibgeschütztes oder schreib- und lesbares Pfadfeld eingeben oder einen XPath-Pfadausdruck ( 1.0 ) in ein schreibgeschütztes oder schreib- und lesbares Pfadfeld oder in ein Feld für allgemeine Ausdrücke (allgemeine Ausdrücke können null oder mehr Pfadausdrücke enthalten), erkennt „ IBM® App Connect Enterprise “ die Sprache anhand der von Ihnen verwendeten Syntax.

XPath ist die Standardsprache für Felder für allgemeine Ausdrücke, die validiert werden, indem sichergestellt wird, dass sie der XPath 1.0-Grammatik entsprechen. Für Felder für Pfadausdrücke wird XPath vorausgesetzt, wenn der Ausdruck gültig ist und mit dem Zeichen $ beginnt.

Welche Sprache Sie verwenden können, ist durch den für das Eigenschaftsfeld eines Knotens verwendeten Eigenschafteneditor vorgegeben.

Namensbereichspräfixe werden in einem XPath- oder ESQL-Ausdruck verwendet, um die Anweisungen kürzer und leicht verständlicher zu machen, aber gleichzeitig weiterhin die Fähigkeit zu unterstützen, einen Elementnamensabgleich zu qualifizieren, indem auch die zugeordnete Namensbereichs-URI abgeglichen wird.

Betrachten Sie beispielsweise die folgende Nachricht, bei der das Namensbereichspräfix b durch eine innere Deklaration überschrieben wird:
 <b:a xmlns:b='xyz'>
  <!-- the namespace of elements 'a' and 'c' using prefix 'b'  is xyz -->
  <b:c>
   <b:d  xmlns:b='qrs'>
    <!-- the namespace of elements 'd' and 'e' using prefix 'b' is now qrs -->
    <b:e>100</b:e>
   </b:d>
  </b:c>
 </b:a>

Beachten Sie, dass der Bereich einer Namensbereichsdeklaration, bei dem ein Präfix deklariert wird, sich vom Anfang des Start-Tags, in dem es enthalten ist, bis zum Ende des entsprechenden End-Tags erstreckt. Dabei wird der Bereich der inneren Deklarationen mit demselben Namensbereichspräfix ausgeschlossen. Bei einem leeren Tag, bildet der Tag selbst den Bereich: >.

Navigieren Sie mithilfe des folgenden lesbaren XPath-Ausdrucks zum Element e in der oben dargestellten Nachricht:
  /b:a/b:c/b2:d/b2:e

Um zu verhindern, dass das automatisch generierte Präfix für die im Ausdrucksdialog erzeugte URI-Maske dasselbe Präfix (in diesem Fall b) überschreibt, wird dem inneren Präfix b ein numerischer Wert angehängt, um es vom äußeren Präfix b zu unterscheiden. Diese Strategie wird für jede Kollision von Präfixnamen wiederholt.

Diese Schreibweise ähnelt dem entsprechenden lesbaren ESQL-Ausdruck:
  Root.b:a.b:c.b2:d.b2:e

Um Namensbereichspräfixe innerhalb von Ausdrücken zu unterstützen, wird im Dialog des XPath-Ausdruckserstellungsprogramms automatisch ein Präfix für eine Tabelle mit URI-Namensbereichseinstellungen generiert (basierend auf dem Inhalt der importierten Schemadefinitionen, über die Ausdrücke generiert werden).

Ohne die Verwendung von Namensbereichspräfixen für URI-Abgleichsdaten in dieser Tabelle, wäre die Laufzeitumgebung gezwungen, auf eine weniger effiziente Methode zurückzugreifen, bei der übertragbare, aber ausführliche XPath-Ausdrücke angefordert würden, um Unterstützung für den Namensbereichsabgleich bereitzustellen.

Der Ausdruck
  /b:a/b:c/b2:d/b2:e
würde dann folgendes Format annehmen:
  /*[namespace-uri()='xyz' and local-name()='a']/*[namespace-uri()='xyz' 
     and local-name()='c']/*[namespace-uri()='qrs' and 
     local-name()='d']/*[namespace-uri()='qrs' and local-name()='e']