E.XSLTuXPath

Werbung
Transformation von XML-Dokumenten
— XSLT und XPath —
Anne Brüggemann-Klein
TU München
Elektronisches Publizieren: Transformation von XML-Dokumenten
13./15.November 2006 ― 1
XSLT …
o
o
o
XML (und XML Namespaces und Unicode) zur Kodierung
von Dokumentendaten
XSLT zur Bearbeitung von Dokumentendaten
o
o
o
o
o
Paradigma: Transformation (Querysprache)
Wurzel: Stylesheets
Zielsprachen: HTML, XML (z.B. XSL-FO), Text
Grundlage: Ausdruckssprache XPath
o Adressierung von Teilen des XML-Dokuments
o Konstruktion von XML-Fragmenten durch Berechnung und
Transformation
Grundlage: Datenmodell
Erfahrung: XSLT macht XML operationabel
Elektronisches Publizieren: Transformation von XML-Dokumenten
13./15.November 2006 ― 2
… XSLT
o
XSLT-Sprache
o
o
o
deklarativ, berechenbarkeitsuniversell
mit XQuery das SQL für XML: XQuery als Abfragesprache,
XSLT für Komposition von Ergebnissen
XML-Syntax
o
Interpreter
o
aufgerufen von XSLT-Prozessor für XML-Dokument und XSLTProgramm (transparent)
transparente Benutzung von APIs (normalerweise SAX und
DOM/eigenes Dokumentenmodell)
o
XSLT-Prozessor
o
Rolle von XML-Parsern
o
Elektronisches Publizieren: Transformation von XML-Dokumenten
13./15.November 2006 ― 3
XML XSLT XML
Transformation zwischen Formaten bzw. Baumstrukturen,
basierend auf Information Set
<...>
<...>
<...>...</...>
<...>...</...>
</...>
<...>
<...>...</...>
<...>...</...>
</...>
Text, XML  XML, HTML, Text
<XSLT/>
<...>
<...>
<...>...</...>
<...>...</...>
</...>
<...>
<...>...</...>
<...>...</...>
</...>
</...>
<...>
<...>
<...>...</...>
<...>...</...>
</...>
<...>
<...>...</...>
<...>...</...>
</...>
<XML/>
<XML/>
</...>
</...>
XSLT-Prozessor
Elektronisches Publizieren: Transformation von XML-Dokumenten
13./15.November 2006 ― 4
W3C-Standardisierung
XSLT: XSL Transformation, W3C-Standard seit 16.11.1999
XPath: XML Path Language, W3C-Standard seit 16.11.1999
Candidate Recommendations seit 8.6./11.7.2006
o XSLT 2.0
o XPath 2.0
o Gemeinsames Datenmodell für XPath/XQuery
Elektronisches Publizieren: Transformation von XML-Dokumenten
13./15.November 2006 ― 5
Datenmodell …
o
o
o
XQuery 1.0 and XPath 2.0 Data Model (XDM)
W3C Candidate Recommendation 11 Juli 2006
(http://www.w3.org/TR/xpath-datamodel/)
XML Information Set (Second Edition)
W3C Recommendation 4 February 2004
(http://www.w3.org/TR/xml-infoset/)
Gemeinsames Datenmodell von XPath, XSLT, XQuery
o
o
o
abgeleitet aus XML Information Set des W3C
(einheitliche Terminologie für XML-Konstrukte)
gemeinsame Abstraktionsschicht oberhalb der
Zeichenkettensicht auf XML
konzeptionelles Ergebnis des Parsens, auf das die genannten
Prozessoren zugreifen können
Elektronisches Publizieren: Transformation von XML-Dokumenten
13./15.November 2006 ― 6
… Datenmodell …
o
Steckbrief
o
o
o
o
XDM als Baummodell mit Knoten
(Element- und Attributknoten bereits besprochen)
Sieben Knotentypen mit Attributen zur Beschreibung
der Knoten selbst und der Relationen zwischen den Knoten
Keine Berücksichtigung von Entitäten-Referenzen
Aufbau des Datenmodells nach Expansion von Referenzen
Warnung: Unsymmetrische Eltern-Kind-Beziehung
o
o
Kindbeziehung nur zwischen Elementknoten und untergeordneten
Element-, Text-, PI- und Kommentarknoten
Elternbeziehung auch zwischen Attribut- und Namespaceknoten
zu zugehörigem Elementknoten
Elektronisches Publizieren: Transformation von XML-Dokumenten
13./15.November 2006 ― 7
Root Node
(Document Inf Item)
Element Node
(Element Inf Item)
Attribute Node
(Attribute Inf Item)
[children]
[expanded name]
[expanded name]
[children]
[value]
[attributes]
[parent]
Processing Instruct Node
(Proc Instruct Inf Item)
[expanded name]
[namespaces]
[parent]
[content]
[parent]
Comment Node
(Comment Information Item)
[content]
[parent]
Namespace Node
(Namespace Decl Inf Item)
Text Node
(Character Inf Items)
[prefix]
[content]
[parent]
[parent]
[namespace name]
… Datenmodell
o
Document Order
o
o
o
o
Reihenfolge der Knoten bestimmt durch erstes Zeichen des
Knotens im XML-Dokument
(gilt für Element Nodes, Text Nodes, Comment Nodes,
Processing Instruction Nodes)
Root Node an erster Position
Nach Element Node erst alle zum Element gehörigen
Namespace Nodes, dann alle Attribute Nodes,
jeweils in unbestimmter Reihenfolge, dann erst die Inhaltsknoten
(geordnet)
Visualisierung mit grau hinterlegten Namespace-Knoten
(../../xmlSamples/compBookNSModel.vsd)
Weiteres Beispiel im XDM-Standard
(http://www.w3.org/TR/2005/CR-xpath-datamodel-20051103/dm-example-large.png)
Elektronisches Publizieren: Transformation von XML-Dokumenten
13./15.November 2006 ― 9
XSLT-Programmierung nach dem Pull-Prinzip
o
Programmierprinzip Pull (fill in the blanks, output driven)
o
o
o
o
Transformationsprogramm als Ergebnis-Skelett
Lokalisieren von zu importierenden Bestandteilen des
Eingabedokuments in die „Leerstellen“ des Ergebnis-Skeletts
über XPath-Ausdrücke
Schleifen für Import-Wiederholungen (Iterationen definiert
durch XPath-Ausdrücke über Eingabedokument)
Beispiel
../../xsltBeispiele/king.xml
../../xsltBeispiele/acknowledgePullSimple.xsl
../../xsltBeispiele/ack.king.xml
../../xsltBeispiele/doAcknowledgePullSimple.bat
Elektronisches Publizieren: Transformation von XML-Dokumenten
13./15.November 2006 ― 10
XSLT-Befehle für Pull-Programmierung …
o
Wörtliche Daten
o
XSLT-Kommandos (XSLT-Namespace) für
eingabeabhängige und berechnete Daten
o
o
Text (alternativ mit XSLT-Kommando xsl:text)
literal result elements, auch mit Attributen
o
Import von Text aus Eingabedokument:
o
Import von Teilstrukturen:
o
xsl:value-of mit Attribut select (XPath-Ausdruck)
xsl:copy-of mit Attribut select (XPath-Ausdruck)
Konstruktion von Elementen und Attributen
xsl:element mit Attribut name (XPath-Template)
xsl:attribute mit Attribut name (XPath-Template)
Elektronisches Publizieren: Transformation von XML-Dokumenten
13./15.November 2006 ― 11
… XSLT-Befehle für Pull-Programmierung
o
XSLT-Kommandos (XSLT-Namespace) zur Ablaufsteuerung
o
Bedingte Anweisung:
o
Alternative:
o
xsl:if mit Attribut test (XPath-Ausdruck)
xsl:choose mit Kindelementen xsl:when und xsl:otherwise
Schleife:
xsl:for-each mit Attribut select (XPath-Ausdruck)
Elektronisches Publizieren: Transformation von XML-Dokumenten
13./15.November 2006 ― 12
XSLT-Prozessor Xalan
o
o
o
o
o
o
o
o
Xalan (Apache)
http://xml.apache.org/xalan/overview.html
XSLT-Prozessor in C++ und Java (Open Source)
Parser Xerces (Apache)
Commandline-Interface
java org.apache.xalan.xslt.Process
-in xmlQuelle -xsl xsltRegeln -out output
Aufruf aus Java-Anwendung:
TrAX API als Teilmenge von JAXP 1.1
Applet-Wrapper, Servlet Wrapper
XPath-Implementierung
Xalan-Erweiterungen: Funktionen und Elemente
Elektronisches Publizieren: Transformation von XML-Dokumenten
13./15.November 2006 ― 13
XSLT Ressourcen
o
o
o
o
o
o
o
http://www.w3.org/Style/XSL/
http://www.xslinfo.com/ (James Tauber)
http://www.oasis-open.org/cover/xsl.html (Robin Cover)
http://www.xml.com/ (O'Reilly)
http://msdn.microsoft.com/xml/
http://www.mulberrytech.com/xsl/xsl-list
Michael Kay: XSLT 2nd Edition. Wrox 2001.
Elektronisches Publizieren: Transformation von XML-Dokumenten
13./15.November 2006 ― 14
XPath: Steckbrief
o
o
o
o
XML Path Language (XPath), Version 1.0
W3C Recommendation, 16. November 1999 (wie XSLT)
XPath-Ausdrücke, um Teile von XML-Dokumenten zu
adressieren (Navigation durch die hierarchische Struktur)
Auch Berechnungen allgemeiner Art
Verwendet in XSLT
o Formulierung von Mustern
o Adressierung von zu transformierenden Bestandteilen
o Berechnung von zu generierenden Teilen der Ausgabe
Verwendet in XLink, XForms und XQuery
Elektronisches Publizieren: Transformation von XML-Dokumenten
13./15.November 2006 ― 15
Ausdruckstyp Location Path
Lokalisierung von XML-Konstrukten durch Navigation
(z.B. mit <xsl:value-of select=""/>)
ausgehend von Kontextknoten
o Step mit drei Teilen
o
o
o
Achse (Richtung für den Schritt)
Knotentest (für Typ und Expanded Name)
Prädikate mit beliebigen Ausdrücken
o AxisSpec: Achse für die zu berechnenden Knoten;
o
o
o
z.B. Kinder, Vergänger etc.
NodeTest: Namen und Typ der zu berechnenden Knoten
Prädikat: Filter für Initialmenge von Knoten (iterativ)
Pfadausdruck: Folge von Steps
Elektronisches Publizieren: Transformation von XML-Dokumenten
13./15.November 2006 ― 16
Beispiele für Location Path-Ausdrücke
child::para
child::*
child::text()
child::node()
attribute::version
descendant::para
ancestor::div
ancestor-or-self::div
descendant-or-self::para
self::para
child::chapter/descendent::para
child::*/child::para
/
/descendant::para
/descendant::olist/child::item
child::para[position()=1]
child::para[position()=last()-1]
child::*[self::chapter or
self::appendix][position()=last()]
child::para[attribute::type=´warning´][position()=5]
child::para[position()=5][attribute::type=´warning´]
child::chapter[child::title=´Introduction´]
child::chapter[child::title]
Elektronisches Publizieren: Transformation von XML-Dokumenten
13./15.November 2006 ― 17
Abkürzungen in Location Path-Ausdrücken
o
o
AbbrAbsoluteLocPath :=
´//´ RelativeLocPath
AbbrRelativeLocPath :=
RelativeLocPath ´//´ Step
AbbrStep
;=
´.´ | ´..´
AbbrAxisSpec
:=
´@´?
<nichts>
child::
@
attribute::
//
/descendant-or-self::node()/
.
self::node()
..
parent::node()
Elektronisches Publizieren: Transformation von XML-Dokumenten
13./15.November 2006 ― 22
Beispiele für abgekürzte Location Path-Ausdrücke
para
para[@id]
para/@id
/*/para
.//para
*/para
//para
para[1]
para[last()-1]
../@type
para[@type=´warning´][5]
para[5][@type=´warning´]
*
/
text()
node()
@version
chapter//para
//olist/item
*[self::chapter or self::appendix][last()]
chapter[title=´Introduction´]
chapter[title]
Elektronisches Publizieren: Transformation von XML-Dokumenten
13./15.November 2006 ― 23
Erweiterung von Location Path-Ausdrücken
Beliebiger Ausdruck vom Typ Knotenmenge
o optional gefolgt von Filterprädikaten
o optional gefolgt von Location Path
Elektronisches Publizieren: Transformation von XML-Dokumenten
13./15.November 2006 ― 24
Bewertung
o
o
o
o
o
XPath als Sprache von Ausdrücken, mit denen Fragmente
von XML-Dokumenten lokalisiert werden können
Schrittweises Navigieren durch Dokumentenbaum,
von Kontextknoten ausgehend,
in jedem Schritt lokale Filterung,
führt zu Knotenmenge als Ergebnis
Lokalisierung durch Navigation im Dokumentenbaum
o eingängig, auch durch Analogie bei Directories
Komplexe Syntax, optimiert auf kurze Ausdrücke
Grundsätzliche Fragen (z.B. der Optimierung und
simultanen Auswertung) weitgehend offen
Elektronisches Publizieren: Transformation von XML-Dokumenten
13./15.November 2006 ― 25
Aufgaben (Abgabe 18.11.2006)
o Installieren Sie Xalan.
o Schreiben Sie ein XSLT-Programm nach dem Pull-
Prinzip, mit dem Sie die Wirkung von XPath-Ausdrücken
gegenüber einem XML-Dokument testen können.
Außer dem XSLT-Kommando xsl:value-of können Sie
auch die Befehle xsl:copy-of und xsl:copy zum Kopieren
von XML-Strukturen von der Quelle in das Zieldokument
benutzen.
o
o
Testen Sie Ihr Programm und einige Ausdrücke.
Alternative: http://www.futurelab.ch/xmlkurs/xpath.de.html
o Schreiben Sie ein XSLT-Programm, das
Ihr Gedicht/Ihren Song nach HTML konvertiert.
Elektronisches Publizieren: Transformation von XML-Dokumenten
13./15.November 2006 ― 26
Allgemeine XPath-Ausdrücke
o
Ausdrücke evaluieren zu einem von vier Typen
o node-set
o boolean
o number
o string
in einem Kontext aus fünf Bestandteilen
o Kontextknoten
ändern sich bei
o Kontextposition und Kontextgröße Teilausdrücken
o Menge von Variablenbindungen
o Funktionsbibliothek
o Menge von Namespace-Deklarationen
Elektronisches Publizieren: Transformation von XML-Dokumenten
13./15.November 2006 ― 27
Allgemeine Ausdrücke …
o
o
Ausdrücke aus Typ PathExpr mit Operatoren:
o or
o and
o = !=
o < > <= >=
o+ o * div mod
o - (einstellig)
o|
mehrstellige Operatoren linksassoziativ, steigende
Präzedenz
Elektronisches Publizieren: Transformation von XML-Dokumenten
13./15.November 2006 ― 28
… Allgemeine Ausdrücke …
op: = != <= < >= >
NodeSet A
NodeSet A´
Boolean b
A op A´ gdw ex n in A, n´ in A´:
stringValue(n) op stringValue(n´)
A op z gdw ex n in A:
number(stringValue(n)) op z
A op s gdw ex n in A:
stringValue(n) op s
A op b gdw boolean(A) op b
op: = !=
op: <= < >= >
Boolean Number String
Konvertiere Operanden nach Number
Number z
String s
Elektronisches Publizieren: Transformation von XML-Dokumenten
13./15.November 2006 ― 29
… Allgemeine Ausdrücke
o
XPath-Ausdruck
o
PrimaryExp
::=
FilterExp
PathExp
::=
::=
o
o
Location Path
sonstiger Ausdruck, im Falle von Typ Knotenmenge
o optional gefolgt von Filterprädikaten
o optional gefolgt von Location Path
VariableReference
| ´(´ Exp ´)´
| Literal | Number | FunctionCall
PrimaryExp Pred*
LocPath
| FilterExp
| FilterExp ´/´ RelativeLocPath
| FilterExp ´//´ RelativeLocPath
Elektronisches Publizieren: Transformation von XML-Dokumenten
13./15.November 2006 ― 30
XPath-Beispiele
para[last()-1]
*[self::chapter or self::appendix][last()]
para[@type=´warning´][5]
para[5][@type=´warning´]
chapter[title=´Introduction´]
chapter[title]
para
para[@id]
para/@id
/*/para
document(´lookup.xml´)
$paragraphs
$paragraphs[23]
$sections/body
$sections[3]/body
(//section | //subsection) [title=´Introduction´]
(//section | //subsection) //para
(//section | //subsection) //para)[last()]
Elektronisches Publizieren: Transformation von XML-Dokumenten
13./15.November 2006 ― 34
Profil XSLT
XSLT als deklarative Sprache für Transformationen
Typische Transformationen
o
o
o
o
o
o
o
Umbenennungen von Textstrukturen
Verschieben und Duplizieren von Textstrukturen
Generieren und Unterdrücken von Textstrukturen
Aggregation und Gruppierung von Textstrukturen
Arithmetische Umrechnungen
Sortieren
Auswahl von Textstrukturen (XPath)
Insbesondere: Transformation in XML-Dialekte
(z.B. Formatanpassungen) und Präsentationsformate
(HTML, XSL-FO/PDF, WML, …)
Elektronisches Publizieren: Transformation von XML-Dokumenten
13./15.November 2006 ― 35
XML XSLT XML am Beispiel
o
o
Aus der Organisation einer Konferenz
Beispiel für Daten als Dokumente
Einfache Form der XSLT-Programmierung
(Fill in the Blanks, Outputsteuerung, Pull-Prinzip)
o
o
Transformationsprogramm als Ergebnis-Skelett
„Freistellen“ im Ergebnis-Skelett importieren über XPathAusdrücke die gewünschen Inhalte,
eventuell abhängig von Bedingungen oder
eingebettet in Schleifen für Wiederholungen
king.xml | acknowledgePull.xsl | ack.king.xml | doAcknowledgePull
Elektronisches Publizieren: Transformation von XML-Dokumenten
13./15.November 2006 ― 36
XML XSLT XML am Beispiel
o
Mächtigere Form der XSLT-Programmierung,
geeignet für Transformation narrativer Dokumente
(Inputsteuerung, Push-Prinzip)
o
o
o
Transformationsprogramm als Sammlung von Templates (z.B. pro
Element) mit Ergebnis-Skelett
„Freistellen“ im Ergebnis-Skelett gefüllt durch rekursiven Aufruf
weiterer Templates, eventuell abhängig von Bedingungen oder
eingebettet in Schleifen für Wiederholungen
Beim Aufruf eines Templates
o Angabe welche Elemente bearbeitet werden
o Suche nach passendem Template für jedes Element
king.xml | acknowledgePush.xsl | ack.king.xml
bios.xml | bios2html.xsl | bios.htm
Konzept.xml | Konzept.xsl | Konzept.htm | doKonzept.bat
Elektronisches Publizieren: Transformation von XML-Dokumenten
13./15.November 2006 ― 37
Prozeßmodell von XSLT …
XSLT-Transformationsprogramm: Sammlung von Regeln
(xsl:template)
o Muster/Aufhänger (Attribut match von xsl:template)
o
Auf welche Elemente im Quelldokument paßt die Regel?
Blaupause/Schablone/Ergebnisskelett
(Inhalt von xsl:template)
Was schreibt die Regel für das passende Element vor?
Was wird im Zieldokument eingefügt?
Baum bzw. Hecke (Sequenz von Bäumen):
o wörtliche Daten: Text und literal result elements
o zentrale XSLT-Kommandos (XSLT-Namespace)
o xsl:apply-templates mit Attribut select
o xsl:value-of mit Attribut select
Elektronisches Publizieren: Transformation von XML-Dokumenten
13./15.November 2006 ― 38
… Prozeßmodell von XSLT
Anwendung eines XSLT-Stylesheets auf ein
XML-Dokument (bzw. seine Source-Tree-Repräsentation)
erzeugt Result Tree (initialisiert mit dem Wurzelknoten)
o
o
o
o
Kontextknoten im Source Tree (Start bei Root)
Platzhalterknoten (Einfügezeiger) im Result Tree
Auswahl einer Regel, die auf den Kontextknoten paßt:
Konfliktauflösung
Umsetzung der Blaupause zur gefundenen Regel
(Instantiieren): Ausführen von XSLT-Kommandos und Kopieren von
Daten (literal result elements und Text) zum Result Tree
Elektronisches Publizieren: Transformation von XML-Dokumenten
13./15.November 2006 ― 39
Die Sprache XSLT …
o
o
Oberstes Element: xsl:stylesheet, xsl:transform
o
Präfix xsl gebunden an URL
o
version='1.0'
http://www.w3.org/1999/XSL/Transform
Darunter die folgenden Top-Level-Elemente von XSLT
o
o
o
o
o
o
xsl:import href='', xsl:include href=''
xsl:strip-space elements=''
xsl:output method='' encoding='' indent=''
xsl:variable name='' select''
xsl:param name='' select''
xsl:template match='' priority='' mode='' name=''
Elektronisches Publizieren: Transformation von XML-Dokumenten
13./15.November 2006 ― 40
… Die Sprache XSLT …
o
Patterns
o
o
o
o
Ausdrücke im Attribut match von xsl:template
Verallgemeinerung und Spezialisierung von XPath-Ausdrücken, die
zu Knotenmengen evaluieren
Ein Pattern trifft auf einen Knoten zu (Match), wenn der Knoten,
von beliebigem Kontextknoten aus evaluiert, in der Ergebnismenge
des Patterns liegt
„Ausdrücke von rechts nach links statt von links nach rechts
evaluieren“
Konfliktauflösung für Templates
Elektronisches Publizieren: Transformation von XML-Dokumenten
13./15.November 2006 ― 41
… Die Sprache XSLT …
o
Default-Templates
o
o
<xsl:template match='*|/'>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match='text()|@*'>
<xsl:value-of select='.'/>
</xsl:template>
Elektronisches Publizieren: Transformation von XML-Dokumenten
13./15.November 2006 ― 42
… Die Sprache XSLT …
Kommandos unterhalb von xsl:template
o
xsl:apply-templates select='' mode=''
o
xsl:with-param name='' select=''
o
xsl:value-of select='' disable-output-escaping= ''
o
xsl:text disable-output-escaping= ''
o
o
o
o
erzeugt Textknoten
Ausdruck in Attribut select wird evaluiert und zu String
konvertiert
Text als Inhalt des Elements
xsl:number level='' count='' from='‚
format='' value=''
Elektronisches Publizieren: Transformation von XML-Dokumenten
13./15.November 2006 ― 43
… Die Sprache XSLT …
o
o
xsl:element name= '' namespace= ''
o
xsl:copy, xsl:copy-of
o
xsl:processing-instruction name= ''
o
xsl:comment
xsl:attribute name= '' namespace= ''
o
o
o
o
Attributwert als Inhalt des Elements
flache bzw. tiefe Kopie von Knoten
PI-Inhalt als Inhalt des Elements
Kommentar als Inhalt des Elements
Elektronisches Publizieren: Transformation von XML-Dokumenten
13./15.November 2006 ― 44
… Die Sprache XSLT
o
o
xsl:call-template name=''
xsl:with-param name='' select=''
xsl:for-each select= ''
o
Ausdruck in Attribut select muß zu Knotenmenge evaluieren
o
xsl:if test=''
o
o
xsl:param name='' select'‚
o
Ausdruck in Attribut test muß zu Booleschem Wert
evaluieren
xsl:variable name='' select''
Elektronisches Publizieren: Transformation von XML-Dokumenten
13./15.November 2006 ― 45
Drei XSLT-Programmierstile
o
Pull-Schema (Fill in the blanks, navigierend)
o
o
o
Zielstruktur wird statisch zusammengesetzt,
mit Bausteinen aus Quellstruktur
Mittel: xsl:value-of und prozedurale Anweisungen
typisch für datenorientierte Anwendungen
o
o
o
Transformation von Zielstruktur aus Quelle
Mittel: xsl:apply-templates, Modi
typisch für textorientierte Anwendungen
o
Benannte Templates mit Parametern
o
Push-Schema (regelbasiert)
o
Funktionale Programmierung (rekursiv)
Elektronisches Publizieren: Transformation von XML-Dokumenten
13./15.November 2006 ― 46
Variablen und Parameter in XSLT
o
Variablentypen (read-only)
o
o
o
o
Globale Variablen: auf oberster Ebene
Gültigkeitsbereich: ganzes Transformationsprogramm
Lokale Variablen: in Blaupause eines Templates
Gültigkeitsbereich (statisch): auf Definition folgende
Geschwister und deren Nachkommen (Blockstruktur)
Instantiierung dynamisch mit Template
Definition
<xsl:variable name="vName" select="exp"/>
<xsl:variable name="vName"> … </xsl:variable>
Verwendung: $vName
Elektronisches Publizieren: Transformation von XML-Dokumenten
13./15.November 2006 ― 47
Verwendung von Variablen
o
o
o
Abkürzung, Vermeidung von Mehrfachberechnungen
 Verbesserung der Lesbarkeit und Effizienz
Referenz auf Kontextknoten, lesbar nach Kontextwechsel
bios.xml | bios2html.xsl | bios.htm
Speicher für temporären Teilbaum (über Wurzelknoten),
(ab XSLT 1.1) mit XPath-Ausdrücken navigierbar
<xsl:variable name="tempTree">
<xsl:call-template name="getTempTree"/>
</xsl:variable>
<xsl:variable name="tempDoc"
select="document('')"/>
Elektronisches Publizieren: Transformation von XML-Dokumenten
13./15.November 2006 ― 48
Parameter in XSLT
o
o
Parameter genauso wie Variablen, zusätzlich Werte von
außen setzbar (Aufruf von Programm oder Template)
Parametertypen
o
Definition
o
Verwendung: $pName
o
o
Globale Parameter: auf oberster Ebene, von außen initialisierbar
Lokale Parameter: in Blaupause eines Templates,
bei Aufruf initialisierbar
<xsl:call-template name="tName">
<xsl:with-param name="pName"/>
</xsl:call-template>
<xsl:param name="pName" select="exp"/>
<xsl:param name="pName"> … </xsl:param>
Elektronisches Publizieren: Transformation von XML-Dokumenten
13./15.November 2006 ― 49
Funktionale Programmierung …
o
o
o
Programm: Funktionsaufruf mit Argumenten, die wieder
Funktionsaufrufe enthalten
o
o
beliebige Schachtelungstiefe
auch Rekursion
Modell: -rekursive Funktionen
Programmiersprachen: Lisp, Haskell
Elektronisches Publizieren: Transformation von XML-Dokumenten
13./15.November 2006 ― 50
… Funktionale Programmierung
o
o
o
o
o
Funktionsausführung ohne Seiteneffekte:
keine Veränderung eines globalen Zustands,
keine Setzung von Variablen mit globaler Gültigkeit
Ergebnis einer Funktionsausführung nur abhängig von
Argumenten, nicht von Vorgeschichte
Rekursion statt Iteration
In XSLT: Ausführung eines Templates nur abhängig von
Kontext, nicht von Vorgeschichte
 Variablen nach Initialisierung read-only
dadurch inkrementelle Ausführung einer XSLTTransformation nach Änderungen im Dokument möglich
In XSLT: Rekursive Template-Aufrufe mit Argumenten
Elektronisches Publizieren: Transformation von XML-Dokumenten
13./15.November 2006 ― 51
Rekursion statt Iteration
<xsl:template name="while">
<xsl:param name="state"/>
<xsl:if test="condition on $state">
<xsl:variable name="newState"
select="compute new $state"/>
<xsl:call-template name="while">
<xsl:with-param name="state" select="$newState"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
Elektronisches Publizieren: Transformation von XML-Dokumenten
13./15.November 2006 ― 52
Fazit
XSLT ist berechenbarkeitsuniversell
Elektronisches Publizieren: Transformation von XML-Dokumenten
13./15.November 2006 ― 53
Bedingte Wertzuweisung
<xsl:variable name="x">
<xsl:choose>
<xsl:when test="$zeroBased">0</xsl:when>
<xsl:otherwise>1</xsl:otherwise>
</xsl:choose>
</xsl;variable>
<xsl:variable name="transactions" select=
"//credits[$getCredits] | //debits[not($getCredits)]"/>
Elektronisches Publizieren: Transformation von XML-Dokumenten
13./15.November 2006 ― 54
Sortieren …
o
o
o
o
Bestimmen der Reihenfolge der zu bearbeitenden Knoten
mit xsl:sort
Verwendbar mit xsl:apply-templates und xsl:for-each
Attribute
Ausdruck
ascending,
descending
case-order upper-first,
lower-first
lang
Sprachkode
data-type text, number,
Name
select
order
Sortierkriterium
Sortierreihenfolge
Sortiermethode
Sortiermethode
Sortiermethode
Mehrere xsl:sort kombinierbar, keine Doppeleliminierung
Elektronisches Publizieren: Transformation von XML-Dokumenten
13./15.November 2006 ― 55
… Sortieren
<xsl:apply-templates select="book"
<xsl:sort select="@isbn"/>
</>
<ul>
<xsl:for-each
select="//city[not(.=preceding::city)]"/>
<xsl:sort select="."/>
<li><xsl:value-of select="."/></li>
</>
</ul>
Elektronisches Publizieren: Transformation von XML-Dokumenten
13./15.November 2006 ― 56
Identifizieren und Vergleichen
o
o
Berechnung einer eindeutigen Knoten-ID
mit Funktion generate-id() (pro XSLT-Bearbeitung!)
Anwendung Monats-Kontainer: Vergleich von Knoten
<plan><month>April</month><task>…</task><task>…</task>
<month>May</month><task>…</task><task>…</task></plan>
<xsl:for-each select="month">
<tasks month="{.}">
<xsl:variable name="mID" value="generate-id()"/>
<xsl:copy-of select="
following-sibling::task[
$mID=generate-id(preceding-sibling::month[1])
]"/>
</tasks>
</>
Elektronisches Publizieren: Transformation von XML-Dokumenten
13./15.November 2006 ― 57
Lokalisieren von Knoten nach Werten …
o
o
o
Aufbau eines Indexes mit xsl:key
Verwendbar auf oberster Ebene eines XSLT-Programms
Attribute
o
Nutzung des Indexes mit Funktion
key(Indexname,Indexterme)
name
match
use
Name
Ausdruck
Ausdruck
Name des Indexes
zu indexierende Knoten
Indexterm
Elektronisches Publizieren: Transformation von XML-Dokumenten
13./15.November 2006 ― 58
… Lokalisieren von Knoten nach Werten …
<xsl:key name="bookAuthor"
match="book" use="author/name"/>
<xsl:for-each select="key(′bookAuthor′,′A. Christie′)"/>
<xsl:variable name="ac"
select="key(′bookAuthor′,′A. Christie′)"/>
<xsl:for-each select="key(′bookAuthor′,$ac/author/name)"/>
Elektronisches Publizieren: Transformation von XML-Dokumenten
13./15.November 2006 ― 59
… Lokalisieren von Knoten nach Werten
<cities>
<city name="Paris" country="France"/>
<city name="Roma" country="Italia"/>
<city name="Nice" country="France"/>
</cities>
<xsl:key name="cityByCntry" match="city" use="@country"/>
<xsl:for-each select="//city[generate-id()=
generate-id(key(′cityByCntry′,@country)[1])]">
<h1><xsl:value-of select="@country"/></h1>
<ol><xsl:for-each select="key(′cityByCntry′,@country)">
<li><xsl:value-of select="@name"/></li></>
</ol>
</>
Elektronisches Publizieren: Transformation von XML-Dokumenten
13./15.November 2006 ― 60
XML XSLT HTML am Beispiel
o
o
o
o
o
o
o
o
Komplexere Form der XSLT-Programmierung
mit Vielzahl von Regeln, Rekursion, XPath-Ausdrücken
Spielzeugbuch über Compilerbau: compBook.xml
DTD für Spielzeugbücher:
book.dtd
XSLT-Transformationsregeln:
book2html.xsl
Ergebnis der Transformation:
compBook.htm
CSS-Stylesheet für HTML:
book.css
Parseraufruf:
parseCompBook.bat
Transformationsaufruf:
doBook2html.bat
Elektronisches Publizieren: Transformation von XML-Dokumenten
13./15.November 2006 ― 61
Spezialfall Formatierung
o
o
o
strukturierte Dokumente
Formatvorgabe
Formatierung als
XML
XSLT
Transformation
XSLT-P
in eine XML-kodierte
Designstruktur und deren
Designstruktur
XSL-FO
Interpretation
FOP
(preformat.bat, format.bat):
formatiertes Dokument
PDF
XSL-FO:
XML-Format für Designstrukturen
Umgesetzt mit der Extensible Style Language XSL
XSL = XML (XSLT XML)* XSLT XSL-FO
Elektronisches Publizieren: Transformation von XML-Dokumenten
13./15.November 2006 ― 62
Literatur zu XSL und XSL-FO
o
o
o
o
o
W3C: Extensible Stylesheet Language (XSL). Okt 2001.
[http://www.w3.org/TR/xsl/]
E.R. Harold: The XML Bible.
[http://www.ibiblio.org/xml/books/bible2/chapters/ch18.html]
J.D. Eisenberg: Using XSL Formatting Objects.
[http://www.xml.com/pub/a/2001/01/17/xsl-fo/index.html]
RenderX: XSL Formatting Objects Tutorial.
[http;//www.renderx.net/Content/support/xep/tutorial.html]
Antenna House: How to Develop Stylesheet for XML to
XSL-FO Transformation.
[http://www.antennahouse.com/XSLsample/howtoRC/Howtodevelop-en-2.pdf]
Elektronisches Publizieren: Transformation von XML-Dokumenten
13./15.November 2006 ― 63
Zugehörige Unterlagen
Herunterladen