Spaces. Smartes Cloud Hosting für anspruchsvolle Webprojekte. Loslegen und Spaces testen. Von Mittwald.
Gastautor 10. September 2003

XML-Workshop Teil 3: Auslesen mit XSL(T)

Kein Beitragsbild

von Jan Winkler

Nach CSS ist XSL die zwei­te Möglichkeit, um XML vom Browser anzei­gen zu las­sen. XSL(T) lie­fert die Funktionen und die erfor­der­li­che Syntax, um XML-Elemente bei­spiels­wei­se in HTML umzu­wan­deln.

Was genau ist XSL?
XSL steht für Exten­si­ble Style­sheet Language und beschreibt die Darstellung und Behandlung von XML-Daten mit Hilfe von XSL-Stylesheets. XSL umfasst sowohl XSLT als Transformationssprache als auch XSL(-FO) als Formatierungssprache. Beide sind von XML abge­lei­tet – fol­gen also deren Syntax und Regeln. XSLT hält Elemente bereit, die die Transformation (~ Umwandlung) von XML-Daten in ande­re Dateiformate erlau­ben (HTML, RTF, …). XSL-FO wie­der­um stellt Elemente zur Verfügung, die fest­le­gen, wie XML-Daten ange­zeigt wer­den. Es ist ver­gleich­bar mit den Cascading Style Sheets. Im Folgenden wer­den wir uns auf die Transformation kon­zen­trie­ren.

So schreibt man XSL
Da XSL von XML abge­lei­tet wird, ist die Syntax ver­gleich­bar. Dies hat den ange­neh­men Nebeneffekt, dass XSL(T)-Dokumente pro­blem­los mit einem XML-Editor erstellt und bear­bei­tet wer­den kön­nen. Grundsätzlich erhal­ten XSL-Dokumente die Dateiendung .xsl.

Ebenso wie ein XML-Dokument, muss auch XSL mit der XML-Deklaration begin­nen, ein root-Element (xsl:stylesheet) ent­hal­ten und wohl­ge­formt sein. Fertige XSL-Dokumente wer­den wie CSS-Dateien in XML ein­ge­bun­den – man ver­wen­det ledig­lich einen ande­ren Dateityp. Ein Beispiel:

 <?xml-stylesheet href="meinxsl.xsl" type="text/xsl"?>
    

Wichtig bei der XSL-Formatierung
XSL-FO ist für die Formatierung von XML-Dokumenten zustän­dig. Im Gegensatz zu CSS wird hier die XML-Schreibweise ver­wen­det, jedoch sind die Elementnamen iden­tisch mit den Eigenschaftsnamen von CSS. Anmerken wol­len wir an die­ser Stelle noch, dass mit XSL auch die Umwandlung in das PDF-Format mög­lich wird, denn auch PDF wid­met sich zum größ­ten Teil der Formatierung von Daten. Da die­se Verwendung – ver­gli­chen mit XSLT – im World Wide Web weni­ger ver­brei­tet ist, wer­den wir hier nicht näher dar­auf ein­ge­hen.

Die Funktionsweise von XSLT
XSLT funk­tio­niert nach dem Prinzip des Dokument-Baumes. Übersetzt heißt das: Jedes Element bil­det einen Knoten, von dem wie­der­um die Unterelemente abzwei­gen. Somit ergibt sich eine Baumstruktur. Aus (X)HTML ken­nen wir fol­gen­den Aufbau:

Verzweigung einer HTML-Datei

Verzweigung einer HTML-Datei

XSLT wird die­se Knoten nun nach­ein­an­der abschrei­ten und umwan­deln. Ebenso wie im Beispiel die Elemente, kön­nen auch Attribute, Text oder Kommentare als Knoten fun­gie­ren. Durch die Umwandlung ent­steht letzt­lich ein neu­es Dokument, genau hier­in besteht das Ziel von XSLT!

