Formale Einteilung der XSLT-Elemente

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

Die 35 Elemente von XSLT 1.0 bzw. die 49 Elemente von XSLT 2.0 können in vier formale Gruppen eingeteilt werden. Man ordnet sie, je nach im XSLT-Style­sheet erlaubter hierarchischer Position, folgendermaßen zu:

  • Root-Elemente
    XSLT 1.0 und XSLT 2.0: 2 Elemente
  • Toplevel-Elemente
    XSLT 1.0: 12 Elemente, XSLT 2.0: 15 Elemente
  • Instruktionen
    XSLT 1.0: 17 Elemente, XSLT 2.0: 25 Elemente
  • Sub-Instruktionen (keine Instruktionen, sondern diesen untergeordnet) XSLT 1.0: 4 Elemente, XSLT 2.0: 7 Elemente

Root-Elemente

In die Kategorie der Root-Elemente fallen jene zwei XSLT-Elemente, die als Wurzelelemente eines Stylesheetdokuments dienen: xsl:stylesheet und xsl:transform. Die beiden Elemente sind synonym und vollständig wir­kungsgleich. Ihre namentliche Unterscheidung ist historisch bedingt und stammt noch aus der Zeit, als in der XSL-Spezifikation die Aufgabentrennung zwischen Präsentation (reines Stylesheetverhalten, jetzt XSL-FO) und Transfor­mation (Umwandlung, jetzt XSLT) noch nicht vollzogen war.

Obwohl xsl:transform die eigentlich näher liegende Bezeichnung wäre, hat sich xsl:stylesheet als Wurzelelement des XSLT-Stylesheetdokuments durch­gesetzt. Im Root-Element wird neben der Festlegung der XSLT-Version (ver­sion-Attribut) auch die Namensraum-Deklaration für den verwendeten XSLT-Befehlssatz vorgenommen.

Die beiden Root-Elemente xsl:stylesheet und xsl:transform werden funk­tional auch als Stylesheet-Elemente bezeichnet.

Toplevel-Elemente

Als Toplevel-Elemente gelten jene XSLT-Elemente, die als unmittelbare Kind­elemente des Wurzelelements erscheinen können bzw. nur an jener Position vorkommen dürfen. Als wichtigstes von ihnen kann xsl:template gelten, das zur Definition der Template-Regeln dient.

XSLT bezeichnet die Toplevel-Elemente auch als Deklarationen.

Die Reihenfolge, in der Toplevel-Elemente in einem Stylesheet auftreten, ist nicht reglementiert und in der Regel auch irrelevant: Alle Toplevel-Elemente dürfen prinzipi­ell in beliebiger Häufigkeit und Reihenfolge auftreten. Einzige Ausnahme ist das Element xsl:import, das – falls verwendet – stets (in beliebiger Anzahl) als erstes Kindelement des Wurzelelements erscheinen muss.

Ein weiterer Sonderfall tritt bei Konflikten durch Doppelungen von Deklarati­onen auf. In diesem Fall gilt es als üblich, dass von den doppelt auftretenden Dekla­rationen jene Vorrang besitzt, die als letzte geschrieben ist.

Instruktionen

Als Instruktionen werden diejenigen XSLT-Elemente bezeichnet, die direkt oder indirekt innerhalb von Toplevel-Elementen auftreten; speziell in sogenannten Sequenzkonstruktoren (sequence constructors) in den durch xsl:template definierten Template-Regeln. XSLT 1.0 bezeichnet das gleiche Konzept etwas weniger allgemein als Template-Körper (template bodies).

Hier eine kurze Gegenüberstellung beider Konzepte:

XSLT 1.0: Der Template-Körper

Als Template-Körper (template body) wird in XSLT 1.0 nicht nur der unmittelbare Inhalt einer Template-Regel (also der Template-Rumpf) bezeichnet, sondern jeder Anweisungsblock innerhalb einer Instruktion oder Sub-Instruktion, der direkt oder indirekt in Form von Nodes Inhalte für den Ergebnisbaum erzeugt.

