Grundlagen der Extensible Stylesheet Language Transformations (XSLT) Marc Monecke monecke@informatik.uni-siegen.de Praktische Informatik Fachbereich Elektrotechnik und Informatik Universität Siegen, D-57068 Siegen 26. Mai 2003 Inhaltsverzeichnis 1 Motivation 2 2 XSLT 2 2.1 XPath......................................... 3 2.1.1 Beispiel.................................... 3 3 Aufbau eines XSLT-Stylesheets 4 3.1 Layout-Informationen ergänzen........................... 5 3.2 Mehrere Templates ausführen............................ 5 4 Einige XSLT-Befehle 6 5 Zusammenfassung 6 1
1 Motivation Ziel: Darstellung für XML-Datei erzeugen nötig dazu: Möglichkeit zum Zugriff auf Informationen Selektieren von Informationen Navigieren/Iterieren durch das Dokument Sortieren neue Inhalte hinzufügen beliebiges Ausgabeformat vorstellbar (XML, HTML, Text, PDF... ) (DTD) Grammatik (XSL Stylesheet) Darstellungs regeln Dokument (XML Datei) Generischer Parser Syntax baum Generischer Unparser (XSLT Prozessor) Dokument mit Layout Informationen (HTML Seite) 2 XSLT Extensible Style Language (XSL): Formatierungssprache für XML Vorbilder Cascading Stylesheets für HTML, Transformationssprache DSSSL für SGML bei der Entwicklung wurde 2 Problembereiche identifiziert: 1. Identifizieren von Dokumentteilen XPath 2. Transformation von Inhalten XSLT (XSL Transformations) XSLT und XPath können auch separat verwendet werden nicht nur zum Erzeugen von Formatierungen sondern auch für die Umstrukturierung von XML-Inhalten. XSLT hat strenggenommen nichts mit Formatierung zu tun; der Name resultiert nur aus der Tatsache, das XSLT im Kontext von XSL entwickelt wurde. XSLT Makrosprache; Dateien werden Stylesheets genannt 2
2.1 XPath beim Einlesen von XML-Dokument ist Zugriff auf Elemente nur in vorgegebener Reihenfolge möglich (document order) oft ist wahlfreier Zugriff nützlich Programm, das XPath unterstützt, baut interne baumartige Repräsentation des Dokuments auf weitere Operationen werden auf diesem Baum ausgeführt mit Ausdrücken können Teilbäume, Elemente, Attribute adressiert werden ähnlich Pfaden im Dateisystem eingebaute Funktionen (Name eines Knoten, Position im Baum u.a.) XPath-Ausdrücke auch in Anfragesprachen (z.b. XQL) und für Verweise (XPointer) verwendet 2.1.1 Beispiel <?xml version="1.0" encoding="iso-8859-1"?> <veranstaltung name="datenbanksysteme II" semester="sommersem. 2003"> <termin woche="18" datum="2003-04-28" nr="v01"> <inhalt> Organisatorisches <br /> Objektorientierte Datenbanksysteme <litliste> <hinweis>skript in Vorbereitung</hinweis> <lit text="stichpunkte von den Vorlesungsfolien (pdf)" dest="oodbms.pdf"/> </litliste> </inhalt> </termin> <termin woche="19" datum="2003-05-05" nr="v02">... Abbildung 1 zeigt das Dokument in einer Baumdarstellung. XPath-Ausdrücke /veranstaltung Navigation: alle veranstaltung-elemente (absoluter Pfad) /veranstaltung/termin alle termin-elemente //inhalt alle inhalt-elemente auf beliebiger Stufe (relativer Pfad) 3
semester veranstaltung name woche datum termin termin inhalt inhalt inhalt litliste litliste lit hinweis hinweis text dest Abbildung 1: Dokument mit Element-, Attribut- und Text-Knoten /veranstaltung/termin[@datum="2003-05-19"] Selektion nach Attributwert: termin am angegebenen Datum //inhalt[contains(child::text(), PCTE )] Test auf Text-Inhalt: beliebiges inhalt-element, das den Text PCTE enthält 3 Aufbau eines XSLT-Stylesheets <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform">... </xsl:stylesheet> Kopf mit XSLT-Versionsnummer und Namensraum-Deklaration (xsl) Folge von Schablonen (templates), die jeweils Transformationen für aktuellen Knoten beschreiben Schablonen werden Elementtypen zugeordnet: <xsl:template match="elementtyp"> (allgemein: XPath-Ausdruck zur Selektion) 4
Weitere Verarbeitung wird innerhalb des template festgelegt Beispiel 1 <!-- demo1.xsl --> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:value-of select="@name"/> </xsl:stylesheet> Ausgabe des Werts von Attribut name der veranstaltung 3.1 Layout-Informationen ergänzen <!-- demo2.xsl --> <html> <head> <title><xsl:value-of select="@name"/></title> </head> <body bgcolor="yellow"> <center> <h1>vorlesung <xsl:value-of select="@name"/></h1> </center> </body> </html> reservierte Zeichen dürfen nicht verwendet werden (< <) 3.2 Mehrere Templates ausführen <!-- demo3.xsl --> <html> <head> <title><xsl:value-of select="@name"/></title> 5
</head> <body bgcolor="yellow"> <center> <h1>vorlesung <xsl:value-of select="@name"/></h1> </center> <ul> <xsl:apply-templates /> </ul> </body> </html> <xsl:template match="termin"> <li> findet statt am <xsl:value-of select="@datum"/> </li>... mit <xsl:apply-templates /> werden passende templates auf die Kind-Knoten der veranstaltung angewendet Angabe von match-ausdruck möglich weitere Verarbeitung steuern 4 Einige XSLT-Befehle <xsl:copy-of select=ausdruck /> gibt die dem select-ausdruck entsprechenden Knoten aus <xsl:value-of select=string-ausdruck /> gibt die Zeichenkette aus, die durch den select-ausdruck bestimmt wird <xsl:if test=boolean-ausdruck> INHALT </xsl:if> wertet INHALT aus, wenn BOOLEAN-AUSDRUCK wahr <xsl:apply-templates select=ausdruck>... </xsl:apply-templates> ruft templates auf, deren AUSDRUCK auf den aktuellen Knoten paßt <xsl:call-template name=template-name> PARAMETER </xsl:call-template> ruft template mit Namen TEMPLATE-NAME auf; Parameterübergabe möglich <xsl:attribute name=name> INHALT </xsl:attribute> gibt ein Attribut NAME aus 5 Zusammenfassung XSLT ist Transformationssprache für XML-Dokumente Umstrukturieren, Konvertieren in anderes Format, Layout hinzufügen XPath für Navigation und Selektion Transformationen in templates beschrieben 6
Konstrukte aus traditionellen Programmiersprachen (Verzweigungen, Schleifen, Funktionsaufrufe) verfügbar 7