Verknüpfung von Sequenzen
(Auszug aus "XSLT 2.0 & XPath 2.0" von Frank Bongers, Kapitel 4.)
Operatoren: |, union, intersect, except
Ausschließlich zur Verknüpfung von Node-Sequenzen bietet XPath 2.0 vier Verknüpfungsoperatoren an. Ist in einer der zu verknüpfenden Sequenzen ein Item kein Node, so ergibt dies einen Typfehler.
Vereinigungsmenge zweier Sequenzen
Operatoren: union bzw. |
Der union- und der (von XPath 1.0 herstammende) |-Operator sind wirkungsgleich, wobei der Operator union in XPath 2.0 eigentlich nur hinzugefügt wurde, um den Gewohnheiten von SQL-Nutzern entgegenzukommen. Beide Operatoren dienen gleichwertig dazu, die Items zweier Nodesequenzen zu einer einzigen Sequenz zusammenzufassen:
(a, b, c) union (b, c, d) ergibt (a, b, c, d)
(a, b, c) | (b, c, d) ergibt ebenfalls (a, b, c, d)
Teil der Ergebnissequenz sind alle Nodes, die in einer der beiden Sequenzen auftreten. Die Ergebnissequenz ist in Dokumentreihenfolge geordnet. Sind beide Eingabesequenzen leer, so wird die leere Sequenz erzeugt.
Der |-Operator kann auch in Pfadausdrücken verwendet werden, um Alternativen bei Zwischenschritten formulieren zu können. So ergibt der Pfadausdruck
/buch/(kapitel | appendix)/abschnitt
eine Sequenz in Dokumentreihenfolge aus allen Elementen <abschnitt>, die sich entweder in einem <kapitel>- oder einem <appendix>-Element des aktuellen <buch>-Elements befinden.
Rückblick auf XPath 1.0
In XPath 1.0 existiert lediglich das Symbol »|«, das funktional weitestgehend identisch zu beiden entsprechenden Operatoren in XPath 2.0 ist. Verglichen zu früher wurde die Leistungsfähigkeit des Operators verbessert – in XPath 1.0 kann er noch nicht innerhalb von Pfadausdrücken eingesetzt werden.
Schnittmenge zweier Sequenzen
Operator: intersect
(a, b, c) intersect (b, c, d) ergibt (b, c)
Die Ergebnissequenz ist in Dokumentreihenfolge geordnet. Gibt es keine gemeinsamen Items, so wird die leere Sequenz erzeugt.
Rückblick auf XPath 1.0
In XPath 1.0 ist es nicht möglich, eine Schnittmenge zwischen zwei Nodesets zu erzeugen. Zu diesem Zweck existieren allerdings Erweiterungsfunktionen, wie die innerhalb von EXLT definierte Funktion set:intersection().
Dagegen ist in XPath 1.0 der Test, ob ein bestimmter Knoten in einem gegebenen Nodeset enthalten ist, möglich, wenn auch verhältnismäßig umständlich. Der einzige Operator, der in Zusammenhang mit Nodesets zur Verfügung steht, ist der Vereinigungsoperator »|«.
Um zu prüfen, ob ein Knoten $x Teil des Nodesets /beispiel/test ist, muss man in etwa zu folgendem Konstrukt greifen:
/beispiel/test[generate-id(.)=generate-id($x)]
Ausschlussmenge zweier Sequenzen
Operator: except
Der except-Operator erzeugt eine Sequenz, die alle diejenigen Nodes der ersten Sequenz enthält, die nicht in der zweiten Sequenz vorkommen:
(a, b, c) except (b, c, d) ergibt (a)
Die Ergebnissequenz ist in Dokumentreihenfolge geordnet. Sind beide Eingabesequenzen identisch, so wird die leere Sequenz erzeugt.
Rückblick auf XPath 1.0
In XPath 1.0 ist es nicht möglich, eine Ausschlussmenge zweier Nodesets zu erzeugen. Zu diesem Zweck existieren allerdings Erweiterungsfunktionen, wie die innerhalb von EXLT definierte Funktion set:difference().
<< 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