Upload
others
View
5
Download
0
Embed Size (px)
Citation preview
Übersicht
XPath
XSLT
2
XPathXML Path ist eine umfangreiche Sprache, um Teile von XML-Dokumenten zu adressieren
Keine XML-Syntax sondern URI-artige-Syntax (Pfadnamen)
abgekürzte und ausführliche Schreibweise
W3C Recomendations seit 1999 XPath 1.0, 3. 11. 2005 XPath 2.0http://www.w3.org/TR/xpath xpath20
3
Syntax: Ortsbestimmungs-Pfade
Durch / getrennte Liste von Ortsbestimmungs-Schritten: (location path, location step)
Element-Namen name Attributnamen @nameWildcards * . .. Bedingungen [ XPath-Ausdruck ]Aufruf vordefinierter XPath-Funktionen fun( )absolute Pfade beginnen mit /
4
Beispiel/*/greet[@lang='de']/text()
<?xml version=”1.0” encoding=”UTF-8”?><greetings>! Dieses XML-Dokument enthält Grußtexte ! <greet lang=”de”>Guten Tag!</greet>! <greet lang=”fr”>Bon Jour!</greet></greetings>
5
Beispiel/*/greet[@lang='de']/text()
<?xml version=”1.0” encoding=”UTF-8”?><greetings>! Dieses XML-Dokument enthält Grußtexte ! <greet lang=”de”>Guten Tag!</greet>! <greet lang=”fr”>Bon Jour!</greet></greetings>
6
Beispiel/*/greet[@lang='de']/text()
<?xml version=”1.0” encoding=”UTF-8”?><greetings>! Dieses XML-Dokument enthält Grußtexte ! <greet lang=”de”>Guten Tag!</greet>! <greet lang=”fr”>Bon Jour!</greet></greetings>
7
Beispiel/*/greet[@lang='de']/text()
<?xml version=”1.0” encoding=”UTF-8”?><greetings>! Dieses XML-Dokument enthält Grußtexte ! <greet lang=”de”>Guten Tag!</greet>! <greet lang=”fr”>Bon Jour!</greet></greetings>
8
Beispiel/*/greet[@lang='de']/text()
<?xml version=”1.0” encoding=”UTF-8”?><greetings>! Dieses XML-Dokument enthält Grußtexte ! <greet lang=”de”>Guten Tag!</greet>! <greet lang=”fr”>Bon Jour!</greet></greetings>
9
Beispiel/*/greet[@lang='de']/text()
<?xml version=”1.0” encoding=”UTF-8”?><greetings>! Dieses XML-Dokument enthält Grußtexte ! <greet lang=”de”>Guten Tag!</greet>! <greet lang=”fr”>Bon Jour!</greet></greetings>
Guten Tag!
10
Werte von Ausdrücken
Ergebniss von XPath-Ausdrücken sind
Knotenmengen (Node-Sets)
Strings
Zahlen
boolesche Werte
11
Relative Pfade
beginnen nicht mit /
sind relativ zum aktuellen Knotenbestimmt durch:
verschachtelt XPath-Ausdrücke z.B. bei [ Bedingungen ]
12
erweiterte Syntax
Ortsbestimmungs-Schritte haben die allgemeine Form:
Achse:: Knoten-Test[Prädikat]
z.B. child::greet[attribute::lang='de']
13
XPath-AchsenBestimmen die “Richtung” in der Knoten ermittelt werden
self im aktuellen Knoten selbst
parent im Elternknoten
child in den direkten Kindknoten (default)
attribute in den Attributen des aktuellen Knotens (abgekürzt durch @)
14
mehr XPath-Achsenancestor in direkten und indirekten Elternknoten
descendant in direkten und indirekten Kind-Knoten
ancestor-or-self
descendant-or-self
15
mehr XPath-Achsenfollowing-sibling, preceding-sibling dem aktuellen Knoten folgende bzw. vorangehende Knoten mit gleichem Elternelement
following, preceeding im Dokument folgende bzw. vorangehende Knoten
namespace
16
Beispiel/*/child::greet[attribute::lang='de']/text()
<?xml version=”1.0” encoding=”UTF-8”?><greetings>! Dieses XML-Dokument enthält Grußtexte ! <greet lang=”de”>Guten Tag!</greet>! <greet lang=”fr”>Bon Jour!</greet></greetings>
17
Knoten-TestElementName selektiert Subelemente mit gegebenem Namen* selektiert Elemente mit beliebigem Namen /*comment() text() processing-instruction() node()// steht für descendent-or-self::node(). steht für self::node().. steht für parent::node()
18
PrädikateXPath-Ausdrücke mit booleschem Ergebnis
aktueller Knotenmenge ist die durch vorhergehende Ortsbestimmungs-Schritte bestimmt
selektiert alle Knoten, für die das Prädikat wahr ist.
[ i ] steht für [position() = i]
19
XPath Ausdrücke
logische und arithmetische Ausdrücke
= != > < >= <= Achtung mit < -> <
and or + - * div mod
name, count, last, position, sum
Stringfunktionen
20
XPath Variablen
Xpath hat Variablen $var
Werte werden durch äußeren Kontext gegeben, z.B. XSLT
21
Beispiel: Navigieren
<?xml version="1.0"?><purchaseOrder orderDate="1999-10-20"> <shipTo country="US"> <name>Alice Smith</name> <street>123 Maple Street</street> <city>Mill Valley</city> <state>CA</state><zip>90952</zip> </shipTo> <billTo country="US"> <name>Robert Smith</name> <street>8 Oak Avenue</street> <city>Old Town</city> <state>PA</state><zip>95819</zip> </billTo> <comment>Hurry, my lawn is going wild!</comment> <items> <item partNum="872-AA"> <productName>Lawnmower</productName> <quantity>1</quantity> <USPrice>148.95</USPrice> <comment>Confirm this is electric</comment> </item> <item partNum="926-AA"> <productName>Baby Monitor</productName> <quantity>1</quantity> <USPrice>39.98</USPrice> <shipDate>1999-05-21</shipDate> </item> </items></purchaseOrder>
sum(/purchaseOrder/items/item/USPrice)
188.93
/purchaseOrder/items/item/@partNum
partNum=”872-AA”partNum=”926-AA”
22
XPath-ExplorerInteraktiver Editor für XPath Ausdrückehttp://xpe.sourceforge.net/
23
XPath ist mehrXPath 2.0 Erweiterungen
reguläre Ausdrücke
Sequenzen
Variablen mit Typen (aus XML-Schema)
24
XSLTXML mit XML transformieren
25
XSLTWas ist XSLT?
Wie transformiert XSLT die XML-Daten?
Wie arbeiten XPath und XSLT zusammen?
W3C-Recommendation:
XSLT 1.0 16. Nov 1999 http://www.w3.org/TR/xslt
XSLT 2.0 3. Nov 2005 http://www.w3.org/TR/xslt20/
26
Was ist XSLT?eXtensible Stylesheet Language for TransformationsRegelbasierte Programmiersprache zum Transformieren von XML-Dokumenten
XML XSLT Prozessor
HTML
Text
Java
XML
PythonC++JavaScript...
SVGXHTMLVRMLXSLT...
XSLT
Script
27
Beispiel: Wetterlage<?xml version="1.0" encoding="ISO8859-1" ?>
<wetter datum="2005-03-27" region="Schleswig-Holstein">
<ort name="Flensburg" temp="4">Regenschauer</ort>
<ort name="Fehmarn" temp="3">bedeckt</ort>
<ort name="Heide" temp="9">wolkig</ort>
<ort name="Itzehoe" temp="8">bedeckt</ort>
<ort name="Kiel" temp="4">bedeckt</ort>
<ort name="List auf Sylt" temp="5">bedeckt</ort>
<ort name="Lübeck" temp="7">bedeckt</ort>
<ort name="Rendsburg" temp="5">bedeckt</ort>
<ort name="Schleswig" temp="4">Regen</ort>
<ort name="St.Peter" temp="6">bedeckt</ort>
</wetter>
28
Ausgabe einer HTML-Tabelle
Wetter in Schleswig-Holstein am 27. 3. 2005
Ort Temperatur Wetterlage
Flensburg 4 °C Regenschauer
Fehmarn 3 °C bedeckt
Heide 9 °C wolkig
Itzehoe 8 °C bedeckt
Kiel 4 °C bedeckt
List auf Sylt 5 °C bedeckt
Lübeck 7 °C bedeckt
Rendsburg 5 °C bedeckt
Schleswig 4 °C Regen
St.Peter 6 °C bedeckt
Durchschnittstemperatur = 5.5 °C
29
Ausgabe eines Balkendiagramms (SVG)
30
Wozu XSLT?Darstellung von XML-Daten- Präsentation im Web- gedruckte Dokumente- Daten darstellungs-unabhängig in XML- XSLT bereitet Darstellung auf
Anpassung und Konvertierung zwischen XML-Formaten (z.B. für Datenmigration)
Allgemeine Verarbeitung von XML
31
Wie sieht ein XSLT-Script aus?XSLT-Programme (Stylesheets) haben XML-Syntax
Sie enthalten Sammlung von Regeln, die angeben, wie XML-Knoten transformiert werden sollen.
Beispiel: Erzeugen von HTML
<?xml version="1.0"?><greetings> <greet>Guten Tag!</greet> <greet>Bon Jour!</greet></greetings>
<html> <body> <h1>Guten Tag!</h1> <h1>Bon Jour!</h1> </body></html>
XSLT
32
Beispiel XSLT-Script<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"version="1.0"><xsl:output method="html"/>
<xsl:template match="/"><html>
<body><xsl:apply-templates select="greetings/greet"/>
</body></html>
</xsl:template>
<xsl:template match="greet"><h1><xsl:value-of select="."/></h1>
</xsl:template>
</xsl:stylesheet>
33
<xsl:stylesheetxmlns:xsl="http://www.w3.org/1999/XSL/Transform"version="1.0"><xsl:output method="html"/>
<xsl:template match="/"><html>
<body><xsl:apply-templates select="greetings/greet"/>
</body></html>
</xsl:template>
<xsl:template match="greet"><h1><xsl:value-of select="."/></h1>
</xsl:template>
</xsl:stylesheet>
Beispiel XSLT-ScriptProgrammrahmen
34
<xsl:stylesheetxmlns:xsl="http://www.w3.org/1999/XSL/Transform"version="1.0"><xsl:output method="html"/>
<xsl:template match="/"><html>
<body><xsl:apply-templates select="greetings/greet"/>
</body></html>
</xsl:template>
<xsl:template match="greet"><h1><xsl:value-of select="."/></h1>
</xsl:template>
</xsl:stylesheet>
Beispiel XSLT-ScriptAusgabe-Spezifikation
35
<xsl:stylesheetxmlns:xsl="http://www.w3.org/1999/XSL/Transform"version="1.0"><xsl:output method="html"/>
<xsl:template match="/"><html>
<body><xsl:apply-templates select="greetings/greet"/>
</body></html>
</xsl:template>
<xsl:template match="greet"><h1><xsl:value-of select="."/></h1>
</xsl:template>
</xsl:stylesheet>
Beispiel XSLT-ScriptTransformations-regeln
36
Demo
37
Warum “Stylesheet”-Language
Cascading Stylesheets (.css)
Legt Darstellung von HTML-Elementen fest
Z.B. Hyper-Links in blau, Überschriften fett und rot, ...
Ursprüngliche Aufgabe für XSLT
CSS und XSLT ergänzen sich
38
<xsl:stylesheetxmlns:xsl="http://www.w3.org/1999/XSL/Transform"version="1.0"><xsl:output method="html"/>
<xsl:template match="/"><html>
<body><xsl:apply-templates select="greetings/greet"/>
</body></html>
</xsl:template>
<xsl:template match="greet"><h1><xsl:value-of select="."/></h1>
</xsl:template>
</xsl:stylesheet>
Beispiel XSLT-Script
39
Wie arbeitet ein XSLT-Prozessor?Vorbereitung• Einlesen und Verarbeiten des XSLT-Scripts• Festlegen des Ausgabeformats• Einlesen der XML-Eingabe in eine Baumstruktur
<?xml version="1.0"?><greetings> <greet>Guten Tag!</greet> <greet>Bon Jour!</greet></greetings>
Wurzel-Knoten /
Verarbeitungs-
Anweisung
<?xml ... ?>
Dokument-Element
<greetings>...</greetings>
Guten Tag! Bon Jour!
Sub-Element
<greet>...</greet>
Sub-Element
<greet>...</greet>
40
XSLT-KontextKontext-KnotenlisteListe der zu bearbeitenden Knoten
Kontext-Knotenaktuell zu bearbeitender Knoten
(Variablenbindungen, Funktionsbibliothek, Namensräume, ...)
41
Kontext-InitialisierungKontext-Knotenliste: nur WurzelknotenKontext-Knoten: Wurzel-Knoten
Wurzel-Knoten /
Verarbeitungs-
Anweisung
<?xml ... ?>
Dokument-Element
<greetings>...</greetings>
Guten Tag! Bon Jour!
Sub-Element
<greet>...</greet>
Sub-Element
<greet>...</greet>
42
Wie arbeitet ein XSLT-Prozessor?
Wiederhole
Wende eine passende Regel auf den Kontext-Knoten an.
Wähle den nächsten Knoten aus der Kontext-Knotenliste.
bis Kontext-Knotenliste vollständig abgearbeitet
43
RegelanwendungIn Frage kommende Regeln
xsl:template-Definitionen im Scriptvordefinierte RegelnRekursives Anwenden von Regeln auf Elemente und TexteAusgabe von Werten für Attribute und TexteIgnorieren von Verarbeitungs-Anweisungen/Kommentaren
Wenn mehrere Regeln in Frage kommendie speziellste Regel wird angewendet
44
Vordefinierte RegelnAuf jedes Knoten (rekursiv) die passenden Regeln anwenden:<xsl:template match="*|/">
<xsl:apply-templates/></xsl:template>
Auf jeden Knoten die passenden Regeln des jeweiligen Modes anwenden:<xsl:template match="*|/" mode="x">
<xsl:apply-templates mode="x"/></xsl:template>
45
Vordefinierte Regeln
Text und Attribut-Werte ausgeben<xsl:template match="text()|@*">
<xsl:value-of select="."/></xsl:template>
Kommentare und Verarbeitungsanweisungen überspringen<xsl:template match="comment()|processing-instruction()"/>
Namespace-Definitionen überspringen<xsl:template match="namespace()"/>
46
<xsl:stylesheetxmlns:xsl="http://www.w3.org/1999/XSL/Transform"version="1.0">
<xsl:output method="html"/>
<xsl:template match="/"><html>
<body><xsl:apply-templates select="greetings/greet"/>
</body></html>
</xsl:template>
<xsl:template match="greet"><h1><xsl:value-of select="."/></h1>
</xsl:template></xsl:stylesheet>
Wurzel-Knoten /
Verarbeitungs-
Anweisung
<?xml ... ?>
Dokument-Element
<greetings>...</greetings>
Guten Tag! Bon Jour!
Sub-Element
<greet>...</greet>
Sub-Element
<greet>...</greet>
47
Ausgewählte Regel:
Wurzel-Knoten /
Verarbeitungs-
Anweisung
<?xml ... ?>
Dokument-Element
<greetings>...</greetings>
Guten Tag! Bon Jour!
Sub-Element
<greet>...</greet>
Sub-Element
<greet>...</greet>
<xsl:template match="/"> <html> <body> <xsl:apply-templates select="greetings/greet"/> </body> </html></xsl:template>
48
<xsl:template match="/"> <html> <body> <xsl:apply-templates select="greetings/greet"/> </body> </html></xsl:template>
Ausgewählte Regel:
Wurzel-Knoten /
Verarbeitungs-
Anweisung
<?xml ... ?>
Dokument-Element
<greetings>...</greetings>
Guten Tag! Bon Jour!
Sub-Element
<greet>...</greet>
Sub-Element
<greet>...</greet>
Ausgabe: <html><body>
49
<xsl:template match="/"> <html> <body> <xsl:apply-templates select="greetings/greet"/> </body> </html></xsl:template>
Ausgabe: <html><body>
Wurzel-Knoten /
Verarbeitungs-
Anweisung
<?xml ... ?>
Dokument-Element
<greetings>...</greetings>
Guten Tag! Bon Jour!
Sub-Element
<greet>...</greet>
Sub-Element
<greet>...</greet>
Ausgewählte Regel:
Regeln auf neue
Kontext-Knotenliste
anwenden
50
<xsl:stylesheetxmlns:xsl="http://www.w3.org/1999/XSL/Transform"version="1.0">
<xsl:output method="html"/>
<xsl:template match="/"><html>
<body><xsl:apply-templates select="greetings/greet"/>
</body></html>
</xsl:template>
<xsl:template match="greet"><h1><xsl:value-of select="."/></h1>
</xsl:template></xsl:stylesheet>
Wurzel-Knoten /
Verarbeitungs-
Anweisung
<?xml ... ?>
Dokument-Element
<greetings>...</greetings>
Guten Tag! Bon Jour!
Sub-Element
<greet>...</greet>
Sub-Element
<greet>...</greet>
Ausgabe: <html><body>
51
Wurzel-Knoten /
Verarbeitungs-
Anweisung
<?xml ... ?>
Dokument-Element
<greetings>...</greetings>
Guten Tag! Bon Jour!
Sub-Element
<greet>...</greet>
Sub-Element
<greet>...</greet>
Ausgewählte Regel:<xsl:template match="greet"> <h1><xsl:value-of select="."/></h1></xsl:template>
Ausgabe: <html><body>
52
Wurzel-Knoten /
Verarbeitungs-
Anweisung
<?xml ... ?>
Dokument-Element
<greetings>...</greetings>
Guten Tag! Bon Jour!
Sub-Element
<greet>...</greet>
Sub-Element
<greet>...</greet>
Ausgewählte Regel:<xsl:template match="greet"> <h1><xsl:value-of select="."/></h1></xsl:template>
Ausgabe: <html><body> <h1>Guten Tag!</h1>
53
<xsl:template match="greet"> <h1><xsl:value-of select="."/></h1></xsl:template>
Wurzel-Knoten /
Verarbeitungs-
Anweisung
<?xml ... ?>
Dokument-Element
<greetings>...</greetings>
Guten Tag! Bon Jour!
Sub-Element
<greet>...</greet>
Sub-Element
<greet>...</greet>
Ausgewählte Regel:
Ausgabe: <html><body> <h1>Guten Tag!</h1>
54
<xsl:template match="greet"> <h1><xsl:value-of select="."/></h1></xsl:template>
Wurzel-Knoten /
Verarbeitungs-
Anweisung
<?xml ... ?>
Dokument-Element
<greetings>...</greetings>
Guten Tag! Bon Jour!
Sub-Element
<greet>...</greet>
Sub-Element
<greet>...</greet>
Ausgewählte Regel:
Ausgabe: <html><body> <h1>Guten Tag!</h1> <h1>Bon Jour!</h1>
55
Wurzel-Knoten /
Verarbeitungs-
Anweisung
<?xml ... ?>
Dokument-Element
<greetings>...</greetings>
Guten Tag! Bon Jour!
Sub-Element
<greet>...</greet>
Sub-Element
<greet>...</greet>
Ausgabe: <html><body> <h1>Guten Tag!</h1> <h1>Bon Jour!</h1>
Keine weiteren Knoten in der Kontext-Knotenliste:Zum vorhergehenden Kontext zurückkehren
56
Ausgewählte Regel:
Wurzel-Knoten /
Verarbeitungs-
Anweisung
<?xml ... ?>
Dokument-Element
<greetings>...</greetings>
Guten Tag! Bon Jour!
Sub-Element
<greet>...</greet>
Sub-Element
<greet>...</greet>
<xsl:template match="/"> <html> <body> <xsl:apply-templates select="greetings/greet"/> </body> </html></xsl:template>
Ausgabe: <html><body> <h1>Guten Tag!</h1> <h1>Bon Jour!</h1>
57
<xsl:template match="/"> <html> <body> <xsl:apply-templates select="greetings/greet"/> </body> </html></xsl:template>
Ausgewählte Regel:
Wurzel-Knoten /
Verarbeitungs-
Anweisung
<?xml ... ?>
Dokument-Element
<greetings>...</greetings>
Guten Tag! Bon Jour!
Sub-Element
<greet>...</greet>
Sub-Element
<greet>...</greet>
Ausgabe: <html><body> <h1>Guten Tag!</h1> <h1>Bon Jour!</h1> </body></html>
58
Keine weiteren Knoten in der Kontext-Knotenliste: Ende der Transformation
Wurzel-Knoten /
Verarbeitungs-
Anweisung
<?xml ... ?>
Dokument-Element
<greetings>...</greetings>
Guten Tag! Bon Jour!
Sub-Element
<greet>...</greet>
Sub-Element
<greet>...</greet>
Ausgabe: <html><body> <h1>Guten Tag!</h1> <h1>Bon Jour!</h1> </body></html>
59
<xsl:stylesheetxmlns:xsl="http://www.w3.org/1999/XSL/Transform"version="1.0"><xsl:output method="html"/>
<xsl:template match="/"><html>
<body><xsl:apply-templates select="greetings/greet"/>
</body></html>
</xsl:template>
<xsl:template match="greet"><h1><xsl:value-of select="."/></h1>
</xsl:template>
</xsl:stylesheet>
Zugriff auf das XML-Dokument
Beispiel XSLT-Script
60
<xsl:stylesheetxmlns:xsl="http://www.w3.org/1999/XSL/Transform"version="1.0"><xsl:output method="html"/>
<xsl:template match="/"><html>
<body><xsl:apply-templates select="greetings/greet"/>
</body></html>
</xsl:template>
<xsl:template match="greet"><h1><xsl:value-of select="."/></h1>
</xsl:template>
</xsl:stylesheet>
Beispiel XSLT-Script
Zugriff auf das XML-Dokument
61
XPath und XSLT
Bestimmung von Knotenmengen in xsl:apply-templates
Berechnung von Zahlen und Strings in xsl:value-of
Boolesche Bedingungen in xsl:template
62
Ausgabe einer HTML-Tabelle
Wetter in Schleswig-Holstein am 27. 3. 2005
Ort Temperatur Wetterlage
Flensburg 4 °C Regenschauer
Fehmarn 3 °C bedeckt
Heide 9 °C wolkig
Itzehoe 8 °C bedeckt
Kiel 4 °C bedeckt
List auf Sylt 5 °C bedeckt
Lübeck 7 °C bedeckt
Rendsburg 5 °C bedeckt
Schleswig 4 °C Regen
St.Peter 6 °C bedeckt
Durchschnittstemperatur = 5.5 °C
63
Beispiel: Wetterlage<?xml version="1.0" encoding="ISO8859-1" ?>
<wetter datum="2005-03-27" region="Schleswig-Holstein">
<ort name="Flensburg" temp="4">Regenschauer</ort>
<ort name="Fehmarn" temp="3">bedeckt</ort>
<ort name="Heide" temp="9">wolkig</ort>
<ort name="Itzehoe" temp="8">bedeckt</ort>
<ort name="Kiel" temp="4">bedeckt</ort>
<ort name="List auf Sylt" temp="5">bedeckt</ort>
<ort name="Lübeck" temp="7">bedeckt</ort>
<ort name="Rendsburg" temp="5">bedeckt</ort>
<ort name="Schleswig" temp="4">Regen</ort>
<ort name="St.Peter" temp="6">bedeckt</ort>
</wetter>
64
XSLT-Script
Demo XSLT-Script für HTML-Generierung
65
Ausgabe eines Balkendiagramms (SVG)
66
XSLT-Script
Demo XSLT-Script für SVG-Generierung
67
XSLT ist mehrBedingungenErzeugen von PDF, Text, XML, Programmenerweiterte FallunterscheidungenIterieren über KnotenmengenInclude und ImportModesTemplate-Aufruf mit ParameternVariablenRekursionSortieren, AuswählenLinken xsl:id, xsl:keyDokumentenzugriff xsl:documentErweiterungsmöglichkeiten
68
Zusammenfassung
XML trennt Daten und Darstellung
XSLT ist eine regelbasierte Programmiersprache zum Transformieren von XML-Dokumenten
Zum Selektieren von XML-Teilen wird XPath verwendet
69