1 / 33

XML und Datenbanken - XPath, XQuery -

XML und Datenbanken - XPath, XQuery -. Meike Klettke Universität Rostock Fakultät für Informatik und Elektrotechnik meike@informatik.uni-rostock.de www.xml-und-datenbanken.de. Einleitung. XPath: Adressierung von Knoten des XML-Dokumenten XQuery: ad-hoc Anfragen an XML-Dokumente

pello
Download Presentation

XML und Datenbanken - XPath, XQuery -

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. XML und Datenbanken - XPath, XQuery - Meike Klettke Universität Rostock Fakultät für Informatik und Elektrotechnik meike@informatik.uni-rostock.de www.xml-und-datenbanken.de

  2. Einleitung • XPath: Adressierung von Knoten des XML-Dokumenten • XQuery: ad-hoc Anfragen an XML-Dokumente • beides Empfehlungen des W3C

  3. 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

  4. 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)

  5. 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::*

  6. 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

  7. Veranschaulichung der Achsen

  8. Kurzformen

  9. 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> • /unterkuenfte/hotel • Langform: /child::unterkuenfte/child::hotel • /unterkuenfte/hotel/adresse/../name • Langform: /child::unterkuenfte/child::hotel// • child::adresse/parent::*/child::name hotel id name adresse id001 Strand Hotel Huebner plz ort Warne- muende 18119 Elementknoten Textknoten Attributknoten

  10. 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> • /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 hotel id name adresse id001 Strand Hotel Huebner plz ort Warne- muende 18119 Elementknoten Textknoten Attributknoten

  11. 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()]

  12. 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)

  13. 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> • /unterkuenfte/hotel [adresse/ort/text()=“Warnemuende“ or adresse/ort/text()=“Rostock”]/name/text() • /unterkuenfte/hotel[contains(name/text(),”Strand”)] hotel id name adresse id001 Strand Hotel Huebner plz ort Warne- muende 18119 Elementknoten Textknoten Attributknoten

  14. 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

  15. 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 (one-tuple-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.

  16. 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.

  17. 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,...

  18. 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)

  19. XQuery FLWOR-Ausdruck:= (for-Ausdruck | let-Ausdruck)+ where-Ausdruck? order-by-Ausdruck? return-Ausdruck Abbildung aus Schöning/Lehner: XQuery, dpunkt.Verlag, 2003

  20. for/let-Klausel • Ermöglichen die Bindung von Ergebnissen beliebiger XQuery-Ausdrü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/>)

  21. for/let-Klausel let $x:= (<Informatik/>, <Wirtschaftsinformatik/>, <ITTI/>) return <teilnehmer> {$x}</teilnehmer> for $x in (<Informatik/>, <Wirtschaftsinformatik/>, <ITTI/>) return <teilnehmer> {$x}</teilnehmer> <teilnehmer> <Informatik/> <Wirtschaftsinformatik/> <ITTI/> </teilnehmer> <teilnehmer> <Informatik/> </teilnehmer> <teilnehmer> <Wirtschaftsinformatik/> </teilnehmer> <teilnehmer> <ITTI/> </teilnehmer>

  22. 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

  23. 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)

  24. 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)

  25. 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

  26. Beispiel für geschachtelte XQuery-Anfragen • 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>

  27. ... 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>

  28. 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 • die Werte und • die Strukturinformationen • eines XML-Dokumentes verändern • Werden syntaktisch in XQuery-Statements eingebunden XML-Updates

  29. 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.

  30. Update von XML-Dokumenten,Veränderung von Inhalten (Daten) buecher • Anfragebeispiel (Tatarinov) for $x in document("buecher.xml"), $titel in $x/buch/titelwhere $titel="XML und Datenbanken"update $x{ replace $titel/text() with "XML und Datenbanken – Konzepte, Sprachen und Systeme"} buch isbn titel autor 3-89864-148-1 XML und Datenbanken XML und DB – Konzepte, Sprachen und Systeme Holger Meyer Elementknoten Textknoten Attributknoten

  31. Update von XML-Dokumenten,Veränderung von Strukturen • Anfragebeispiel (Tatarinov) for $x in document("buecher.xml"), $autor in $x/buch/autorwhere $x/buch/@isbn=" 3-89864-189-9"update $x{ rename $autor TO "editor"} • beachtet werden muss u.a. • Gültigkeit der XML-Dokumente! buecher buch editor isbn titel autor 3-89864-189-9 Web und Datenbanken Erhard Rahm Elementknoten Textknoten Attributknoten

  32. 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

  33. 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

More Related