XSL/ XSLT Workshop Teil 1

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.

This entry was posted in XML. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *