Dieser Artikel zeigt einen Weg zur Erstellung von Webseiten, insbesondere
vieler Seiten größerer Sites mit einheitlicher CI, mit
Hilfe der Programmiersprache XSLT - Extensible Stylesheet Language Transformations.
Was ist XSLT?
XSLT ist eine deklarative, funktional-applikative Programmiersprache in XML-Syntax.
Im Gegensatz zu den meisten auf XML-Syntax basierenden Computersprachen wie XHTML, SVG, SMIL, DocBook, MathML etc. ist
XSLT dabei wirklich eine Programmiersprache, besitzt es doch alles notwendige zur
Formulierung von Algorithmen: Funktionsdeklarationen, genannt Templates,
Parameter bzw. Argumente, Bedingungen, Schleifen und Variablen.
MOM und POP
XSLT
dient dazu, sogenannte Transformationen zu programmieren. Ausgangslage
ist XML. Nur weil zwei Systeme XML verstehen, heisst das noch lange nicht, dass
sie miteinander kommunizieren können. Vergleicht man einfach die Dokumentsprache
bzw. das Dateiformat mit Sprache, ergibt sich folgende Analogie.
GIF, JPEG, MS-Word sind die Sprachen von Katzen, Hunden und Elefanten. XML ist wie
menschliche Sprache: es gibt Konsonanten, Vokale etc..
XML definiert aber nicht den Wortschatz und die Struktur einer Sprache, ebensowenig die Semantik
(Bedeutung). Das alles geschieht erst durch einen bestimmten Dokumenttyp wie z.B.
XHTML ("Englisch"), SVG ("Französisch") etc..
Eine Transformation ist eine Übersetzung von einem XML-Dokumenttyp, z.B. DocBook, in einen anderen
Dokumenttyp, z.B. XHTML. Das Format des Zieldokumentes ist dabei üblicherweise ebenfalls
XML-basiert, aber auch andere Ausgabeformate sind möglich und mit PNG, LaTeX, RTF oder PDF sogar sehr
gebräuchlich.
MOM und POP
Die beiden
Hauptanwendungsgebiete von Transformationen sind Message Oriented Middleware
(MOM) und Presentation Oriented Publishing (POP). MOM bedeutet, die Transformation
zwischen zwei Systemen einzusetzen, welche Daten austauschen, z.B. zwischen den
Warenwirtschaftssystemen eines Getränke-Großhandels und eines Getränke-Einzelhandels.
POP bedeutet, die Transformation einzusetzen, um Daten in verschiedenen
Ausgabeformaten zu präsentieren, z.B. HTML, PDF und SVG.
XSLT als Bestandteil von XSL
Ursprünglich war XSLT nur als Bestandteil der Sprache XSL gedacht. XSL
besteht aus drei Teilen: XPath zur Adressierung von strukturellen Bestandteilen
eines XML-Dokuments (sogenannte Nodes im XML-Document-Tree), XSLT Transformation
und Formatting Objects zur formatierten Ausgabe. Die Formatting
Objects lassen sich aber problemlos durch fast jedes andere Ausgabeformat, in jedem
Fall durch jedes XML-basierte und fast jedes Text-basierte Ausgabeformat ersetzen.
XPath
XPath ist eine Sprache zur Beschreibung von Pfaden zur Adressierung von Nodes
in XML-Dokumenten. XPath bildet nicht nur die Grundlage für die XSLT Patterns,
sondern auch für XPointer und damit XLink.
Ein kleines aber knackiges Beispiel
Es wäre doch schön, wenn Hyperreferences aus einem HTML-Dokument ("Links")
sagen würden, in welcher Sprache das Zieldokument ist, wenn es in einer anderen
Sprache als die des Quelldokuments geschrieben wurde.
HTML sieht für die Angabe von Sprachen für ein Dokument zwei Möglichkeiten vor.
Das html-Element soll ein xml:lang-Attribut mit dem Sprachkürzel tragen, ältere
HTML-Versionen verwenden dafür ein lang-Attribut. Eine zusätzliche Möglichkeit
ist die Angabe eines hreflang-Attributs beim Quellanker (a-Element) zur Angabe
der Sprache des Zieldokuments.
In das Dokument soll im Link ein Bild eingefügt werden, das über die Sprache
des referenzierten Dokuments Auskunft gibt, sofern
das Zieldokument in einer anderen Sprache ist. Außerdem soll das alt-Attribut
des Bildes in Klammern die Sprache angeben, und zwar einmal in der Sprache des
Quelldokuments und einmal in der Sprache des Zieldokuments. Ansonsten soll das
Dokument nicht verändert werden (aus XML-Sicht).
Vorbereitung
Wir brauchen ein Zieldokument, das vernünftig über das xml:lang-Attribut
verfügt. Außerdem brauchen wir zwei Quelldokumente, eines ohne hreflang-Attribut
zum Testen des Auslesens von xml:lang im Zieldokument und eines mit hreflang-Attribut für
Zieldokumente ohne xml:lang-Attribut. Diese Dokumente sind Listings 1, 2 und 3.
Außerdem brauchen wir natürlich die Texte für die Sprachen. Damit man sie
möglichst gut wiederverwenden kann, legen wir sie in einem separaten Dokument
ab. In diesem Dokument stehen die Sprachen mit ihren Namen in allen verwendeten
Sprachen und dazu ein Verweis auf das Bild. Dieses Dokument ist Listing 4.
Vorgehensweise
Zuerst wird das Grundgerüst des Stylesheets entwickelt. Anschließend wird eine
Template entwickelt, die einfach nur kopiert. Das ist eine Template, die auf
alles wesentliche passt, also Elemente (*), Attribute (@*), Kommentare
(comment()) und Processing-Instructions (processing-instruction()). Sie kopiert
die aktuelle Node und ruft die Templates für die Attribute und den Rest auf.
Das ist im Falle unseres Stylesheets immer rekursiv diese Template mit Ausnahme
für <a>-Elemente.
Und nun kommt die Template für <a>-Elemente. Natürlich wird zuerst der Anker
kopiert, mitsamt Attributen und Inhalt. Anschließend wird eine
Variable mit Namen lc angelegt. Sie wird den Sprachcode für das Zieldokument
enthalten. Für die Variable wird geprüft, ob die Sprache des Zieldokuments beim
Anker steht (hreflang-Attribut) oder im Zieldokument zu finden ist (xml:lang-Attribut
oder lang-Attribut am html-Element des Zieldokuments). Wird keine Sprache gefunden,
bleibt die Variable leer.
Anschließend wird geprüft, ob die Zielsprache gefunden wurde und unterschiedlich ist als die Sprache des
Quelldokuments. Falls ja, wird, mit einem Leerzeichen getrennt, das Bild mit
der in Listing 4 angegebenen Quelle eingefügt. Zusätzlich erhält das Bild ein
alt-Attribut mit den Namen der Sprache in der Quell- und in der Zielsprache in
Klammern.
Was ist sonst noch möglich?
Mit XSLT lassen sich viele Aufgaben für Webseiten realisieren. Das Einfügen einer
Grafik, welche die Sprache angibt, ist nur ein kleines Beispiel. Hier ein paar weitere
praktische Anwendungen: