XSLT

Aus ProgrammingWiki
Archivierte Version vom 2012-01-04T12:01:32+00:00. Aktuelle Version

Inhaltsverzeichnis

Autoren


Einleitung

XSLT(Extensible Stylesheet Language Transformation) gehört zur Familie der XSL-Sprachen . Es wurde Entwickelt zur Transformation von XML-Quelldokumenten in andere Dokumenttypen wie beispielsweiße XML, HTML oder einfache Textdokumente.

S3makuba_Xslt.jpg

Grundlegende Merkmale und Aufbau von XSLT- Dokumenten

XSLT Prozessoren und XSL Stylesheets


Aufbau und Funktionsweise von XSLT Prozessoren


Zur Formatierung eines XML-Dokuments, mittels eines XSL-Stylesheets, wird ein XSLT-Prozessor benötigt. Bei diesem Vorgang werden die Template-Regeln (innerhalb des Stylesheets) auf das Eingabedokument angewendet um so ein neues Ausgabedokument zu erzeugen. Für die Transformation benötigt der XSLT Prozessor sowohl ein XML Dokument als auch ein Stylesheet Dokument welche als Dateien eingelesen werden, aber nicht direkt in dieser Form weiterbearbeitet werden. Erst durch die Umwandlung der Dokumente in Baumrepräsentationen mit hilfe einen XML Parsers ( DOM oder eigener Datenstruktur) ist der XSLT Prozessor in der Lage weiterzuarbeiten. Als Ausgabe wird ein Ergebnisbaum (resulttree) erzeugt . Durch die darauf folgende serialisierung kann das gewünschte Textdokument(XML, HTML, Plaintext, XSL-FO Designstruktur, etc.) erzeugt werden.


[[Bild:S3makuba_Xml2xml.jpg|400px]|300px]]


XSLT Prozessoren

XSLT Prozessoren haben viele Anwedungsmöglichkeiten, dabei wirde es wohl am häufigsten in Webbrowsern genutzt. Ein Grund dafür ist die starke Verbreitung des Microsoft Internet Explorers welcher einen integrieten XSLT Prozessor besitzt. Aber auch in der Entwicklung eigener Programme werden sehr häufig vorhandene XSLT Prozessoren genutzt. Auf drei dieser Prozessoren ( SAXON , Xalan , MSXML ) soll hier genauer eingegangen werden.


Xalan


Bei dem XSLT-Prozessor von Xalan handelt es sich um einen Open Source-Prozessor der im Rahmen des Apache XML Projektes3 entstanden ist. Dieser implimentiert sowohl die XPath 1.0 als auch die XSLT 1.0 Spezifikation des W3C vollständig. Da jedoch die dritte Spezifikation ( XSL Formatting Objects) nicht enthalten ist , muss in diesen fällen auf andere Prozessoren zurückgegriffen werden. Xalan wird unterschieden zwischen den Versionen Java- (Xalan-J) und C++- (Xalan-C++)und nutzt für diese Versionen den XML Parser Xerces4.

Seit der Xalan Version 2.5 gibt es zwei Möglichkeiten der Verwendung des Prozessors. Zum einen kann er als normaler interpretierender XSLT Prozessor (Xalan Interpretive Processor) genutzt werden. Bei der zweiten Variante arbeitet der XSLT-Prozessor mit vorkompilierten Stylesheet (Xalan Compiled Processor) . Bei beiden Varianten wird mit einer internen Baumrepräsentation gearbeitet, dem DTM ( Document Table Model ). Das DTM untescheidet sich vom DOM in der Hinsicht , dass es ein read-only Model ist. Daraus kann man schließen das im Gegensatz des DOM Modells keine neuen Knoten erzeugt werden und keine Daten in das Modell geschrieben werden können.

Eine Besonderheit der neuen Versionen von Xalan besteht im Xalan Compiled Processor XSLTC. Dieser besitzt die Möglichkeit XSL Stylesheet Dokumente in Java Bytecode zu kompilieren (Translets). Dadurch kann man einmal verarbeitete Stylesheets mehrfach auf XML Dokumente anwenden. Besonders wirkungsvoll kann dieses System werden wenn man es bei vielen XML Dokumenten einsetzt.


SAXON