Wann wird trans­for­miert?
Man kann auf drei Arten trans­for­mie­ren, um zu einem zufrie­den­stel­len­den Ergebnis im (HTML-)Browser zu gelan­gen.

  1. Die XML-Daten wer­den auf dem Server schon vor dem Versand an den Besucher umge­wan­delt und als HTML gespei­chert. Der Vorteil liegt in der garan­tier­ten Übertragung von HTML-Daten – der Nachteil aber liegt dar­in, dass die Funktionsvielfalt von XSL(T) erheb­lich ein­ge­schränkt ist. Dieser Weg ist etwa geeig­net, um Daten aus einer XML-Datenbank ein­ma­lig in HTML-Dokumente umzu­wan­deln.
  2. In Variante Nr. 2 wird XML mit dem dazu­ge­hö­ri­gen XSL-Stylesheet auf dem Server belas­sen und auch von die­sem trans­for­miert. Dies ist eine der bes­ten und zugleich sichers­ten Varianten. Der vol­le Umfang von XSL kann ange­wandt wer­den, etwa in Verbindung mit JavaServerPages oder Scriptsprachen. Hinzu kommt die Sicherheit, dass alle Browser auch das Gleiche zu sehen bekom­men.
  3. Die drit­te Variante ist das Transformieren vom Browser selbst. Der Browser erhält dazu vom Server die XML- und XSL-Dokumente und kann sie dann umwan­deln. Diese Methode ist aller­dings eher weni­ger zu emp­feh­len, da der­zeit nur weni­ge Browser die­ses Verfahren unter­stüt­zen und alle ande­ren – vor­sich­tig for­mu­liert – so nur ‘Datenschrott’ erhal­ten. Das fol­gen­de Schema zeigt alle drei Wege noch ein­mal auf:

Wege der XSL-Transformierung

Wege der XSL-Transformierung

XSL tes­ten
Zwischen Theorie und Praxis lie­gen oft Welten, nicht nur des­halb emp­fiehlt sich ein Testlauf. Nachdem wir nun die mög­li­chen Transformationswege ken­nen, kön­nen wir dar­aus den­je­ni­gen wäh­len, der uns zum Testen am ein­fachs­ten erscheint.

Der sicher­lich ein­fachs­te Weg ist das Testen der XSL-Dokumente per Browser. Nicht alle sind dazu geeig­net – rela­tiv gut bekommt es jedoch der Mozilla hin. Er deckt zwar nicht das vol­le XSL(T) Spektrum ab (jeden­falls der­zeit noch nicht). Für ein­fa­che Anwendungen ist er schon mehr als taug­lich. Die meis­ten hier ange­ge­be­nen Beispiele kön­nen Sie pro­blem­los mit die­sem Browser tes­ten.

So sind XSLT-Dokumente auf­ge­baut
XSLT-Dokumente begin­nen mit der XML-Deklaration. Darauf fol­gen even­tu­el­le Processing-Instructions (PIs). Das eigent­li­che Dokument besteht aus einem root-Element, wel­ches sich xsl:stylesheet nennt. Damit das Dokument als XSLT und nicht XSL-FO Dokument ange­se­hen wird (da bei­de die­ses Element ver­wen­den), muss aus­ser­dem der Namespace xsl inner­halb des Roots mit der URL

      http://www.w3.org/1999/ XSL/Transform
    

defi­niert wer­den. Zu guter Letzt ergibt sich fol­gen­de Struktur, der alle XSLT-Dokumente fol­gen:

      <?xml version="1.0"?> <xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > <!-- Inhalt des Dokumentes 
--> </xsl:stylesheet>
    

Außer dem Namespace muss auch die ver­wen­de­te Version ange­ge­ben wer­den (der­zeit 1.0). Anstelle des Elements

      xsl:stylesheet
    

kann auch das Synonym

      xsl:transform
    

ver­wen­det wer­den. Es ver­hält sich eben­so wie das eigent­li­che XSL-Element, bie­tet aller­dings einen plau­si­ble­ren Namen (eben Transformierung und nicht Formatierung).

Als Unterelemente sind die fol­gen­den Top-Level Elemente erlaubt:

      xsl:import
xsl:include
xsl:strip-space
xsl:preserve-space
xsl:output
xsl:key
xsl:decimal-format
xsl:namespace-alias
xsl:attribute-set
xsl:variable
xsl:param
xsl:template

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.