XML-Know How

Das XSLT-Template

Im Folgenden wollen wir zunächst auf die Syntax und die wichtigsten Elemente und Funktionen von XSLT eingehen und zeigen, wie ein typisches XSLT-Stylesheet aufgebaut ist.

XSLT-Templates

Wir haben – vereinfachend – eine XSLT-Transformationsregel als einen »Suche / Ersetze«-Befehl bezeichnet. Diese »Suche / Ersetze«-Befehle (und alle übrigen Transformationsmöglichkeiten) nennen wir künftig Template Rules, vereinfacht Templates.

Dabei müssen wir uns von Anfang an von einem Bild lösen. Wir kennen »Suche / Ersetze«-Regeln stets auf der Basis von Zeichenfolgen, die gesucht und durch andere Zeichenfolgen ersetzt werden sollen. Das ist in XSLT nicht der Fall: Hier wird nicht nach Zeichenfolgen, sondern nach Knoten (Teilstrukturen im XML-Baum) gesucht.

Ein erstes Beispiel mag das verdeutlichen. Wir wollen die Quelldatenstruktur

<autor>Hans Bauer</autor>

in die HTML-Zielstruktur

<div class="autor">Hans Bauer</div>

überführen. Das würde uns auch mit den klassischen »Suche / Ersetze«-Mustern von Word gelingen, in dem wir die beiden folgenden Aktionen nacheinander aufrufen:

Abb. 42 Suchen und Ersetzen mit Hilfe von Word: Hier wird nach Zeichenfolgen gesucht. XSLT geht grundsätzlich anders vor!

Damit verändern wir lediglich die Bezeichnung der Tags – und dafür bräuchten wir noch nicht unbedingt XSLT, da sich am Aufbau des Dokuments nichts weiter verändern soll.

Prinzip von XSLT

XSLT geht grundsätzlich anders vor. Es sucht nicht nach Tags, sondern nach Elementen (und anderen Bestandteilen des XML-Baumes). Das unserem Beispiel entsprechende XSLT-Template lautet wie folgt:

Beispiel:

<xsl:template match="autor">[1]

<div class="autor">[2]

<xsl:apply-templates/>[3]

</div>[4]

</xsl:template>[5]

Zeile [1] des Templates besagt, dass dieses Template auf alle Elementknoten »autor« angewendet werden soll – das ist der »Suche«-Teil unseres Templates. Wichtig ist, dass jetzt nicht nach der Zeichenfolgen »<autor>« gesucht wird (wie das z. B. bei Suche-Ersetze in Word der Fall wäre), sondern dass nun der Inhalt des Elements »autor«, also »Hans Bauer« im Speicher des Prozessors steht. Zeile [2] bis [4] geben nun die gewünschte Zielstruktur an. Zunächst soll das neue Start-Tag ausgegeben werden [2], dann der Inhalt des Elements »autor« wieder eingesetzt werden [3] und anschließend ein Ende-Tag ausgegeben werden [4]. Zeile [5] schließt das Template ab.

Die Template Rules sind also Schablonen zur Transformation des Quellbaumes (source tree) in den Ergebnisbaum (result tree):

XPath

Die Suchmuster im Pattern-Teil werden in XPath-Syntax geschrieben. Das Pattern »autor« ist also bereits ein XPath-Ausdruck: der einfachste, den es gibt, nämlich die Lokalisation eines Elementknotens.

Die Stärken von XSLT gegenüber dem bekannten »Suche / Ersetze« werden sogleich deutlich, wenn wir nicht mehr alle <autor>-Elemente transformieren wollen, sondern z. B. nur solche, die innerhalb des <hauptteil>-Elements stehen. In diesem Fall müsste das Pattern des Templates lediglich durch einen etwas komplexeren XPath-Ausdruck ausgetauscht werden:

<xsl:template match="hauptteil/autor">[1]

(Rest unverändert)

Die XPath-Ausdrücke in XSLT sind ein mächtiges Werkzeug, da sie uns erlauben, sehr gezielt auf Teile eines XML-Dokuments zuzugreifen. Damit können wir beispielsweise Auswahlen treffen wie »Verarbeite nur alle vegetarischen Rezepte unter 1000 Kalorien« – »Verarbeite nur die Überschriften von Kapiteln, die Abbildungen enthalten« und ähnliches mehr.