XPath, XQuery - XML und Datenbanken

Werbung
XML und Datenbanken
- XPath, XQuery -
Meike Klettke
Universität Rostock
Fakultät für Informatik und Elektrotechnik
[email protected]
www.xml-und-datenbanken.de
1
Einleitung

XPath: Adressierung von Knoten des XML-Dokumenten
XQuery: ad-hoc Anfragen an XML-Dokumente

beides Empfehlungen des W3C

Meike Klettke
Universität Rostock
Vorlesung “XML und Datenbanken”
3) XML-Prozessoren
2
XPath: allgemeine Abarbeitung






Adressierung von Teilen eines Dokumentes
Formulierung von Bedingungen an diese Knotenmengen
XPath-Ausdruck kann aus mehreren Schritten bestehen,
Kopplung über /
Ergebnis eines Schrittes sind Knotenmengen (auch die
leere Knotenmenge ist möglich) oder einzelne Werte
Abarbeitung erfolgt von links beginnend
Bestandteil der XML-Anfragesprachen (XQuery),
Transformationssprachen (XSLT) und XPointer
Meike Klettke
Universität Rostock
Vorlesung “XML und Datenbanken”
3) XML-Prozessoren
3
XPath, zum Datenmodell




XML-Dokument wird als abstrakter Baum betrachtet
Baumstruktur kennt sieben Knotenarten (ähnlich zu DOM)
– Wurzelknoten
– Elementknoten
– Attributknoten
– Namensraumknoten
– Textknoten
– Kommentarknoten
– PI-Knoten
Kanten des Baumes stellen die Verbindungen zwischen
den Bestandteilen des XML-Dokumentes dar
Entities werden aufgelöst (expandiert)
Meike Klettke
Universität Rostock
Vorlesung “XML und Datenbanken”
3) XML-Prozessoren
4
Aufbau eines Navigationsschrittes



absolute und relative Pfade möglích
– absolute Pfade beginnen von der Wurzel des XML-Dokumentes
– relative gehen vom Kontextknoten (=aktueller Knoten) aus
Ein Schritt besteht aus:
– achse::knotentest[prädikat]
• Achse:
– Beziehung zwischen dem Kontextknoten und dem zu
auszuwählenden Knoten
• Knotentest:
– legt den Knotentyp und den Namen der zu selektierenden Knoten fest
– Zum Beispiel: Knotentyp: Element oder Attribut, Name jeweils wie
angegeben, * für alle
• Prädikat
– Ein, kein oder mehrere Prädikate schränken die Knotenmenge ein
– (na ja: kein Prädikat schränkt die Knotenmenge natürlich nicht ein)
Beispiele:
– child::href[position()=2]
child::autor[last()]
– attribute::autorname
parent::*
Meike Klettke
Universität Rostock
Vorlesung “XML und Datenbanken”
3) XML-Prozessoren
5
Achsen
child
(direkte Nachfolger),
 descandant
(alle Nachfolgerknoten),
 parent,
 attribute,
 self,
 descandant-or-self,
 following-sibling (alle nachfolgenden Geschwisterknoten),
 following
(alle in der Dokumentordnung nachfolgenden
Knoten)
 preceding-sibling (alle vorhergehenden Geschwisterknoten),
 preceding
(alle in der Dokumentordnung vorhergehenden
Knoten),
 anchestor
(alle Vorgängerknoten),
 anchestor-or-self

Meike Klettke
Universität Rostock
Vorlesung “XML und Datenbanken”
3) XML-Prozessoren
6
Veranschaulichung der Achsen
Meike Klettke
Universität Rostock
Vorlesung “XML und Datenbanken”
3) XML-Prozessoren
7
Kurzformen
Kurzform
Langform
Bedeutung
child::
Child ist Standardachse
.
self::node()
aktueller Knoten
..
parent::node()
Vaterknoten
//
/descandant-orself::node()
Nachfahren des Kontextknotens und dieser
selbst
@
attribute::
Attribute des Kontextknotens
*
Knoten mit beliebigem Namen (Wildcard)
@*
Bezeichnet alle Attribute des Kontextknotens
Meike Klettke
Universität Rostock
Vorlesung “XML und Datenbanken”
3) XML-Prozessoren
8
Beispiele für XPath /1
unterkuenfte
<unterkuenfte>
<hotel id="id001“>
<name>Strand Hotel Huebner</name>
<adresse>
<plz>18119</plz>
<ort>Warnemuende</ort>
...
</adresse>
</hotel>
..
</unterkuenfte>





