Nebenschauplatz: Konstruktion von Sequenzen

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

Gut, eine Sequenz haben wir bereits in anderen Fällen erzeugt – jeder XPath-Ausdruck ist dazu potenziell in der Lage. So ergab der Ausdruck adres­sen/adresse ausgehend vom Dokumentknoten der betrachteten Datei eine Sequenz aller Elemente <adresse> in Dokumentreihenfolge.

Im nunmehr betrachteten Fall ist das nicht so simpel. Ergebnis soll immerhin eine Sequenz unterschiedlicher Elemente in einer von der Dokumentreihen­folge abweichenden Reihenfolge sein: Diese Sequenz muss konstruiert werden.

In XPath 2.0 kann eine Sequenz erzeugt werden, indem man durch Komma getrennte XPath-Ausdrücke oder Literale aneinander reiht. Um dies als Sequenz zu kennzeichnen, wird der Gesamtausdruck in runde Klammern gesetzt:

(ausdruck_1, ausdruck_2, ausdruck_3)

Sowohl die runden Klammern als auch das Komma zählen in XPath zu den Operatoren (siehe unter XPath-Ausdrücke: Operatoren und Keywords). Sie sollten hier also nicht als einfache Interpunktionszeichen missverstanden werden. Die so definierte Sequenz könnte man jetzt beispielsweise einer Instruktion wie xsl:value-of übergeben:

<xsl:value-of select="(ausdruck_1, ausdruck_2, ausdruck_3)"/>

Die Auswertung funktioniert von innen nach außen. Zunächst werden die Aus­drücke der Sequenz aufgelöst und deren Ergebnisse dann der Reihe nach von der Instruktion verarbeitet. Was aber, wenn einer der Ausdrücke selbst eine Sequenz erzeugt? Nun, das mag passieren, schadet aber nichts. Angenommen ausdruck_1 erzeugt den konkreten Wert wert_1, der zweite Ausdruck dage­gen eine Sequenz s2_a, s2_b, s2_c und der dritte wiederum einen Wert wert_3, dann »sieht« die Instruktion folgende daraus resultierende Eingabesequenz:

<xsl:value-of select="(wert_1, s2_a, s2_b, s2_c, wert_3)"/>

Sie könnten sich um die eingeschlossene, aus dem zweiten Item erzeugte Sequenz wieder runde Klammern denken. Dies ist jedoch irrelevant, denn von der Wirkung her können Sequenzen nicht verschachtelt werden (Anmerkung: Das ist bedeutsam, wenn man die Items zählt. Resultiert aus einem Item wieder eine Sequenz, so geht das Item nicht als Einzelposten in die Summe ein, sondern mit der Anzahl der Items seiner resultierenden Sequenz. Im Beispiel haben beide verglichenen Sequen­zen daher sechs Items!):

(a, (b, c, d), e, f) ist dasselbe wie (a, b, c, d, e, f)

Merksatz:
Ist ein Item einer Sequenz selbst eine Sequenz, so löst diese sich als eine Folge von Einzelitems in der übergeordneten Sequenz auf.

   

<< zurück vor >>
Tipp der data2type-Redaktion:
Zum Thema XSLT 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