Konzepte Content-Repräsentation & Markup-Sprachen

11.5 Pfadausdrücke

Ein Pfadausdruck dient dazu, aus einer Menge von XPath-Knoten diejenigen Knoten herauszufiltern, die bestimmte Kriterien erfüllen. Die Auswertung erfolgt im Kontext der Baumdarstellung eines Quelldokuments, wobei ein Kontextknoten (Context node) als Referenzpunkt für bestimmte Prädikate dient. Das Ergebnis ist eine Knotenmenge (Node set), in der jeder Knoten nur einmal vertreten ist. Abhängig vom Kontext des Pfadausdrucks kann diese Menge zusätzlich linear geordnet sein, typischerweise entsprechend der linearen Dokumentordnung (Document order) oder der Inversion dieser Ordnung. Eine genauere Darstellung, wie XPath-Ausdrücke in einen konkreten Anwendungskontext eingebettet werden, findet sich in Abschnitt 11.6. An dieser Stelle soll es genügen, nur den Kontextknoten zu betrachten, indem er intuitiv als “aktuell betrachteter” Knoten bei der Auswertung von XPath-Ausdrücken angesehen wird.

Syntaktisch besteht ein Pfadausdruck aus einem oder mehreren Location paths, die über einen Vereinigungsoperator | verknüpft werden. Eine solche Vereinigung wird ausgewertet, indem zuerst jeder einzelne Location path ausgewertet wird. Die Ergebnisse sind jeweils eine Knotenmenge, aus denen anschließend die Vereinigungsmenge gebildet wird. Die Ordnung der so entstehenden Menge ist undefiniert, d.h. sie kann von Implementierung zu Implementierung abweichen.

Die Bildung von Pfadausdrücken orientiert sich an der Pfadschreibweise in URIs bzw. an den in Lerneinheit 10 erwähnten Location pointers. Im einfachsten Fall handelt es sich um einen Location Path, der aus einzelnen Zwischenstufen, den Location steps, aufgebaut ist.

Ein Location step besteht aus einem Bezeichner einer vordefinierten Achse, einem Knotentest und optionalen Prädikaten. Der Achsenbezeichner wird durch die Zeichenkette “::” vom Knotentest abgetrennt. An letzteren können sich beliebige in eckige Klammern eingefaßte Prädikate in Form von XPath-Ausdrücken anschließen. Der Knotentest kann ein Aufruf einer booleschen Funktion sein, die den Typ von Knoten im XPath-Baum überprüft. Alternativ besteht auch die Möglichkeit, einen Generic Identifier als Test zu verwenden. In diesem Fall werden alle Elementknoten betrachtet, die vom angegebenen Elementtyp sind. Abbildung 2 faßt den syntaktischen Aufbau zusammen:

Abbildung 2. Syntaktischer Aufbau eines Location Step

Bevor die syntaktischen Bestandteile eines Location step im Detail erläutert werden, soll ein kurzes Beispiel die grundsätzliche Funktionsweise von XPath illustrieren. Zu diesem Zweck soll ein einfacher Location step auf das in Beispiel 2 gezeigte Dokumentfragment angewendet werden. Abbildung 3 zeigt eine stark vereinfachte Version des zugehörigen XPath-Baums für das Dokument. Auf die Darstellung von Namespaces, Textdaten und weitere Komponenten des XML Infoset zu diesem Fragment wurde bewußt verzichtet.

Beispiel 2. Ein einfaches Dokumentfragment

<body>
  <h1></h1>
  <p></p>
</body>

Abbildung 3. Vereinfachte Darstellung eines XPath-Baums

Die Darstellung des XPath-Baums beschränkt sich hier auf die Elementstruktur des Beispieldokuments. Der Knoten body verfügt über zwei Kindknoten, h1 und p. Mittels eines XPath-Ausdrucks soll nun der Elementknoten p adressiert werden (etwa als Bestandteil eines XPointer-Ausdrucks wie in Lerneinheit 10 skizziert).

Im einfachsten Fall wird der gesuchte Elementknoten mit dem XPath-Ausdruck child::p adressiert. Das Schlüsselwort child bezeichnet hier die Achse, auf der nach einem Knoten gesucht werden soll. Nach dem zweiten Doppelpunkt folgt der Generic Identifier des gesuchten Elements, hier also p.

Die Auswertung des Ausdrucks child::p erfolgt immer unter Verwendung eines Kontextknotens, auf den sich die genannte Achse bezieht. Der Kontextknoten selbst wird von der Anwendung bestimmt, in die XPath eingebettet ist. Für die Auswertung von XPointer-Ausdrücken wird der XPath-Baum in Dokumentordnung traversiert und der gegebene XPath-Ausdruck mit jedem Elementknoten als Kontextknoten ausgewertet. Im zuvor gezeigten Beispiel würde demnach der Knoten body als initialer Kontextknoten eingesetzt. Auf der Achse der Kindknoten zu diesem Elementknoten befinden sich die beiden übrigen Knoten h1 und p. Diese werden nun nacheinander daraufhin überprüft, ob sie den im Knotentest des XPath-Ausdrucks genannten Generic Identifier p tragen. Dies ist beim zweiten Kindknoten der Fall, so daß das Ergebnis dieses Auswertungsschritts aus einer Knotenliste mit dem Elementknoten p besteht.

Anschließend werden nacheinander die beiden übrigen Knoten des XPath-Baums als Kontextknoten eingesetzt und der Ausdruck jeweils ausgewertet. Da beide Knoten jedoch überhaupt keine Kindknoten besitzen, besteht das Ergebnis dieser Auswertungsschritte jeweils aus einer leeren Knotenliste. Der Prozeß endet folglich mit einem Knoten als Ergebnis. Abbildung 4 stellt noch einmal die Beziehung zwischen Kontextknoten, Achse der Kindknoten und das Ergebnis des XPath-Ausdrucks graphisch dar.

Abbildung 4. Kontextknoten und Ergebnis des XPath-Ausdrucks child::p

In den folgenden Abschnitten soll nun eine kurze Beschreibung der drei Bestandteile eines Location step vorgenommen werden, bevor näher auf die Kombination derartiger Ausdrücke eingegangen wird.

Kommentare (0)

Ihr Kommentar

Name