XML-Know How

Einführung in XSLT

Wer mit XML publizieren will, erkennt rasch, dass die Tatsache, die Inhalte in XML vorliegen zu haben, alleine noch keinen effizienten Workflow schafft.
Mehr noch: Will man mit den XML-Daten mehrere Ausgabekanäle bedienen – und das ist ja genau eines der Ziele dieser Technologie – so zeigt sich, dass die gewählte XML-Datenstruktur vielleicht für die Printausgabe optimiert ist, für eine CD aber völlig anders aussehen sollte. Auch der Versuch, die eigenen XML-Daten ohne Zwischenschritt ins Internet zu stellen, wird zwangsläufig scheitern – ist doch das hierfür erforderliche Datenformat HTML, also ein anderes als das vorliegende XML.
Es ist wohl unmöglich, bei der Erstellung der XML-Daten die idealen Strukturen verschiedenster Publikationen so unter einen Hut zu bringen, dass die Daten in den jeweiligen Medien ohne spezielle Aufbereitung publiziert werden können.
An diesem Punkt stellt sich eine gewisse Frustration ein: War der angepriesene Aspekt der »Medienneutralität« von XML nur eine leere Phrase? Ist nicht jede Einführung in XML gespickt mit Grafiken, die das »Multichannel-Publishing per Knopfdruck« aus einem zentralen Datenbestand verheißen?

Die Phrase ist nicht leer, und auch die Grafiken haben ihre Berechtigung. Aber XML ist alleine noch keine Wunderwaffe, sondern bedarf der richtigen Werkzeuge zur Verarbeitung. Und »Produktion per Knopfdruck« bedeutet auch nicht, dass dieser Knopfdruck nicht zunächst noch einige Prozesse anstößt, bevor die Publikation fertig ist. Schauen wir uns also diese notwendigen Prozesse ein wenig genauer an.

Eine zentrale Rolle nimmt hier XSL ein, die Extensible Stylesheet Language. Mit einem der Hauptbestandteile von XSL, nämlich der Transformationssprache XSLT (XSL- Transformations), befasst sich dieser Artikel. Anhand einfacher, leicht nachvollziehbarer Beispiele wird in die Syntax und den Leistungsumfang von XSLT eingeführt, ohne dass dieser Artikel jedoch einen vollständigen XSLT-Einsteigerkurs darstellen soll.

In Kap. III.A.1, S.1f. finden wir bereits eine kurze Definition von XSL. Die »Extensible Stylesheet Language«, also eine Sprache zur Erstellung von Stylesheets, hat im Sprachgebrauch der Verlagsbranche zunächst eine irreführende Bezeichnung. Wird in der graphischen Industrie doch »Stylesheet« gleichbedeutend mit »Stilvorlage« verwendet, also einer rein typographischen Zuordnung von Stilen zu Inhalten. Und auch im Web dient CSS, also die Cascading Stylesheets, zur Formatierung von HTML-Dokumenten.

Lassen wir diese einengende Bedeutung hinter uns, so haben wir bereits das erste große Missverständnis im Zusammenhang mit XSL aufgeklärt: Ein XSL-Stylesheet für XML-Dokumente hat zunächst mit deren Formatierung noch gar nichts zu tun.

Ein XSL-Stylesheet ist vielmehr eine Verarbeitungsanweisung für XML-Dokumente, um diese umzubauen, zu sortieren, Elemente auszuwählen und andere zu unterdrücken – bildhaft gesprochen ist ein XSL-Stylesheet nichts anderes als ein »Suche / Ersetze-Skript« und XSL eine Sprache, um komplexe »Suche/ Ersetze«-Befehle zu erstellen. Wir sprechen bei einem solchen »Umbauen« einer XML-Datei von einer Transformation – und diese kann natürlich weit über das Suchen und Ersetzen hinausgehen.

XSL besteht aus drei Komponenten: XSLT, XPath und XSL-FO. Die Formatierungssprache XSL-FO wird in Kapitel III.A.1 bereits ausführlich vorgestellt. XPath ist eine Hilfssprache, die ein Navigieren durch ein XML-Dokument erlaubt.[1] XSLT schließlich ist für viele der zentrale Aspekt von XSL, nämlich die eigentliche Transformationssprache.

