XML - Abfragesprache Xpath. Problemstellung Unsere XML-Datei steht und wir wollen alle 1. Titel...

16
XML - Abfragesprache Xpath

Transcript of XML - Abfragesprache Xpath. Problemstellung Unsere XML-Datei steht und wir wollen alle 1. Titel...

Page 1: XML - Abfragesprache Xpath. Problemstellung Unsere XML-Datei steht und wir wollen alle 1. Titel aller vergangenen Sendungen automatisch aus den Playlists.

XML - Abfragesprache

Xpath

Page 2: XML - Abfragesprache Xpath. Problemstellung Unsere XML-Datei steht und wir wollen alle 1. Titel aller vergangenen Sendungen automatisch aus den Playlists.

Xpath

Problemstellung

Unsere XML-Datei steht und wir wollen alle 1. Titel aller vergangenen Sendungen automatisch aus den Playlists heraussuchen lassen.

> Mit Xpath lässt sich diese Abfrage ausdrücken

Page 3: XML - Abfragesprache Xpath. Problemstellung Unsere XML-Datei steht und wir wollen alle 1. Titel aller vergangenen Sendungen automatisch aus den Playlists.

Allgemeine Informationen

• Vom W3-Konsortium entwickelte Abfragesprache

• Dient der Abfrage von Teilen eines XML-Dokuments

• Dient als Grundlage für weitere Standards wie XSLT, Xpointer oder XQuery

Xpath

Page 4: XML - Abfragesprache Xpath. Problemstellung Unsere XML-Datei steht und wir wollen alle 1. Titel aller vergangenen Sendungen automatisch aus den Playlists.

Xpath

Die Beispielauswahl mit Xpath ausgedrückt:

/child::koelnCampus/child::sendung/child::playlist/child::song[attribute::nr=1]/child::songtitel

Alternative (Kurz-) Schreibweise (von denen es Unzählige gibt):

/koelnCampus/sendung/playlist/song[@nr=1]/songtitel

/child::koelnCampus/child::sendung/child::playlist/child::song[attribute::nr=1]/child::songtitel

Page 5: XML - Abfragesprache Xpath. Problemstellung Unsere XML-Datei steht und wir wollen alle 1. Titel aller vergangenen Sendungen automatisch aus den Playlists.

Xpath

• Xpath durchläuft die XML-Datei entlang ihrer Baumstruktur• Es gibt 7 Knotentypen (haben wir z.T. schon bei der XML-Einführung

angesprochen):

1. Wurzel (= das oberstes Element)2. Elemente3. Attribute4. Text (= der Inhalt zwischen den Tags)5. Namensraum6. Verarbeitungsanweisung (z.B. <?xml version="1.0" encoding="UTF-8"?>)7. Kommentare

/child::koelnCampus/child::sendung/child::playlist/child::song[attribute::nr=1]/child::songtitel

Page 6: XML - Abfragesprache Xpath. Problemstellung Unsere XML-Datei steht und wir wollen alle 1. Titel aller vergangenen Sendungen automatisch aus den Playlists.

Xpath

Genereller Aufbau eines Xpath-Ausdrucks• Einer oder mehrere Lokalisierungsschritte (location steps), durch „/“

voneinander getrennt. Diese bestehen aus zwei Teilen:1. Der Achse (axis)2. Dem Knotentest (node-test)

• Optional folgen ein oder mehrere Prädikate (predicates)

• Will man mehrere Xpath-Ausdrücke beliebig hintereinander schreiben, kann man sie mit dem Zeichen „|“ verbinden.

/child::koelnCampus/child::sendung/child::playlist/child::song[attribute::nr=1]/child::songtitel

Page 7: XML - Abfragesprache Xpath. Problemstellung Unsere XML-Datei steht und wir wollen alle 1. Titel aller vergangenen Sendungen automatisch aus den Playlists.

Xpath

