XSLT Prozessoren im Überblick

Autor:
Thomas Bayer
Orientation in Objects GmbH
Thomas Bayer
Thomas Bayer
Datum:Oktober 2002

Eine Auswahl verschiedener XSLT Prozessoren wird in dieser Übersicht vorgestellt. Der Leser bekommt einen Überblick und wird bei der Entscheidung für ein passendes Tool unterstützt.

Java XSLT Prozessoren

Die folgenden XSLT Engines sind mit Java implementiert und daher auf einer Reihe von Plattformen einsetzbar.

Xalan-J

Xalan ist ein Open Source XSLT Prozessor der Apache Software Foundation. Er steht unter der ASF Lizenz und kann für kommerzielle Projekte verwendet werden. Sein Name verdankt er einem seltenen Musikinstrument.

Möglichst nahe an die Standards XSLT und XPath heranzukommen ist das vorrangige Ziel seiner Entwickler. Performance und Ressourcenverbrauch sind untergeordnete Ziele, welche in letzter Zeit jedoch stärker verfolgt wurden. Um die Performance von Xalan zu verbessern, wurden verschiedene Massnahmen getroffen. Beispielsweise ersetzt ein Document Table Model DTM das langsame und nicht gerade Ressourcen schonende Document Object Model DOM. Der XSLTC Compiler kann Stylesheets in Translets übersetzen. Translets bestehen aus Java Bytecode und werden in einer Laufzeitumgebung ausgeführt. Der Parser Xerces und der XSLT Prozessor Xalan gibt es jetzt auch in einer C++ Implementierung, die den Geschwindigkeitsvorteil von C++ gegenüber Java nutzt.

Xalan-Java

SAXON

SAXON wurde von Michael Kay bei ICL programmiert. Er hat Saxon "on top of SAX", einem API für XML Parsing, erstellt. Daher der Name SAXON. Mittlerweile hat Michael Kay zur Software AG gewechselt, die die Weiterentwicklung unterstützen, ohne dass SAXON in Produktpalette der Software AG aufgenommen wurde. SAXON ist Open Source und steht unter der Mozilla Public License Version 1.0.

SAXON wird in vielen Quellen und Benchmarks als schnelle XSLT Implementierung aufgeführt. SAXON zeichnet sich auch durch zahlreiche Erweiterungen aus, von denen einige in EXSLT eingeflossen sind.

Ab der Version 7 unterstützt SAXON Teile der XSLT 2.0 Spezifikation.

SAXON, The XSLT Processor

Instant Saxon

Für Windows gibt es einen abgespecken SAXON ohne Quellen und API Dokumentation. Instant Saxon läuft mit der Virtuellen Maschine von Microsoft(R). Der "grosse" SAXON zusammen mit dem JDK 1.3 von Sun soll laut Dokumentation um den Faktor drei schneller sein als der Instant Saxon. Aufgrund seiner Größe und unkompilzierten Installation kann der Instant Saxon für kleinere Projekte eine Alternative sein.

XT

XT ist ein in Java implementierter Open Source XSLT Prozessor, der sich durch eine hohe Verarbeitungsgeschwindigkeit auszeichnet. Er wurde ursprünglich von James Clark entwickelt und wird heute von Bill Lindsey weiterentwickelt.

XSLT 1.0 wird von XT nur teilweise unterstützt. In der hier betrachteten Version fehlt beispielsweise die Unterstützung für den Element Extension Mechanismus und die Namespace Achse.

Bei Stylesheets, die keinen Gebrauch von Namespaces und Zahlenformatierung mit xsl:decimal-format und format-number() machen, kann XT eine Alternative sein, wenn die Geschwindigkeit der Transformation entscheident ist.

XT

Oracle XDK

Das XML Development Kit XDK von Oracle besteht aus einer Reihe von Komponenten. Neben einem XSLT Prozessor beinhaltet es: XML Parser für DOM und SAX, Schema Prozessor, Class Generator, XML SQL Utility, TransX Utility und das XSQL Servlet. Aufgrund der zahlreichen Bestandteile des XDKs, die für einen Einsatz zusammen mit der Oracle Datenbank gedacht sind, empfiehlt sich das XDK besonders für Oracle Entwickler, die die XML Fähigkeiten der Datenbank nutzen.

Oracle Technology Network

SUNs XSLTC

