XPath: Einführung
von Jan Winkler
Neben XML und XSLT ist XPath das dritte Glied der Kette. Es bietet die Grundfunktionen für XSLT um Knoten richtig ansprechen zu können. Aber auch darüber hinaus bietet XPath einiges an Möglichkeiten an.
XPath entstand schon 1998 im Zusammenhang mit XSL(T). Ebenso wie XLink wurden damals alle diese Bestandteile innerhalb vonXSLintegriert. 1999 wurden die einzelnen Bestandteile vonXSLjedoch gelöst und in eigene Arbeitsgruppen verpackt. Schon Ende 1999 wurde XPath zur Recommendation (Empfehlung des W3C) erklärt und blieb seitdem weitestgehend unverändert.
Seit Ende 2001 wird nun an der zweiten Version von XPath gearbeitet, diese wurde aber bisher noch nicht völlig fertig gestellt und ebenso auch noch nicht vom W3C als Empfehlung verabschiedet.
Wie eingangs erwähnt dient XPath dazu um Knoten innerhalb eines Dokuments eindeutig identifizieren und ansprechen zu können. Der primäre Nutzen liegt dabei in der Verbindung mit XSLT , wobei aber auch die Kombination mit anderen Technologien wie etwa XQuery denkbar sind.
Wie in XSLT und XML vorgeschrieben sieht auch XPath die einzelnen Objekte (Elemente, Attribute, Kommentare usw.) als Knoten an. Man kann sich ein XML mit diesem Hintergrund als eine Art Baum vorstellen: Jedes Element bildet einen Ast von dem wiederum andere Äste (die Unterelemente und Attribute) abzweigen können. Jeder Knoten kann einen erweiterten Namen und einen Textwert besitzen - beide können z.B. zur Verwendung mit XSLT herangezogen werden. Innerhalb von XPath gibt es 7 Typen von Knoten:
Der Root-Knoten, oder auch Wurzknoten bezeichnet, ist das Element, das alle anderen Elemente umschließt (eben das Root-Element). Es darf nur einmal im Dokument vorkommen. Da die XML-Deklaration sowie die DOCTYPE-Deklaration nicht innerhalb des Root-Elements liegen, kann auf diese beiden Dinge auch nicht zugegriffen werden. Der Textwert des Element ergibt sich wenn man allen Markup (Elemente, Attribute usw.) entfernt. Ein Root-Knoten besitzt keinen erweiterten Namen.
Jedes Element das sich in einem Dokument befindet stellt einen Elementknoten dar. Jedes Element kann durch eine eindeutige ID (Identifikationsnamen) beschrieben werden um so den Zugriff auf dieses Element zu erleichtern. Bitte beachten Sie: ID's werden nur dann als solche erkannt wenn die dazu verwendeten Attribute innerhalb derDTDmit dem Typ ID beschrieben wurden. Zusätzlich muss das Dokument eineDTDbesitzen - Dokumente ohne (gültige)DTDkönnen laut XPath keine ID's beinhalten. Der erweiterte Name eines Elementknotens ist der Elementname selbst - der Textwert ist der Textinhalt des Elements sowie seiner Kinder.
Jedes Attribut eines Elements stellt einen Attributknoten dar, der separat von anderen Attributknoten angesprochen werden kann. Bitte beachten Sie: Im Gegensatz zumDOMist ein Attributknoten kein Kind eines Elementknotens (nur Elemente können Kinder sein). Dementsprechend können Attribute nicht als Kinder eines Elements angesprochen werden. Der erweiterte Name des Knotens ist der Attributname selbst mit eventuellem Präfix. Der Textwert des Knotens ist der Wert des Attributes.
Namensraumknoten sind alle Attributknoten mit dem Namen xmlns oder dem Präfix xmlns. Zusätzlich sind alle Knoten Namensraumknoten wenn ein Vorfahrenelement den Präfix xmlns trägt und dieser nicht durch andere Umstände aufgehoben wurde. Der erweiterte Name eines solchen Knotens ist der lokale Name des Namensraums. Der Textwert des Knotens ist die entsprechendeURImit der der Namensraum verbunden wurde.
Jede Processing-Instruction (PI) stellt gleichzeitig einen Processing-Instruction-Knoten dar. Davon ausgenommen sind allerdings alle PI's die innerhalb der DOCTYPE-Deklaration stehen. Der erweiterte Name dieses Knotens ist der "Elementname" (also der Teil nach <?) und der Textwert ist der Inhalt der Instruction (also alles nach dem Namen bis hin zum ?>).
Jeder Kommentar stellt einen Kommentarknoten dar. Kommentarknoten besitzen keinen erweiterten Namen. Der Textwert des Knotens ist der Kommentarinhalt - also alles bis auf <!-- und -->.
Jeglicher Text innerhalb des Dokuments der nicht zu einem der oben genannten Knoten gehört wird als Textknoten angesehen. Textknoten sind neben dem reinen Text auch CDATA-Abschnitte. Diese werde in gewöhnlichen Text umgewandelt und nicht als (Element-)Knoten angesehen. Der Textwert ist der Inhalt des Knotens selbst mit samt den umgewandelten CDATA-Abschnitten. Textknoten besitzen keinen erweiterten Namen.