XPath Was ist XPath XPath ist eine Syntax für das Definieren der Teile eines XML-Dokumentes. XPath...

22
XPath Was ist XPath XPath ist eine Syntax für das Definieren der Teile eines XML-Dokumentes. XPath benutzt Pfade, um XML-Elemente zu definieren. XPath definiert eine Bibliothek von Standardfunktionen. XPath ist ein Hauptelement in XSLT. XPath wird nicht in XML geschrieben. XPath ist ein W3C-Standard. XPath wurde für die Verwendung in XSLT und anderer XML- Parsing-Software entworfen. Matthias Weibel XML Technologien Seminar SS ´02

Transcript of XPath Was ist XPath XPath ist eine Syntax für das Definieren der Teile eines XML-Dokumentes. XPath...

Page 1: XPath Was ist XPath XPath ist eine Syntax für das Definieren der Teile eines XML-Dokumentes. XPath benutzt Pfade, um XML-Elemente zu definieren. XPath.

XPath

Was ist XPath

• XPath ist eine Syntax für das Definieren der Teile eines XML-Dokumentes.

• XPath benutzt Pfade, um XML-Elemente zu definieren.

• XPath definiert eine Bibliothek von Standardfunktionen.

• XPath ist ein Hauptelement in XSLT.

• XPath wird nicht in XML geschrieben.

• XPath ist ein W3C-Standard.

• XPath wurde für die Verwendung in XSLT und anderer XML-Parsing-Software entworfen.

Matthias WeibelXML Technologien Seminar SS ´02

Page 2: XPath Was ist XPath XPath ist eine Syntax für das Definieren der Teile eines XML-Dokumentes. XPath benutzt Pfade, um XML-Elemente zu definieren. XPath.

XPath

XPath modelliert ein XML-Dokument als einen Baum, der aus Knoten besteht. Es gibt verschiedene Knotentypen, unter anderem Elementknoten, Attributknoten und Textknoten.

Matthias WeibelXML Technologien Seminar SS ´02

<?xml version="1.0" encoding="ISO-8859-1"?><catalog> <cd type="rock"> <!-- my favourite record --> <title>Empire Burlesque</title> <artist>Bob Dylan</artist> </cd>

.

.

.</catalog>

/

catalog

cd

<!-- my… --> title artist

Empire... Bob Dylan

type=“rock“

Page 3: XPath Was ist XPath XPath ist eine Syntax für das Definieren der Teile eines XML-Dokumentes. XPath benutzt Pfade, um XML-Elemente zu definieren. XPath.

XPath

XPath verwendet Lokalisierungspfade wie in einem Dateisystem, um Knoten in einem XML-Dokument auszuwählen.

Matthias WeibelXML Technologien Seminar SS ´02

<?xml version="1.0" encoding="ISO-8859-1"?><catalog>

<cd type="rock"><title>Empire Burlesque</title><artist>Bob Dylan</artist>

</cd><cd type="heavy metal">

<title>Back in Black</title><artist>AC/DC</artist>

</cd>...

</catalog>

/catalog/cd/artist(/child::catalog/child::cd/child::artist)

Page 4: XPath Was ist XPath XPath ist eine Syntax für das Definieren der Teile eines XML-Dokumentes. XPath benutzt Pfade, um XML-Elemente zu definieren. XPath.

XPath

Lokalisierungspfad

• Ein Lokalisierungspfad besteht aus einem oder mehreren

Lokalisierungsschritten getrennt durch “/“.

Lokalisierungsschritt / Lokalisierungsschritt...

• Ein Lokalisierungsschritt hat die folgende Form:

Achse::Knotentest[Prädikat*]

• Die Achse spezifiziert die Beziehung zwischen den durch den Lokalisierungsschritt ausgewählten Knoten und dem Kontextknoten innerhalb des Baumes.

• Der Knotentest spezifiziert den Knotentyp und den erweiterten Namen der durch den Lokalisierungsschritt ausgewählten Knoten.

