Eine Transformation Schritt für Schritt

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

Betrachtet man eine XSLT-Transformation aus der Sicht von Baumstrukturen, so arbeitet man anstelle von Dokumenten mit Dokumentbäumen. Auch das Style­sheet wird durch den XML-Parser eingelesen und in einen Baum umgeformt. In Bezug auf das Ergebnisdokument unterscheiden sich XSLT 1.0 und XSLT 2.0 insofern, als dass XSLT 1.0 von einem Ergebnisbaum spricht, in den unmit­telbar geschrieben wird. Dieses mit »Top-Down« bezeichnete Verfahren ist daher relativ anschaulich.

XSLT 2.0 legt dagegen ein abstrakteres »Bottom-Up«-Verfahren zugrunde und betrachtet das Ergebnis zunächst nicht als Baum, sondern als Datenstrom in Form einer Ergebnissequenz. Diese wird allerdings im Zuge der zu Beginn der Serialisierung erfolgenden Normalisierung ebenfalls in einen Baum umgewan­delt, sodass es (halbwegs) zulässig erscheinen mag, hier das gleiche Bild anzuwenden.

Im Zentrum der XSLT-Transformation steht der Baum des Quelldokuments. Genauer gesagt steuert die Struktur des Quelldokumentbaums sogar indirekt die Verarbeitung. Dieser Baum wird von oben her durchwandert, was auch der Leserichtung im Dokument entspricht.

Aktuell: Der Current Node im Quelldokument

Den Vorgang der Verarbeitung kann man als durch den Quelldokumentbaum wandernden Cursor visualisieren, der stets auf genau einem Knoten platziert wird: Dieser Knoten wird als »aktueller Knoten« bezeichnet, als Current Node.

Zu Anfang fällt der Current Node automatisch auf den Dokumentknoten des Quelldokuments. Das XPath-Muster, das den Dokumentknoten repräsentiert, lautet »/.« Die für ihn aktivierte Template-Regel ist bekanntlich jene mit match="/". Die Verarbeitung beginnt also stets mit dem Dokumentknoten des Quelldokuments und schreitet von da ab sukzessive in Richtung der Kindkno­ten voran.

Der XSLT-Prozessor beginnt also für den Current Node stets mit der Verarbei­tung der Inhalte der passenden Template-Regel, die dann als aktuelle Template-Regel bezeichnet wird. So wie es immer nur genau einen aktuellen Knoten gibt, so existiert auch nur eine aktuelle Template-Regel.

Mit dem aktuellen Knoten als Kontext werden durch Instruktionen in der aktu­ellen Template-Regel mittels XPath-Ausdrücken Knotenmengen (Sequenzen) im Quelldokumentbaum ausgewählt. Diese Knotenmenge bezeichnet man als die aktuelle Sequenz.

Das Pattern für den Dokumentknoten

Abbildung: Das Pattern für den Dokumentknoten.

Die Knoten dieser Sequenz werden nun ihrerseits der Reihenfolge nach als Cur­rent Node dem Stylesheet zur Verarbeitung »angeboten«: Der Current Node wandert weiter. Unter den vorhandenen Template-Regeln wird jeweils nach der­jenigen gesucht, deren Vergleichsmuster auf den aktuell angebotenen Knoten »passt«. Kommen mehrere Template-Regeln in Frage, so »gewinnt« die am genauesten passende. Diese Template-Regel wird zur neuen aktuellen Template-Regel.

Der fiktive Ergebnisbaum

Wir haben vorhin bereits festgestellt, dass die Template-Regel für den Doku­mentknoten stets genau einmal und zu Beginn der Verarbeitung ausgeführt wird: Befinden sich Literal Result Elements in dieser Template-Regel, so werden die sie im Stylesheet-Baum repräsentierenden Knoten kopiert und unmittelbar »unten« an den neu gebildeten Dokumentknoten des Ergebnisbaums ange­hängt.

Ebenso wird in Folge mit dem Ergebnis ausgewerteter Instruktionen und wei­terer ausgeführter Template-Regeln verfahren, sodass der Ergebnisbaum mit fortschreitender Verarbeitung wächst. Vergleicht man diese Betrachtungsweise gedanklich mit einer Quellcode-Ansicht des Ergebnisses, in der die Tag-Container quasi gleichzeitig von vorne und hinten nach innen geschrieben werden müss­ten, so fällt die Übersichtlichkeit der Baum-Metapher ins Auge.

Ist das Quelldokument komplett durchlaufen, so ist die Transformation been­det und der Ergebnisbaum vollständig. Er kann jetzt in ein wirkliches Doku­ment umgewandelt werden: Diesen Vorgang bezeichnet man als »Plätten« des Baums oder (die geläufigere Benennung) als dessen Serialisierung.

Die Realität in XSLT 2.0

Dieses so anschauliche Bild des wachsenden Ergebnisbaums mag für XSLT 1.0 gelten, für XSLT 2.0 trifft es leider nicht direkt zu. Dort wird nicht abschnittsweise ein Baum konstruiert, sondern die Inhalte werden nacheinan­der in eine Ergebnissequenz ausgegeben. Diese wird nach Abschluss der Trans­formation serialisiert.

Die Serialisierung stellt einen eigenständigen, von der Transformation unab­hängigen Verarbeitungsschritt dar. Bei der dabei erfolgenden Normalisierung der Sequenz entsteht (vorübergehend) entweder ein vollständiger Baum oder die Serialisierung schlägt vollständig fehl. Keinesfalls kann (beispielsweise durch einen vorzeitigen Abbruch) ein unfertiger Baum bzw. ein unfertiges Dokument Ergebnis einer Transformation sein.

XSLT 2.0 – eine Vielzahl möglicher Sequenzen

Abbildung: XSLT 2.0 – eine Vielzahl möglicher Sequenzen.

Da XSLT 2.0 im Gegensatz zu XSLT 1.0 mehrere Ergebnisdokumente gleichzei­tig produzieren kann, erzeugt der Prozessor gegebenenfalls auch mehrere Ergebnissequenzen. Darunter ist jedoch nur eine primäre Ergebnissequenz, die zum oben beschriebenen Ergebnisdokument korrespondiert. Die anderen Sequenzen werden zu sekundären Ergebnisdokumenten serialisiert – sie wer­den mittels der Instruktion xsl:result-document erzeugt.

Zusätzlich existieren quasi »frei vagabundierende« Sequenzen in Form sogenannter temporärer Bäume. (Anmerkung: Die Bezeichnung »Baum« ist insofern irreführend, als dass es sich auch hier »nur« um Sequenzen handelt.) Diese sind in Variablen abgelegt und verfü­gen über eigene Dokumentknoten, die aber nicht serialisiert werden, sondern höchstens zu einem frei bestimmbaren Zeitpunkt in eine der Ergebnissequen­zen kopiert werden.

Dieses komplexe Bild wird früh genug Thema werden. Zunächst soll jedoch noch bei der einfachen Konstellation geblieben werden, anhand derer Sie einen ersten Eindruck von XPath-Pfadausdrücken gewinnen.

   

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