Die Grundstruktur des Stylesheets: xsl:template

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

Der Inhalt von xsl:stylesheet bildet den Rumpf des »eigentlichen« XSLT-Stylesheets. Unmittelbar im Inneren des Wurzelelements befinden sich weitere XSLT-Anweisungen, die, weil sie hier sozusagen auf oberstem Niveau im Style­sheet stehen, als Toplevel-Elemente bezeichnet werden.

Das Element xsl:template bildet zusammen mit seinem jeweiligen Inhalt die entscheidende Grundstruktur eines Stylesheets, ein sogenanntes Template. Die Bezeichnung »Template« ist noch nicht ganz exakt, sie soll daher gleich enger gefasst werden. Vorläufig kann man es bei der Aussage belassen, dass jedes XSLT-Template für die Erzeugung eines Teils des Ergebnisses zuständig ist.

Normalerweise besteht ein Stylesheet nicht nur aus einem einzigen Template, sondern aus mehreren, die nacheinander (teilweise auch mehrfach) ausgeführt werden und dabei sukzessive Teile des Ergebnisses erzeugen.

Regeln für den Aufruf des Templates

Obwohl jedes Template im Prinzip immer das gleiche Ergebnis ausgibt, ist es offensichtlich, dass das Ergebnisdokument in seiner Struktur davon abhängen wird, welche Templates in welcher Reihenfolge und in welcher Häufigkeit aufgerufen werden. Der Aufruf der Templates muss also nach bestimmten Regeln erfol­gen.

Zur Formulierung dieser Regel wird das match-Attribut eingesetzt. Namentlich setzt man »Regel« und »Template« praktisch gleich und spricht immer dann, wenn ein xsl:template-Element ein match-Attribut besitzt, offiziell von einer Template-Regel. (Anmerkung: Es gibt auch die Möglichkeit, dass anstelle eines match-Attributs ein name-Attribut steht. In diesem Fall spricht man nicht von einer Template-Regel, sondern von einem »benannten Template«.) Dieser Ausdruck bezeichnet dann das gesamte Template­-Element mit seinem Inhalt. (Ich werde, etwas weniger stringent, gelegentlich auch die einfache Bezeichnung »Template« verwenden.)

Das Vergleichsmuster – ein XPath-Pattern

Das über die Ausführung des Templates entscheidende Vergleichsmuster wird in XPath formuliert. Es handelt sich also um ein sogenanntes XPath-Pattern. Der Slash »/« stellt eines der einfachsten möglichen Pattern dar:

<xsl:template match="/">
  <!-- der Inhalt der Template-Regel -->
</xsl:template>

Der Inhalt der Template-Regel (oben besteht er nur aus einem Kommentar) wird als Template-Rumpf bezeichnet. Dieser Inhalt wird immer dann ausgeführt, wenn das Vergleichsmuster des match-Attributs auf einen aktuell zu verarbeitenden Teil des Quelldokuments passt.

Das Pattern kann hierfür mit einem Namens- oder Kontextvergleich arbeiten, um für Elemente aktiviert zu werden, wenn diese einen bestimmten Bezeich­ner besitzen oder in einem bestimmten Zusammenhang auftreten. Der hier verwendete Slash »/« bezeichnet allerdings keinen Tag im Quelldokument, sondern auf gewisse Weise das Quelldokument selbst – daher wird diese Regel aktiviert, sobald ein Quelldokument vorhanden ist (also im Normalfall immer).

Man spricht für den Vorgang des Ausführens von einer Instanzierung der Template-Regel. Der Vergleich zu einer aufgerufenen Funktion, die dann eine bestimmte, festgelegte Arbeit leistet, liegt nahe und ist auch nicht ganz falsch. Sooft eine derartige Übereinstimmung mit einem zur Verarbeitung anstehen­den Dokumentteil auftritt (d. h. jedes Mal aufs Neue), werden also die Literal Result Elements der aktivierten Template-Regel dem Ergebnis des Verarbeitungsprozesses hinzugefügt (um schließlich, bei erfolgreichem Abschluss der Transformation, im Ergebnisdokument zu landen) und die in ihr enthaltenen XSLT-Instruktionen verarbeitet. Letzteres kann bei jeder Instanzierung andere Ergeb­nisse erzeugen.

Zusammenfassung zu xsl:template

  • Besitzt ein Template-Element xsl:template ein match-Attribut, so bezeichnet man es als Template-Regel.
  • Das match-Attribut (von to match = passen) beinhaltet ein Vergleichsmuster (Pattern), das bestimmt, wann die Template-Regel aktiv wird, also ausgeführt wird. Dies wird auch als Instanzierung bezeichnet.
  • Das XPath-Pattern "/" bezeichnet als Vergleichsmuster das Eingabedokument »an sich«. (Anmerkung: Genauer gesagt, den »Dokumentknoten«, der das Dokument repräsentiert. Dazu später mehr.) Ein solches Quelldokument muss zwingend vorhanden sein. Eine Template-Regel mit diesem Pattern wird also stets und immer zu Beginn des Verarbeitungsprozesses einmal aufgerufen.

Nun soll ein Blick in den Rumpf der Template-Regel erfolgen – zu den Literal Result Elements und den XSLT-Instruktionen.

Aufbau einer Template-Regel

Abbildung: Aufbau einer Template-Regel.

   

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