SELFHTML/Navigationshilfen XML/DTDs Darstellung von XML-Daten |
Um mit den Konzepten von XSLT vertraut zu werden, empfiehlt es sich, alle Beispiele auf dieser Seite der Reihe nach durchzuarbeiten und zu verstehen.
Die Beispiele decken ein paar typische Einsatzmöglichkeiten von XSLT ab. Die Möglichkeiten der Sprache sind damit jedoch noch nicht ausgeschöpft. XSLT ist ja selbst eine XML-gerechte Sprache und besteht aus bestimmten Elementen und Attributen. Eine systematische Übersicht dazu finden Sie im Abschnitt XSLT-Elemente.
Der Microsoft Internet Explorer 5.x hat je nach Auslieferungstyp Probleme mit diesen Beispielen. Der Grund ist, dass er mit einem veralteten XSLT-Parser ausgeliefert wurde und teilweise noch wird. Dieser Parser interpretiert XSLT basierend auf einer älteren Working Draft des W3-Konsortiums, die aber mittlerweile technisch längst überholt und durch die XSLT-1.0-Empfehlung ersetzt worden ist. Unglücklicherweise sind durch die Verbreitung des Internet Explorers auf diese Weise Millionen von Kopien eines völlig unbrauchbaren XSLT-Parsers in die Welt gelangt. Obwohl Microsoft längst Updates zu dem unbrauchbaren Werkzeug anbietet, ist nicht mehr zu verhindern, dass viele Anwender einen Internet Explorer besitzen, der XSLT-Übersetzungen nur über abenteuerliche Umwege und nur sehr unvollständig interpretiert. Deshalb bleibt der sinnvolle Einsatz von XSLT bis auf weiteres wohl nur server-seitig möglich. Einzelheiten zu der XSLT-Implementierung des Internet Explorers können Sie im Web z.B. in der Unofficial MSXML XSLT FAQ nachlesen.
In den Beispielen auf dieser und den folgenden Seiten wird auf die ältere Implementierung des Internet Explorers keine Rücksicht genommen. XSLT wird so beschrieben, wie es heute verwendet werden sollte. Um die Beispiele nachzuvollziehen, gibt es z.B. Software-Werkzeuge wie Saxon oder Xt. Im Linkverzeichnis des Online-Angebots von SELFHTML aktuell finden Sie Links zu solcher Linkverzeichnis: XML-Software.
Beispielhaft sei die Arbeit mit Saxon beschrieben. Dieses Programm ist ein reiner XSLT-Parser, der aus einer XML-Datei und einem XSLT-Stylesheet eine Ausgabedatei aufgrund der XSLT-Definitionen erzeugt. Saxon ist rein kommandozeilenorientiert (für Windows-Anwender gibt es eine Version, die im DOS-Fenster lauffähig ist). Dadurch ist Saxon auch hervorragend geeignet, um beispielsweise von CGI-Scripts ausgeführt zu werden, die XML-Daten in HTML-Form an einen aufrufenden Browser senden wollen.
Ein einfacher Aufruf von Saxon lautet:
saxon meinedaten.xml meine.xsl >ausgabe.html
Dabei ist meinedaten.xml eine Datei mit einer XML-Datenstruktur. Die Datei meine.xsl enthält XSLT-Definitionen, wie XML-Datenstrukturen aus XML-Daten wie denen der meinedaten.xml in HTML übersetzt werden sollen. ausgabe.html ist der Name der HTML-Datei, die aus den XML-Ausgangsdaten und den Definitionen zur HTML-Übersetzung erzeugt werden soll.
Auch in Verbindung mit CGI-Scripts läßt sich ein Programm wie Saxon hervorragend einsetzen. Wenn Sie sich mit CGI und Perl beschäftigen, finden Sie im Abschnitt qx(...) - Andere Programme/Scripts ausführen und STDOUT auffangen ein Beispiel beschrieben, wie Sie server-seitig gespeicherte XML-Daten mit Hilfe von Saxon und Perl als HTML-Code an den aufrufenden Browser senden können.
Die Beispiele dieser und der folgenden Seiten wurden auf diese Weise mit Saxon von XML nach HTML übersetzt. Die HTML-Ergebnisdateien sind als Anzeigebeispiele aufrufbar. Ebenfalls aufrufbar sind die XML-Dateien.
Das erste Beispiel zeigt den einfachsten möglichen Fall: es gibt eine DTD, in der nur ein einziges Element definiert wird. Die XML-Anwendungsdatei ist entsprechend einfach. Eine XSL-Datei, die XSLT-Anweisungen enthält, sorgt für eine Transformation nach HTML.
Anzeigebeispiel: So sieht's aus (Ergebnisdatei gruss.htm)
Anzeigebeispiel: So sieht's aus (Datei gruss.xml - XML/XSLT-fähiger Browser erforderlich)
<!ELEMENT gruss (#PCDATA)> |
<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE gruss SYSTEM "gruss.dtd"> <?xml-stylesheet type="text/xsl" href="gruss.xsl" ?> <gruss>hallo Welt!</gruss> |
<?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></head><body> <p align="center" style="font-family:Tahoma; font-size:48pt; color:red"> <xsl:value-of select="." /> </p> </body></html> </xsl:template> </xsl:stylesheet> |
In der Beispiel-DTD, die separat in einer Datei namens gruss.dtd gespeichert wird, wird das einzige Element des kleinen Beispiels, nämlich das Dokument-Element gruss
, definiert. Einzelheiten zu solchen Element-Definitionen finden Sie im Abschnitt Elemente und Verschachtelungsregeln.
In der XML-Anwendungsdatei gruss.xml wird in einer Dokumenttyp-Deklaration mit externer DTD auf die zuvor erstellte DTD Bezug genommen. Gleich im Anschluss an die Dokumenttyp-Deklaration, noch vor den eigentlichen Nutzdaten der Datei, folgt eine Anweisung, mit deren Hilfe eine XSL-Datei eingebunden wird:
<?xml-stylesheet type="text/xsl" href="gruss.xsl" ?>
Es handelt sich um eine Verarbeitungsanweisung an die verarbeitende Software. Durch die Notation xml-stylesheet
weiß die verarbeitende Software, dass die nachfolgenden Attribute eine separate Stylesheet-Datei einbinden. Mit dem href
-Attribut wird die Datei referenziert. Ebenfalls wichtig ist das Attribut type
. Bei Verwendung von XSL erhält erwartet der XML-Parser bei diesem Attribut den Wert text/xsl
.
Von Interesse ist nun der Aufbau der XSL-Datei, im Beispiel die Datei gruss.xsl. XSL-Stylesheet-Dateien erhalten üblicherweise die Endung .xsl. Da es sich bei XSL-Dateien ebenfalls um XML-gerechte Dateien handelt, beginnt die Datei wie üblich mit einer XML-Deklaration (im Beispiel: <?xml version="1.0" encoding="ISO-8859-1"?>
).
Der gesamte Inhalt der XSL-Datei ist in <xsl:stylesheet...>...</xsl:stylesheet>
eingeschlossen. Die Notation mit dem Doppelpunkt ist die typische Notation, wenn in einer Datei andere XML-Namensräume eingesetzt werden. Im einleitenden Tag wird angegeben, welche Namensräume verwendet werden. Anzugeben ist auf jeden Fall der Namensraum von XSL, der verwendet werden soll. Dabei sollten Sie http://www.w3.org/1999/XSL/Transform
als Namensraum angeben. Der ältere Parser des Microsoft Internet Explorers kann die Daten dann freilich nicht verarbeiten. Moderne XSL-Parser dagegen erwarten diese Angabe.
Mit einem zweiten xmlns
-Attribut im einleitenden <xsl:stylesheet>
-Tag können Sie außerdem den Namensraum der gewünschten Ergebnissprache angeben. Im obigen Beispiel wurde darauf verzichtet. Wenn Sie jedoch ein XML-gerechtes Ergebnisdokument benötigen, müssen Sie dessen Namensraum angeben. Mit einer Angabe wie xmlns="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
geben Sie beispielsweise den Namensraum von XHTML 1.0 in der Variante "Transitional" an.
Alle einleitenden und schließenden Tags innerhalb von <xsl:stylesheet...>...</xsl:stylesheet>
, die zum Namensraum von XSL gehören, sind an der Notation <xsl:...>...</xsl:...>
erkennbar. Der Namensraum, mit dem XSL eingebunden wird, muss übrigens nicht zwingend xsl
lauten, doch hat sich dieser Name verständlicherweise eingebürgert.
Das obige Beispiel fährt fort mit <xsl:template match="/">
(engl. template = dt. Schablone). xsl:template
erhält im einleitenden Tag stets ein Attribut namens match=
, bei dem Sie angeben, welches Element aus Ihren XML-Daten transformiert werden soll. Mit der Angabe match="/"
beziehen Sie sich auf die Dokumentwurzel der XML-Daten, repräsentiert durch das Element gruss
, angewendet in dem Tag-Paar <gruss>...</gruss>
.
Nachdem Sie mit match=
ausgewählt haben, auf welches XML-Element Sie sich bei der folgenden Template-Definition beziehen, können Sie als Inhalt des xsl:template
-Elements notieren, wie das ausgewählte XML-Element transformiert werden soll. Da in HTML transformiert werden soll, wird also als Inhalt von xsl:template
der gewünschte HTML-Code notiert. Im obigen Beispiel ist das eine vollständige kleine HTML-Datei. Der Grund dafür ist, dass mit match="/"
ja die Dokumentwurzel der XML-Daten ausgewählt wurde. Da als Ergebnis eine vollständige HTML-Datei erzeugt werden soll, wird die Dokumentwurzel der XML-Daten in das typische Grundgerüst einer HTML-Datei transformiert.
Innerhalb des HTML-Codes soll nun an einer gewünschten Stelle, im Beispiel zwischen <body>
und </body>
in einem Absatz <p>...</p>
, der Inhalt von <gruss>...</gruss>
ausgegeben werden. Dazu dient im Stylesheet der Befehl <xsl:value-of select="." />
(engl. value-of = dt. Wert von). Die Angabe select="."
bedeutet so viel wie "wähle den vollständigen Inhalt des aktuellen Elements aus". Damit die HTML-Ausgabe etwas attraktiver aussieht, enthält das einleitende <p>
-Tag Formatierangaben. Auch CSS-Angaben sind dabei, wie Sie am Beispiel sehen können, erlaubt. Bei der Transformation wird an der entsprechenden Stelle also folgender HTML-Code erzeugt:
<p align="center" style="font-family:Tahoma; font-size:48pt; color:red">
Hallo Welt!
</p>
Das Gruß-Beispiel hat eine starre XML-Struktur. Laut DTD-Definition darf darin genau einmal <gruss>...</gruss>
notiert werden mit einem Grußtext als Inhalt. Das folgende Beispiel zeigt eine Datenstruktur, in der es ein Textelement gibt, dass beliebig oft vorkommen kann, und das auch noch weitere, innere Elemente enthalten kann. Das Beispiel behandelt eine Produktnews-Datei, in der Nachrichten über neue Produkte auf dem Software-Markt gesammelt werden.
Die XSLT-Angaben zur Transformation nach HTML müssen in diesem komplexeren Beispiel etwas anders aufgebaut werden.
Anzeigebeispiel: So sieht's aus (Ergebnisdatei produktnews.htm)
Anzeigebeispiel: So sieht's aus (Datei produktnews.xml - XML/XSLT-fähiger Browser erforderlich)
<!ELEMENT produktnews (#PCDATA | beschreibung)*> <!ELEMENT beschreibung (#PCDATA | hersteller | produkt | preis)*> <!ELEMENT hersteller (#PCDATA)> <!ELEMENT produkt (#PCDATA)> <!ELEMENT preis (#PCDATA)> |
<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE produktnews SYSTEM "produktnews.dtd"> <?xml-stylesheet type="text/xsl" href="produktnews.xsl" ?> <produktnews> Die neuesten Produktnachrichten: <beschreibung> Die Firma <hersteller>Fridolin Soft</hersteller> hat eine neue Version des beliebten Ballerspiels <produkt>HitYourStick</produkt> herausgebracht. Nach Angaben des Herstellers soll die neue Version, die nun auch auf dem Betriebssystem <produkt>Ganzfix</produkt> läuft, um die <preis>80 Dollar</preis> kosten. </beschreibung> <beschreibung> Von <hersteller>Ripfiles Inc.</hersteller> gibt es ein Patch zu der Sammel-CD <produkt>Best of other people's ideas</produkt>. Einige der tollen Webseiten-Templates der CD enthielten bekanntlich noch versehentlich nicht gelöschte Angaben der Original-Autoren. Das Patch ist für schlappe <preis>200 Euro</preis> zu haben. </beschreibung> </produktnews> |
<?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></head><body style="font-family:Verdana; font-size:18pt; color:green"> <xsl:apply-templates /> </body></html> </xsl:template> <xsl:template match="beschreibung"> <p style="font-family:Verdana; font-size:10pt; color:black"> <xsl:apply-templates /> </p> </xsl:template> <xsl:template match="hersteller"> <span style="font-weight:bold; color:red"><xsl:value-of select="." /></span> </xsl:template> <xsl:template match="produkt"> <span style="font-weight:bold; color:blue"><xsl:value-of select="." /></span> </xsl:template> <xsl:template match="preis"> <b><xsl:value-of select="." /></b> </xsl:template> </xsl:stylesheet> |
Das Beispiel definiert in der DTD produktnews.dtd die gewünschten Elemente und ihre Verschachtelungsregeln. In der Anwendungsdatei produktnews.xml sehen Sie ein Beispiel, wie diese Definitionen korrekt umgesetzt werden. Einzelheiten zu solchen Element-Definitionen in DTDs finden Sie im Abschnitt Elemente und Verschachtelungsregeln.
Genau wie im Gruß-Beispiel wird in der XML-Datei wieder die XSL-Datei mit den Angaben zur Transformation nach HTML eingebunden. Die XSL-Datei - hier mit Namen produktnews.xsl - hat auch wieder das typische Grundgerüst, bestehend aus dem xsl:stylesheet
-Element, das den Bezug zum Namensraum von XSL herstellt.
Wie im Gruß-Beispiel wird die Dokumentwurzel mit <xsl:template match="/">
angesprochen. Zwischen diesem einleitenden Tag und seinem Gegenstück </xsl:template>
wird das HTML-Grundgerüst für die Transformation notiert. Innerhalb von <body>...</body>
ist in diesem Beispiel jedoch nur das leere Element <xsl:apply-templates />
notiert (engl. apply-templates = dt. Schablonen anwenden). Mit dieser Angabe weisen Sie den XSLT-Parser an, an der entsprechenden Stelle Templates anzuwenden, die außerhalb des aktuellen xsl:template
-Elements notiert sind.
dass in diesem Beispiel mehrere einzelne Template-Definitionen mit je eigenen xsl:template
-Elementen benötigt werden, liegt daran, dass der Inhalt, der in der HTML-Ausgabe zwischen <body>...</body>
folgt, keinen starren Aufbau hat. So können innerhalb des Wurzelelements produktnews
sowohl Text als auch beliebig viele Elemente vom Typ beschreibung
und deren Kindelemente vorkommen. Die Angabe <xsl:apply-templates />
können Sie also lesen wie "beachte für Elemente, die innerhalb dieses Elements vorkommen, die separat definierten Templates für die betreffenden Elemente".
Die zweite Template-Definition im Beispiel beginnt mit <xsl:template match="beschreibung">
. Damit geben Sie an, dass der folgende HTML-Code für alle Inhalte des Elementtyps beschreibung
gilt. Im Beispiel wird für solche Elemente jeweils ein HTML-Absatz <p>...</p>
mit gewünschten Formatierungen erzeugt. Innerhalb dieses xsl:template
-Elements ist wieder nur <xsl:apply-templates />
notiert. Der Grund ist auch in diesem Fall wieder, dass Elemente vom Typ beschreibung
gemischten Inhalt mit weiteren möglichen Kindelementen enthalten können. Für diese Kindelemente werden wiederum eigene Templates definiert, die durch die Anweisung <xsl:apply-templates />
berücksichtigt werden.
Für jeden der möglichen Kindelementtypen von beschreibung
, im Beispiel die Typen hersteller
, produkt
und preis
, werden Templates nach dem gleichen Muster angelegt. Da diese drei Elemente selbst keine weiteren Elemente mehr, sondern nur noch Zeicheninhalt (#PCDATA
) enthalten können, beziehen sich die Angaben für die HTML-Formatierung einfach auf deren Inhalt. Den Inhalt müssen Sie dabei wie im Gruß-Beispiel mit <xsl:value-of select="." />
referenzieren.
In den beiden ersten Beispielen wurde nur mit Elementen gearbeitet. Im Fall der Hyperlinks muss beim Erzeugen der HTML-Ausgabe jedoch auf ein einzelnes Attribut zugegriffen werden, nämlich auf das href
-Attribut des a
-Elements. Auch das ist mit XSLT möglich. Ebenso ist es, wenn Sie Grafiken oder Multimedia einbinden wollen. Dann müssen Sie beispielsweise auf das src
-Attribut des img
-Elements oder das data
-Attribut des object
-Elements zugreifen. Das folgende Beispiel demonstriert dies anhand der Hyperlinks.
Anzeigebeispiel: So sieht's aus (Ergebnisdatei linktext.htm)
Anzeigebeispiel: So sieht's aus (Datei linktext.xml - XML/XSLT-fähiger Browser erforderlich)
<!ELEMENT linktext (#PCDATA | link)*> <!ELEMENT link (#PCDATA)> |
<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE linktext SYSTEM "linktext.dtd"> <?xml-stylesheet type="text/xsl" href="linktext.xsl" ?> <linktext> Unter der Adresse <link>http://www.w3.org/Style/XSL/</link> finden Interessierte die Einstiegsseite des W3-Konsortiums zu XSL. </linktext> |
<?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></head><body bgcolor="#FFFFFF" text="#000000" link="#FF0000" vlink="#AA0000" alink="#000000" style="font-family:Arial; font-size:10pt;"> <xsl:apply-templates /> </body></html> </xsl:template> <xsl:template match="link"> <a><xsl:attribute name="href"><xsl:value-of select="." /></xsl:attribute> <xsl:value-of select="." /></a> </xsl:template> </xsl:stylesheet> |
Das Beispiel definiert in der DTD linktext.dtd die gewünschten Elemente. In der Anwendungsdatei linktext.xml sehen Sie ein Beispiel, wie diese Definitionen korrekt umgesetzt werden. Einzelheiten zu solchen Element-Definitionen in DTDs finden Sie im Abschnitt Elemente (Tags) und Verschachtelungsregeln.
Genau wie im Gruß-Beispiel wird in der XML-Datei wieder die XSL-Datei mit den Angaben zur Transformation nach HTML eingebunden. Die XSL-Datei - hier mit Namen linktext.xsl - hat auch wieder das typische Grundgerüst.
Wie im Text-Beispiel kann das Dokument-Element linktext
in diesem Beispiel gemischten Inhalt haben, bestehend aus Text und einem möglichen Kindelement link
. Bei der Konstruktion der HTML-Ausgabe wird daher zwischen <body>...</body>
wieder nur das leere Element <xsl:apply-templates />
notiert. Der HTML-Code für das mögliche Kindelement link
wird in dem eigenen Template definiert, das mit <xsl:template match="link">
beginnt.
Bei diesem Template können Sie erkennen, wie auf einzelne Attribute zugegriffen wird. Denn um aus <link>http://www.w3.org/Style/XSL/</link>
eine anklickbare HTML-Ausgabe wie <a href="http://www.w3.org/Style/XSL/">http://www.w3.org/Style/XSL/</a>
zu erzeugen, muss der Inhalt des link
-Elements gleich zweimal ausgegeben werden: einmal als Wertzuweisung an das href
-Attribut, und einmal als Inhalt des a
-Elements.
Dazu notieren Sie beim HTML-Code, der erzeugt werden soll, erst einmal nur das einleitende Tag ohne Attribut, im Linkbeispiel also nur <a>
. Anschließend notieren Sie <xsl:attribute name="href">
. Der XSLT-Parser weiß dann, dass sich das so angesprochende href
-Attribut auf das zuvor notierte HTML-Element bezieht. Der Inhalt zwischen diesem Einleitungs-Tag und seinem Gegenstück </xsl:attribute>
ist der Wert, den Sie dem Attribut zuweisen möchten. Im obigen Beispiel soll das ja der Inhalt sein, der zwischen <link>
und </link>
steht. Dieser Inhalt lässt sich mit der bereits bekannten Anweisung <xsl:value-of select="." />
referenzieren. So gelangt der Zeicheninhalt des XML-Elements in die Wertzuweisung an das HTML-Attribut.
Gleichzeitig soll der Inhalt von <link>...</link>
aber in HTML auch als Inhalt von <a...>...</a>
erscheinen. Also wird auch dafür noch einmal <xsl:value-of select="." />
innerhalb des Templates für das link
-Element notiert.
Bei Grafiken und Multimedia gehen Sie analog dazu vor. Angenommen in den XML-Daten steht:
<bild>images/titel.gif</bild>
Dann können Sie dies in XSL wie folgt in HTML übersetzen:
<xsl:template match="bild">
<img><xsl:attribute name="src"><xsl:value-of select="." /></xsl:attribute></img>
</xsl:template>
Wichtig: das img
-Element in HTML sollten Sie in diesem Fall mit Anfangs- und End-Tag und nichts dazwischen notieren. Ansonsten produzieren die XSLT-Parser in der Regel Fehler.
Ein Glossar ist ein typisches Dokument mit einer einfachen, sich wiederholenden Struktur. Ein Glossar besteht aus Begriffen und zugehörigen Definitionen. Jeweils ein Begriff mit Definition stellt ein Glossareintrag dar. Bei der Transformation dieser XML-Daten nach HTML soll das Glossar als zweispaltige Tabelle formatiert werden. In der linken Spalte stehen die Begriffe, und in der rechten Spalte die zugehörigen Definitionen.
Anzeigebeispiel: So sieht's aus (Ergebnisdatei glossar.htm)
Anzeigebeispiel: So sieht's aus (Datei glossar.xml - XML/XSLT-fähiger Browser erforderlich)
<!ELEMENT glossar (eintrag)*> <!ELEMENT eintrag (begriff,definition)> <!ELEMENT begriff (#PCDATA)> <!ELEMENT definition (#PCDATA)> |
<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE glossar SYSTEM "glossar.dtd"> <?xml-stylesheet type="text/xsl" href="glossar.xsl" ?> <glossar> <eintrag> <begriff>Avatar</begriff> <definition> Bezeichnet in der Mythologie einen Gott, der auf Erden wandelt. Im Online-Sprachgebrauch eine grafische Phantasiefigur, mit der ein Teilnehmer an Chats, Rollenspielen usw. teilnimmt. </definition> </eintrag> <eintrag> <begriff>Award</begriff> <definition> Im WWW eine Auszeichnung für besonders gut gemachte Webseiten. Eine Inflation von selbsternannten Award-Verleihern, deren Awards nur den Zweck haben, Besucher auf die eigenen Seiten zu locken, haben das Award-Wesen im Web jedoch stark beschädigt. </definition> </eintrag> </glossar> |
<?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> </head> <body> <table border="1"> <tr> <td><b>Begriff</b></td> <td><b>Definition</b></td> </tr> <xsl:for-each select="glossar/eintrag"> <tr> <td valign="top"><xsl:value-of select="begriff" /></td> <td valign="top"><xsl:value-of select="definition" /></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet> |
Das Beispiel definiert in der DTD glossar.dtd die gewünschten Elemente. In der Anwendungsdatei glossar.xml sehen Sie ein Beispiel, wie diese Definitionen korrekt umgesetzt werden. Einzelheiten zu solchen Element-Definitionen in DTDs finden Sie im Abschnitt Elemente (Tags) und Verschachtelungsregeln.
Genau wie im Gruß-Beispiel wird in der XML-Datei wieder die XSL-Datei mit den Angaben zur Transformation nach HTML eingebunden. Die XSL-Datei - hier mit Namen glossar.xsl - hat auch wieder das typische Grundgerüst.
Da das Glossar einen starren Aufbau hat, bestehend aus festem Elementinhalt mit fester Reihenfolge, ist es möglich, die gesamte gewünschte HTML-Ausgabe ähnlich wie im Gruß-Beispiel mit einem einzigen xsl:template
-Element zu erzeugen. Ein wichtiger Unterschied zum Gruß-Beispiel besteht jedoch: während der Gruß in der XML-Datei nur einmal notiert werden durfte, kann das Glossar entsprechend der DTD-Definitionen aus beliebig vielen Glossareinträgen bestehen. Diese sind allerdings einheitlich aufgebaut.
Für solche Fälle gibt es die Schleifen-Anweisung xsl:for-each
(engl. for-each = dt. für jedes einzelne). Sie kommt im obigen Beispiel dort zum Einsatz, wo sie im HTML-Code einen Wiederholungs-Effekt erzeugen soll. Die Daten des Glossars sollen ja als HTML-Tabelle ausgegeben werden, also wird mit <table...>...</table>
eine entsprechende Tabelle erzeugt. Innerhalb der Schleife, die die mit <xsl:for-each select="glossar/eintrag">
eingeleitet wird, wird eine Tabellenzeile konstruiert. Das führt dazu, dass beim Erzeugen der HTML-Ausgabe so viele Tabellenzeilen erzeugt werden, wie das Glossar Einträge hat. Innerhalb der Schleife wird als Inhalt von <tr>...</tr>
mit der bereits bekannten Anweisung <xsl:value-of select="." />
auf den durch die Schleife jeweils aktuellen Inhalt der Elemente begriff
und definition
Bezug genommen.
Neu an dem Glossarbeispiel ist ferner die Adressierung select="glossar/eintrag"
beim xsl:for-each
-Element. Dort muss der gesamte Pfadname des Elements angegeben werden, bei dem die Schleife wiederholt werden soll. Der Pfadname beginnt beim Dokument-Element, also glossar
. Gewünscht ist das Element eintrag
, das ein Kindelement von glossar
ist. Solche Hierarchien werden genauso notiert wie Verzeichnisnamen in URIs, also getrennt durch Schrägstriche. Die Regeln für solche Pfadangaben werden duch die Sprache
XPath geregelt.
XSLT-Elemente | |
Grundlagen von XSL/XSLT | |
SELFHTML/Navigationshilfen XML/DTDs Darstellung von XML-Daten |
© 2001 selfhtml@teamone.de