1. Was ist eigentlich XSL?
- XSL steht für Extensible Stylesheet Language.
- Zu XSL gibt es zwei W3C Recommendations: XPath (http://www.w3.org/TR/xpath) und XSLT (http://www.w3.org/TR/xslt). Beide tragen das Datum 16 November 1999 und die Version 1.0.
- XSL insgesamt dient dazu, Inhalt von XML-Dokumenten zu bearbeiten, z.B. ihn als HTML-Datei darzustellen nach dem Prinzip den semantischen Inhalt (XML) von der visuellen Aufbereitung zu trennen.
2. Tools zum Erstellen von XML-Dokumenten mit XSL-Stylesheets
Ein guter XML-Editor ist Xml Spy von der Firma Icon Information Services (http://www.xmlspy.com). Die Version 2.5 gab es schon in 1999. Sehr nützlich ist die Strukturdarstellung ("Grid View") von XML-Dateien und die volle Integration der XSL-Stylesheets in die Funktion "Browser View". Hierzu wird allerdings die Installation des Microsoft Internet Explorers bzw. des Microsoft XML-Parsers MSXML als Zusatz benötigt.
Nun gibt es die Version 3.0 mit vielen neuen Features und leider nicht mehr ganz so schlank. Neben einer ganz hilfreichen Projektverwaltung wird jetzt auch der XSLT-Standard vom 16. Nov. 1999 unterstützt.
XmlSpy wird damit zur IDE für XML zum Einzelpreis von USD 149,--.
3. XML und XSL nach Microsoft-Art
Microsoft unterstützt die Recommendations XSLT und XPath sowie SAX (Simple API for XML) entweder durch:
- Internet Explorer 5.5
oder durch den MSXML Parser Beta:
- Download von MSXML3 (May 2000) von
http://msdn.microsoft.com/downloads/webtechnology/xml/msxml.asp
Bei der manuellen Installation ist wichtig, "xmlinst.exe" auszuführen.
Voraussetzung für MSXML3 ist Internet Explorer 4.01 SP1.
4. XML und XSL nach Open-Source-Art
Als Open Source gibt es die Apache-Projekte Xerces (XML-Parser) und Xalan (XSLT-Engine).
5. Unterschiede zwischen XSLT 1.0/XPath 1.0 und dem früheren Working Draft
Auf der Microsoft-Page gibt es eine Migrationshilfe zur Konvertierung auf XSLT 1.0:
(jscript convert.js <name des xsl-stylesheet>)
Folgende Unterschiede habe ich bei meinen Arbeiten mit XSL bisher am eigenen Leib erfahren:
Lfd. Nr. |
Alt (Working Draft) |
Neu (Recommendation) |
Erläuterung |
1 |
<xsl:stylesheet xmlns:xsl="http://www.w3.org/ TR/WD-xsl"> |
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/ 1999/XSL/Transform"> |
Ohne die Angabe version="1.0" wird der alte Working Draft als Kompatibilitätshilfe noch unterstützt. |
2 |
|
<xsl:output method="html" version="4.0" indent="yes" omit-xml-declarations="yes"> |
Neu. Einmal am Anfang. |
3 |
<xsl:eval>this.childNodes.length </xsl:eval> |
<xsl:value-of select="local:hugo(.)"/> <msxsl:script implements-prefix="local"> function hugo(x) { var __this = x.item(0); return __this.childNodes.length } </msxsl:script> |
Weggefallen. Kann immer durch Definition
einer lokalen Funktion und Aufruf dieser Funktion nachgebildet
werden. Häufig gibt es aber auch eine neue Standardfunktionalität die jetzt anstelle eines händischen Kodes viel besser verwendet werden kann (Beispiel: 4) |
4 |
<xsl:eval>this.childNodes.length </xsl:eval> |
<xsl:value-of select="count(Lexikon/termEntry)" /> |
"this" musste vorher noch positioniert werden. |
5 |
XML Patterns |
XPath |
|
6 |
termEntry[(@id $lt$ 'c') and (@id $ge$ 'b')] |
termEntry[substring(@id,1,1)='b'] |
|
7 |
<xsl:if test=".[abbr > '']"> |
<xsl:if test="abbr!=''"> |
Test, ob Element abbr nicht leer. |
8 |
test="..[Name='Köln']" |
test="../Name='Köln'" |
Test, ob Element Name gleich Köln. |
9 |
test=".[@id='123']" |
test="@id='123'" |
Test, ob Attribut id gleich 123. |
10 |
<xsl:for-each ... order-by...> |
<xsl:for-each ...> |
Sortieren |
11 |
<xsl:if test=".[nodeName()='p']"> |
<xsl:if test="name(.)='p'"> |
|