hotel
id
name
id001
/unterkuenfte/hotel
Langform: /child::unterkuenfte/child::hotel
Strand
Hotel
Huebner
/unterkuenfte/hotel/adresse/../name
Langform: /child::unterkuenfte/child::hotel//
child::adresse/parent::*/child::name
Meike Klettke
Universität Rostock
adresse
Vorlesung “XML und Datenbanken”
3) XML-Prozessoren
plz
ort
18119
Warnemuende
Elementknoten
Textknoten
Attributknoten
9
Beispiele für XPath /2
unterkuenfte
<unterkuenfte>
<hotel id="id001“>
<name>Strand Hotel Huebner</name>
<adresse>
<plz>18119</plz>
<ort>Warnemuende</ort>
...
</adresse>
</hotel>
..
</unterkuenfte>





hotel
id
/unterkuenfte/hotel/adresse/ort
/unterkuenfte//ort
//ort
– Ergebnis immer:
<ort>Warnemuende</ort>
/hotel/adresse/ort
– Ergebnis: leere Knotenmenge
/unterkuenfte/hotel/adresse/ort/text()
– Ergebnis: Warnemuende
Meike Klettke
Universität Rostock
name
adresse
id001
Strand
Hotel
Huebner
Vorlesung “XML und Datenbanken”
3) XML-Prozessoren
plz
ort
18119
Warnemuende
Elementknoten
Textknoten
Attributknoten
10
Prädikate /1



angegebenes Prädikat wird für jeden Knoten ausgewertet
Knoten bei denen das Ergebnis true ist, werden in das Ergebnis
übernommen
– Vorhandensein von Werten (Werteselektion)
• /buch[@erscheinungsjahr>2000]
• /hotel/adresse/ort[text()=„Rostock“]
– Strukturselektion – basiert auf strukturellen Eigenschaften (im
Gegensatz zu Datenbanken, dort nur Werteselektion)
• /hotel[kategorie], hotel[//ort] – Vorhandensein von
Elementen
• /hotel[@url] – Vorkommen von Attributen
Positionsangabe: wenn Prädikat eine Nummer liefert, dann wird
der Knoten der entsprechenden Position übernommen
– /hotel[3], ort[1], autor[last()]
Meike Klettke
Universität Rostock
Vorlesung “XML und Datenbanken”
3) XML-Prozessoren
11
Prädikate /2



Reihenfolge der Prädikatauswertung ist relevant!
Verbindungen von Prädikaten ist durch
– and, or (Ergebnis boolescher Wert)
– <, >=, >, >=, =, != (Ergebnis boolescher Wert)
– +, -, *, mod, div (Ergebnis numerischer Wert)
– | dient zur Vereinigung von Knotenmengen
– () Klammerung beeinflusst die Ausführungsreihenfolge
XPath-Funktionen (einige waren schon in Beispielen zu
sehen)
– last()
– position() – auch als Kurzform [n]
– contains(string, string)
Meike Klettke
Universität Rostock
Vorlesung “XML und Datenbanken”
3) XML-Prozessoren
12
Beispiele für XPath /3
unterkuenfte
<unterkuenfte>
<hotel id="id001“>
<name>Strand Hotel Huebner</name>
<adresse>
<plz>18119</plz>
<ort>Warnemuende</ort>
...
</adresse>
</hotel>
..
</unterkuenfte>
hotel
id
/unterkuenfte/hotel
[adresse/ort/text()=“Warnemuende“ or
adresse/ort/text()=“Rostock”]/name/text()
•
/unterkuenfte/hotel[contains(name/text(),”Strand”)]
Universität Rostock
adresse
id001
•
Meike Klettke
name
Strand
Hotel
Huebner
Vorlesung “XML und Datenbanken”
3) XML-Prozessoren
plz
ort
18119
Warnemuende
Elementknoten
Textknoten
Attributknoten
13
zusammenfassend für XPath