AchsenDie verschiedenen Achsenrichtungen geben an, in welche Richtung man sich in der Baumstruktur des Dokuments bewegt.(siehe: http://de.wikipedia.org/wiki/XPath#Achsen)

/child::koelnCampus/child::sendung/child::playlist/child::song[attribute::nr=1]/child::songtitel

koelnCampus

sendung sendung sendung sendung

usw.

Page 8: XML - Abfragesprache Xpath. Problemstellung Unsere XML-Datei steht und wir wollen alle 1. Titel aller vergangenen Sendungen automatisch aus den Playlists.

Xpath

Beispiel für Achsenrichtung 1: child (Kindachse)Die Kindknoten unterhalb des aktuellen Knotens werden angesprochen

/child::koelnCampus/child::sendung/child::playlist/child::song[attribute::nr=1]/child::songtitel

koelnCampus

sendung sendung sendung sendung

usw.

Page 9: XML - Abfragesprache Xpath. Problemstellung Unsere XML-Datei steht und wir wollen alle 1. Titel aller vergangenen Sendungen automatisch aus den Playlists.

Xpath

Beispiel für Achsenrichtung 2: parent (Elternachse)Der Elternknoten des aktuellen Knotens wird angesprochen

/child::koelnCampus/child::sendung/child::playlist/child::song[attribute::nr=1]/child::songtitel

koelnCampus

sendung sendung sendung sendung

usw.

Page 10: XML - Abfragesprache Xpath. Problemstellung Unsere XML-Datei steht und wir wollen alle 1. Titel aller vergangenen Sendungen automatisch aus den Playlists.

Xpath

Beispiel für Achsenrichtung 3: descendantSämtliche Nachkommen des aktuellen Knoten werden angesprochen

/child::koelnCampus/child::sendung/child::playlist/child::song[attribute::nr=1]/child::songtitel

koelnCampus

sendung sendung sendung sendung

usw.

Page 11: XML - Abfragesprache Xpath. Problemstellung Unsere XML-Datei steht und wir wollen alle 1. Titel aller vergangenen Sendungen automatisch aus den Playlists.

Xpath

Beispiel für Achsenrichtung 3: following-sibling Alle folgenden Geschwisterknoten werden angesprochen

/child::koelnCampus/child::sendung/child::playlist/child::song[attribute::nr=1]/child::songtitel

koelnCampus

sendung sendung sendung sendung

usw.

Page 12: XML - Abfragesprache Xpath. Problemstellung Unsere XML-Datei steht und wir wollen alle 1. Titel aller vergangenen Sendungen automatisch aus den Playlists.

Xpath

Knotentest

• In unserem Beispiel werden also jeweils immer die child-Achsen der entsprechenden Kontextknoten angesprochen (s.u.).

• Der Knotentest schränkt die Elementauswahl der Achse ein (z.B. hat sendung mehr Kinder als nur playlist, weswegen dessen Elementname angegeben wird), er wird mit zwei Doppelpunkten „::“ an die Achse angefügt

• Bei „/child::koelnCampus/child::sendung/child::*“ würden hingegen alle child-Elemente von sendung ausgegeben werden. Das Zeichen „*“ als Knotentest steht also für „gib mir alle Achsen dieses Typs“.

/child::koelnCampus/child::sendung/child::playlist/child::song[attribute::nr=1]/child::songtitel

Page 13: XML - Abfragesprache Xpath. Problemstellung Unsere XML-Datei steht und wir wollen alle 1. Titel aller vergangenen Sendungen automatisch aus den Playlists.

Xpath

Prädikate

Mit Prädikaten lässt sich die Auswahl (nach dem Knotentest) weiter einschränken. Ein Prädikat ist in eckigen Klammern [] notiert und kann verschiedene Funktionen beinhalten. (siehe: http://de.wikipedia.org/wiki/XPath#Pr.C3.A4dikate)

In unserem Beispiel werden nur jene song-Knoten (->Knotentest) ausgewählt, bei denen das Attribut nr den Wert 1 besitzt (->Prädikat).

/child::koelnCampus/child::sendung/child::playlist/child::song[attribute::nr=1]/child::songtitel

Page 14: XML - Abfragesprache Xpath. Problemstellung Unsere XML-Datei steht und wir wollen alle 1. Titel aller vergangenen Sendungen automatisch aus den Playlists.

Xpath

Alternativen wären zum Beispiel alle songtitel ausser den ersten:/child::koelnCampus/child::sendung/child::playlist/child::song[attribute::nr!=1]/child::songtitel

Oder alle songtitel mit dem Attribut nr größer als 1 aber kleiner als 7:/child::koelnCampus/child::sendung/child::playlist/child::song[attribute::nr>1][attribute::nr<7]/

child::songtitel

Oder alle interpreten, die in playlists vorkommen, in denen weniger als 10mal das Element song vorkommt:

/child::koelnCampus/child::sendung/child::playlist[count(./song)<10]/child::song/child::interpret

/child::koelnCampus/child::sendung/child::playlist/child::song[attribute::nr=1]/child::songtitel

Page 15: XML - Abfragesprache Xpath. Problemstellung Unsere XML-Datei steht und wir wollen alle 1. Titel aller vergangenen Sendungen automatisch aus den Playlists.

Prädikate können allgemein drei Arten von Operatoren beinhalten:

1. Relationszeichen (=, !=, <, >, <=, >=)

2. Mathematische Operatoren (+, -, /, *, Klammern, usw.)

3. Funktionen (z.B. die count()-Funktion von der Seite vorher)

Xpath

/child::koelnCampus/child::sendung/child::playlist/child::song[attribute::nr=1]/child::songtitel

Page 16: XML - Abfragesprache Xpath. Problemstellung Unsere XML-Datei steht und wir wollen alle 1. Titel aller vergangenen Sendungen automatisch aus den Playlists.

Xpath

/child::koelnCampus/child::sendung/child::playlist/child::song[attribute::nr=1]/child::songtitel

Ende