XML/XSL/XSLT
XSL und XSLT
Die Sprache XSL (Extensible Stylesheet Language, zu deutsch: erweiterbare Formatsprache) besteht aus zwei wichtigen Komponenten:
- aus einer Komponente zur Formatierung von XML-Daten (oft XSL-FO – "XSL Formatting Objects" genannt), und
- aus einer Komponente zur Transformation von XML-Daten in andere XML-Daten.
Für die Transformations-Komponente hat sich die Abkürzung XSLT (XSL Transformation, zu deutsch: XSL-Umwandlungen) etabliert.
Die beiden Abkürzungen XSL und XSLT sorgen erst einmal für Verwirrung, vor allem, wenn man sich die Seiten des W3-Konsortiums dazu ansieht. Dort gibt es getrennte Spezifikationen für XSL und XSLT, ergänzt um eine weitere relevante Spezifikation, nämlich die zu der Sprache XPath. XPath agiert innerhalb von XSLT als eine Subsprache. Warum aber kann es nicht einfach eine Formatsprache für XML-Daten geben? Der Grund ist vor allem, dass die Transformations-Komponente XSLT so mächtig ist, dass sie ein Eigenleben entwickelt hat. Lassen Sie sich dadurch nicht verwirren. In der gegenwärtigen Praxis verwenden Sie XSL vor allem in der Form, dass Sie die Transformations-Komponente XSLT verwenden.
XSL wurde als allgemeine Stylesheet-Sprache für XML-Daten geschaffen. Die grundsätzliche Aufgabe von XSL ist also eigentlich, XML-Daten zu formatieren. Die Anforderungen an eine solche Sprache sind natürlich sehr hoch, da XML-Daten beliebiger Natur sein können. Während CSS doch sehr stark auf das Aufgabengebiet von HTML und Web-Seitendarstellung zugeschnitten ist, sind die Formatierungsmöglichkeiten von XSL tendenziell stärker an den Anforderungen von Print-Publikationen orientiert. Dazu stellt XSL ähnlich wie CSS ein großes Arsenal an Style-Eigenschaften bereit, und enthält darüber hinaus aber auch Möglichkeiten, die den logischen Ablauf der Datenpräsentation steuern, wie z. B. automatische Kapitelnummerierung oder Sortierfunktionen. XSL kann zwar noch weitgehend als Beschreibungssprache für Formate bezeichnet werden, enthält darüber hinaus aber auch Konstrukte wie bedingungsabhängige Anweisungen oder Schleifenanweisungen, die eher an Programmiersprachen erinnern.
Mit der Transformations-Komponente XSLT verfügt XSL aber noch über eine weitere wichtige Möglichkeit: die Transformations-Komponente erlaubt nämlich unter anderem, XML-Daten in HTML zu transformieren. Und genau das ist die große Chance für XML im WWW! Denn Anbieter von Web-Projekten können ihre Daten dadurch in XML strukturell sauber speichern und trotzdem in HTML präsentieren, sodass jeder Browser die Daten anzeigen kann. Dabei sind beliebige HTML-Konstrukte erlaubt – einschließlich JavaScript und CSS. So entsteht nicht selten die Situation, dass sowohl XSLT als auch CSS zum Einsatz kommen, um aus XML-Daten ansprechende Web-Seiten zu erzeugen. Aber beide Sprachen haben in dieser Technik ihren spezifischen Ort: XSLT dient zur Generierung von HTML-Code aus den XML-Daten, und CSS ist die Formatsprache für das XSLT-generierte HTML-Konvertat.
Aus Sicht des Web Publishings ist gegenwärtig also die Transformation von XML-Definitionen in HTML-Kodierungen die Hauptanwendung von XSL. Deshalb wird in der vorliegenden Dokumentation auch nur auf XSLT näher eingegangen. Auf eine Referenz der XSL-eigenen Formatsprache wurde dagegen vorläufig verzichtet.
Transformation mit XSLT
Der XSLT-Teil von XSL hat die Aufgabe, Elemente einer XML-basierten Sprache in eine andere XML-gerechte Sprache zu transformieren. So können Sie also beispielsweise Elemente aus einer eigenen XML-Datei, wie vorname und zuname, in Auszeichnungs-Konstrukte einer anderen Sprache transformieren, um damit eine formatierte Ausgabe der Elemente zu erzeugen.
Wenn Sie beispielsweise XML-Daten in HTML transformieren, dann stellen Sie eine Verbindung zwischen Elementen und Attributen Ihrer XML-Daten und bestimmten HTML-Konstrukten her. So können Sie im XSLT-Stylesheet beispielsweise angeben, dass ein Element namens vorname
in den HTML-Code <td>[...]</td>
umgesetzt werden soll. Wenn Sie nun in Ihren XML-Anwendungsdaten das XSL-Stylesheet einbinden und beispielsweise <vorname>Stefan</vorname>
notieren, dann wird daraus beim Transformieren als Ergebnis das HTML-Konstrukt <td>Stefan</td>
erzeugt.
Man spricht auch von der Transformation aus einem Quellbaum in einen Ergebnisbaum. Dahinter steht die Tatsache, dass sich alle XML-basierten Daten als Baumstruktur darstellen lassen. Das folgende Schaubild verdeutlicht, wie aus einem Quellbaum ein Ergebnisbaum wird – natürlich handelt es sich dabei nur um einen kleinen Ausschnitt:
Die schwarzen Striche links zeigen die Zuordnung. Aus dem Quellbaum-Tag <kontakt>
wird im HTML-Ergebnisbaum z. B. das Tag <tr>
, wodurch eine Tabellenzeile begonnen wird. An eine solche Transformation können jedoch ganz unterschiedliche Anforderungen gestellt werden. So können Sie an den unterstrichenen Bestandteilen erkennen, dass die Transformation an diesen Stellen komplizierter ist. Wo in den XML-Daten die Adressen für Homepage und E-Mail einfach als Text gespeichert sind, soll in der HTML-Ausgabe ein anklickbarer Link daraus gemacht werden. Dazu ist es nötig, bei der Transformation anzugeben, dass etwa der Inhalt des Quellbaum-Elements url
im HTML-Ergebnisbaum dem href-Attribut des a-Elements zugewiesen werden soll und dann nochmal als Inhalt des a-Elements erscheinen soll. Wie Sie an diesem Beispiel sehen, ist es oft nötig, ganz gezielt auf einzelne Bestandteile (Knoten) der XML-Daten zuzugreifen, um diese beim Erzeugen des Ergebnisbaums ebenfalls an ganz bestimmten Stellen unterzubringen. Dabei müssen Sie gewünschte Bestandteile wie "Inhalt des Elements url im aktuellen Datensatz" präzise adressieren (das Knoten-Set ermitteln – siehe auch Knoten und Knoten-Sets in der Baumstruktur). Für diese Adressierung benutzt XSLT eine Syntax, die in einer eigenen Sprache definiert wird: in XPath. XPath beschreibt, wie man in XML-gerechten Datenstrukturen auf beliebige Strukturbestandteile zugreifen kann.
XSL ist selbst eine XML-basierte Auszeichnungssprache und besteht aus Elementen und Attributen. Um sie zu verwenden, wird üblicherweise ihr Namensraum in eine XML-Datei importiert. Die Datei wird mit der Endung .xsl abgespeichert. In einer typischen XSLT-Anwendung müssen Sie neben dem XSL-Namensraum aber auch noch den Namensraum derjenigen Sprache importieren, in die transformiert werden soll. Bei Web-Anwendungen ist das meistens HTML. Eine typische XSLT-Datei besteht dann also aus XSL-eigenen Elementen und HTML-Elementen.
XSLT im Browser und auf dem Server
XSLT benötigt einen Parser, der die Transformationsanweisungen ausführt. Denn wenn Sie in XSLT angeben, dass beispielsweise ein Element namens vorname in den HTML-Code <td>[...]</td>
umgesetzt werden soll, so notieren Sie in XSLT lediglich ein entsprechendes Element, das eine Transformationsanweisung darstellt, genauso wie Sie in einer HTML-Datei HTML-Elemente notieren. Damit mit diesen Anweisungen etwas passiert, muss ein Parser die Anweisungen als Daten-Input verarbeiten und daraus ein Ergebnis erzeugen, das er an eine Software weitergibt, zum Beispiel an einen Browser, der die Daten anzeigen soll.
Der XSLT-Parser ist einfach ein Software-Modul. Die Frage stellt sich jedoch, wo dieses Software-Modul am besten hingehört. Wenn die Transformation der XML-Daten in eine formatierte Ausgabe im Browser stattfinden soll, dann muss der Browser selbst über ein entsprechendes Modul verfügen.
Die andere und derzeit häufig eingesetzte Möglichkeit bei Web-Seiten im Internet ist daher, das Software-Modul für den XSLT-Parser in den Webserver zu integrieren. Der Vorteil dabei ist, dass die XML-Daten nach HTML transformiert werden, bevor sie überhaupt mit HTTP an den aufrufenden Browser übertragen werden. Dies hat den wunderbaren Effekt, dass die XML-Daten auf jedem noch so alten und schlichten Browser präsentiert werden können. Denn der Browser bekommt beim Anfordern der Daten überhaupt nichts von XML mit. Stattdessen bekommt er vom Server nur HTML geliefert. Für Apache, das heute im Web am weitesten verbreitetste Webserver-Produkt, gibt es ein solches XSLT-Modul mit dem Namen Xalan – geschrieben in Java oder in C++.
Bei serverseitig dynamischen Web-Seiten, also etwa bei Seiten, die von einem CGI-Script erzeugt werden, haben Sie darüber hinaus natürlich auch die Möglichkeit, Ihre XML-Daten innerhalb des Scripts in HTML-Konstrukte zu transformieren. Bei einfachen XML-Anwendungen ist es kein Problem, die Übersetzungsanweisungen von XML in HTML im Script selber zu kodieren. Bei größeren XML-Anwendungen empfiehlt es sich jedoch, im Script auf Module zurückzugreifen, die auf diese Transformationsarbeit spezialisiert sind. In Perl gibt es beispielsweise die Module XML::Parser und XML::Parser::Expat, um XML-Daten direkt zu verarbeiten.
Die deutschsprachige Wikipedia hat eine Übersicht verbreiteter XSLT-Prozessoren mit Unterstützung der verschiedenen XSLT-Versionen.