Navigation durch den Baum, der das XML-Dokument
darstellt (über Navigationsachsen)
schrittweise Abarbeitung
Ergebnis jedes Schrittes sind Knotenmengen
auf diesen können durch Prädikate Bedingungen formuliert
werden
XPath wird in XQuery benötigt
Meike Klettke
Universität Rostock
Vorlesung “XML und Datenbanken”
3) XML-Prozessoren
14
Kriterien für Anfragesprachen /1
(nach Heuer, Scholl)





Ad-Hoc-Formulierung:
– Benutzer soll Anfragen formulieren, ohne vollständiges
Programm zu schreiben
Deskriptivität:
– Benutzer soll formulieren "Was will ich haben?" und nicht "Wie
komme ich dahin?".
Mengenorientiertheit:
– Jede Operation soll auf Mengen von Daten gleichzeitig
arbeiten, nicht navigierend nur auf einzelnen Elementen (onetuple-at-a-time)
Abgeschlossenheit:
– Ergebnis kann als Eingabe für nächste Anfrage verwendet
werden
Adäquatheit:
– alle Konstrukte des zugrundeliegenden Datenmodells werden
unterstützt.
Meike Klettke
Universität Rostock
Vorlesung “XML und Datenbanken”
3) XML-Prozessoren
15
Kriterien für Anfragesprachen /2
(nach Heuer, Scholl)





Orthogonalität:
– ähnliche Sprachkonstrukte sind ähnlich anwendbar
Optimierbarkeit:
– Die Sprache besteht aus wenigen Operationen, für die es
Optimierungsregeln gibt.
Effizienz:
– Jede Operation ist effizient ausführbar
Sicherheit:
– Keine Anfrage, die syntaktisch korrekt ist, darf in eine
Endlosschleife geraten oder ein unendliches Ergebnis liefern.
Eingeschränktheit:
– (folgt aus Sicherheit, Optimierbarkeit, Effizienz)
– Die Anfragesprache darf keine komplette Programmiersprache
sein.
Meike Klettke
Universität Rostock
Vorlesung “XML und Datenbanken”
3) XML-Prozessoren
16
3.2) XQuery - Einleitung



XML Query Language
Noch nicht als Empfehlung vom W3C verabschiedet
Mindestanforderungen (nach David Maier)
– Selektion
• anhand von Inhalt und Struktur
– Extraktion und Reduktion
• gezielte Extraktion von Subelementen, Löschen
ausgewählter Subelemente
– Kombination und Restrukturierung
• Zusammenfassen von Elementen, Erzeugen neuer
Elementmengen,...
Meike Klettke
Universität Rostock
Vorlesung “XML und Datenbanken”
3) XML-Prozessoren
17
XQuery - Basiskonstrukte
for - bindet Ausdrücke an Variablen
 let - bindet Ausdrücke an Variablen
 where - Einschränkung der Ergebnismenge durch
Bedingungen
 order by
 return - Ergebniskonstruktion
gesprochen Flower (in älteren Versionen: FLWR)

Meike Klettke
Universität Rostock
Vorlesung “XML und Datenbanken”
3) XML-Prozessoren
18
XQuery
FLWOR-Ausdruck:=
(for-Ausdruck | let-Ausdruck)+
where-Ausdruck?
order-by-Ausdruck?
return-Ausdruck
Abbildung aus Schöning/Lehner: XQuery, dpunkt.Verlag, 2003
Meike Klettke
Universität Rostock
Vorlesung “XML und Datenbanken”
3) XML-Prozessoren
19
for/let-Klausel



