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

Post on 05-Apr-2015

107 views 1 download

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

XML - Abfragesprache

Xpath

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

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

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

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

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

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.

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.

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.

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.

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.

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

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

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

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

Xpath

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

Ende