xml - abfragesprache xpath. problemstellung unsere xml-datei steht und wir wollen alle 1. titel...
Post on 05-Apr-2015
107 Views
Preview:
TRANSCRIPT
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
top related