Ermöglichen die Bindung von Ergebnissen beliebiger XQueryAusdrücke (im Allgemeinen Pfadausdrücke) an Variablen
for-Klausel:
– Das Ergebnis des Ausdruckes wird elementweise an die
Variable gebunden
– Das nachfolgende Anfragekonstrukt wird für jedes Element
einzeln ausgeführt
– Bsp: for $b in fn:doc(„buecher.xml“)/buecher/buch
(Anmerkung: fn:doc- Funktion zum Zugriff auf Datei)
let-Klausel:
– Das Ergebnis des Ausdruckes wird vollständig als Sequenz
von Knoten bzw. Werten an die Variable gebunden
– Bsp:
let $t := /buch/title
let $x :=(<koordinaten/>)
Meike Klettke
Universität Rostock
Vorlesung “XML und Datenbanken”
3) XML-Prozessoren
20
for/let-Klausel
let $x:= (<Informatik/>, <Wirtschaftsinformatik/>, <ITTI/>)
return <teilnehmer> {$x}</teilnehmer>
<teilnehmer>
<Informatik/>
<Wirtschaftsinformatik/>
<ITTI/>
</teilnehmer>
for $x in (<Informatik/>, <Wirtschaftsinformatik/>, <ITTI/>)
return <teilnehmer> {$x}</teilnehmer>
<teilnehmer> <Informatik/> </teilnehmer>
<teilnehmer> <Wirtschaftsinformatik/> </teilnehmer>
<teilnehmer> <ITTI/> </teilnehmer>
Meike Klettke
Universität Rostock
Vorlesung “XML und Datenbanken”
3) XML-Prozessoren
21
for/let

Variablenbindung kann abhängig von anderen bereits
gebundenen Variable sein
for $b in fn:doc(„buecher.xml“)/buecher/buch
let $t := $b/titel
Meike Klettke
Universität Rostock
Vorlesung “XML und Datenbanken”
3) XML-Prozessoren
22
where-Klausel


Bedingungen, die zur Filterung dienen,
Beispiele:
– where $b/autor/text()=„Meyer“
– where $b/autor=„Meyer“ and contains($b/title/text(), „XML“)
– where $b/year>2000
– where fn:count($b/autor)>3
– viele weitere Funktionen, zum Beispiel:
• fn:avg, fn:min, fn:max, fn:sum, (auf numerischen Werten)
• fn:concat, fn:substring (auf Strings)
• fn:exacly-one, fn:zero, fn:exists (Kardinalität von
Eingabesequenzen)
Meike Klettke
Universität Rostock
Vorlesung “XML und Datenbanken”
3) XML-Prozessoren
23
ORDER BY

Reihenfolge kann durch die order-by Klausel explizit
erzwungen werden

order by $b/autor
stable order by $b/autor
– bei Gleichheit der Werte (identischer Autor) wird die
Reihenfolge aus dem Originaldokument gewählt





Weiterhin möglich:
empty greatest und
empty last nach der order by Klausel
(Hinweis: verschiedene Semantik von Nullwerten)
Meike Klettke
Universität Rostock
Vorlesung “XML und Datenbanken”
3) XML-Prozessoren
24
return






„Schablone“ zur Ergebniskonstruktion
Dereferenzierung von Variablen muss explizit angezeigt
werden, eingeklammert {}
Der Rest wird direkt ausgegeben
Beispiel:
return <xmlbuch> {$t} {$a} </xmlbuch>
reines XML in der Anfragen wird so ins Ergebnis
übernommen
Meike Klettke
Universität Rostock
Vorlesung “XML und Datenbanken”
3) XML-Prozessoren
25
Beispiel für geschachtelte XQueryAnfragen
 FLWR-Ausdrücke können geschachtelt werden
for $x in /unterkuenfte
return
<ueberschrift> Hotels in Rostock </ueberschrift>
<hotels>
{
for $h in $x/hotel
where $h//ort[contains(text(),"Rostock")]
return
<eintrag>
<hotelname>{$x/name/text()}</hotelname>
<adresse>
{$h/adresse/strasse} {$h/adresse/nummer}
</adresse>
</eintrag>
}
</hotels>
Meike Klettke
Universität Rostock
Vorlesung “XML und Datenbanken”
3) XML-Prozessoren
26
... das gleiche Beispiel
<ueberschrift> Hotels in Rostock </ueberschrift>
<hotels>
{
for $h in /unterkuenfte/hotel
where $h//ort[contains(text(),"Rostock")]
return
<eintrag>
<hotelname>{$h/name/text()}</hotelname>
<adresse>
{$h/adresse/strasse} {$h/adresse/nummer}
</adresse>
</eintrag>
}
</hotels>
Meike Klettke
Universität Rostock
Vorlesung “XML und Datenbanken”
3) XML-Prozessoren
27
XML-Updates