• null oder mehr Prädikate können die mittels beliebiger Ausdrücke die durch den Lokalisierungsschritt ausgewählte Knotenmenge weiter verfeinern.

Matthias WeibelXML Technologien Seminar SS ´02

Page 5: XPath Was ist XPath XPath ist eine Syntax für das Definieren der Teile eines XML-Dokumentes. XPath benutzt Pfade, um XML-Elemente zu definieren. XPath.

XPath

Beispiele Lokalisierungsschritte

• ancestor::div wählt alle div-Elemente aus, die Vorfahren des Kontextknotens sind

• child::para[attribute::type="warning"] wählt alle para-Kindelemente des Kontextknotens aus, die ein type-Attribut mit dem Wert warning besitzen

• child::para[position()=1] wählt das erste para-Kindelement des Kontextknotens aus

• child::para[attribute::type='warning'][position()=5] wählt das fünfte para-Kindelement des Kontextknotens aus, das ein Attribut type mit dem Wert warning besitzt

• child::para[position()=5][attribute::type="warning"]wählt das fünfte para-Kindelement des Kontextknotens aus, wenn dieses Kind ein type-Attribut mit dem Wert warning besitzt

Matthias WeibelXML Technologien Seminar SS ´02

Page 6: XPath Was ist XPath XPath ist eine Syntax für das Definieren der Teile eines XML-Dokumentes. XPath benutzt Pfade, um XML-Elemente zu definieren. XPath.

XPath

Beispiele Lokalisierungspfade

• /child::*/child::name/attribute::type wählt alle type-Attribute der name-Kindelemente aller Kinder des Kontextknotens.

• /child::catalog/child::cd/preceding-sibling::*wählt alle vorhergehenden Geschwister aller cd-Kindelement aller catalog-Kindelemente des Kontextknotens.

• /child::catalog/child::cd[position() = 2] wählt das zweite cd-Kindelement aller catalog-Kindelemente des Kontextknotens.

• /ancestor::*/attribute::*wählt alle Attribute der Vorfahrenknoten

Matthias WeibelXML Technologien Seminar SS ´02

Page 7: XPath Was ist XPath XPath ist eine Syntax für das Definieren der Teile eines XML-Dokumentes. XPath benutzt Pfade, um XML-Elemente zu definieren. XPath.

XPath

Die AchsenAchse::Knotentest[Prädikat*]

Es stehen folgende Achsen zur Verfügung:

• child enthält die Kinder des Kontextknotens.

• descendant enthält die Nachkommen des Kontextknotens. Die Nachkommenachse enthält niemals Attribut- oder Namensraumknoten.

• parent enthält den Elternknoten des Kontextknotens, falls es einen gibt.

• ancestor enthält die Vorfahren des Kontextknotens.

• following-sibling enthält alle nachfolgenden Geschwister des Kontextknotens; falls der Kontextknoten ein Attribut- oder Namensraumknoten ist, ist diese Achse leer.

Matthias WeibelXML Technologien Seminar SS ´02

Page 8: XPath Was ist XPath XPath ist eine Syntax für das Definieren der Teile eines XML-Dokumentes. XPath benutzt Pfade, um XML-Elemente zu definieren. XPath.

XPath

Die Achsen (Fortsetzung)

• preceding-sibling enthält alle vorhergehenden Geschwister des Kontextknotens; falls der Kontextknoten ein Attribut- oder Namensraumknoten ist, ist diese Achse leer.

• following enthält alle Knoten im gleichen Dokument wie der Kontextknoten, die nach dem Kontextknoten in Dokumentordnung auftreten, und zwar ohne seine Nachkommen und ohne Attribut- und Namensraumknoten.

• preceding enthält alle Knoten im gleichen Dokument wie der Kontextknoten, die vor dem Kontextknoten in Dokumentordnung auftreten, und zwar ohne seine Vorfahren und ohne Attribut- und Namensraumknoten.

• attribute enthält die Attribute des Kontextknotens; diese Achse ist leer, es sei denn, der Kontextknoten ist ein Elementknoten.

