Die Sequenz als Ergebnis eines Ausdrucks

(Auszug aus "XSLT 2.0 & XPath 2.0" von Frank Bongers, Kapitel 4.)

In XPath 2.0 ist das Ergebnis der Auswertung eines Ausdrucks stets eine Sequenz, also eine Folge von abgegrenzten, unterscheidbaren Einheiten, die als Items bezeichnet werden. (Anstelle der denkbaren Eindeutschungen »Betrachtungseinheit« oder der in diesem Fall irreführenden Übersetzung »Element« wird in Folge der englische Begriff »Item« stehen gelassen.) Eine Sequenz gilt als geordnet, d.h., die Reihenfolge der in ihr auftretenden Items ist relevant.

Die runden Klammern im folgenden Beispiel stehen zur Verdeutlichung einer »literalen Sequenz«. Sie sind ausdrücklich nicht Teil der Ausgabe:

XPath-Ausdruck   ->
        (Item 1, Item 2, Item 3, ..., Item N)

Ein Item in einer Sequenz kann entweder einen Knoten in einem XML-Doku­ment repräsentieren (also einen Elementknoten, einen Attribut- oder Textkno­ten etc.) oder einen so genannten »atomaren« Wert darstellen, d. h. einen in sich nicht weiter untergliederbaren Wert. Einfache Beispiele für atomare Werte sind Zahlen oder Zeichenketten.

Typen von Sequenzen

Sequenzen, die neben Knoten auch atomare Werte ent­halten, bezeichnet man als gemischte Sequenzen. Sequenzen allein aus atomaren Werten können »homogen« sein, sich also nur aus typ­gleichen atomaren Werten (beispielsweise nur aus Strings, nur aus Ganzzahlen oder nur aus Datumswerten) zusammensetzen, ebenso aber auch – heterogen – aus atomaren Werten unterschiedlichen Typs.

Sequenzen, die ausschließlich aus Knoten (nodes) bestehen, nennt man auch Nodesequenzen. Eine solche Nodesequenz kann gleichzeitig Knoten verschiedener »Knotengattungen« enthalten. XPath unterscheidet sieben solcher Knotengattungen (englisch node types, was in diesem Fall jedoch nicht mit »Datentyp« verwechselt werden darf!).

Ein XPath-Ausdruck kann auch Einzelwerte generieren, beispielsweise in Form einer Ziffer, die der Nummerierung dienen soll. Auch in diesem Fall handelt es sich bei der Ausgabe per Definition um eine Sequenz, die jedoch nur aus einem Item besteht. Eine Sequenz aus einem Item wird als Singleton-Sequenz bezeichnet.

Enthält eine Sequenz kein Item, so gilt sie als »leere« Sequenz. Die leere Sequenz ist der Rückgabewert eines XPath-Ausdrucks, der eigentlich kein Ergebnis erzeugt (formal, damit man als Ergebnis auch in diesem Fall eine Sequenz erhält). Die leere Sequenz kann in bestimmtem Kontext (wenn auch nicht grundsätzlich!) einem leeren String gleichgesetzt werden. Im Gegensatz zu einem leeren String ist eine leere Sequenz jedoch »typneutral«, sie verursacht also niemals einen Typfehler. Ob eine Funktion eine leere Sequenz in einem numerischen oder in einem Stringkontext zurückgibt, ist daher egal. (Stringfunktionen in XPath sind aber gehalten, anstelle einer leeren Sequenz explizit einen lee­ren String zurückzugeben.)

Komplexe und einfache Typen

Knoten von sogenanntem »komplexen Typ« (dies betrifft Elementknoten und Dokumentknoten) gelten als nicht atomar und müssen unter bestimmten Umständen »atomisiert«, d.h. wiederum in eine Sequenz aus atomaren Werten umgewan­delt werden.

Ebenfalls nicht atomar sind Listentypen, beispielsweise Attributwerte vom Typ IDREFS oder NMTOKENS. Diese gelten jedoch nicht als komplex.

Der Dokumentknoten besitzt stets einen komplexen Typ. Elementknoten können, müssen aber nicht, komplexen Typs sein. Alle anderen Knotengattungen hingegen besitzen einen einfachen Typ (wobei dieser aber, wie die oben erwähnten Attributknoten mit Listentyp, nicht gleichzeitig atomar sein muss).

Knotentyp

Datentyp (Wert)

individueller Bezeichner

Dokumentknoten

komplex

nein

Elementknoten

komplex oder einfach

ja

Attributknoten

einfach

ja

Textknoten

einfach

nein

Kommentarknoten

einfach

nein

Processing Instruction

einfach

ja (Target)

Namensraumknoten

einfach

nein* (beliebiges Präfix)

Tabelle: Die sieben Knotentypen in XPath.

Knotenbezeichner

Instanzen von Element- oder Attributknoten müssen individuelle Bezeichner besitzen. Im Fall von Processing-Instruction-Knoten wird der Tar­getbezeichner einem Knotennamen gleichgesetzt. Ein Namensraumknoten, der ja gleichzeitig an verschiedene Präfixe gebunden sein kann, besitzt genau aus diesem Grunde keinen »festen« Bezeichner (es ist Sache des Prozessors, welchen der gebundenen Präfixe er für den Knoten zurückgibt).

Knotenidentität

Jeder Knoten, unabhängig davon, ob er einen Bezeichner besitzt oder nicht, verfügt über eine Identität (unique node identity), d.h. er ist nur mit sich selbst identisch. Auch zwei Knoten, die den gleichen Wert enthalten, bleiben demnach aufgrund ihrer Identität unterscheidbar. Eine Sequenz, wie sie durch einen XPath-Ausdruck erzeugt wird, darf legitimer Weise durchaus Dubletten von zwei oder mehr identischen Knoten enthalten (sollte es erforderlich sein, können solche Dubletten vor der Verarbeitung eliminiert werden). Zur Feststellung der Identität zweier Knoten stellt XPath entsprechende Funktionen zur Verfügung.

Vergleich zwischen Nodesequenz und Nodeset
Eine Nodesequenz entspricht in gewissem Maße einem Nodeset, wie ihn ein Ausdruck in XPath 1.0 erzeugt, kann jedoch im Unterschied zu diesem den gleichen (identischen) Knoten mehrmals enthalten. Dies ist für einen Nodeset per Definition nicht möglich

   

<< 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