XSL/ XSLT WorkshopMit XSL kann man XML Daten darstellen. XSLT transformiert XML Daten in ein beliebiges Format. Diese Einführung gibt einen Einblick in diese beiden Techniken, und deren Anwendung.XML ist als reine Datensprache konzipiert. XML kann folglich nicht alleine stehen. Die DTD, oder das Schema definiert die verwendeten Elemente. Die Darsetllung von XML Daten ist nicht primär, sondern sekundär.

Man kann XML Daten zwar bedingt mit CSS darstellen, das ist jedoch nicht das gelbe vom Ei, da CSS nie für eine solche Anwendung gemacht wurde. CSS entspricht nicht dem Potential von XML.

Was ist XSL/ XSLT?

Die Extensible Stylesheet Language, kurs XSL ist eine komplexe Sprache zum formatieren von XML. Formatieren heißt in dem Sinne, die Daten zu sortieren, einzelne Abschnitte z.B. zu nummerieren, oder bedingt auszugeben.
XSL hat eine kleinere Untermenge, und zwar XSLT. XSLT bedeutet XSL Transformation, es wandelt XML Daten in andere auf XML basierte Sprachen, wie HTML um.
Ein anschauliches Beispiel ist hierbei eine XML Datenbank, in welcher Daten der Autoren gespeichert werden.

<autor>
<name>Thiemo Fetzer</name>
<nic>tf</nic>
<email>redaktion@devmag.net</email>
</autor>

Wird durch XSLT zu
<tr>
<td width="34%">Thiemo Fetzer</td>
<td width="6%">tf</td>
<td width="60%">redaktion@devmag.net</td>
</tr>


Mit XSL können Sie jetzt z.B. sagen, das die Autoren nach dem ABC angezeigt werden, oder das nur ein bestimmter Autor angezeigt wird.

Das erste Beispiel für XSL

Die Beispiele funktionieren garantiert mit dem Internet Explorer 6, da dieser als einer der wenigen XSL kompatibel ist.

autor.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="autor.xsl"?>
<autor>
<name>Thiemo Fetzer</name>
<nic>tf</nic>
<email>redaktion@devmag.net</email>
</autor>

Der hier fett gedruckte Teil verweist auf das XSL Template autor.xsl. In dieser Datei befinden sich die XSL Anweisungen.

autor.xsl


<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head>
<title>Autor.xsl</title>
</head>

<body>
<table border="1">
<tr>
<td width="34%">Name</td>
<td width="6%">Nic</td>
<td width="60%">Email</td>
</tr>
<tr>
<td><xsl:value-of select="autor/name"/></td>
<td><xsl:value-of select="autor/nic"/></td>
<td><xsl:value-of select="autor/email"/></td>
</tr>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>


Erstellen Sie einfach einmal diese Dateien, und schauen Sie sich das Ergebnis in ihrem Browser an.
Und siehe da, Sie bekommen eine Tabelle zu sehen, die den Inhalt aus der Datei autor.xml ausgibt.

Die Ausgabe
Die Ausgabe

Das XSL Stylesheet beginnt ebenfalls mit dem Verweis auf die XML Version, da die Befehle der Stylesheets ebenfalls auf XML basieren, und deshalb auch den selben Regeln unterworfen sind.

<?xml version="1.0" encoding="ISO-8859-1"?>


Die nächste Anweisung verweist auf die Version von XSL, und definiert den Namespace für die XSL Anweisungen. In diesem Fall ist es der Namensraum "xsl", das heißt, das jedem XSL Befehl ein xsl: vorangestellt werden muss, damit sich die XSL Anweisungen von den anderen Tags eindeutig unterscheiden, und es zu keinen Komplikationen kommt. Dieser Befehl umschließt das komplette Stylesheet. Nur zwischen diesem Tag können XSL Befehle stehen, da Sie nur in diesem Bereich definier sind.

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">


Die Definition des Namespaces ist hier fett gedruckt. Die folgende Adresse verweist auf die W3C Veröffentlichung des XSLT Standards.

<xsl:template match="/">


Mit dieser Zeile beginnt das XSL Template, dieser Befehl umschließt das Template. Dies ist auch schon der größte Unterschied zu CSS. CSS verwendet Regeln, XSL arbeitet mit Templates (Vorlagen).
Das Attribut match="/" besagt, das der Browser bei dem Wurzelelement, also dem Element in erster Ebene beginnen soll. Setzen Sie match="autor" dann müssen Sie dieses "autor" bei folgenden Angaben nicht mehr machen, da der Browser in dieser Ebene startet.

