XML Path Language

Aus Mikiwiki
Zur Navigation springen Zur Suche springen

Die XML Path Language / Xpath (auch: XPath) ist eine vom W3-Konsortium entwickelte Abfragesprache, um Teile eines XML-Dokuments zu adressieren. Sie dient als Grundlage einer Reihe weiterer Standards wie XSLT, XPointer und XQuery.

Xpath wird eingesetzt, um in der hierarchischen Struktur eines XML-Dokuments gezielt Knoten adressieren zu können. Ohne eine solche Sprache würden Dokumente immer sequentiell durchlaufen werden, was wenig praxistauglich ist. Gerade bei Webanwendungen, die oft vielen Benutzern einen Ausschnitt aus einer grossen Datenmenge zur Verfügung stellen, ist die schnelle Auswahl besonders wichtig.

Xpath realisiert die Abfrage durch Beschreibung eines Pfades und verzichtet dabei auf Schleifen oder andere zyklische Elemente. Damit ist die Konstruktion zur Laufzeit und in Abhängigkeitvom aktuellen Auftreten von Knoten zueinander möglich. Die Auswahl der Knoten ähnelt den Pfadangaben in einem Unix-Dateisystem. Das ist naheliegend, weil auch dort Daten hierarchisch angeordnet sind. Eine typische Xpath-Anweisung kann also wie folgt aussehen. Sie adressiert einen Knoten "<vorname>", der Kind von "<name>" ist, das wiederum Kind von "<eintrag>" sein muss.

eintrag/name/vorname

In XML sähe der betreffende Ausschnitt dann wie folgt aus.

<eintrag>
  <name>
    <vorname>

Konzepte

Knotentypen

XPath kennt eine Reihe sogenannter Knotentypen, die sich einzeln adressieren lassen. Konkret unterschieden werden die in der folgenden Tabelle dargestellten Typen.

Knotentyp Darstellung
Wurzelknoten /
Elementknoten ElementName
Attributknoten @AttributName
Textknoten .
Textknoten text()
Prozessinformation [nicht mit XPath darstellbar]
Namensraum alias:

Ausdrücke

Xpath basiert auf Ausdrücken, die den Weg zu einem Knoten beschreiben. Der Weg kann wie in einem Dateisystem durch absolute oder relative Pfadangaben beschrieben werden. Absolute Angaben beginnen immer an der Dokumentenwurzel. Beschreibt der Ausdruck einen Pfad über mehrere Lnoten hinweg, so werden die Elemente durch Schrägstriche getrennt.

verzeichnisliste/verzeichnis/datei

Jedes dieser Elemente wird allgemein als Lokalisierungsschritt bezeichnet. Die eben gezeigte und häufige Form der Darstellung durch einen Knotennamen ist eine verkürzte Form. Tatsächlich kann jeder Schritt aus drei Teilen bestehen.

Achsenbezeichner Er verändert die Auswahl des Knotens auf der Grundlage seiner Position im Baum. Als Trennzeichen zwischen dem Achsenbezeichner und dem nächsten Teil des Ausdrucks werden zwei Doppelpunkte ("::") geschrieben.
Knotentest Er beschreibt den Knoten selbst, z. B. eine direkte Auswahl durch Nennung des Tag-Namens.
Prädikate Sie stehen in eckigen Klammern und werden meist zur Auswahl von Attributen verwendet.

Insgesamt ergibt sich beispielsweise folgender Ausdruck. "child::" ist der Achsenbezeichner, hier wird also beginnend von der aktuellen Position das nächste Kindelement gesucht. Dann wird mit das Element selbst benannt: "directory". Das Prädikat schränkt die Suche weiter ein - hier auf das Vorhandensein eines Attributs "hasfile" mit dem Parameter "'true'".

child::directory[attribute::hasfiles='true']

Da Xpath-Ausdrücke (vor allem bei XSLT) meist innerhalb doppelter Anführungszeichen stehen, werden zur Abgrenzung von Zeichenketten innerhalb des Ausdrucks einfache Anführungszeichen verwendet.

Achsenbezeichner

Achsenbezeichner können einen oder mehrere Knoten auswählen. Die konkrete Auswahl hängt vom aktuellen Knoten ab. Dies trifft zu, wenn ein Dokument sequentiell durchlaufen wird. Die folgende Tabelle zeigt alle Achsenbezeichner für Elemente. Elemente sind Tag-Namen, also keine Attribute und keine Namensraumbezeichnungen.

Achsenbezeichner Beschreibung Suchrichtung im Dokument
self Der aktuelle Knoten.
child Alle Kinder des Knotens. vorwärts
parent Elternknoten des Knotens.
descendant Alle Nachfahren, also Kinder und Kindeskinder. vorwärts
descendant-or-self Alle Nachfahren, also Kinder und Kindeskinder oder der aktuelle Knoten selbst. vorwärts
ancestor Alle Vorfahren, also Elternknoten und deren Elternknoten usw. rückwärts
ancestor-or-self Alle Vorfahren, also Elternknoten und deren Elternknoten usw. oder der aktuelle Knoten selbst. rückwärts
following Alle folgenden Knoten, die nicht direkte Nachfahren sind. vorwärts
following-sibling Alle folgenden Geschwisterknoten, die nicht direkte Nachfahren sind. vorwärts
preceding Alle vorhergehenden Knoten, die nicht direkte Vorfahren sind. rückwärts
preceding-sibling Alle vorhergehenden Geschwisterknoten, die nicht direkte Vorfahren sind. rückwärts

Neben den Achsenbezeichnern für Elemente gibt es noch zwei besondere.

Achsenbezeichner Kurzform Zweck
attribute @ Auswahl von Attributen.
namespace : Lokalisierung von Namensräumen.

Als Trennzeichen zwischen Achsenbezeichnern und Elementnamen steht das "::"-Zeichen. Das Zeichen "*" steht für jedes beliebige Element oder Attribut.

Weblinks

Herausgeber Sprache Webseitentitel Anmerkungen
Wikipedia ger Xpathwbm Enzyklopädischer Artikel