Matthias WeibelXML Technologien Seminar SS ´02

Page 9: XPath Was ist XPath XPath ist eine Syntax für das Definieren der Teile eines XML-Dokumentes. XPath benutzt Pfade, um XML-Elemente zu definieren. XPath.

XPath

Die Achsen (Fortsetzung)

• namespace enthält alle Namensraumknoten des Kontextknotens; diese Achse ist leer, es sei denn, der Kontextknoten ist ein Elementknoten.

• self enthält nur den Kontextknoten selbst.

• descendant-or-self enthält den Kontextknoten sowie die Nachkommen des Kontextknotens.

• ancestor-or-self enthält den Kontextknoten sowie die Vorfahren des Kontextknotens; diese Achse enthält somit immer den Wurzelknoten.

Matthias WeibelXML Technologien Seminar SS ´02

Page 10: XPath Was ist XPath XPath ist eine Syntax für das Definieren der Teile eines XML-Dokumentes. XPath benutzt Pfade, um XML-Elemente zu definieren. XPath.

XPath

Matthias WeibelXML Technologien Seminar SS ´02

(http://www.ejim.co.uk/module/overview/xpath.htm)

Page 11: XPath Was ist XPath XPath ist eine Syntax für das Definieren der Teile eines XML-Dokumentes. XPath benutzt Pfade, um XML-Elemente zu definieren. XPath.

XPath

Knotentest

Achse::Knotentest[Prädikat*]

• *: Selektieren aller Knoten dieser Achse

child::* -> alle Kinder des Kontextknotens

• Knotenname: Selektieren aller Knoten mit diesem Name

child::div -> alle Kinder mit Knotenname div

Matthias WeibelXML Technologien Seminar SS ´02

Page 12: XPath Was ist XPath XPath ist eine Syntax für das Definieren der Teile eines XML-Dokumentes. XPath benutzt Pfade, um XML-Elemente zu definieren. XPath.

XPath

Knotentest (Fortsetzung)

• Knotentyp: Selektiert alle Knoten dieses Typs. Die folgenden Knotentypen sind möglich:

– node() child::node() -> alle Kinder, ausser Attribut- und Namensraumknoten

– text() child::text() -> alle Kinder, die Texknoten sind

– comment()child::comment -> alle Kinder, die Kommentarknoten sind

– processing-instruction()child::processing-instruction -> alle Kinder, die processing instruction-Knoten sind.

– processing-instruction(“target“)child::proccessing-instruction(‘xml-stylesheet‘) -> processing instruction-Knoten der Form (<?xml-stylesheet ... ?>)

Matthias WeibelXML Technologien Seminar SS ´02

Page 13: XPath Was ist XPath XPath ist eine Syntax für das Definieren der Teile eines XML-Dokumentes. XPath benutzt Pfade, um XML-Elemente zu definieren. XPath.

XPath

PrädikateAchse::Knotentest[Prädikat*]

• Prädikate können als Filter benutzt werden, um die Knotenmenge definiert durch Achse und Knotentest noch weiter zu verfeinern.

• Es sind null oder mehr Prädikate möglich.

[x Operator einWert]

x: kann entweder ein weiterer Lokalisierungsschritt, im Verhältnis zu den Knoten, die bis jetzt durch den Knoten-Test und der Achse selektiert werden, oder eine eingebaute XPath Funktion sein.

Operator: ist ein Boolean Operator, wie “=“, “!=“, “>“, usw.(Achtung für “>“ und “<“ sollte “&gt;“ und “&lt;“ verwendet werden.)

einWert: ist der Wert mit dem x verglichen werden sollte.

Matthias WeibelXML Technologien Seminar SS ´02

Page 14: XPath Was ist XPath XPath ist eine Syntax für das Definieren der Teile eines XML-Dokumentes. XPath benutzt Pfade, um XML-Elemente zu definieren. XPath.

XPath

Prädikate (Fortsetzung)

Beispiele:

• [position() = 1] liefert den ersten Knoten der Knotenmenge in der Dokumentreihenfolge

• [attribute::type != "rock"] liefert alle Knoten der Knotenmenge, die ein Attribut “type“ besitzen und dessen Wert ungleich “rock“ ist.

• [position() = 1 and attribute::type != "rock"] liefert den ersten Knoten der Knotenmenge, wenn er ein Attribute “type“ besitzt und dessen Wert ungleich “rock“ ist.

• [attribute::type != "rock"] [position() = 1] liefert den Knoten der Knotenmenge, welcher der erste Knoten der Knotenmenge aller Knoten, die ein Attribut “type“ besitzen und dessen Wert ungleich “rock“ ist.

Matthias WeibelXML Technologien Seminar SS ´02

Page 15: XPath Was ist XPath XPath ist eine Syntax für das Definieren der Teile eines XML-Dokumentes. XPath benutzt Pfade, um XML-Elemente zu definieren. XPath.

XPath

Funktionen

Die Funktionsbibliotheke von XPath enthält einen Satz von Funktionen, die es erlauben, Ausdrücke auszuwerten.

Die Bibliotheke ist unterteilt in 4 Gruppen

• Funktionen auf KnotenmengenÜbernehmen als Argument Knotenmengen, geben Knotenmengen oder Informationen über einen bestimmten Knoten der Knotenmenge zurück.

• ZeichenkettenfunktionenFühren auf Zeichenketteargumente Auswertungen, Formatierungen und Manipulationen durch.

• Boolesche FunktionenWerten die Argumentausdrücke aus, um ein boolesches Resultat zu erhalten.

• ZahlenfunktionenWerten die Argumentausdrücke aus, um ein numerisches Resultat zu erhalten.

Matthias WeibelXML Technologien Seminar SS ´02

Page 16: XPath Was ist XPath XPath ist eine Syntax für das Definieren der Teile eines XML-Dokumentes. XPath benutzt Pfade, um XML-Elemente zu definieren. XPath.

XPath

Knotenmengenfunktionen

• number last(): liefert eine Zahl, die gleich der Größe des Kontextes des ausgewerteten Ausdrucks ist.

/child::*[last()] -> das letzte Kind des Kontextknotens

• number position(): liefert eine Zahl, die gleich der Position im Kontext des ausgewerteten Ausdrucks ist./child::*[position()=3] -> das dritte Kind des Kontextknotens

• number count(node-set): liefert die Anzahl der Knoten der übergebenen Knotenmenge.count(/child::*) liefert die Anzahl Kinder des Kontextknotens

Matthias WeibelXML Technologien Seminar SS ´02

Page 17: XPath Was ist XPath XPath ist eine Syntax für das Definieren der Teile eines XML-Dokumentes. XPath benutzt Pfade, um XML-Elemente zu definieren. XPath.

XPath

Zeichenkettenfunktionen

• string string(object?): konvertiert ein Objekt in eine Zeichenkette

• string concat(string, string, string*): liefert die Verkettung ihrer Argumente.

• boolean starts-with(string, string): liefert den logischen Wert wahr, falls die im ersten Argument übergebene Zeichenkette mit der im zweiten Argument übergebenen Zeichenkette beginnt, und andernfalls falsch.

• boolean contains(string, string):liefert den logischen Wert wahr, falls die im ersten Argument übergebene Zeichenkette die im zweiten Argument übergebene Zeichenkette enthält, und andernfalls falsch.

Matthias WeibelXML Technologien Seminar SS ´02

Page 18: XPath Was ist XPath XPath ist eine Syntax für das Definieren der Teile eines XML-Dokumentes. XPath benutzt Pfade, um XML-Elemente zu definieren. XPath.

XPath

Boolesche Funktionen

• boolean boolean(object): konvertiert ihr Argument wie folgt in einen Boolean-Wert: – Eine Zahl ergibt den Wert wahr genau dann, wenn sie weder positiv oder

negativ Null noch NaN ist.

– Eine Knotenmenge ergibt den Wert wahr genau dann, wenn sie nicht leer ist.

– Eine Zeichenkette ergibt genau dann den Wert wahr, wenn ihre Länge ungleich Null ist.

• boolean not(boolean): liefert den Wert wahr, wenn ihr Argument falsch ist, und ansonsten falsch.

• boolean true(): liefert den Wert wahr.

• boolean false():liefert den Wert falsch.

Matthias WeibelXML Technologien Seminar SS ´02

Page 19: XPath Was ist XPath XPath ist eine Syntax für das Definieren der Teile eines XML-Dokumentes. XPath benutzt Pfade, um XML-Elemente zu definieren. XPath.

XPath

Zahlenfunktionen

• number number(object?): konvertiert ihr Argument in eine Zahl.

• number sum(node-set): liefert die Summe aller in eine Zahl konvertierten Zeichenkettenwerte der Knoten aus der Argumentknotenmenge.

• number floor(number): liefert die größte Zahl (die am nächsten an positiv unendlich liegt), die nicht größer als das Argument und ganzzahlig ist.

• number ceiling(number): liefert die kleinste Zahl (die am nächsten an negativ unendlich liegt), die nicht kleiner als das Argument und ganzzahlig ist.

• number round(number): liefert die Zahl, die am nächsten am Argument liegt und die ganzzahlig ist.

Matthias WeibelXML Technologien Seminar SS ´02

Page 20: XPath Was ist XPath XPath ist eine Syntax für das Definieren der Teile eines XML-Dokumentes. XPath benutzt Pfade, um XML-Elemente zu definieren. XPath.

XPath

Abgekürzte Syntax

Mit Hilfe der abgekürzten Syntax lassen sich Lokalisierungsschritte mit weniger Schreibaufwand erstellen.

child (default)kann weggelassen werden. Die Standardachse ist also child.div/para ist abkürzend für child::div/child::para.

parent ..wählt den Elternknoten des Kontextknotens aus.

descendant ////item wählt alle item-Elemente aus dem gleichen Dokument wie der

Kontextknoten aus.

attribute @../@lang wählt das Attribut lang des Elternknotens des Kontextknotens aus.

Matthias WeibelXML Technologien Seminar SS ´02

Page 21: XPath Was ist XPath XPath ist eine Syntax für das Definieren der Teile eines XML-Dokumentes. XPath benutzt Pfade, um XML-Elemente zu definieren. XPath.

XPath

Abgekürzte Syntax (Fortsetzung)

self .. wählt den Kontextknoten aus.

position() = number numberelem[3] wählt das dritte elem-Kindelement des Kontextknotens aus.

weitere Beispiele:

para[5][@type="warning"] wählt das fünfte para-Kindelement des Kontextknotens aus, falls dieses Kind ein Attribut type mit dem Wert warning besitzt.

@* wählt alle Attribute des Kontextknotens aus.

para[last()] wählt das letzte para-Kindelement des Kontextknotens aus.

Matthias WeibelXML Technologien Seminar SS ´02

Page 22: XPath Was ist XPath XPath ist eine Syntax für das Definieren der Teile eines XML-Dokumentes. XPath benutzt Pfade, um XML-Elemente zu definieren. XPath.

XPath

Informationsquellen

• w3c Spezifikation: (http://www.w3.org/TR/xpath)

• Deutsche Übersetzung: (http://www.informatik.hu-berlin.de/~obecker/obqo/w3c-trans/xpath-de/

• XPath Explorer: (http://www.purpletech.com/xpe/index.jsp)

• XPath TV: (http://www.ejim.co.uk/module/overview/xpath.htm)

• Microsoft msdn: (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk/htm/xpath_devguide_overview_86gn.asp?frame=true)

• XPath Referenz: (http://www.vbxml.com/xsl/XPathRef.asp)

• O‘Reilly Referenz: (http://www.oreilly.com/catalog/xmlnut/chapter/ch09.html)

• Tutorials: (http://www.zvon.org/xxl/XPathTutorial/General/examples.html) (http://www.w3schools.com/xpath/default.asp)

Matthias WeibelXML Technologien Seminar SS ´02