Ziel: Veränderung von XML-Dokumenten
noch nicht in XQuery enthalten
es gibt mehrere Vorschläge zur Erweiterung
von XQuery für diese Aufgabe
Updates können
XML-Updates
– die Werte und
– die Strukturinformationen
eines XML-Dokumentes verändern
Werden syntaktisch in XQuery-Statements eingebunden
Meike Klettke
Universität Rostock
Vorlesung “XML und Datenbanken”
3) XML-Prozessoren
28
Sprachvorschlag für Updates
Nach Tatarinov:
 DELETE child
– Löscht den angegebenen Nachfolgerknoten des
Kontextknotens
 INSERT content [(BEFORE|AFTER) ref]
– Erlaubt das Einfügen eines neuen Inhaltes neben dem
Kontextknoten BEFORE/AFTER spezifiziert die Position
– Sonst ergänzt INSERT nach dem letzten child-Knoten.
 RENAME child TO name
– Ordnet dem childknoten einen neuen Namen zu
 REPLACE child WITH content
– Ersetzt den child-Knoten durch den angegebenen Inhalt
– (Operation kann auch durch 2 Operationen: INSERT BEFORE
und DELETE ausgeführt werden.
Meike Klettke
Universität Rostock
Vorlesung “XML und Datenbanken”
3) XML-Prozessoren
29
Update von XML-Dokumenten,
Veränderung von Inhalten (Daten)

Anfragebeispiel (Tatarinov)
for $x in document("buecher.xml"),
$titel in $x/buch/titel
where $titel="XML und Datenbanken"
update $x
{
replace $titel/text() with
"XML und Datenbanken –
Konzepte, Sprachen und Systeme"
}
buecher
buch
isbn
titel
autor
3-89864-148-1
XML und
und DB –
XML
Konzepte, Sprachen
Datenbanken
und Systeme
Holger
Meyer
Elementknoten
Textknoten
Attributknoten
Meike Klettke
Universität Rostock
Vorlesung “XML und Datenbanken”
3) XML-Prozessoren
30
Update von XML-Dokumenten,
Veränderung von Strukturen

for $x in document("buecher.xml"),
$autor in $x/buch/autor
where $x/buch/@isbn=" 3-89864-189-9 "
update $x
{
rename $autor TO "editor"
}

buecher
Anfragebeispiel (Tatarinov)
beachtet werden muss u.a.
– Gültigkeit der
XML-Dokumente!
buch
isbn
titel
edito
autor
r
3-89864-189-9
Web und
Datenbanken
Erhard Rahm
Elementknoten
Textknoten
Attributknoten
Meike Klettke
Universität Rostock
Vorlesung “XML und Datenbanken”
3) XML-Prozessoren
31
Literatur
XML-Prozessoren:
 Informationen über SAX:
– www.saxproject.org
 DOM:
– www.w3.org/DOM-Level-1/
– www.w3.org/DOM-Level-2/
– www.w3.org/DOM-Level-3/
XPath, XQuery:
 Schöning, Lehner: XQuery, dpunkt.verlag, 2004
 www.w3.org/TR/xpath
 www.w3.org/XML/Query
Meike Klettke
Universität Rostock
Vorlesung “XML und Datenbanken”
3) XML-Prozessoren
32
Verfügbare Parser



An dieser Stelle sollen keine SAX- oder DOM-Prozessoren
aufgezählt werden, da die Aussagen, was sie jeweils
unterstützen, schnell veralten
viel verwendet wird: Xerces
(kommentierte) Softwaresammlungen unter:
– xml.coverpages.org
– www.xmlsoftware.com
Meike Klettke
Universität Rostock
Vorlesung “XML und Datenbanken”
3) XML-Prozessoren
33
Herunterladen