In diesem Sinne enthält beispielsweise die Schleifen-Instruktion xsl:for-each einen Template-Körper, der Inhalte direkt in das Ergebnisdokument ausgibt. xsl:variable enthält dagegen einen Template-Körper, der einen temporären Baum erzeugt und diesen zur weiteren Verwendung an die Variable bindet.

XSLT 2.0: Der Sequenzkonstruktor

XSLT 2.0 verallgemeinert die Vorstellung des Template-Körpers zum Sequenz­konstruktor (sequence constructor), womit der Sprachregelung von XPath 2.0 Rechnung getragen wird, die anstelle von Nodesets (XPath 1.0) von allgemei­nen zusammengesetzten Sequenzen (als Folgen aus sogenannten Items) spricht, welche dann neben Knoten auch anders geartete Werte (Strings, Zah­len, Datumswerte oder beliebige andere Typen) enthalten dürfen.

Theoretisch ist ein Sequenzkonstruktor in XSLT 2.0 damit in der Lage, neben Nodes auch andere (auch gemischte) Ergebnisse zu liefern. Ebenso wie ein Template-Körper kann eine erzeugte Sequenz unmittelbar ausgegeben (d.h. als Teil einer Ergebnissequenz verwendet werden) oder in Form eines temporären Baums (temporary tree) an eine Variable gebunden werden.

Das XSLT-Stylesheet als wohlgeformtes XML-Dokument

Die Reihenfolge, Verschachtelung und Häufigkeit der XSLT-Instruktionen innerhalb von Template-Körpern bzw. Sequenzkonstruktoren ist – mit einigen Ausnahmen – im Prinzip beliebig, wobei innerhalb des Stylesheets allerdings die Wohlgeformtheitsregeln nicht verletzt werden dürfen. Zwei im Toplevel-Bereich verwendbare Elemente – xsl:param und xsl:variable – können ebenfalls als Instruktionen auftreten, Letzteres an beliebiger Position.

Die Verwendung von xsl:param-Elementen als Instruktionen ist als Ausnahme von der Regel dahingehend reglementiert, dass diese in einer Template-Regel (in XSLT 2.0 auch in einer Funktionsdeklaration) als erste Child-Elemente stehen müssen. Desweiteren muss eine Wertübergabe an die Instruktion erfolgen können. Aus diesem Grund zählt das Element, auch im Gegensatz zu xsl:variable, nicht zu jener Gruppe der XSLT-Instruktionen, die allgemein (d.h. überall) in Template-Körpern bzw. Sequenzkonstruktoren erlaubt sind.

Eine ähnliche Einschränkung trifft auch auf eine weitere, offiziell nicht eigens benannte Gruppe von XSLT-Elementen zu. Ebenfalls nicht an beliebiger Position in Sequenzkonstruktoren erscheinen darf beispielsweise xsl:when, das nur innerhalb von xsl:choose erlaubt ist, oder xsl:output-character, das nur in der Deklaration xsl:character-map erscheint. Die Mitglieder dieser etwas unscharf umrissenen Gruppe von XSLT-Elementen werden daher gelegentlich auch als Sub-Instruktionen bezeichnet.

Nicht-XSLT-Elemente und Text

Auf diesem Level des Stylesheets, also innerhalb von Sequenzkonstruktoren bzw. Template-Körpern, dürfen auch sogenannte literale Ergebniselemente (literal result elements) auftreten, d.h. Elemente samt Attributen, die nicht dem im Root-Element des Stylesheets definierten XSLT-Namensraum angehören. Diese werden »wie sie sind« – d.h. »literal« – ins Ergebnisdokument übergeben. Ihr Namensraum wird, sofern er nicht hiervon ausdrücklich ausgeschlossen ist, mit ihnen zusammen in das Ergebnisdokument kopiert.

Textknoten werden innerhalb von Sequenzkonstruktoren ebenfalls kopiert und deshalb oft vereinfachend den Literal Result Elements zugeschlagen. Korrekter wären sie aber als »Literal Data Characters« zu bezeichnen.

   

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