XSL Transformation
XSLT ist die Abkürzung für XSL Transformation; XSL wiederum bedeutet Extensible Stylesheet Language.
XSLT ist eine u.a. aus DSSSL hervorgegangene deklarative, funktional-applikative XML-basierte Programmiersprache zur Transformation von XML-Dokumenten im Kontext ihrer logischen Baumstruktur. Entwickelt wurde XSLT ursprünglich von James Clark (XSLT 1.0, XSLT 1.1), für die derzeitige Weiterentwicklung ist Michael Kay verantwortlich (XSLT 2.0).
Ein in XSLT verfasstes Programm heißt XSLT-Stylesheet oder Transformation. Ein Programm, das XSLT-Stylesheets verarbeiten kann, heißt XSLT-Prozessor. XSLT-Prozessoren sind auch in den meisten Web-Browsern (Internet Explorer ab Version 5 (?), Mozilla) integriert.
XML-Namespace für XSLT: http://www.w3.org/1999/XSL/Transform
Übliches Namespace-Prefix für XSLT: xsl
XSLT ist nicht mit XSL-FO zu verwechseln.
Geschichte
Ursprünglich sollte mit XSL eine DSSSL-artige Sprache in XML-Syntax entstehen. Schnell war jedoch klar, dass eine solche Sprache eigentlich aus drei interagierenden aber unabhängig voneinander einsetzbaren Bestandteilen besteht:
- Einer Sprache für die Beschreibung eines Dokuments als Baum mit Formatierungsanweisungen und Stilangaben: XSL Formatting Objects
- Einer Sprache für die Transformation eines beliebigen XML-Dokuments in einen anderen Baum, z.B. einen in XSL FO: XSLT
- Einer Sprache für die Adressierung von Baumbestandteilen: XPath
Funktionsweise
Die Sprache XSLT beschreibt Programme, genannt Transformation oder Stylesheet, die Daten aus XML-Dokumenten in andere (meist) XML-Dokumente zu verwandeln.
Dazu werden die XML-Dokumente als logischer Baum (Baumstruktur, die kleinsten Bestandteile des Baums heißen Knoten) betrachtet: Die Quell-Bäume der zu transformierenden Dokumente und durch die Transformation die entstehenden Ziel-Bäume der zu erzeugenden Dokumente (in XSLT vor 2.0 kann nur ein Dokument erzeugt werden, ab XSLT 2.0 mehrere).
Eine Transformation besteht dazu aus einer Reihe von einzelnen Transformationsregeln, genannt Templates. Eine Template besitzt eine auf XPath basierende Pattern, die beschreibt, für welche Knoten sie gilt, und einen Inhalt, der bestimmt, wie die Template ihren Teil des Zielbaums erzeugt.
In einem XSLT-Dokument kommen also an Sprachen und XML-basierten Technologien mindestens vor:
- XML als Basis für XSLT, die Sprache des Quell-Dokuments (XHTML) und meist auch die Sprache des Ziel-Dokuments.
- XSLT selbst (XML-basiert)
- XPath / XSLT Patterns
- Die Sprache(n) des Quell-Dokuments (XML-basiert, z.B. XHTML)
- Die Sprache(n) des Ziel-Dokuments (in der Regel XML-basiert, z.B. XHTML)
- XML Namespaces zur Unterscheidung der einzelnen verwendeten Sprachen
Sowie ab XSLT 2.0:
- XML Schema Datentypen
Anwendungsgebiet
Die Sprache XSLT beschreibt Programme, genannt Transformation oder XSLT-Stylesheet, um Daten aus XML-Dokumenten in andere (meist) XML-Dokumente zu verwandeln.
Dafür gibt es zwei Hauptanwendungsgebiete.
POP (Presentation Oriented Publishing) bezeichnet die Transformation zum Zwecke der Darstellung. Mit unterschiedlichen Stylesheets können die Daten in XHTML, Formatting Objects, SVG, SMIL, DocBook und viele andere Formate umgewandelt werden. Das ursprüngliche semantische Markup wird dabei durch ein Stil-bezogenes Markup ersetzt.
MOM (Message Oriented Middleware) bezeichnet die Transformation zum Zwecke des Datenaustausches. Da XML lediglich ein Sprachkonzept zur Entwicklung von Sprachen bildet, genügt es nicht, dass zwei Systeme (z.B. Programme) XML beherrschen, um gegenseitig Daten austauschen zu können. Sie müssen die gleiche XML-basierte Sprache verwenden. In dem häufigen Fall, wo die Systeme nicht die gleiche XML-basierte Sprache verwenden, wird gerne XSLT eingesetzt, um mit Hilfe von Transformationen Übersetzer von der einen Sprache in die andere zu entwickeln.
Anwendungsbeispiele
- Statistische Daten liegen als XML vor (z.B. aus der Datenbank) und werden mit Hilfe unterschiedlicher Transformationen unter anderem aufbereitet als Vektorgrafik in SVG, als Tabelle in XHTML und als PDF (über den Zwischenschritt XSL-FO).
- Für eine Website werden die XHTML-Dateien erstmal ohne Layout geschrieben und erhalten anschließend das Layout mit Hilfe einer Transformation. Der Vorteil ist dabei ähnlich dem eines klassischen CMS: Um das Layout zu ändern, ist es nicht notwendig, alle XHTML-Seiten zu ändern; stattdessen ändert man das Stylesheet und transformiert neu.
Derzeit wird XSLT wohl am häufigsten dazu verwendet, einfach XML-Dokumente durch Transformation nach mit CSS versehenem XHTML in Webbrowsern darstellbar zu machen.
Alternativen zu XSLT
DSSSL
Eine mögliche Alternative zu XSLT ist DSSSL, das man auch als Vorläufer von XSLT betrachten kann. Der wohl größte Vorteil von XSLT gegenüber DSSSL ist seine XML-basierte Syntax. Somit kann jeder XML-Editor automatisch auch für XSLT eingesetzt werden, außerdem gelten die Syntax-Regeln von XML (Wohl-geformtheit, Gültigkeit) damit auch für XSLT.
Generische Programmiersprachen
Eine grundsätzliche Alternative zu XSLT besteht in der Möglichkeit, solche Transformationen in jeder beliebigen Programmiersprache (z.B. Java, C++ oder Perl) abzufassen. XSLT kann dabei jedoch bei Einhaltung bestimmter Voraussetzungen ein gewisses Garant für wohl-geformte und unter umständen sogar gültige Zieldokumente gewähren, außerdem ist die Entwicklung einer Transformation in XSLT in der Regel mit erheblich weniger Aufwand verbunden als die Entwicklung einer Transformation in einer generischen Programmiersprache.
CSS
Häufig wird CSS als Alternative zu XSLT genannt. CSS ist jedoch nicht wirklich eine Alternative zu XSLT. CSS beschreibt lediglich, wie die Bestandteile eines Baums (akustisch oder visuell) zu formatieren sind, während XSLT den Baum radikal ändern kann. So kann man mit XSLT z.B. automatisch Inhaltsverzeichnisse, Indizes, Link-Listen und ähnliches erstellen, nicht jedoch mit CSS.
Beispiele
Inhaltsverzeichnis erzeugen
Folgendes XSLT erzeugt ein einfaches Inhaltsverzeichnis für eine XHTML-Seite mit Überschriften:
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/xhtml" exclude-result-prefixes="html" > <xsl:output method="xml" doctype-system="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" doctype-public="-//W3C//DTD XHTML 1.1//EN" /> <xsl:template match="html:body"> <xsl:copy> <xsl:apply-templates select="@*"/> <h1><xsl:apply-templates select="//html:title//text()" /></h1> <h2 id="toc">Inhaltsverzeichnis</h2> <ul> <li><a href="#toc">Inhaltsverzeichnis</a></li> <xsl:for-each select=".//html:h2"> <li> <xsl:if test="not(@id)"> <xsl:message>Achtung: Kann ohne Id keinen Link erzeugen</xsl:message> </xsl:if> <a href="#{@id}"><xsl:apply-templates/></a> </li> </xsl:for-each> </ul> <xsl:apply-templates/> </xsl:copy> </xsl:template> <xsl:template match="node()|@*"> <xsl:copy> <xsl:apply-templates select="@*"/> <xsl:apply-templates/> </xsl:copy> </xsl:template> </xsl:transform>
Siehe auch: XML, XSL-FO, XPath
XSLT-Prozessoren
- Saxon (Java, saxon.sourceforge.net/)
- Xalan (Java, xml.apache.org/xalan-j/index.html)
- libxslt/xsltproc (C, xmlsoft.org/XSLT/)
- XT (C, http://www.blnz.com/xt/index.html, ursprünglich von James Clark)
- Sablotron (C++, www.gingerall.com/charlie/ga/xml/p_sab.xml)
- Microsoft XSLT-Prozessor (funktioniert auch in älteren Windowssystemen)
- JD.XSLT (Java, www.aztecrider.com/xslt/)
Literatur
- Doug Tidwell: "XSLT" O'Reilly Verlag. ISBN 3-89721-292-7
Weblinks
- XSL Transformations (XSLT) Version 1.0; in Deutsch: hier
- XSL Transformations (XSLT) Version 2.0 (Arbeitsentwurf)
- XML in der Praxis, Ein Online-Buch, das Einführungen in Stylesheet-Sprachen, u.a. XSLT enthält
- http://www.heise.de/ix/artikel/2001/03/167/ Ausführliches Beispiel (Wörterbuch)
- http://de.selfhtml.org/xml/darstellung/xsltbeispiele.htm vier Beispiele
- MSXML (Microsoft XML und XSLT-Prozessor)
- ZVON-XSLT (ZVON-Tutorial zum Thema XSLT)