XSL und XSLT

Download Report

Transcript XSL und XSLT

XSL und XSLT
eXstensible Stylesheet Language
und
eXstensible Stylesheet Language Transformation
5.6.2002
XSL und XSLT
1
Wozu XSL und XSLT?
XML: Ein Standard zum Erzeugen von Daten-Dokumenten.
Das ‚X‘: Die Daten können verschieden interpretiert werden, mit
der Folge, dass man früher oder später das Datenformat ändern
muss.
Transformation: Umwandlung eines XML-Dokumentes in
ein Dokument einer anderen Form.
Der Inhalt (spezifische Werte von Elementen und
Attributen) soll dabei erhalten bleiben.
5.6.2002
XSL und XSLT
2
XSL-Überblick
XSL ist eine Sprache, um Style Sheets auszudrücken. Ein Style
Sheet ist ein Dokument, das beschreibt, wie eine bestimmte
Klasse von XML-Dokumenten dargestellt werden soll.
XSL Umfasst drei Technologien:
XPath
XSLT
XSL-FO
5.6.2002
Heute
Am 26.6.
XSL und XSLT
3
XSLT-Überblick
XSLT ist eine Sprache zur Spezifikation von Transformationen
von XML-Dokumenten.
XSLT ist deklarativ: man deklariert seine Ziele, indem man
Regeln,Ein
sogenannte
Templates,
aufstellt,
Muster
XSLT-Stylesheet
besteht
alsodie
ausein
einer
Serie
im Quelldokument
betreffen.
von Templates.
Wenn der Prozessor auf ein Muster im Quelldokument
trifft, führt
die Aktionen
ebenfalls
im das
Template
Ein er
Template
bestehtaus,
ausdie
einem
Muster,
aufgelistet XML-Elemente
sind, um etwas auszugeben
oder denselektiert,
Fluss der
im Quelldokument
Transformation
zu kontrollieren.
und einem
Körper, der spezifiziert, was für eine
Ausgabe generiert werden soll, wenn dieses
Muster im Quelldokument angetroffen wird.
5.6.2002
XSL und XSLT
4
XSLT-Überblick: Elemente
XSLT ist selbst ein XML-Vokabular.
XSLT ist „klein“: es gibt nur 35 Elemente.
XSLT ist sogar „sehr klein“: die meisten Transformationen kann
man sogar mit noch weniger Elementen ausführen.
Die XSLT-Elemente:
top-level-elements:
xsl:apply-imports xsl:apply-templates
xsl:call-template xsl:choose
xsl:copy-of
xsl:decimal-format
xsl:for-each
xsl:if
xsl:key
xsl:message
xsl:otherwise
xsl:output
xsl:processing-instruction
xsl:stylesheet
xsl:template
xsl:value-of
xsl:variable
5.6.2002
xsl:attribute
xsl:attribute-set
xsl:comment
xsl:copy
xsl:element
xsl:fallback
xsl:import
xsl:include
xsl:namespace-alias xsl:number
xsl:param
xsl:preserve-space
xsl:sort
xsl:strip-space
xsl:text
xsl:transform
xsl:when
xsl:with-param
XSL und XSLT
5
XSLT: Ablauf der Transformation
5.6.2002
XSL und XSLT
6
Vorsicht!
Beispiel:
<xsl:text>geht&nbsp;nicht</xsl:text>
gibt die Fehlermeldung:
Verweis auf eine nicht definierte Entität 'nbsp'.
Lösung:
<xsl:text>geht&#160;nicht</xsl:text>
Anderes Beispiel:
Nicht geschlossene Tags in HTML.
5.6.2002
XSL und XSLT
7
XSLT: Beispiel
<catalog>
<cd>
<title>Mercury Falling</title>
<artist>Sting</artist>
</cd>
</catalog>
<xsl:stylesheet>
<xsl:template match="/">
<html><body> <h1>
<xsl:apply-templates select="/catalog/cd/title"/>
</h1> </body> </html>
</xsl:template>
</xsl:stylesheet>
5.6.2002
XSL und XSLT
XSL-Prozessor
<html><body><h1>
Mercury Falling
</h1></body></html>
bsp_cd_catalog
8
XSLT-Elemente
<xsl:stylesheet> und <xsl:transform> (Synonyme)
Obligatorisches Element; wird gebraucht, um anzuzeigen, dass das Dokument
ein XSLT-Stylesheet ist.
Hat zwei wichtige Attribute: version und namespace (xmlns).
Beispiel:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform " >
...
</xsl:stylesheet>
Aktuelle Version
5.6.2002
Namespace-deklaration für W3C XSLT namespace
XSL und XSLT
9
XSLT-Elemente
<xsl:template>
Um irgend etwas machen zu können, muss ein Stylesheet ein Template enthalten.
Jedes Stylesheet muss ein Template enthalten, das die Form der Wurzel des
Quelldokuments beschreibt (match the node of the root node).
Hat als wichtigstes attribut: match="XPath-Ausdruck". Das Template wird ausgeführt,
wenn der Kontext-Knoten den so selektierten Knoten matched.
Anderes wichtiges Attribut: Name (String).
Beispiel:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
...
</xsl:template>
...
"/" ist XPath-Ausdruck für den Wurzelknoten.
</xsl:stylesheet>
5.6.2002
XSL und XSLT
10
XSLT-Elemente
<xsl:apply-templates>
Ohne Attribute benutzt, fordert es den XSLT-Prozessor zu dem Versuch auf, die
Templates im Stylesheet gegen den momentanen Kontext-Knoten im
Quelldokument zu matchen.
Wichtiges Attribut: select. Mit diesem Attribut können wir eine Menge von Knoten
auswählen. Der XSLT-Prozessor greift auf alle Templates im Stylesheet zu und
versucht, sie mit der Knotenmenge zu matchen. Gelingt dies, werden die
Templates, die die Knotenmenge matchen, ausgeführt.
5.6.2002
XSL und XSLT
11
XSLT-Elemente
<xsl:apply-templates> (Skizze)
<catalog>
<cd>
<title>Mercury Falling</title>
<artist>Sting</artist>
</cd>
.....
</catalog>
<xsl:stylesheet>
<xsl:template match="artist">
...
</xsl:template>
<xsl:template match="/">
<xsl:apply-templates
select="/catalog/cd/title"/>
</xsl:template>
<xsl:template match="title">
<xsl:value-of select="/title" />
</xsl:template>
</xsl:stylesheet>
Anderes Beispiel: Seite 8
5.6.2002
XSL und XSLT
12
XSLT-Elemente
<xsl:call-template>
Kann nur innerhalb eines Templates benutzt werden.
Attribut: name.
Kann auch das Template, in dem es steht, aufrufen, und dabei Parameter übergeben;
Rekursion! (Es gibt keine for-Schleifen! Für Rekursive XSLTProgrammierung wird oft noch <xsl:with-param> und <xsl:param> gebraucht,
ausserdem, für eine Abbruchbedingung:)
<xsl:if>
Sehr einfache Form von einem „Conditional Test“; es gibt kein „else“.
Hat ein Attribut, test. (XPath-Ausdruck).
Beispiel: <xsl:if test = "artist = 'Sting'"> .....</xsl:if>
5.6.2002
XSL und XSLT
13
XSLT-Elemente
<xsl:value-of>
Wird gebraucht, wenn wir einen Wert oder ein Attribut aus einem Knoten auslesen
wollen.
Kann nur innerhalb eines Templates benutzt werden und hat immer ein select-Attribut.
Der Wert dieses Attributs ist ein XPath-Ausdruck.
Der Wert der durch diesen Ausdruck definierten Knoten wird in das AusgabeWenn der XPath-Ausdruck mehrere
Dokument in Textform kopiert.
Knoten im Quelldokument anspricht,
Beispiel: <?xml version="1.0" encoding="ISO-...
wird nur
">der Wert des ersten Knotens
ausgegeben!
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/...">
<xsl:template match="/">
<html><body><h1>
<html><body><h1>
Sting
<xsl:value-of select="/catalog/cd/artist" />
</h1></body></html>
</h1></body></html>
</xsl:template>
</xsl:stylesheet>
5.6.2002
XSL und XSLT
14
XSLT-Elemente
<xsl:for-each>
Operiert auf einer Menge von Knoten. Diese ist durch den Wert des select-Attributes
definiert.
Die Inhalte des <xsl:for-each>-Elementes werden einmal für jeden Knoten in dieser
Menge ausgeführt.
bsp_cd_catalog
5.6.2002
XSL und XSLT
15
XSLT-Elemente: Abstrakter Zugang.
Man kann zwei Zugänge zum Stylesheet-Design finden:
Pulling the input data: "Das Stylesheet 'zieht' Information".
Bekannte Quell-Struktur, d.h. die Hierarchie des Quelldokuments ist dem StylesheetProgrammierer bekannt.
Das Stylesheet "zieht" Information von bekannten Orten im Quellknoten-Baum:
<xsl:value-of select="XPath-expression"/> für Extraktion oder Berechnung
<xsl:for-each select="XPath-node-set-expression"/> für Iteration über
eine Knotensammlung.
Kurz: der Ergebnisbaum wird vom Stylesheet aufgebaut, indem jede Ergebniskomponente vom Quelldokument "gezogen" wird und jede solche Komponente
vom Stylesheet mit markup eingerahmt wird.
5.6.2002
XSL und XSLT
16
XSLT-Elemente: Abstrakter Zugang.
Zweiter Zugang:
Pushing the input data: "Das Stylesheet 'drückt' Information".
Oft bei unbekannter oder beliebiger Struktur des Quelldokuments.
Das Stylesheet "drückt "Information, indem es bekannte oder unbekannte QuellbaumKnoten besucht:
<xsl:apply-templates select="XPath-Node-Expression">
und die Template-Regeln sind für Quellbaum-knoten-besuche vorbereitet:
<xsl:template match="XPath-Pattern">
Die Ordnung des Ergebnisbaumes wird also erst durch die Hierarchie der Quelle
festgelegt! Es wird event-getriebene Transformation implementiert: <xsl:template>
als Event-Handler, <xsl:apply-templates> als Event-Generator.
5.6.2002
XSL und XSLT
17
XSLT-Elemente
Für wirkliche Transformation:
<xsl:element>
Element zum Erzeugen von neuen Elementen,das immer ein name- Attribut hat,
das den Namen des neuen Elementes angibt.
Optionales Attribut: namespace, das als Wert eine URI annimt, die den
Namespace des Elements identifiziert.
Ähnlich:
<xsl:attribute>
Mit dem Attribut name (optional: namespace).
Beispiel:
5.6.2002
<xsl:element name="peter">
Peter
</xsl:element>
XSL und XSLT
<peter>
Peter
</peter>
18
Der andere Weg:
5.6.2002
XSL und XSLT
19
Xalan-Java
Vollständige Implementierung von XSLT und Xpath (beides:
Version 1.0).
Benutzt als default-Parser: Xerces-Java.
Transformationen können verkettet sein.
Kann in einem Servlet benutzt werden, um XML-Dokumente in
HTML zu transformieren und das Resultat einem client
nutzbar zu machen.
Beispiel:
C:\jdk1.3.1_03\bin\java
-cp "C:\...\xalan.jar; C:\...\xerces.jar"
org.apache.xalan.xslt.Process
-IN cd_katalog.xml -XSL cd_katalog.xsl
bsp_cd_katalog_to_html
-OUT katalog.html
5.6.2002
XSL und XSLT
20
Links
XSLT-Spezifikationen:
http://www.w3.org/Style/XSL/
Xalan-Java:
http://xml.apache.org/xalan-j/
Einfaches Tutorial:
http://www.w3schools.com/xsl/
Xerces:
http://xml.apache.org/xerces2-j/index.html
5.6.2002
XSL und XSLT
21