XPath als Pfadbeschreibungssprache
(Auszug aus "XSLT 2.0 & XPath 2.0" von Frank Bongers, Kapitel 4.)
Bei XPath handelt es sich vom Wesen her um eine Pfadbeschreibungssprache, deren Hauptzweck die Beschreibung von Teilen von XML-Dokumenten ist. XPath ist dabei keine XML-Anwendung, d.h. nicht selbst in XML formuliert, sondern wurde ursprünglich aus der UNIX-Dateisyntax abgeleitet. Ein XPath-Ausdruck hat daher stets String-Charakter: Er besitzt keine innere Struktur im Sinne einer Tag-Verschachtelung oder Ähnlichem. (Falls auch durch Klammersetzungen eine Gruppierung erreicht werden kann.) Dies erlaubt seine Verwendung innerhalb von Attributwerten, z.B. in Attributen von XSLT-Instruktionen, oder auch in URI-Strings.
XSLT als Host-Language für XPath
XPath 1.0 arbeitet, wenn es um die Transformation von XML-Dokumenten geht, im Tandem mit XSLT 1.0. Analog wird XPath 2.0 stets mit XSLT 2.0 kombiniert, wobei XSLT in beiden Fällen die beherbergende Sprache (host language) darstellt.
Achtung – Festgelegte Kombinationen
Diese Kombinationen sind festgelegt. Es ist weder möglich, XSLT 2.0 mit XPath 1.0 zu kombinieren, noch XSLT 2.0 mit XPath 1.0.
Abwärtskompatibilität besteht zwischen XSLT 2.0 und XSLT 1.0 wie auch zwischen XPath 2.0 und XPath 1.0 in sehr großem Maße, sodass ein gültiger XPath 1.0-Ausdruck in der Regel auch ein gültiger XPath 2.0-Ausdruck sein wird – meist, jedoch nicht immer, auch mit dem gleichen Ergebnis. (Dies hängt davon ab, in welchem »Kompatibilitätsmodus« XPath 2.0 betrieben wird.)
Das XML-Dokument als Baum
XPath-Ausdrücke, mit denen Teile eines XML-Dokuments ausgewählt werden sollen, beschreiben Zielknoten innerhalb einer Baumstruktur. Diese ist vergleichbar mit der Baumstruktur des Document Object Models (DOM), wie es bei Webbrowsern geläufig ist.
Ein zu verarbeitendes XML-Dokument muss also zunächst (durch den XML-Parser) in eine entsprechende Form gebracht werden – im Falle von XPath 2.0 wird diese Form als XPath Data Model bezeichnet. Dessen Baumstruktur entspricht einem gerichteten Graphen, in dem jeder Knoten eine unverwechselbare Identität (unique identity) besitzt.
Das XPath Data Model basiert auf dem XML Information Set, erweitert dieses jedoch um einige für XPath benötigte Features, zu denen als wichtigstes die Unterstützung der vordefinierten (atomaren) Datentypen aus XML Schema gehört.
Erweitertes Datenmodell in XPath 2.0
Diese Unterstützung von atomaren Werten durch XPath 2.0 bereits innerhalb des Datenmodells geht über das Datenmodell von XPath 1.0 hinaus, das lediglich Knotentypen unterscheidet und die primitiven Typen nur innerhalb von XPath-Ausdrücken verwendet.
Dargestellt wird der Baum des XPath Data Models nach unten gerichtet, d.h. mit oben liegender Wurzel. Oberster Knoten in der Darstellung ist daher stets der Dokumentknoten, dessen einziger nach unten gerichteter Ast zum Wurzelelement des in Baumform gebrachten Dokuments zeigt. Von dort aus kann der Baum weiter nach unten verfolgt werden: Man spricht in diesem Zusammenhang von Leserichtung bzw. Dokumentreihenfolge.
Achtung – Der Dokumentknoten ist nicht das Wurzelelement
Der Dokumentknoten des Datenmodells und das Wurzelelement des XML-Dokuments dürfen nicht verwechselt werden – es handelt sich um zwei verschiedene Konzepte!
In der folgenden Abbildung wurde der Dokumentknoten weggelassen. Der Einfachheit halber beschränkt sich der Graph auf Elementknoten, normalerweise ist ein solcher Baum wesentlich komplexer. (Der Dokumentbaum enthält neben Elementknoten u. a. auch Text- und Kommentarknoten. Attribut- und Namensraumknoten werden in solchen Bäumen hingegen grundsätzlich nicht dargestellt.) Der Lesevorgang beginnt mit der Startmarke des Wurzelelements <eins> und wird mit dem Startmarke des Elements <zwei> fortgesetzt. Dies entspricht den Pfeilen im Graph in der rechten Hälfte des Diagramms. In <zwei> enthalten sind die Elemente <drei> und <vier>. Der Lesevorgang kehrt nun zur Endmarke von <zwei> zurück und springt zum Start-Tag von <fuenf>. Nach dem Einlesen des in <fuenf> enthaltenen Elements <sechs> wird schließlich zur Endmarke des Wurzelelements <eins> zurückgekehrt und der Lesevorgang ist beendet.
Abbildung: Die Dokumentreihenfolge.
Deutlicher zu erkennen als im Graphen ist die Dokumentreihenfolge in der links daneben gestellten Tag-Darstellung des Dokuments. Sie entspricht der menschlichen Lesegewohnheit, also der Abfolge von öffnenden und schließenden Tags. (Aufgrund der als fortlaufende Abfolge vorliegenden Inhalte bezeichnet man diese Darstellung als »serialisiert«.) In der Graphendarstellung scheint der Richtungspfeil sich zeitweilig nach oben umzukehren. Dies ist jedoch in Wirklichkeit nicht der Fall – der Graph wird, oben (beim Dokumentknoten) beginnend, konstant seinen Kanten folgend gegen den Uhrzeigersinn von Knoten zu Knoten durchwandert.
In jedem Knoten fällt Start- und Endmarke eines Elements zusammen. Die Nummerierung der Knoten entspricht ihrer Dokumentreihenfolge, also der Abfolge, in der die Knoten bei der Durchwanderung des Graphen erreicht werden. Man sieht, dass Knoten 5, obwohl er weiter »oben« im Graph liegt, als beispielsweise Knoten 3, in Dokumentreihenfolge nach diesem kommt
<< zurück | vor >> |
Tipp der data2type-Redaktion: Zum Thema XPath bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an: |
Copyright © Galileo Press, Bonn 2008
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "XSLT 2.0 & XPath 2.0 ― Das umfassende Handbuch" denselben Bestimmungen wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.
Galileo Press, Rheinwerkallee 4, 53227 Bonn