Nun beginnt der Teil, der auch im Browser ausgegeben wird. Wie Sie sehen hat auch das XSL Template einen Kopf, und einen Körper. Der interssanteste Teil ist, wie die Daten aus der XML Datei ermittelt werden, und dann innerhalb der Tabellenstruktur ausgegeben werden.

<xsl:value-of select="autor/name"/>

"Value-of" bedeutet soviel wie "Wert von". Mit dem Attribut select="" geben Sie die Quelle, in welcher der Wert steht, an. Die Quelle ist "autor/name".
Da XML ja beliebig ineinander verschachtelt werden kann, muss auch die Angabe der Quelle sehr flexibel sein. "autor" steht für das Wurzelelement, "name" für das untergeordnete <name> Element. Die Unterordnung wird durch den / ausgedrückt.
Das Element "name" könnte jetzt noch die Unterelemente "vorname", "nachname" haben.
Der Verweis sähe dann so aus:
<xsl:value-of select="autor/name/vorname"/>
bzw.
<xsl:value-of select="autor/name/nachname"/>

Am Anfang haben wir definiert, das der Browser beim Wurzelelement anfangen soll. Würden Sie hier
<xsl:template match="autor">
angeben, dann würde der Verweis auf die Quelle nur noch so aussehen:
<xsl:value-of select="name"/>

Nun aber zurück zu dem Beispiel. Es gibt hierbei ja nichts mehr interessantes.
</xsl:template>
</xsl:stylesheet>

Es wird zunächst das Template geschlossen, und darauf das komplette Stylesheet.

for-each


Das Beispiel hat jedoch noch kaum die Stärken von XSL gezeigt.
Die nächste Frage, die sich automatisch stellt ist klar, was macht man, wenn man mehrere Autoren in der XML Datenbank hat, und alle Autoren auf einmal anzeigen lassen will.
Auch hierfür gibt es eine Anweisung, die for-each Anweisung. for-each bedeutet soviel wie "für jedes". Mit ihm kann man folglich eine Art Regel aufstellen, die für jedes Element gelten soll.

autor.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="autor.xsl"?>
<autoren>
<autor>
<name>Thiemo Fetzer</name>
<nic>tf</nic>
<email>redaktion@devmag.net</email>
</autor>
<autor>
<name>Heinz Mustermann</name>
<nic>hm</nic>
<email>hm@devmag.net</email>
</autor>
</autoren>


Das XSL Stylesheet soll alle Autoren in der Liste ausgeben. Hierfür müssen wir das obere Stylesheet mit dem for-each Befehl erweitern.

autor.xsl

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head>
<title>Autor.xsl</title>
</head>

<body>
<table border="1">
<tr>
<td width="34%">Name</td>
<td width="6%">Nic</td>
<td width="60%">Email</td>
</tr>
<xsl:for-each select="autoren/autor">
<tr>
<td><xsl:value-of select="name"/></td>
<td><xsl:value-of select="nic"/></td>
<td><xsl:value-of select="email"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>


Die Ausgabe im IE 6

Die Ausgabe im IE 6

Die for-each Anweisung ist eine Art Schleife, bei der Code zwischen dem öffnenden und dem schließenden Element auf jedes ausgewählte Element angewendet wird.

<xsl:for-each select="autoren/autor">
<tr>
<td><xsl:value-of select="name"/></td>
<td><xsl:value-of select="nic"/></td>
<td><xsl:value-of select="email"/></td>
</tr>
</xsl:for-each>


Durch select="" kann man auch dieses for-each Anweisungen eine Quelle angeben, auf welche Elemente sie angewendet werden. Es lassen sich auch mehrere for-each Anweisungen ineinander verschachteln.
Wir ziehen hierzu nochmals das Beispiel von oben heran. Hierbei wird das Element "name" nochmals in "vorname", und "nachname" unterteilt.
Um trotzdem das Ergebnis von oben zu erhalten, muss eine zweite for-each Anweisung verwendet werden, die in die erste verschachtelt ist.

<xsl:for-each select="autoren/autor">
<tr>
<td><xsl:for-each select="name">
<xsl:value-of select="vorname"/><br />
<xsl:value-of select="nachname"/><br />
</xsl:for-each>

</td>
<td><xsl:value-of select="nic"/></td>
<td><xsl:value-of select="email"/></td>
</tr>
</xsl:for-each>


Das war der erste Teil des XSL Kurses. Im zweiten Teil lernen Sie Bedingte Ausgaben in verschiedenen Formen kennen.

Bookmark setzen... These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Bloglines
  • MisterWong
  • MySpace
  • Reddit
  • SEOigg
  • Technorati
  • TwitThis
  • Y!GG
  • Google Bookmarks

Weiterführende Links: