| XSL ist eine 'Programmiersprache' zur Erstellung von "Filtern". Mit Hilfe intelligenter Filter werden XML-Daten in (fast) beliebige Ausgabe-Formate umgewandelt. | XSL ist ein Mitglied der XML-Familie und daher ein Offener Standard, nicht lizenzpflichtig, und mit allen anderen Mitgliedern der XML-Familie (z.B. HTML) voll kompatibel. |
XML
|
Extended Markup Language |
| Wozu XSL ? | Flexible Erzeugung von 'Produkten' aus XML-Daten |
| XSL-Kompress | Kurze Fragen & Antworten zu XSL |
| Arbeitsprinzip | XSL-Programme als Dialog zwischen Suchen & Finden |
| Start | Erzeugung einer statischen Mini-Webseite mit XSL |
| Dynamisch | Erzeugung dynamischer Webseiten aus XML-Daten |
| Objektgrafik | Erzeugung dynamischer Grafik aus XML-Daten |
| XML+XSL Beispiele | Demonstration verschiedener Beispiele: Tabellen, Formulare, Grafik, ... |
| XSL-Tricks | Tipps & Tricks zur XSL-Programmierung |
| Werkzeug | Entwicklungs-Werkzeug |
| Links |
Ausgewählte
|
Wozu XSL ? |
|
|
XSL ist ein Standard-Werkzeug zur Umwandlung von XML-Rohdaten in fast beliebige andere Formate. Das macht die Darstellung variabler (dynamischer) Daten einfacher und schneller. |
|
|
►
Aus den gleichen XML-Daten können mit Hilfe von XSL-Programmen
unterschiedliche Produkte erzeugt werden. ► Für jedes Endprodukt wird ein eigenes XSL-Programm verwendet, das allerdings beliebige XML-Daten verarbeiten kann. |
►
Die Endprodukte werden von XSL als Datenstrom geliefert, nicht als Datei
gespeichert. Ein Browser-Programm zeigt den erzeugten Datenstrom an. ► Derzeit kann XSL nur Text-Produkte erzeugen. Damit wird allerdings die Mehrheit aller Dokumente (Office, Internet...) erfasst, insbesondere wegen der rasch zunehmenden Bedeutung der XML-Familie. |
|
►
XSL-Programme arbeiten am Client-PC, d.h. die Erzeugung der jeweiligen
Endprodukte erfolgt am AnwenderInnen-PC. ► Die XSL-Programme müssen nur einmal geladen werden. Danach werden sie aus dem Cache-Speicher des PC entnommen und verarbeiten beliebige weitere XML-Daten. noch schneller ► Dadurch wird der Webserver von der Erzeugung dynamischer Webseiten, dynamischer Grafik usw. vollkommen entlastet. |
►
Der Webserver liefert lediglich die aktuellen Daten, aus ihnen werden am
AnwerderInnen-PC die Endprodukte erzeugt. ► Auf diese Weise wird die Kapazität der Client-PC besser genutzt, die meist brachliegt, während ein PC auf das Laden einer Webseite wartet. |
| Der große Vorteil von → Daten in XML-Form ist die vollkommene Unabhängigkeit von Zweck und Medium ihrer Verwendung. | XSL bietet dazu die ideale Ergänzung: Programmierbare Filter, um XML-Daten für alle denkbaren Anwendungen nutzbar zu machen. |
XSL - Kompress |
|
| ♠ Wozu noch eine Programmiersprache ? | XSL ist hoch spezialisiert. Damit werden andere Programmiersprachen nicht konkurriert sondern ergänzt. Moderne Programmiersprachen werden durch eigene XSL-Module ergänzt. |
| ♠ Wozu kann man XSL verwenden ? |
XSL macht nur Sinn zusammen mit
→ XML-Daten.
Damit lassen sich "rohe" XML-Daten in jede sinnvolle Ausgabe-Form
bringen: HTML, WML, SVG, ... Mit XSL lassen sich u.a. auf höchst effiziente Weise dynamische Webseiten erzeugen. |
| ♠ Was sind XML-Daten ? |
Das sind "pure" Daten, ohne Layout oder Formatierung.
Der offene XML-Standard legt fest, wie diese Daten codiert werden.
XML verwendet nur einfachen Text zur Codierung. ♦ Details zu XML-Daten. |
| ♠ Was sind dynamische Webseiten ? |
Dynamische Produkte (Webseiten, Grafik,...) sind nicht gleichbleibend (statisch), sondern
ändern sich je nach den vorliegenden Anforderungen und Daten. Bekannte Beispiele sind die
Verwendung von Javascript für interaktive Webseiten, oder die Erzeugung dynamischer
Webseiten und Grafik am Webserver (mit
→ Perl oder → PHP) -
weniger bekannt ist der Einsatz von XSL. XSL ist nicht immer sinnvoll, jedoch wenn man es einsetzt die effizienteste der genannten Methoden. |
| ♠ Was macht XSL mit XML-Daten ? | XSL erstellt je nach Programm ein Produkt, z.B. in Form einer Tabelle, in welche die Daten "verpackt" sind. So werden die Daten für die Anzeige auf einer Webseite aufbereitet. |
| ♠ XSL erzeugt Tabellen aus Daten ? | Tabellen sind nur eine von unzähligen Möglichkeiten. XSL ist extrem flexibel, kann fast beliebige Ausgabe-Texte erzeugen, gesteuert von den jeweiligen Daten. XSL kann z.B. auch Text oder SVG-Grafik aus Daten erzeugen. Je nach XSL-Programm kann man daher aus den gleichen (!) Daten verschiedene Produkte (Texte, Tabellen, Grafiken, ... ) erzeugen. Es gibt viele prominente, jedoch wenige bekannte Anwendungs-Beispiele: OpenOffice verwendet XSL, um Office-Dokumente in andere Formate umzuwandeln. |
| ♠ XSL erzeugt nur Text-Produkte ? | Derzeit kann XSL nur Texte ausgeben. Fast alle modernen IT-Standards verwenden reinen Text (text/plain) zur Codierung, z.B. HTML, die XML-Familie (SVG, MathML, ChemML, RSS, ODF,...), SQL, ... |
| ♠ Welche Software wird benötigt ? |
XSL-Programme bestehen selbst nur aus reinem Text und können daher mit jedem Text-Editor
erstellt werden. Besser sind natürlich spezialisierte Programmier-Werkzeuge. Auf AnwenderInnen-Seite genügen Browser ohne zusätzliche Software. Alle gängigen Browser in allen Betriebssystemen können XSL problemlos verwenden. |
Start mit XSL |
|
|
Hier wird die Verwendung von XSL demonstriert, zur Vereinfachung
zunächst noch ohne Daten. Im Rahmen rechts eine minimale, aber komplette HTML-Webseite, auf ihrem PC soeben erzeugt mit XML+XSL. |
|
|
►
Das Beispiel wurde in einem <iframe>-Innenrahmen in diese
Webseite eingebunden. Im Rahmen wird die Datei demo10.xml angefordert. ► Alternativ können sie dieses Dokument auch in einem eigenen Browser-Fenster laden. ♦ Details zu HTML-Rahmen und -Innenrahmen. |
<iframe id="if15" src="demo10.xml">
</iframe> |
|
►
Das verwendete XML-Dokument besteht nur aus der XML-Deklaration und der Anforderung des
XSL-Dokuments demo10.xsl ► Die 'Daten' bestehen in diesem Minimal-Beispiel aus einem leeren Element <daten> Das Daten-Element kann beliebige Namen tragen und beliebig viele Daten enthalten, allerdings muss mindestens ein solches Element vorhanden sein. ► Wenn sie mit Rechtsklick den Quelltext der erzeugten Webseite anfordern, erhalten sie den Text dieser XML-Datei. |
Datei demo10.xml
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="demo10.xsl" type="text/xsl" ?> <daten></daten> |
|
►
Rechts das verwendete XSL-Stylesheet. Die Datei enthält ein einfaches 'Programm' zur
Erzeugung der Minimal-Webseite. ► Die Datei muss - wie jede andere Datei der XML-Familie - mit der XML-Deklaration beginnen. ► Danach folgt das <xsl:stylesheet>-Element mit Angabe des verwendeten xmlns Namespace (XML-Befehls-Umfang). ► Als nächste Angabe folgt die verwendete Ausgabe-Methode, im Falle einer Webseite ist das html ► Danach folgen beliebig viele <xsl:template>-Elemente. Ein template ist ein abgeschlossener Block von XSL-Daten und Anweisungen. ► Das Beispiel enthält nur ein einziges template Die Angabe match="/" bedeutet, den Block immer auszuführen, unabhängig von Art und Anzahl der Daten. Das Zeichen "/" bezieht sich auf das root-Element des XML-Objekt-Baums. ► Der Block <xsl:template> ist besonders einfach aufgebaut: Er enthält nur Daten (blaue Schrift) und keine weiteren XSL-Anweisungen. ► Die Daten (=HTML-Anweisungen) werden unverändert in den Datenstrom der Ausgabe übernommen, d.h. aus ihnen besteht die angezeigte Webseite. |
Datei demo10.xsl
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" /> <xsl:template match="/">
<html xmlns="http://www.w3.org/1999/xhtml">
</xsl:template><head></head> <body> <h3>Diese Webseite wurde mit XSL erzeugt</h3> </body> </html> </xsl:stylesheet> |
| Im nächsten Kapitel wird demonstriert, wie dieses Muster zur dynamischen Anzeige von XML-Daten erweitert wird. | |
Dynamische Webseiten mit XSL |
|
|
▲
Dieses Beispiel erzeugt eine Tabelle aus einigen Test-Daten. ▲ Als Live-Nachweis wird die aktuelle Uhrzeit am Server verwendet, im 2. Datensatz die verbleibende Zeit bis Mitternacht. ▲ Sie können dieses Beispiel auch in einem eigenen Browser-Fenster öffnen. ▲ Beachten sie den Quelltext der erzeugten Webseite (Rechtsklick) ! |
|
|
So sieht die verwendete XML-Datei aus: (alternativ können sie mit Rechtsklick in das Beispiel den Quelltext anzeigen). ► Die XML-Daten werden hier nicht von einer Datei geliefert sondern von einem kleinen PHP-Programm. ▲ Hinweis für EntwicklerInnen: PHP muss die XML-Daten im → HTTP-Header mit → MIME-Type text/xml ankündigen. Rechts der erzeugte Text: Dazu wird die gleiche Datei geladen, lediglich mit dem anderen HTTP-Header text/plain Das funktioniert mit allen Browsern problemlos, lediglich M$IE erfordert eine Extra-Behandlung wegen jahrelang unbehobener Fehler. Da die Datei 2mal angefordert wird, können sich die darin enthaltenen (Zeit)-Daten geringfügig unterscheiden. |
XML-Daten aus der Datei demo20.php |
|
Das verwendete XSL-Stylesheet ('Programm') beginnt mit der
XML-Deklaration, mit der XSL-Deklaration und mit Festlegung der
Ausgabe-Methode html ► Die XSL-Datei enthält in diesem Fall 2 templates ► Das erste template wird wegen der Leerformel match="/" immer ausgeführt. Hier werden die Grund-Elemente der XHTML-Webseite als Daten (blau) eingetragen. Außerdem wird das Gerüst der <table>-Tabelle angelegt. ► An Stelle der Tabellen-Daten (Zeilen & Spalten) befindet sich eine Schleife <xsl:for-each>, die für jedes in den Daten gefundene Element <uhrzeit> einmal durchlaufen wird. Mit <xsl:apply-templates> wird angeordnet, in diesem Fall weitere passende templates anzuwenden. ► Das zweite template wird mit dem Filter match="zeit" auf alle gefundenen <zeit>-Elemente angewendet: In diesem Fall wird jeweils eine <tr>-Tabellen-Zeile mit 3 <td>-Spalten angelegt. ► Der Inhalt der 3 Zellen wird durch weitere Filter programmiert: In die erste Zelle (Spalte) wird der Inhalt des <std>-Elements geschrieben, usw. So gelangen die Daten in das XSL-Endprodukt. ► Das XSL-Programm befindet sich im Cache-Speicher ihres PC. Es kann beliebig viele weitere XML-Daten verarbeiten und muss dafür nicht mehr übertragen werden. Dasdurch wird die Anzeige variabler (dynamischer) Daten sehr beschleunigt. |
Datei demo20.xsl (vereinfacht)
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" /> <xsl:template match="/">
<html xmlns="http://www.w3.org/1999/xhtml">
<xsl:for-each select="uhrzeit"><head> </head> <body> <h3>Daten aus demo20.php</h3> <table border="1"> <tr><th>std</th><th>min</th><th>sec</th></tr> <xsl:apply-templates /> </xsl:for-each>
</table>
</xsl:template></body> </html> <xsl:template match="zeit">
<tr>
</xsl:template><td><xsl:value-of select="std" /></td> <td><xsl:value-of select="min" /></td> <td><xsl:value-of select="sec" /></td> </tr> </xsl:stylesheet> |
| XSL bietet zahlreiche Optionen für die optimale Anpassung an variable Daten, z.B. bedingte Verzweigungen, Schleifen, Verwendung von Daten und / oder den Namen und Attributen der XML-Elemente, usw. | ♦ Details zur XSL-Programmierung finden sie u.a. beim W3C-Konsortium. |
Werkzeug zur Entwicklung mit XSL |
|
| XSL erfordert zur Entwicklung mindestens eine Datei mit XML-Daten und ein XSL-Stylesheet. | Die Ziel-Anwendung ist fast immer eine Webseite oder ein Teil davon. Das ausführende Programm ist daher ein beliebiger Browser. |
| Wenn der Browser jedoch nicht das gewünschte Ergebnis anzeigt, dann kann das Debuggen schwierig werden: XSL erzeugt keinen Quelltext, sondern einen Objektbaum, das Ergebnis wird nicht (als Datei) gespeichert, sondern als Datenstrom an den Browser übergeben. | Eine Möglichkeit, den von XSL erzeugten Quelltext zu erfassen bieten XSL-Parser, z.B. InstantSaxon (Neuere Versionen im Internet, Download Version >=5.3). |
xsltproc:Die meisten Linux-Distributionen enthalten dieses → Shell-Konsolen Programm oder laden es auf Mausklick aus ihrem Repository (Software-Pool des Distributors).Hilfe zum Programm: # man xsltproc
Ohne weitere Angaben erfolgt die Ausgabe von Text-Produkten an die Konsole. Erzeugung eines
Produkts aus einer XML-Datei, in welcher das XSL-Stylesheet bereits angegeben ist:
# xsltproc demo.xml
|
Ausgabe eines Produkts aus explizit angegebenen XSL- und XML-Dateien: # xsltproc demo.xsl demo.xml
Erzeugung einer Datei (hier demo.html) aus dem Produkt:
# xslt --output demo.html demo.xsl demo.xml
|
Saxon:XSL-Testprogramm für Windows-Systeme.In mehreren Versionen verfügbar, die Home Edition (HE) ist kostenfrei. Entpacken sie das Archiv und kopieren sie das Windows-Programm saxon.exe in ein Test-Verzeichnis, z.B. C:\saxon\saxon.exe Kopieren sie mindestens je eine XML- und XSL-Datei dorthin. Starten sie eine DOS-Konsole. |
Anzeige der integrierten Hilfe:
C:\saxon> saxon
Erzeugung eines Produkts aus XML+XSL:
C:\saxon> saxon demo.xml demo.xsl
Wenn keine Output-Datei angegeben wurde, dann wird der von XSL erzeugte
Text im DOS-Fenster angezeigt.Neuere Versionen verwenden Java. |
Firebugist ein kostenfreies Plugin (Zusatz-Programm) für den Firefox Browser. Damit kann man die DOM-Struktur geladener Dokumente anzeigen. |
♥ Das kleine Programm eignet sich besonders gut zum Debuggen von Produkten, die mit XML+XSL hergestellt wurden. |
|
|
Standards und Hersteller:XSL-Homepage beim W3CMozilla @ XSL - Info & BeispieleMozilla - Javascript @ XSL |
Tutorials & Beispiele: Zvon (alles auch zum Download !): References ( XSLT, XSL FO), Tutorials (XSLT), Download Apache XSL Documentation XML/XSL-Portal von Chris Bayes Saxon (Sourceforge): XSL Elements, XPath Expressions, XSLT Patterns, Standards Conformance |
|
|