XPath
Inhaltsverzeichnis |
Autor
- Martin Eisenhammer (s3maeise@stud.hs-zigr.de)
Dieser Kurs behandelt XPath, eine XML-Technologie zur gezielten Auswahl von Elementen aus XML-Dokumenten und zur Navigation in XML-Dokumenten. Es werden Grundlagen über XPath geben und Beispiele demonstriert.
Definition
XPath (XML Path Language) ist eine XML-Technologie zur Addressierung von Teilen eines XML-Dokuments. Mit Hilfe dieser Sprache kann durch die hierarchische Struktur von XML-Dokumenten navigiert werden. XPath ist selbst keine XML-Syntax, sondern ist ähnlich, wie ein Dateipfad, mit denen man in Windows durch die Dateistrukturen navigieren kann, aufgebaut.
Datentypen
XPath hat folgende Datentypen:
node set: ist eine ungeordnete Knotenmenge, die auch leer sein kann.
String ist eine Zeichenfolge, die auch leer sein kann.
Number ist eine Fließkommazahl.
Mit boolean wird ein Wahrheitswert bezeichnet, der true oder false annehmen kann.
Auswertung eines XPath-Ausdrucks und Suchprinzip
Ein XPath-Ausdruck wird von einem Prozessor ausgewertet. Die Dokumentstruktur des XML-Dokuments kann man als Baum veranschaulichen. Es werden in der Baumstruktur die Knoten nach dem Prinzip der Tiefensuche durchlaufen. Begonnen wird am aktuellen Startknoten. Als nächstes werden die sog. Kindknoten durchlaufen und die Kindeskinder des aktuellen Startknoten durchlaufen. Es wird rekursiv vorgegangen, d.h. die Prozedur der Tiefensuche ruft sich selbst auf. Das bedeutet, dass ab dem ersten Knoten eine Tiefensuche satt findet und dann ab dem nächsten Knoten (dem Kindknoten des ersten Knoten) wieder eine Tiefensuche und beim Kindeskindknoten ebenfalls. Das wird solange fortgesetzt, bis die gesuchte Stelle gefunden wurde. Wenn an der tiefsten Stelle das Ergebnis noch nicht gefunden wurde, so wird am zweiten Kindknoten des zuletzt besuchten Knotens fortgesetzt. Ist das Ziel nicht in dem entsprechendem Teilbaum, so wird im Baum weiter zurückgegangen und dort ab den weiteren Knoten weiter gesucht.
Das Erzeugen eines XML-Dokuments aus einem Baum wird Serialisierung genannt. Deserialisierung ist die Erzeugung eines Baums aus einem XML-Dokuments.
Überblick über die Knotentypen
Bei der Modellierung eines XML-Dokuments als Baum gibt es sieben Knotentypen:
- Wurzelknoten
- Elementknoten
- Textknoten
- Attributknoten
- Namensraumknoten
- Processing-Instruction-Knoten
- Kommentarknoten
Der Wurzelknoten enthält das gesamte Dokument. Die Dokumenttyp-Deklaration ist kein Kind des Wurzelknotens. Der Elementknoten ist der Knoten für jedes Element im Dokument. Der Attributknoten ist der Knoten für jedes Attribut, welches einem Element zugeordnet ist. Der Textknoten enthält die Zeichendaten. Der Verarbeitungsanweisungsknoten (Processing Instruction Knoten) ist ein Knoten für eine Verarbeitungsanweisung. Der Namensraumknoten ist einem Elementknoten zugeordneter Elternknoten. Der Kommentarknoten ist ein Knoten für einen Kommentar.
Adressierung mit Hilfe von Lokalisierungspfaden
Absolute und relative Pfade
Mit Hilfe von Lokalisierungspfaden kann man gezielt Teile eines XML-Dokuments auswählen. Die Ausdrücke ähneln sich der Syntax von Dateipfaden, so wie man sie von Windows zur Navigation durch die Dateistruktur her kennt. Man kann zwei Schreibweisen unterscheiden: eine ausführliche Schreibweise und eine Kurzform.
Zur Veranschaulichung wird als Beispiel einen Auszug aus einer Filmsammlung genommen, die als XML-Datei realisiert wurde.
Anhand dieses Beispiels wird der Zugriff auf Knoten mit Hilfe von XPath-Ausdrücken demonstriert.
Um beispielsweise auf dem Knoten film zuzugreifen, wird folgender Ausdruck in ausführlicher Schreibweise angegeben:
Der Ausdruck beginnt mit einem Schrägstrich und wird auch absoluter Pfad genannt. Absolute Pfade gehen vom Wurzelknoten aus. Als Wurzelknoten wird das erste Tag bezeichnet, mit dem das XML-Dokument beginnt. Nach dem Schrägstrich folgt die Angabe der Lokalisierungsstufe. Ein Lokalisierungspfad ist aus mehreren Lokalisierungsstufen zusammengesetzt, die durch Schrägstriche getrennt sind. Eine Lokalisierungsstufe besteht aus einer Achse und einem Knotentest. Auf Achsen und Knotentest wird später eingegangen. Im obigen Beispiel lautet die Achse "child" und der Knotentest "filmliste" in der ersten Lokalisierungsstufe. Hinter dem Knotentest können noch sogenannte Prädikate folgen, die an späterer Stelle noch behandelt werden.
Die allgemeine Syntax einer ausführlichen Pfadangabe lautet:
Außer der ausführlichen Angabe existiert auch noch die verkürzte Schreibweise, die die Achsenbezeichnung nicht mit angibt:
Bezogen auf das Beispiel (siehe oben) lautet die Kurzform:
Außer absoluten Pfaden kann man auch relative Pfade angeben. Ein relativer Pfad geht von einem Kontextknoten aus. Das ist jeweils der Knoten, der durch die vorausgehenden Schritte erreicht worden ist.
Beispiel für einen relativen Pfad:
Hierbei ist der Kontextknoten filmliste.
Man kann auch eine verkürzte Form formulieren ohne immer die vollständige Hierarchie anzugeben.
Beispiel:
Diese Kurzform kann auch innerhalb eines Ausdrucks stehen:
Hier muss der Prozessor mehr Knoten des Dokuments prüfen.
Mit Hilfe von Wildcards können alle Kinder eines Elements angegeben werden. Hierbei wird ein Stern angegeben.
Beispiel:
Dieses Beispiel liefert alle Kinder des Elements Film. Es listet alle Informationen zu einem Film auf.
Auswählen von Attributen
Um auf Attribute zugreifen zu können, wählt man sie mit Hilfe von Attributknoten aus. Die Attributknoten werden anders addressiert, als die Elementknoten. Sie beginnen mit einen @-Zeichen und danach folgt der Name des Attributs.
Allgemeine Syntax:
Im folgendem Beispiel wird auf das Attribut "id" zugegriffen:
Man kann auch mit Hilfe von Wildcards auf Attribute eines Elements zugreifen.
Beispiel:
Es können auch alle Elementknoten ausgewählt werden, bei denen das angebene Attribut einen bestimmten Wert hat.
Das Beispiel wählt genau den Film aus, dessen ID gleich 3 ist.