was gutes
Roy Krischer

1. Überblick über XSLT


1.1. XML

Link zur XML-Vorlesung aus dem WS99/00
  • Metasprache
  • Universelles Datenformat
  • Daten-/Inhaltsbezogen
  • Strenge Baumhierarchie
  • XML-Baum
    Frage: Wie soll eine solche hierarchische Datenbank dargestellt werden?


    1.2. XSL

    Lösung: CSS?
  • zu unflexibel
  • nicht mächtig genug
  • Daher:
    Extensible Stylesheet Language
    XSL, XPath und XSLT
  • XSL-FO (Formatting Objects)
  • XPath
  • XSLT

  • 1.3. XPath

    XPath dient zum Auswählen von (Teil-)Bäumen, Knoten, Attributen eines XML-Dokuments
  • Selektionssprache ('SQL')
  • Eigenständige Hilfssprache
  • Recommendation seit Nov 99
  • Link zur Spezifikation


    1.4. XSLT

    XSLT dient zum Umwandeln eines XML-Dokuments in andere Formate
    XSLT-Transformation
  • Umformen
  • Sortieren
  • Filtern
  • Mit Formatierungstags versehen
  • Recommendation seit Nov 99
  • Link zur Spezifikation
    XSLT bedient sich der Hilfe von XPath, um Knoten aus dem Quelldokument auszuwählen
    XSLT transformiert XML in
  • XML
  • HTML
  • (fast) beliebige andere Formate

  • 1.5. XSL-FO

    Formatting Objects (oder auch schlicht: XSL) dienen zum Formatieren der transformierten XML-Dokumente
  • etwas Ähnlichkeit mit CSS
  • viel mächtiger
  • viel komplexer
  • Schwergewicht von XSL
  • keine Recommendation
  • Working Draft Nov 99
  • Link zur Spezifikation

    2. Geschichte und Entwicklung


    2.1. DSSSL

    SGML verwendet zur Fromatierung DSSSL
    DSSSL = Document Style Semantics and Specification Language
  • Scheme (Lisp-Dialekt)
  • Sehr mächtig
  • Jedes XML-Dokument ist ein SGML-Dokument
    -> DSSSL zum Formatieren von XML geeignet
  • Sehr kompliziert
  • Für Webdesigner unzumutbar
  • Einfachere Version: DSSSL-O (für Online)


    2.2. Erster XSL-Vorschlag

    XSL sollte auf DSSSL basieren
    CSS für Formatierung verantwortlich
    Doch XSL sollte auch
  • Eine XML-Anwendung
  • Erweiterbar
  • Leicht lesbar
  • Rein deklarativ
  • sein
    Letzendlich Abkehr von DSSSL und CSS


    2.3. Kapselung von XSLT

    Die XSL-Spezifikation war stark im Wandel
    verantwortlich: Formatierungsteil
    ->Transformationsteil abkapseln
  • Stabile Entwicklung möglich
  • Formatierung durch Transformation möglich
  • (leicht) Eigenständige Entwicklung von XSLT


    2.4. Abspaltung von XPath

    Starke Überschneidung von XSLT und XPointer
  • Auswählen von Teilen zum Transformieren
  • Auswählen von Teilen zum 'Hineinzeigen'
  • Formulierung von XPath als Schnittmenge
  • verringerter Spezifizierungsaufwand
  • verringerter Lernaufwandaufwand'
  • Erste Versionen noch als XML-Anwendung, inzwischen jedoch nicht mehr

    3. XPath


    3.1. Allgemeines

    XPath ist der Selektionsteil von XSLT (und XPointer). XPath beschreibt 'Pfade' zu Knoten(-Mengen) einer XML-Hierarchie oder auch nur Teilen eines Knotens. Ohne XPath ist kein XSLT-Stylesheet vorstellbar.


    3.2. Pfade

    Pfade bestehen in XPath aus 3 Teilen:
  • Achse (axis)
  • Knotentest (node test)
  • Prädikate* (predicates)
  • axis::node-test[predicate]
    
    Achsen bezeichnen eine Menge von Zielknoten, ausgehend vom aktuellen Knoten (context node)
  • 'ancestor'
  • Vorfahre(n) des aktuellen Knotens
  • 'ancestor-or-self'
  • dto. plus aktueller Knoten
  • 'attribute'
  • Attribute des aktuellen Knotens
  • 'child'
  • Kinder des aktuellen Knotens
  • 'descendant'
  • Nachfahren des aktuellen Knotens
  • 'descendant-or-self'
  • dto. plus aktueller Knoten
  • 'following'
  • Im Dokument folgende Knoten
  • 'following-sibling'
  • Im Dokument folgende Geschwister
  • 'namespace'
  • Namensraum des aktuellen Knotens
  • 'parent'
  • Eltrenknoten des aktuellen knotens"
  • 'preceding'
  • Im Dokument vorhergehende Knoten
  • 'preceding-sibling'
  • Im Dokument vorhergehende Geschwister
  • 'self'
  • Der aktuelle Knoten selbst
    Der Knotentest wählt unter der Achse bestimmte Knoten aus
  • Art
  • Wählt nur 'Art'-Knoten aus
  • '*'
  • Alle Knoten der Achse
  • Function()
  • Auswahl anhand fester Funktionen
    Das Prädikat ist eine logische Aussage. Ist sie wahr (true), dann wird der entsprechende Knoten gewählt
    Möglich sind Kombinationen aus
  • Knotenart
  • Enthalten Zielknoten diese Knotenart?
  • 'Function()'
  • Eingebaute Funktionen
  • Boolsche Operatoren
  • Vergleiche usw.
    Es existieren folgende Arten von Funktionen
  • Zählen
  • count(), position()
  • Stringoperationen
  • concat(s,s), substring(s,p,l) , contains(s,s) usw.
  • Boolsche Funktionen
  • Not(A), boolean(O)
  • Numerische
  • round(n), number(O) ...
  • Identifikation
  • name(n), ID(n)...
    Beispiele
    
    child::*[position()>13]
    descendent-or-self::Abschnitt[Code]
    attribute::Titel
    
    
    Abkürzungen
    
    *[position()>13]
    //Abschnitt[Code]
    @Titel
    
    

    4. XSLT


    4.1. Allgemeines

    Ein XSLT Stylesheet beginnt mit

    
    <?xml version="1.0" encoding="ISO-8859-1"?>
    
    
    Das XML-Dokument, das formatiert werden soll, muß diese Processing Instruction enthalten
    
    <?xml-stylesheet type="text/xml" href="Dateiname.xsl" ?>
    
    
    oder
    
    <?xml-stylesheet type="text/xsl" href="Dateiname.xsl" ?>
    
    
    für MS-IE


    4.2. Wurzelelement

    
    <xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    </xsl:stylesheet> 
    
    Das Wurzelelement darf folgende Elemente enthalten
  • 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
  • Am wichtigsten ist hierbei das xsl:template Element


    4.3. Templates

    Templates sind der Schlüssel zu XSLT
    Sie stellen Schablonen dar, die festlegen, wie bestimmte Knoten transformiert werden

    
    <xsl:template match=XPath-Ausdruck mode=MODUS
    xml:space=preserve|default >
    Transformationscode
    </xsl:template> 
    
    Beispiel
    
    <xsl:template match="/Seminar">
    <html>
    <blink>Irgendwas</blink>
    </html>
    </xsl:template> 
    
    Transformiert das Seminarelement (direkt unter der Wurzel) in ein blinkendes Etwas
    
    <xsl:value-of select=XPath-Ausdruck/> 
    
    Fügt an der aktuellen Stelle den 'Inhalt' der Knoten aus dem Pfad
    Beispiel
    
    <xsl:template match="/Seminar">
    <html>
    <blink>
    <xsl:value-of select="Autor/Name" />
    </blink>
    </html>
    </xsl:template> 
    
    Transformiert das Seminar-Element in den Inhalt seines 'Name'-Enkels


    4.4. Dokumente abarbeiten

    Grundsätzlich zwei Möglichkeiten
  • 'Iterativ'
  • 'Rekursiv'
  • Iterativ: Einsatz von <xsl:for-each>

    
    <xsl:template match="/Seminar" >
    <xsl:for-each select="Paragraph">
    <xsl:value-of select="@Titel"/>
    </xsl:for-each>
    </xsl:template> 
    
    Auflistung der Titel-Attribute von allen Paragraphen unterhalb von Seminar

    Rekursiv: Einsatz von <xsl:apply-templates>
    
    <xsl:template match="/">
    <html>
    <xsl:apply-templates select="Seminar"/>
    </html>
    </xsl:template> 
    
    Fügt die <html>-Tags ein und ruft zwischen ihnen das Template von 'Seminar' auf (das seinerseits andere Templates aufrufen kann)


    4.5. Weitere XSLT-Elemente

    Generierung von XL-Kommentaren

    <xsl:comment> Kommentar </xsl:comment>
    
    Bedingungen abfragen
    <xsl:if test=Bedingung> Ausgeführter code </xsl:if>
    
    Sortierung
    <xsl:sort order=ascending|descending data-type=text|number>
    Zu sortierende Ausgabe
    </xsl:sort>
    
    Parameter übergeben
    <xsl:param name=Parameter_name"> /<xsl:param>
    
    In Verbindung mit
    <xsl:with-param name=Parameter-Name>
    <xsl:value-of select=XPath-Ausdruck/>
    </xsl:with-param>
    

    5. Anwendungen


    5.1. Möglichkeiten

    Bei der Anwendung von XSLT gibt es folgende Möglichkeiten
  • XML-Dokument und Stylesheet zum Client schicken
  • Server transformiert anhand Stylesheet und schickt z.B. HTML
  • Ein anderes Programm transformiert - Server schickt nur HTML (z.B.)
  • Letzteres zur Zeit am verbreitetsten
    Es gibt zu wenige Clients, die XML und XSLT verstehen. Ausnahme: MS IE. Aber nur, wenn man den MSXML-Parser(beta) installiert. Noch ein Beispiel
  • MSXML-Beispiel
  • anschauen


    5.2. Beispiele für Transformationsengines

  • Microsoft: MSXML3 (IE)
  • Produktseite
  • Apache Group: Xalan
  • Produktseite
  • Michael Kay: Saxon
  • Produktseite
  • James Clark: XT
  • Produktseite

    6. Ressourcen


    6.1. Literatur

    Nur ein Buch zum Thema XSLT verfügbar
  • Michael Kay: XSLT Programmer's Reference, Wrox Press, ISBN: 1861003129
  • Seite bei Amazon.com


    6.2. Online

  • XSLT Recommendation
  • Link zur Spezifikation
  • XPath Recommendation
  • Link zur Spezifikation
  • XSL Working Draft Nov 99
  • Link zur Spezifikation
  • XML-Bible, Kap 14
  • XML-Bible
  • Kostenpflichtiges Tutorial (preview)
  • Crane Softwrights
  • Linksammlung: www.xmlsoftware.com
  • www.xmlsoftware.com


    6.3. Dieses Dokument

    Diese Arbeit ist ein gültiges XML-Dokument, das mit einem XSLT Stylesheets on-the-fly in HTML transformiert wird
    Die Dateien
  • XML-Dokument
  • XSLT.xml
  • Dokument DTD
  • Seminar.dtd
  • XSL-Stylesheet
  • XSLT.xsl
  • HTML CSS
  • seminar.css
  • äquivalente HTML-Datei
  • XSLT.html




    Danke