Wer viel mit XML-Dokumenten arbeitet, wird immer wieder feststellen, dass die Daten zwar eindeutig strukturiert sind, aber nicht in der für die Verarbeitung oder Publikation optimalen Anordnung oder Auswahl vorliegen: Teile der Daten sollen nicht publiziert werden (etwa die ganzen Metadaten, redaktionelle Anmerkungen etc.), andere müssen erst generiert werden (Inhaltsverzeichnisse), datenbankähnliche Strukturen müssen zunächst in die endgültige Reihenfolge überführt werden. All diese Arbeiten können mit dem Werkzeug XSLT erledigt werden.

XSLT ist also eine Art XML-Skriptsprache, die die Transformation von XML-Dokumenten in andere Strukturen erlaubt. Die Syntax ist fest vorgegeben: Ein XSLT-Stylesheet ist selbst wieder ein XML-Dokument, folgt also bestimmten Regeln und kann geparst werden.

Auch der Befehlsumfang von XSLT ist definiert und vom W3C in der derzeit noch gültigen Version 1.0 als recommendation 15. october 2001 verabschiedet.[1]

XSLT ist also selbst kein Computerprogramm und ein XSLT-Stylesheet keine ausführbare .EXE-Datei. Um ein XSLT-Stylesheet auszuführen, d. h. die selbst erstellten Transformationsregeln zur Anwendung zu bringen, bedarf es noch eines entsprechenden Programms. Dieses nennen wir einen XSLT-Prozessor. Die gängigsten XSLT-Prozessoren sind Freeware. Eine Auflistung dieser Programme finden Sie weiter unten.

Bevor wir uns nun mit der Technik im Detail auseinandersetzen, fassen wir den Ablauf einer XSL-Transformation nochmals zusammen:

Es liegt ein XML-Dokument vor, das regelbasiert und automatisiert in eine andere Struktur überführt werden soll. Diese Regeln werden in ein XSLT-Stylesheet geschrieben. Soll eine Regel nicht auf das ganze Dokument angewendet werden, so lässt sich mit XPath eine gezielte Auswahl treffen. Das XML-Quelldokument und das XSLT-Stylesheet werden an einen XSLT-Prozessor übergeben, der die eigentliche Verarbeitung übernimmt und als Ergebnis seiner Arbeit ein neues (XML-, HTML- oder Text-)Dokument erzeugt. Damit ist die Arbeit abgeschlossen.

Ein eingängiges Beispiel ist die Erstellung eines Inhaltsverzeichnisses aus einem XML-Dokument. Dabei wäre es die Aufgabe eines XSLT-Prozessors, nach bestimmten Elementen, wie z. B. <Überschrift> zu suchen, deren Inhalt zu kopieren und in einem neuen Dokument abzulegen. Diese Aufgabe wird in einem XSLT-Stylesheet beschrieben und ist damit auf beliebige XML-Dokumente anwendbar, die das Element <Überschrift> enthalten.


     

  1. ↑  Mit Navigieren ist hier das gezielte Ansteuern von Elementen bzw. Knoten in einem XML-Dokument gemeint. Soll beispielsweise nicht jedes Vorkommen des Elements <absatz> verarbeitet werden, sondern nur diejenigen, die innerhalb von <kapitel> vorkommen (nicht aber von <vorwort>), so lässt sich mit einem entsprechenden XPath-Ausdruck das XSLT-Stylesheet diesbezüglich beeinflussen. XPath-Ausdrücke können sehr komplex sein und werden in einem späteren Kapitel noch gesondert behandelt.
  2. ↑  Auf XSLT 2.0, das eine deutlich erweitertes Befehlsspektrum aufweist, wird in diesem Artikel noch nicht eingegangen, zumal diese Version noch den Status einer Candidate Recommendation [W3C2002-XSLT] und damit noch keine allgemeine Gültigkeit hat.
  3.