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