Extensible Stylesheet Language (XSL)

XSL beschreibt die Transformation von XML-Dokumenten. Ein XSLT-Prozessor wie xsltproc(1) führt die Transformation aus. Dieser sucht, beginnend beim Wurzelknoten, das am besten passendes Template und führt es aus. Das folgende Template ist fest eingebaut. Es traversiert alle Kinder des aktuellen Knotens und gibt den Inhalt aller Textknoten aus.

<xsl:template match="*|/">
	<xsl:apply-templates/>
</xsl:template>

Beispiel

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:output method="html" indent="yes"/>
	<!-- root -->
	<xsl:template match="/">
		<html>
			<body>
				<xsl:apply-templates/>
			</body>
		</html>
	</xsl:template>
</xsl:stylesheet>

Die Funktion xsl:apply-templates iteriert über alle Kinder des aktuellen Knotens, sucht wiederum das am besten passende Template und ruft dieses auf.

Elemente

Element Inhalt Beschreibung
root element
xsl:transform (xsl:include | xsl:import)* (top-level-elements)*Alternativname für das Wurzelelment, verwende immer <xsl:stylesheet>
xsl:stylesheet Wurzelelement
version = 1.0 | 2.0 XSL-Version
id = ID
extension-element-prefixes = prefix1 prefix2 …Elemente aus den aufgelisteten Namensräumen sind Erweiterungen
exclude-result-prefixes = prefix1 prefix2 …Elemente aus den aufgelisteten Namensräumen nicht ausgeben
xsl:include Bindet externes Stylesheet mit gleicher Priorität ein
href = uri
xsl:import Bindet externes Stylesheet mit geringerer Priorität ein
href = uri Die Funktionen des einbindenden Stylesheets überschreiben die Funktionen des eingebundenen Stylesheets.
top-level-elements
xsl:output Steuert das Verhalten des XSLT Prozessors
method = xml | html | xhtml | textAusgabeformat
version = 1.0
encoding = UTF-8 | ISO-8859-1 | … Zeichenkodierung der Ausgabe
omit-xml-declaration = yes | no Unterdrückt die XML-Deklaration
standalone = yes | no Setzt standalone-Attribute XML-Deklaration
doctype-public = string Legt PUBLIC-Identifier in der DTD fest
doctype-system = string Legt SYSTEM-Identifier in der DTD fest
cdata-section-elements = qnames Liste von Elementen, deren Textknoten als CDATA-Sektion ausgegeben werden
indent = yes | no Rückt das Ausgabedokument ein für bessere Lesbarkeit
media-type = text/xml | text/html | … Legt den MIME-Typ des Ausgabedokuments fest
name = qname
byte-order-mark = yes | no
escape-uri-attributes = yes | no
include-content-type = yes | no
media-type = string
normalization-form = NFC | NFD | NFKC | NFKD | fully-normalized | none | nmtoken
undeclare-prefixes = yes | no
use-character-maps = qnames
xsl:namespace-alias Ersetzt Namensraum-Präfixe in Elementen
stylesheet-prefix = prefix | #defaultAlter Name
result-prefix = prefix | #defaultNeuer Name
xsl:strip-space Normalisiert Leerzeichen bei den aufgeführten Elementen
elements = token1 token2… Standardmäßig bei allen Elementen
xsl:preserve-space Übernimmt Leerzeichen bei den aufgeführten Elementen unverändert ins Ausgabedokument
elements = token1 token2…
xsl:attribute-set (xsl:attribute)* Definiert Attribute zur Verwendung in <xsl:element>
name = qname Identifikation
use-attribute-sets = qname1 qname2… Bindet weitere Attributmengen ein
xsl:variable template Definiert eine Variable
name = qname Name der Variable, wird mit $qname referenziert
select = expressionWert der Variable
xsl:decimal-format template Muster für die Umwandlung von Gleitpunktzahlen in der XPath-Funktion format-number()
name = qname Identifikation; Das Muster wird zur Vorgabe, wenn dieses Attribut fehlt
decimal-separator = char Trennzeichen für Dezimalstellen, Vorgabe ist .
grouping-separator = char Trennzeichen für Gruppen, Vorgabe ist ,
infinity = string Symbol für Unendlich, Vorgabe ist infinity
minus-sign = char Präfix für negative Zahlen, Vorgabe ist -
NaN = string Symbol für Nicht-Zahl, Vorgabe ist NaN
percent = char Symbol für Prozent, Vorgabe ist %
per-mille = char Symbol für Promille
zero-digit = char Symbol für die Null und Basis für andere Ziffern, Vorgabe ist 0
digit = char Zeichen für Muster, Vorgabe ist #
pattern-separator = char Trennzeichen für positive und negative Submuster, Vorgabe ist ;
xsl:key Stattet Element mit einem Schlüssel aus, der über die XPath-Funktion key() referenziert werden kann.
name = qname
match = pattern
use = expression
xsl:template (xsl:param)* template Funktion
match = pattern Muster für die Auswahl des Templates bei <xsl:apply-templates>
name = qname Marke für Referenzierung, zum Beispiel durch <xsl:call-template>
mode = tokens Unterscheidet Funktionen für dasselbe Muster
priority = number Gewichtung bei der Auswahl des Templates bei <xsl:include> und <xsl:import>
as = sequence
xsl:param template Parameterliste der Funktion, Vorgabewert, wenn selectAttribut leer ist
name = qname Variablenname, Wert wird mit {$name} ausgegeben.
select = expressionVorgabewert
Kontrollfluss
xsl:apply-imports Ruft Funktionen aus mit <xsl:import> importierten Stylesheets auf
xsl:apply-templates (xsl:sort | xsl:with-param)* Ruft Funktionen für alle selektierten Knoten auf
select = node-set-expression Default: Alle Kinder des Kontextknotens
mode = qname Wählt die Funktion anhand des mode-Attributs aus
xsl:call-template xsl:with-param Ruft Funktion für den Kontextknoten auf
name = qname Name der Funktion
xsl:with-param template Parameter für den Aufruf einer Funktion
name = qname Name des Parameters
select = expressionWert des Parameter, Inhalt muss leer sein
xsl:if template Bedingter Einschluss
test = boolean-expression Kriterium
xsl:choose (xsl:when+) (xsl:otherwise?) Fallunterscheidung
xsl:when template Spezifischer Fall
test = boolean-expressionKriterium
xsl:otherwise template Allgemeiner Fall
xsl:for-each template Iteriert über Knotenliste
select = node-set-expressionXPath zur Auswahl der Knotenmenge
separator = string Trennzeichen für Listenausgabe
disable-output-escaping = yes | no FIXME
xsl:sort Sortiert eine Knotenliste
select = string-expression Sortierkriterium
lang = nmtoken Kultureller Kontext
data-type = text | number | … Alphabetisch oder numerisch sortieren
order = ascending | descinding Reihenfolge aufsteigend oder absteigend
case-order = upper-first | lower-first Groß- vor Kleinbuchstaben oder umgekehrt
collation = uri
stable = yes | no
xsl:fallback template Alternative für nicht unterstützte Erweiterungen
xsl:message template Sendet Nachricht an den XSLT-Prozessor
terminate = yes | no XSL-Verarbeitung abbrechen
Ausgabe
xsl:value-of Fügt den Textinhalt eines Knotens ein, abhängig vom Knotentyp
select = string-expressionXPath-Ausdruck
disable-output-escaping = yes | no Zeichen wie < und & nicht automatisch ersetzen.
xsl:text template Gibt Text aus, ohne den Leerraum zu normalisieren
disable-output-escaping = yes | no Zeichen wie < und & nicht automatisch ersetzen.
xsl:element template Gibt ein Element aus
name = qname Elementname
namespace = uri Namensraum
use-attribute-sets = qname1 qname2… Liste von Verweisen auf <xsl:attribute-set>
xsl:attribute template Fügt dem übergeordneten Element ein Attribut hinzu
name = qname Attributname
namespace = uri Namensraum
xsl:comment
xsl:processing-instruction
name = ncname
xsl:copy Kopiert den aktuellen Knoten ins Ausgabedokument
use-attribute-sets = qname1 qname2…
xsl:copy-of Kopiert den selektierten Teilbaum ins Ausgabedokument
select = expression
xsl:number Gibt eine Zahl aus
value = number-expressionNumerischer XPath-Ausdruck
level = single | multiple | any Modus für die Summenbildung
count = pattern Zählt die auf das Muster passenden Knoten auf dem entsprechenden level
from = pattern Legt den Startknoten für die Zählung fest
format = string Startzeichen für die Zählung
| 1 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, …
| 01 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, …
| A A, B, C, D, …, Z, AA, AB, AC, …
| a a, b, c, d, …, z, aa, ab, ac, …
| i i, ii, iii, iv, v, vi, vii, viii, ix, x, xi, xii, …
| I I, II, III, IV, V, VI, VII, VIII, IX, X, XI, XII, …
lang = langcode Sprachcode für den kulturellen Kontext, z.B. de für Deutsch
letter-value = alphabetic | traditional Alphabtisch, um z.B. I, J, K zählen zu können
grouping-separator = char Trennzeichen für Tausender-Gruppen
grouping-size = number Im Dezimalsystem sind Dreiergruppen üblich
Neu
xsl:sequence
select = expression
xsl:for-each-group
select = expression
group-by = expression
group-adjacent = expression
group-starting-with = pattern
group-ending-with = pattern
collation = uri
xsl:analyze-string
select = expression
regex = string
flags = string
xsl:matching-substring template
xsl:non-matching-substring template
xsl:import-schema
namespace = uri
schema-location = uri
xsl:next-match template
xsl:character-map
name = qname
use-character-maps = qname1 qname2…
xsl:namespace template
name = ncname
select = expression
xsl:perform-sort template
select = expression
template text Gibt Element unverändert aus (literal value expression). Leerraum im Text wird normalisiert, außer das Element ist in <xsl:preserve-space> aufgeführt
attribute = …{expression}…Text in geschweiften Klammern wird durch Auswertungsergebnis des X-Path Ausdrucks ersetzt

Literatur