Inhaltsverzeichnis
Extensible Stylesheet Language Transformations
Definition
Akronym: XSLT
XSTL ist eine Programmiersprache zur Transformation von XML-Dokumenten, die auf deren Baumstruktur aufsetzt.
- „XSLT-Programme“ (XSLT-stylesheets) sind ebenfalls in XML geschrieben
- Im Zusammenhang mit XSL:FO entwickelt
- Orientiert an LISP und DSSSL (Document Style Semantics and Specification Language)
- Setzt auf der Lokatorsprache X-Path auf
- (Turing-)vollständige funktionale Programmiersprache
- Anwendungsgebiete
- POP - Presentation Oriented Publishing
- Transformation für Darstellung
- Semantisches Markup wird durch stilbezogenes Markup ersetzt
- MOM - Message Oriented Middleware
- Transformation für Datenaustausch (A2A, B2B, B2C)
- Transformation für Datenintegration (B2B-Integration)
- Transformationsarten
- XML-Dateien werden bereits auf dem Server umgewandelt und als HTML gespeichert, bevor sie an den Client ausgeliefert werden. Sinnvoll ist diese Variante zum Beispiel, wenn die Daten aus einer XML-Datenbank einmalig in HTML konvertiert und dann online gestellt werden sollen.
- Die XML-Daten und die XSLT-Stylesheets bleiben auf dem Server und werden dort transformiert. Das ist die beste Variante. Denn so kann man nicht nur alle Möglichkeiten, die XSLT zu bieten hat, ausschöpfen, es wird auch sichergestellt, dass die Seite in jedem Browser gleich aussieht. (Hier gelten natürlich trotzdem die aus HTML/CSS bekannten Unterschiede in der Darstellung im Browser.)
- Eine direkte Umwandlung im Browser ist ebenfalls möglich. Dazu werden die XML- und die XSLT-Datei an den Browser übergeben.
W3C Spezifikation
- eine Transformations-Ausdruck (stylesheet) in XSLT beschreibt Regeln für die Transformation von einem Quell-Baum in einen Ergebnis-Baum
- dabei Verwendung von Templates (Vorlagen) und Patterns (Mustern)
- Templates
- werden instantiiert, um Teilbereiche des Ergebnis-Baums zu generieren
- bestehen aus Patterns
- Patterns
- werden auf die Elemente im Quell-Baum angewendet
- basieren auf X-Path, womit beschrieben wird, für welche Knoten sie gelten
- besitzen Inhalt, welcher bestimmt, wie Template Zielbaum erzeugen soll
- bei Generierung des Ergebnis-Baums können Elemente des Quell-Baums gefiltert, neu geordnet sowie eine beliebige Struktur hinzugefügt werden
Struktur
<?xmlversion="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <!– XSLT-Anweisungen und Code für die Transformationen --> </xsl:stylesheet>
Transformation
Eine XSL Transformation besteht gedanklich aus drei Teilen:
- Eingabedaten einlesen
- Transformation durchführen
- Ausgabedaten erzeugen / speichern (die Spezifikation beschreibt detailliert nur den mittleren Schritt)
Input
- Erstelle XML Baum
- Wohlgeformt?
- Normalisiere Zeilenende
- Normalisiere Attribute mit white space
- Entities erweitern
- Validierung, falls erforderlich
- Erstelle XSLT Baum (oder “vergrößere“ XML Baum)
- Setzen von Namensräumen und Basis-URIs
- Ausführen von import oder include Elementen
- Erschließe Dokumenten-Lokation
- Goto: ErstelleXML Baum
- Falls import, setze Template-Prioritäten und binde den importierten Baum ein
- Vereinige benachbarte Text-Knoten
Transformation durchführen
- während der Transformation können durch document() mehrere Quellen importiert werden
- importierte Quellen durchlaufen die selben Schritte wie oben („Eigabedaten lesen“) beschrieben
- XSLT ist regelgetrieben
- das Quelldokument wird rekursiv durchlaufen und das Zieldokument zusammengesetzt
- XSLT wurde entwickelt, um keine Seiteneffekte zu verursachen → Variablen werden nicht überschrieben
Output
Speicherung des neuen Ziel-Dokumentes, meist in Form einer XML-Datei
Syntax
- XSLT-Anweisungen werden nur im Stylesheet-Baum beachtet, aber nicht im Quellbaum
- Namespaces können verwendet werden
- Top-Level Anweisungen werden zuerst bearbeitet, dann der Rest
- ein „Literal Result“ ist jedes Element in einem Stylesheet, das nicht ein Top-Level-Element ist
- Templates können nur literal result Elemente oder Instruktionen beinhalten
- es gibt vereinfache (simplified) Stylesheets; dies sind fertige XML-Dateien, die die Zieldateien darstellen und als Vorlage für eine Transformation dienen können
- Ansätze für das stylesheet-Desing sind:
- Pulling the input data: wenn der Entwickler den Ort und die Reihenfolge der Elemente im Quelldokument kennt
- Pushing the input data: wenn der Entwickler die Reihenfolge nicht kennt oder sie vom Quelldokument übernehmen möchte
Sprachbestandteile
Drei Hauptkategorien von Elementen:
- Top-level Elemente
<xsl:stylesheetversion="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:importhref="..."/> <xsl:includehref="..."/> <xsl:strip-space elements="..."/> <xsl:preserve-space elements="..."/> <xsl:outputmethod="..."/> <xsl:keyname="..." match="..." use="..."/> <xsl:decimal-format name="..."/> <xsl:namespace-alias stylesheet-prefix="..." result-prefix="..."/> <xsl:attribute-set name="..."/> <xsl:variablename="..."/> <xsl:paramname="..."/> <xsl:templatematch="..."/> <xsl:templatename="..."/> </xsl:stylesheet>
- Flow-control Strukturen
- if
- for-each, sort
- apply-templates
- call-template, with-param
- choose, when, otherwise
- apply-imports
- Output Elemente
- Attribute
- Element
- Processing-instruction (Verarbeitungsanweisungen)
- Comment
- Value-of
- Copy-of, copy
- Text

