XML Anfragen: XPath XML 1
Ausgangspunkt: Jedes XML Dokument hat Baumrepräsentation Aufgaben von XPath: Adressierung von Teilen eines XML-Dokuments Selektion von Knotenmengen Einschränkung der Knotenmenge durch Formulierung von Bedingungen Basiskonzept für weitere Technologien wie XSLT, XQuery, XPointer Grundlegenden Konzept: Pfadausdrücke mit zusätzlichen Bedingungen XML 2
Einführendes Beispiel alle spanischen Städte mit mehr als 1 Mio Einwohner <?xml version="1.0" encoding="utf-8"?> <world> <country> <name>germany</name> <city population="275000"><name>karlsruhe</name></city> </country> <country> <name>spain</name> <city population="3213271"><name>madrid</name></city> <city population="1615908"><name>barcelona</name></city> <city population="137536"><name>malaga</name></city> </country> </world> //country[name/text()='spain']//city[attribute::population > 1000000]/name/text() Madrid Barcelona XML 3
Beispiel <Zoo> <Tier art="giraffe" gewicht="250"> <Ort>Zentralpark</Ort> Sarah Sonderbar gewicht <Tier art="elefant" gewicht="500"> art <Ort>Eingang</Ort> Sabine Sonnenschein Susi Sorglos <frei tag="do"/> <Tier art="delphin" gewicht="80"> <Aquarium> <Ort>Aquahouse</Ort> </Aquarium> Sascha Sportlich<frei tag="mo"/> </Zoo> Zoo gewicht Tier Tier Tier Gehege Pfleger Pfleger Ort art frei tag gewicht art XML 4
XPath-Ausdrücke Ein XPath-Ausdruck besteht aus einer Folge von Schritten Grobstruktur eines Xpath-Pfadausdrucks:/ Schritt_1 / Schritt_2 /... / Schritt_n Jeder Schritt ist von der Bauart: Achse::Knotentest [Auswahlbedingung] XML 5
Achsen ancestor parent preceding sibling self following sibling child following preceding descendant attribute XML 6
Knotentest Test auf den Namen eines Elementknotens <qname>: alle Knoten mit dem Bezeichner qname Test auf Typ des Knotens *: alle Elementknoten text(): alle Textknoten node(): alle Knoten (Element + Textknoten) XML 7
Abarbeitung von XPath-Ausdrücken Startkontext ist Wurzelknoten Für jeden Schritt im XPath-Ausdruck: Festlegung der Navigationsachse vom aktuellen Kontext aus (child, parent, sibling, attribute) Auswahl der Knoten entsprechend dem Knotentest optional: Einschränkung der zuvor ermittelten Knotenmenge durch zusätzliche Auswahlbedingung Knotenmenge bildet Kontext für nächsten Schritt XML 8
Beispiele <Zoo> <Tier art="giraffe" gewicht="250"> <Ort>Zentralpark</Ort> Sarah Sonderbar <Tier art="elefant" gewicht="500"> <Ort>Eingang</Ort> Sabine Sonnenschein Susi Sorglos <frei tag="do"/> <Tier art="delphin" gewicht="80"> <Aquarium> <Ort>Aquahouse</Ort> </Aquarium> Sascha Sportlich<frei tag="mo"/> </Zoo> Alle Pfleger XML 9
Beispiele <Zoo> <Tier art="giraffe" gewicht="250"> <Ort>Zentralpark</Ort> Sarah Sonderbar <Tier art="elefant" gewicht="500"> <Ort>Eingang</Ort> Sabine Sonnenschein Susi Sorglos <frei tag="do"/> <Tier art="delphin" gewicht="80"> <Aquarium> <Ort>Aquahouse</Ort> </Aquarium> Sascha Sportlich<frei tag="mo"/> </Zoo> Alle Orte mit Gehegen XML 10
Beispiele <Zoo> <Tier art="giraffe" gewicht="250"> <Ort>Zentralpark</Ort> Alle Elemente, die direkt unterhalb Sarah Sonderbar von Tier stehen können <Tier art="elefant" gewicht="500"> <Ort>Eingang</Ort> Sabine Sonnenschein Susi Sorglos <frei tag="do"/> <Tier art="delphin" gewicht="80"> <Aquarium> <Ort>Aquahouse</Ort> </Aquarium> Sascha Sportlich <frei tag="mo"/> </Zoo> XML 11
Beispiele <Zoo> <Tier art="giraffe" gewicht="250"> <Ort>Zentralpark</Ort> Sarah Sonderbar Alle Elemente, die direkt oberhalb von Ort stehen können <Tier art="elefant" gewicht="500"> <Ort>Eingang</Ort> Sabine Sonnenschein Susi Sorglos <frei tag="do"/> <Tier art="delphin" gewicht="80"> <Aquarium> <Ort>Aquahouse</Ort> </Aquarium> Sascha Sportlich<frei tag="mo"/> </Zoo> XML 12
Beispiele <Zoo> <Tier art="giraffe" gewicht="250"> <Ort>Zentralpark</Ort> Sarah Sonderbar <Tier art="elefant" gewicht="500"> Alle Pfleger, die einen freien Tag haben <Ort>Eingang</Ort> Sabine Sonnenschein Susi Sorglos <frei tag="do"/> <Tier art="delphin" gewicht="80"> <Aquarium> <Ort>Aquahouse</Ort> </Aquarium> Sascha Sportlich <frei tag="mo"/> </Zoo> XML 13
Beispiele <Zoo> <Tier art="giraffe" gewicht="250"> <Ort>Zentralpark</Ort> Sarah Sonderbar Alle freien Tage (als Text) von Pflegern, die ein Tier in einem Aquarium betreuen <Tier art="elefant" gewicht="500"> <Ort>Eingang</Ort> Sabine Sonnenschein Susi Sorglos <frei tag="do"/> <Tier art="delphin" gewicht="80"> <Aquarium> <Ort>Aquahouse</Ort> </Aquarium> Sascha Sportlich<frei tag="mo"/> </Zoo> XML 14
Einführendes Beispiel alle spanischen Städte mit mehr als 1 Mio Einwohner <?xml version="1.0" encoding="utf-8"?> <world> <country> <name>germany</name> <city population="275000"><name>karlsruhe</name></city> </country> <country> <name>spain</name> <city population="3213271"><name>madrid</name></city> <city population="1615908"><name>barcelona</name></city> <city population="137536"><name>malaga</name></city> </country> </world> /descendant::country[name/text()='spain']/city[attribute::population > 1000000]/name/text() //country[name/text()='spain']//city[attribute::population > 1000000]/name/text() Madrid Barcelona XML 15
Quellen XPath Tutorial: http://www.w3schools.com/xpath/ XML 16