Der XSLT Spicker

hackcraft.de


Dieser "Spicker" soll eine kleine Zusammenfassung der meist benötigten Elemente eines XSL-Dokuments sein - es handelt sich hierbei also um eine Kurzreferenz. Auch um zwischendurch nocheinmal nachzuschauen, wie das Eine oder Andere geschrieben wurde.

Motivation

Ein XSL-Dokument / XSLT stellt ein Funktionales-Programm (oder Vorlage/Stylesheet) für den XSL-Transformations-Prozessor dar. So kann ohne viel programmtechnischen Overhead ein XML-Dokument der einen Art in ein XML-Dokument der anderen Art transformiert werden. Dabei wird auf dem XML-Dokumentenbaum gearbeitet und dieser effektiv in einen anderen Dokumentenbaum transformiert. Es wird also im Endeffekt eine Baumtransformation durchgeführt, ohne dass man sich um die Ein- oder Ausgabe von Dateien kümmern muss.

Ein wichtiger Punkt bei XSL-Transformationen ist, dass es sich bei der Ausgabe nicht unbedingt um XML-Dateien handeln muss, sondern es sich um beliebige Textdokumente handeln kann. Hierzu zählen insbesondere Programme oder Programmfragmente anderer (Programmier-)Sprachen. Dies ermöglicht eine einfache Erstellung von Code-Generatoren, die in XML-Gespeicherte-Massendaten nutzen können um diese in Programme einzubetten oder in Programme zu Transformieren.

Es können applikationsspezifische (Programmier-)Sprachen in XML modelliert werden, die dann automatisch mittels XSLT in Zielsprachen transformiert werden. Dieser Nutzen ist es, der (nach Meinung des Autors) XML erst mit einem Mehrwert ausstattet, der XML von einer toten Sprache zu einer lebendigen macht. Codegenerierung und Codeautomatisierung sind die Stichworte die immer wichtiger werden je komplexer die Welt wird. Auch den Begriff der Model-Driven-Architecture hört man immer wieder und verheißt die schnelle Entwicklung kunden-spezifischer Business-Applikationen.

XML-Header

Der XML-Header, hier mit DE-Encoding iso-8859-1, sonst üblich auch UTF-8 für internationales Encoding.

Stylesheet-Header

Die Stylesheet-Toplevel-Knoten-Deklaration, hier können auch Funktionserweiterungen angegeben werden.

Stylesheet-Header mit Import von Bibliotheken

Um zum Beispiel die EXSLT-String-Funktionen benutzen zu können, gibt man weitere Informationen an. Außerdem muss man die von EXSLT.org heruntergeladene String-Bibliothek im gleichem Verzeichnis halten, und Importieren:

Änderung des Produzierten Outputs: XML-Header

Teilt dem XSLT-Prozessor mit, den XML-Header in der Ausgabe zu unterdrücken (z.B. wenn die Zielsprache selbst keine XML-Variante ist).

Automatische Suche nach Knoten und Ersetzen durch Teilbäume

Der Template-Knoten bildet das erste Rückrad, oder zumindest den Eingangspunkt für den Stylesheet. XPathExpression stellt einen XPath-Ausdruck dar. Der Inhalt des Template wird für jeden auf diesen Pfad zutreffenden Knoten bzw. Teilbaum ausgeführt. Der (beispielhaft dargestellte) apply-templates-Tag stößt die erneute Auswertung und Anwendung zutreffender Templates an, wobei der aktuelle Knoten in relativen XPathExpression eine Rolle spielt.

Häufig startet der Stylesheet mit einem Template mit XPathExpr "/" und startet somit für den Top-Level-Knoten.

Funktionen, Rekursionen, Faltungen (Schleifenersatz)

Der Function-Knoten bildet das zweite Rückrad fortgeschrittener Stylesheets. Da XSL eine funktionale Programmiersprache ohne bedingte Iteration ist, stellen Funktionen ein notwendiges Mittel zur Programmierung mit Stylesheets dar. Schleifen müssen in Rekursionen umgeschrieben werden (Folding/Faltung), die meist über einen Startwert und (Rest-)Listen laufen. Idee: 0 + [1,2,3,4] = 1 + [2,3,4] = 3 + [3,4] = 6 + [4] = 10 + []

Auswertung einzelner XPath-Ausdrücke


Gibt den ausgewerteten Wert der xPathExpression zurück.

Iterationen über Mengen

Das for-each-Konstrukt bietet in XSL die Möglichkeit Schleifen zu konstruieren. Der Schleifenkörper wird jeweils für jedes Element der XPathExpression-selektierten Knotenmenge ausführt.

Bedingte Ausführung

Der if-Knoten bietet die Möglichkeit der bedingten Ausführung/Nicht-Ausführung der enthaltenen Transformationen. Ein else-Knoten existiert nicht, dieser kann aber durch einen negativ bedingte if-Knoten ersetzt werden. Ein test-Ausdruck kann nicht nur Boole'sche-Ausdrücke, sondern auch nicht leere-Mengen zu true Auswerten. Vielfach wird auch empfohlen den choose-Knoten (siehe unten) für if-then-else zu benutzen.

Fallunterscheidungen

Der choose-Knoten realisiert eine Fallunterscheidung. Der Code des ersten when-Knotens, dessen test-Ausdruck true ergibt bzw. der eine nicht-leere Knotenmenge beschreibt wird ausgeführt. Ein test-Ausdruck kann nicht nur Boole'sche-Ausdrücke, sondern auch nicht leere-Mengen zu true Auswerten. Wird kein when-Knoten erfolgreich ausgewertet, so wird der code des otherwise-Knotens ausgeführt. Der choose-Knoten wird vielfach als if-then-else alternative empfohlen.

Konstante Variablen für Zwischenergebnisse


Variablen speichern die ausgegebenen (oben) bzw. die selektierten Werte (unten). Variablen können über $VarName in anderen XPathExpressions ausgelesen werden. Da XSL eine funktionale Sprache ist, ist das Verändern des Variablenwertes nicht zulässig.

Sortieren

Angewendet innerhalb einer for-each Iteration sorgt es für eine iteration in sortierter Reihenfolge über die ursprüngliche Menge. Dabei sagt XPathExpression nach welchem Attribut sortiert werden soll und order gibt die Sortierreihenfolge (aufsteigend/absteigend an). Zusätzlich kann über case-order angegeben werden ob Großbuchstaben in der Sortierreihenfolge vor ihren entsprechenden Kleinbuchstaben stehen sollen (z.B. A < a).

Links

hackcraft.de - technology, homebrew, games

Freie und offene rundenbasierte Strategie und Taktikspiele

Mech Simulator Game

Anbieterkennzeichnung / Service Provider