Sun hat seinen XSLT Compiler der Apache Software Foundation gestiftet. Er ist jetzt Bestandteil des Xalan-Java 2 Projektes. Sun hat den XSLT Compiler der Open Source Gemeinde übergeben, da dies der beste Weg war, die Weiterentwicklung dieser Technologie zu sichern.

jd.xslt

jd.xslt ist ein Open Source XSLT Prozessor von Johannes Döbler, der eine Reihe von Regression Tests in einer JUnit ähnlichen Testumgebung beinhaltet. Die Tests ermöglichen eine Weiterentwicklung mit Extreme Programming.

XSL:P

XSL:P war einer der frühen XSLT Prozessoren. Keith Visco hat ihn, inspiriert durch Sean Russell's Docproc, entwickelt. Teile von XSL:P wurden von Java nach C++ portiert und in TransforMiiX verwendet.

C++ und andere XSLT Prozessoren

In C oder C++ realisierte XSLT Engines versprechen schnelle und Ressourcen schonende Transformationen. Die folgenden Prozessoren sind in C, C++ und zum Teil sogar in Assembler realisiert.

Xalan-C++

Xalan-C++ ist ein in C++ geschriebener XSLT Prozessor der Apache Software Foundation. Er ist eine Alternative zum Xalan-J, der in Java realisiert ist. Eine höhere Geschwindigkeit und weniger Speicherverbrauch soll durch die Verwendung von C++ anstatt Java erzielt werden.

Sablotron

Die Firma Ginger Alliance bietet mit Sablotron ein schnelles Open Source Toolkit für XML an. Es enthält neben DOM Level 2 und XPath Unterstützung einen XSLT Prozessor. Die Entwicklung eines zuverlässigen, schlanken und zu W3C Standards konformen XSLT Prozessors ist das Ziel des Sablotron Projektes.

Sablotron ist mit C++ realisiert. Binaries für Linux und Windows können von der Ginger Alliance Website heruntergeladen werden.

Für die Programmiersprachen Perl, PHP, Python, Object Pascal, Ruby, Erlang, Tcl und Ada gibt es Wrapper, die es ermöglichen Sablotron in diesen Sprachen zu verwenden.

Erweiterungen für Sablotron können über ein DOM API in JavaScript realisiert werden.

Sablotron Homepage bei Ginger Alliance

TransforMiiX

Transfor Mii X wird in zukünftigen Versionen des Mozilla Web Browser als XSLT Engine eingesetzt werden. Ursprünglich wurde der XSLT Prozessor von Keith Visco von MITRE Corporation entwickelt. Ziele bei der Entwicklung waren Effizienz und Schnelligkeit. Teile des Transfor Mii X Codes wurden vom XSL:P Prozessor von Java nach C++ portiert.

XSL Transformations (XSLT) in Mozilla

XSLT C Library for Gnome

Gnome libxslt Logo

Für das Gnome Projekt wurde libxslt, eine XSLT Bibliothek in C von Daniel Veillard entwickelt. Die Bibliothek kann in eigene Projekte eingebunden werden. Die Kommandozeile wird UNIX üblich ebenfalls unterstützt.

Neben dem Source Code gibt es fertige Binaries für Windows.

The XSLT C library for Gnome

Microsoft MSXML

Die Microsoft(R) XML Core Services bieten neben einem Parser und Schema Unterstützung auch einen XSLT Prozessor. MSXML ist zunächst nur eine Bibliothek in Form einer DLL, die in eigenen Programmen verwendet werden kann. Der Wrapper MSXSL ist für die Kommandozeile als separater Download von Microsoft erhältlich.

MSXML kann vom Internet Explorer für Client-seitige XSLT Transformationen verwendet werden. Momentan kann die Version 4.0 im IE nur per Web Scripting eingesetzt werden.

MSXML

FastXML

FastXML ist ein Prototyp für high performance XML Komponenten von Helena Kupková. Sie erstellte FastXML mit dem Ziel kompatibel zu Microsofts MSXML zu sein. Die hohe Performance von FastXML resultiert aus Code Tuning und Optimierung.

FastXML

Übersicht

Die folgende Tabelle gibt einen Überblick der hier vorgestellten XSLT Prozessoren. Der Tabelle können Sie die Versionsnummern der hier vorgestellten Prozessoren entnehmen.