Der XSLT Prozessor von SAXON wurde von Michael Kay entwickelt und enthält alle wichtigen Komponenten eines Prozessors. Zusätzlich wurde noch eine Java-Bibliothek eingebaut , die es erlaubt Funktionen von XSLT in Java-Applikationen zu verwenden. Die neuste version von Saxon ist 7.5 welche einen Großteil der XSLT 2.0 und XPath 2.0 beinhaltet sich jedoch noch in der Entwicklungsphase befindet, und so einige Mengel aufzeigt. Aus diesen Grund ist es empfehlenswert mit der Version 6.5.2 zu arbeiten. Bei dieser wird XSLT 1.0 und XPath 1.0 unterstützt. SAXON enthät viele zusätzliche XSLT Erweiterungen, sogenannte elements bzw. extension functions.Diese Erweiterungen umfassen unter anderen einige EXSLT Bibliotheken , aber auch aufwendigere Funktionen , welche man nur bei Saxon finden kann.


Aufbau des XSLT Prozessors von SAXON :

[[Bild:S3makuba_Saxon.jpg|600px]|500px]]

Bestandteile und Funktionsweise:

Tree Constructor:

Der Tree Constructor ist dafür zuständig, aus einem XML Eingabedokument im Arbeitsspeicher eine Baumrepräsentation für die weitere Verwendung im XSLT Prozessor aufzubauen ( Bei SAXON hat der Constructor sowohl die Aufgabe eine Baumrepräsentation für das Quell Dokument als auch für das Stylesheet Dokument zu erzeugen).


Tree Navigator:

Der Tree Navigator dient dazu, in dem durch den vom Tree Builder erzeugten Baum, auf bestimmte Knoten zugreifen zu können.


Stylesheet Compiler:

Als Eingabe bekommt dieser Compiler den den vom Tree Constructor erzeugten Stylesheet-Baum. Diesen Compilert er zu einem Entscheidungsbaum (decision tree)welcher dem Interpreter als Eingabe dienen soll. Bei dieser Umwandlung des Baumes wurden sämtliche XPath Ausdrücke vollständig valiidiert und geparst und Querverweise aufgelöst (somit kann Interpreter schneller arbeiten).


Stylesheet Interpreter:

Der Kern des SAXON Prozessors liegt im Interpretert. Dieser nimmt den XML Quellbaum und den vom Compiler erstellten Entscheidungsbaum für die Eingabe. Als Ausgabe wird ein Ergebnisbaum (result tree) geliefert.


Outputter:

Der Outputter ist die letzte Komponente im SAXON Prozessablauf und ist für die Kontrolle des Ausgabeprozesses des result trees zuständig. Die Ausgabe des Outputter erfolgt mittels eines Serialisierers in eine Datei. Dieser Serialisierer existiert für die Formate XML, HTML und Klartext, genauso wie es in der XSLT Empfehlung vom W3C definiert ist. SAXON erlaubt ebenfalls, den result tree an eigenen Programmcode zur weiteren Verarbeitung weiterzuleiten.


MSXML

Einen weiteren XSLT Prozessor findet man in dem SDK (Software Development Kit) MSXML. Diese Abkürzung steht für Microsoft XML Core Services . Dieser Prozessor wurde von Microsoft für die verarbeitung von XML Dokumenten programmiert. Vor der Version 4.0 war MSXML nur ein einfacher Parser , was Microsoft nach langer zeit zu einer SDK änderte. Die Aktuelle Version enthält alle Standards des W3C ( volle Kompatibilität zu XPath 1.0 und XSLT 1.0) , jedoch ist eine Kompatibilität zu XSLT 2.0 nicht vorgesehen.


Funktionsweise MSXML


1.Einlesen der Quell- und Stylesheet Dokumente

2.Umwandlung der Dokumente in DOM (Document Object Model) Repräsentationen

2.1.Einlesen des XML Dokumentes vom MSXML Parser

2.2.Weitergabe an MS DOM Builder und Überprüfung auf Gültigkeit und Wohlgeformtheit

2.3.Entfernung von unnötigen Leerzeichen und Aufbau des DOM Baumes im Speicher

3.Transformation durch XSLT Prozessor zu entgültigen Ergebnisbaum (result tree)


[[Bild:S3makuba_Unbenannt_1.jpg|500px]|400px]]


Aufbau eines Stylesheets für XSLT Dokumente

Transformationsprozess

Template-Regeln und Konfliktlösung

Programmierung mit XSLT

Dokumenttransformation in XML, HTML und XHTML