20.13.1 | XSLT |
Mit dem vom W3C verabschiedeten Standard XSLT (eXtensible Stylesheet Language Transformations) können XML-Dokumente über so genannte Templates in andere XML-Dokumente umgewandelt werden. Als mögliche Einsatzgebiete kommen z.B. die Umwandlung von Daten in eine bestimmte grafische Repräsentation (XML nach HTML) oder die Konvertierung von Daten in ein externes Austauschformat in Betracht. Die Anwendung eines Templates auf ein XML-Dokument erfolgt mit einem so genannten XSLT-Prozessor. Dieser erhält neben dem zu transformierenden XML-Dokument ein XSLT-Template und wandelt das Dokument gemäß den Regeln im Template um. Als Beispiel diene das folgende XML-Dokument, das eine Mitarbeiterliste darstellt. Es enthält lediglich Daten, die über XSLT in verschiedene andere Formen übertragen werden können.<?xml version="1.0"?> <firma name="Klimbim Inc."> <abteilung name="Entwicklung"> <mitarbeiter vorname="Joern" nachname="Heid"/> <mitarbeiter vorname="Stefan" nachname="Middendorf"/> <mitarbeiter vorname="Reiner" nachname="Singer"/> </abteilung> <abteilung name="Vertrieb"> <mitarbeiter vorname="George" nachname="Mueller"/> </abteilung> </firma>
Das Zielformat sei in diesem Beispiel die folgende HTML-Datei:<html> <head> <title>Die Firma Klimbim Inc.</title> </head> <body> <h1>Abteilung Entwicklung</h1> <ul> <li>Heid, Joern <li>Middendorf, Stefan <li>Singer, Reiner </ul> <h1>Abteilung Vertrieb</h1> <ul> <li>Mueller, George </ul> </body> </html>Um die Transformation allgemein zu beschreiben (die Anzahl der in der XML-Datei angegebenen Abteilungen und Mitarbeiter soll beliebig sein), müssen Regeln dafür aufgestellt werden, was der Prozessor mit einem gefundenen Element machen soll. Diese Regeln (Templates) werden in einer XML-Datei definiert, die entsprechende XSLT-Befehle verwendet. Diese Befehle werden durch die Zuordnung zu einem speziellen Namensraum gekennzeichnet.
Ein typisches Stylesheet definiert zunächst ein Template für das Wurzelelement des Orginal-XML-Dokumentes (<firma>). An allen Stellen, an denen die Tochterknoten eines Elementes verarbeitet werden sollen, ruft man die passende Regel einfach über das »Teile und Herrsche«-Prinzip mittels<xsl:apply-templates/>auf. Mit dieser Anweisung sucht der Prozessor selbstständig nach der passenden Regel, die gegebenenfalls wiederum Regeln für die Tochterknoten aufruft.
Das folgende Stylesheet liefert die gewünschte Transformation in das zuvor gezeigte HTML-Dokument. Da das Stylesheet selbst im XML-Format vorliegt, muss es ein wohlgeformtes XML-Dokument sein. Daher müssen HTML-Elemente, bei denen üblicherweise nur das Start-Tag angegeben wird (z. B. <br>) XML-konform im Stylesheet eingetragen werden (<br/>).<?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html"/> <xsl:template match="firma"> <html> <head> <title> <xsl:value-of select="@name"/> </title> </head> <body> <xsl:apply-templates/> </body> </html> </xsl:template> <xsl:template match="abteilung"> <h1><xsl:value-of select="@name"/></h1> <ul> <xsl:apply-templates/> </ul> </xsl:template> <xsl:template match="mitarbeiter"> <li> <xsl:value-of select="@nachname"/>, <xsl:value-of select="@vorname"/> </li> </xsl:template> </xsl:stylesheet>Die Daten des XML-Dokumentes können über<xsl:value-of select="@name"/>abgefragt werden. In diesem Beispiel wird der Wert des Attributs name ausgegeben. Attribute werden wie in der gezeigten Regel mit dem @-Zeichen referenziert. Standardmäßig wird dabei das Attribut herangezogen, das zu dem Element gehört, auf das sich die jeweilige Regel bezieht.
In dem select-Attribut des XSL-Befehls kann an eine beliebige Stelle im XML-Baum verwiesen werden. Die Beschreibungssprache für die dafür verwendeten Verweise im XML-Baum nennt sich XPath und ist ebenfalls ein W3C-Standard: http://www.w3.org/TR/xpath