7.1 Zu Grunde liegendes Datenmodell
Die Grundstruktur eines XML-Dokuments ist
aus XPath-Sicht baumartig. Die Verzweigungen dieser Struktur
sind Knoten (node), zusammenhängende Gruppen davon
sind Knotensätze (node-set). Es handelt sich, wie
der W3C-Standard betont, nur
um ein
Modell; beispielsweise heißt es, dass Elementknoten (siehe
unten) nicht denselben Zeichenwert haben wie das Ergebnis der
DOM-Methode nodeValue. In diesem
Modell erscheinen alle Elemente und Attribute in der
Reihenfolge, in der sie mit ihrem Start-Tag auftauchen; als
erstes der Wurzelknoten, dann das erste Kindelement, dann seine
Attribute, dann das erste Kindelement des vorgenannten
Elements et cetera.
Erweiterte Namen
(expanded-name), wie einige Elemente sie
haben, bestehen aus einem lokalen Teil und einem
Namensraum-URI, wie ihn RFC 2396
vorsieht.
Xpath kennt
sieben verschiedene
Knoten-Arten:
- Wurzelknoten (root nodes)
- Diese Wurzel des Datenbaums (/) ist nicht mit
dem Wurzelelement zu verwechseln. Letzteres ist vielmehr
sein Kindelement; es kann sich aber auch um
Verarbeitungsanweisungen, Kommentare oder eine
Formatierungsanweisung handeln. Anders als alle
Elemente (und Attribute) verfügt der Wurzelknoten nicht über
einen Namensraum-Bezeichner (URI).
- Elementknoten (element nodes)
- Für jedes Element des Dokuments existiert ein
Elementknoten, der wiederum weitere Elementknoten als Kinder
haben kann, darüber hinaus aber auch Kommentare
Verarbeitungsanweisungen und Text.
- Textknoten (text nodes)
- Sie enthalten selbst keine weiteren Knoten, entsprechen
als Zeichenketten gleichsam den Blättern des Baumes.
- Attributknoten (attribute nodes)
- Zu einem Elementknoten gehört eine optionale Menge an
Attributen, die die XPath-Spezifikation allerdings nicht als
Kindelemente des Elementknotens verstanden wissen will,
sondern als Menge von zugeordneten Knoten. Die einzelnen
Attributknoten enthalten Zeichenketten.
- Namensraumknoten (namespace nodes)
- Ähnlich wie die Attribut- sind auch die Namensraumknoten
nicht Kinder des sie enthaltenen Elementknotens, das
allerdings als ihr Vorfahr gilt. Beispielsweise enthält
<myname:element
mysecondname:attribut="value"/> zwei
Namensraumknoten: myname und
mysecondname. Bei beiden handelt es sich um den
lokalen Teil des Namens; der Namensraum-Bezeichner ist
immer gleich Null.
- Verarbeitungsanweisungs-Knoten (processing
instruction nodes)
- Wie beim Namensraumknoten ist das Ziel der
Verarbeitungsanweisung der lokale Name, der
Namensraum-Bezeichner Null.
- Kommentarknoten (comment nodes)
- Kinderlos, ohne Namensraum-Bezeichner; der Wert
entspicht der durch <!-- und -->
eingeschlossenen Zeichenkette.