ProzessorAktuelle versionLizenzPlattformRealisiert mitBesonderheitenXSLTJAXPEXSLT
Xalan-J2.4.0ASFJavaJavaXSLTC Translets, Erweiterungen, inkrementelle Transformation1.0, teilweise 2.01.1ja
Saxon6.5.2MPLJavaJavaErweiterungen1.0, teilweise 1.11.1ja
Saxonab 7MPLJavaJavaErweiterungen1.0, teilweise 1.1, 2.01.1ja
Instant Saxon6.5.2MPLWindowsJavaErweiterungen1.0, teilweise 1.1nein
XT20020426aOpen Source(1)JavaJavaErweiterungenteilweise 1.0neinnein
Oracle XDK9.2.0.3.0OTN(1)JavaJavaUtilities für Oracle DB und Servlets1.01.1
jd.xslt1.2.8MPLJavaJava1.1 WDModule: Common, Math, Set
XSL:PJavaJava
Xalan-C++1.4ASFWindows, Linux, Solaris, AIX, HP-UXC++1.0N/AUnterstützung der Module Common, Math, Set u. String im Alphastadium
Sablotron0.96MPL und GPLLinux, Windows (Solaris, FreeBSD, OpenBSD, HP-UX)C++Unterstützung für Perl, PHP, Python, Ruby, Tcl, Ada, ...?N/Anein
TransforMiiXMPLLinux, WindowsC++teilweise 1.0N/Anein
Gnome libxslt1.0.21MITLinux, UNIX, WindowsAnsi C Einige SAXON Erweiterungen; Unterstützung für Phyton, Perl, Kylix, Delphi, Pascal, Ruby, Tcl ?N/Ateilweise
MSXML4.0MS(1)C, C++WindowsIntegration mit dem Internet Explorer1.0N/Anein
FastXML??Windows NT 4.0/2000C++, Assembler teilweise 1.0N/Anein

(1) Siehe der Distribution beiliegende Lizenz
ASF = Apache Software Foundation
GPL = GNU General Public License
MIT = MIT License
MPL = Mozilla Public License

Welchen XSLT Prozessor verwenden?

Eine generelle Empfehlung für einen XSLT Prozessor kann man pauschal nicht geben. Die Entscheidung für einen Prozessor ist von den folgenden Kriterien und deren Priorisierung abhängig:

Ganz im Gedanken von XML und offenen Standards sollte eine Bindung an ein bestimmtes Produkt oder einen Hersteller vermieden werden. Die Schnittstelle JAXP ermöglicht im Java Bereich XSLT Prozessoren auszutauschen. Die Verwendung von Erweiterungen eines Prozessors kann trotz JAXP einen Austausch der XSLT Engine verhindern. Daher sollte auf zusätzliche Features so weit wie möglich verzichtet werden. Leider ist dies nicht immer möglich. Kann auf ein Feature nicht verzichtet werden, so ist mehr Sorgfalt bei der Auswahl eines Prozessors notwendig, da bei einem späteren Wechsel eine Portierung notwendig wird. Die EXSLT Erweiterungen bieten eine Reihe von modularisierten und standardisierten Funktionen und sind mittlerweile für einige XSLT Prozessoren verfügbar. Wenn möglich, sollte vor produktspezifischen Erweiterungen EXSLT Funktionen eingesetzt werden.

Grosse oder zeitkritische Transformationen können die Auswahl der Prozessoren beschränken. Welcher Prozessor die beste Performance bietet, hängt sehr stark von der Transformation ab. Die Prozessoren sind nur schwer zu vergleichen. Eine Hilfe bietet der ausführliche Benchmark XSLTMark von DataPower, der allerdings nur relativ kleine Transformationen durchführt. Die Geschwindigkeit der einzelnen Prozessoren verändert sich von Version zu Version, was die Entscheidung nicht erleichtert. Ist eine hohe Performance das wichtigste Kriterium, so sind XT, SAXON oder in C++ implementierte Prozessoren wie Sablotron, Microsofts MSXSL oder XALAN-C++ Alternativen. Wer mehr Wert auf Konformität zum Standard und Marktanteil der Engine Wert legt, ist mit Xalan-J gut beraten.

Ressourcen

XSL Transformations (XSLT) Version 1.0
http://www.w3.org/TR/xslt

XSL Transformations (XSLT) Version 2.0 W3C Working Draft 16 August 2002
http://www.w3.org/TR/xslt20/

EXSLT
http://www.exslt.org/

Zum Geschaeftsbreich Competence Center
Schulung
In der XML Einführung erlernen Sie die Grundlagen
Schulung
Lernen Sie XSLT in der XSLT Schulung