Kapitel 4 XML-Anfragesprachen Anforderungen und Grundlagen UnQL XPath 1.0 XQuery 1.0 XIRQL Historische Entwicklung von XML-Anfragesprachen SQL OQL UnQL 1998 XSLT 1999 XPath 1.0 2000 Lorel XQL XML-QL XML DOM Quilt 2001 XML-Schema W3C-Empfehlungen noch in der Entwicklung andere Vorschläge XPath 2.0 XQuery 1.0 Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) Norm-DB-Anfragesprachen 4-2 Allgemeine Anforderungen an Anfragesprachen z Ad-hoc-Formulierung: Anfragen können z formuliert werden, ohne vollständige Programme schreiben zu müssen z Deskriptivität: Anfragen werden Anfrage ist als Eingabe der nächsten Anfrage verwendbar z z Generische Operationen: Anfragesprache basiert auf einigen wenigen generischen Operationen z z z z z Sicherheit: Anfragen terminieren immer und liefern ein endliches Ergebnis z Eingeschränktheit: Anfragesprache ist nicht berechnungsvollständig Orthogonalität: Operationen der Anfragesprache sind beliebig kombinierbar Effizienz: Operationen sind effizient realisierbar Adäquatheit: Anfragesprache nutzt alle Konstrukte des Datenmodells aus Optimierbarkeit: Anfragen sind anhand von Optimierungsregeln optimierbar Mengenorientiertheit: Operationen arbeiten auf Objektmengen Vollständigkeit: Alle gespeicherten Informationen sind abfragbar deklarativ formuliert, d.h. ohne operationale Programme anzugeben z Abgeschlossenheit: Ergebnis einer z Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) Formale Semantik: Operationen sind formal definiert 4-3 Relationenmodell und Relationenalgebra z Information in Form von Relationen (Tabellen) dargestellt – z Algebraoperationen: – – – – – z Nur atomare Attribute erlaubt Selektion: Projektion: Mengenoperationen: Join: Rename: Auswahl bestimmter Tupel (Zeilen) Auswahl bestimmter Attribute (Spalten) Vereinigung, Differenz, Durchschnitt zweier Relationen Verbund von Tupeln bzw. Relationen Umbenennung eines Attributs Alle Operationen sind beliebig kombinierbar! Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-4 Operationen der Relationalen Algebra R1 R2 R3 Verbund Selektion σ[A1<30] (R1) A1 A2 29 'Jim' 16 'Dad' Projektion π[A1] (R1) A1 29 16 44 A1 29 16 44 A2 'Jim' 'Dad' 'Joe' Umbenennung β[A1, X1] (R1) A1 44 16 A2 'Bob' 'Dad' X1 A2 29 'Jim' 16 'Dad' 44 'Joe' Vereinigung R1 ∪ R2 A1 44 911 16 A3 'T' 'F' 'F' A1 A2 29 'Jim' 16 'Dad' 44 'Joe' 44 'Bob' Differenz R1 \ R2 A1 29 44 A2 'Jim' 'Joe' R1 R3 Durchschnitt R1 ∩ R2 A1 16 A2 'Dad' A1 16 44 A2 A3 'Dad' 'F' 'Joe' 'T' Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-5 Geschachtelte Relationen und NF2-Algebra z NF2-Modell erlaubt neben atomaren auch relationenwertige Attribute z Minimale Erweiterung der Relationenalgebra bietet Operationen für relationenwertige Attribute – Rekursive Schachtelung von Selektionen und Projektionen innerhalb der Selektionsprädikate bzw. innerhalb der zu projizierenden Attributlisten ermöglichen Zugriff auf die "inneren Strukturen" einer geschachtelten Relation – Selektionsbedingungen können Relationen als Operanden haben – Mengenvergleiche (⊂, ⊆, =, ≠, ⊇, ⊃) Elemententhaltensein (∈, ∉) Nestung und Entnestung Nestung R A1 A2 16 'Kim' 16 'Dad' 44 'Joe' A3 'T' 'F' 'T' ν[(A2, A3); A] (R) µ[A] (R') Entnestung Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) R' A1 {A} A2 16 'Kim' 'Dad' 44 'Joe' A3 'T' 'F' 'T' 4-6 Schachtelung von Selektion und Projektion: Algebra- versus Pseudo-SQL-Notation {R} A1 {A2} A21 A22 In Projektion geschachtelte Projektion: π[π[A21] (A2)] (R) SELECT (SELECT a.A21 FROM a IN r.A2) FROM r IN R {R'} {A2} A21 In Projektion geschachtelte Selektion: π[σ[pred(A2)] (A2)] (R) SELECT (SELECT * FROM a IN r.A2 WHERE pred(a)) FROM r IN R In Selektion geschachtelte Projektion: σ[S Θ π[A21] (A2)] (R) SELECT * FROM r IN R WHERE S Θ (SELECT a.A21 FROM a IN r.A2) In Selektion geschachtelte Selektion: σ[S Θ σ[pred(A2)] (A2)] (R) SELECT * FROM r IN R WHERE S Θ (SELECT * FROM a IN r.A2 WHERE pred(a)) Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-7 Schachtelung von Selektion und Projektion π[π[A21] (A2)] (R) {R} A1 {A2} A21 A22 69 'Jim' 4116 'Bob' 7998 13 'Dad' 1201 'Jim' 4116 'Kim' 5463 σ[∅ ⊂ σ[A22>6000] (A2)] (R) {R'} {A2} A21 'Jim' 'Bob' 'Dad' 'Jim' 'Kim' π[σ[A22>2500] (A2)] (R) σ[∅ ⊂ π[A21] (A2)] (R) {R'} A1 {A2} A21 A22 69 'Jim' 4116 'Bob' 7998 Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) {R'} {A2} A21 A22 'Jim' 4116 'Bob' 7998 'Jim' 4116 'Kim' 5463 {R'} A1 {A2} A21 A22 69 'Jim' 4116 'Bob' 7998 13 'Dad' 1201 'Jim' 4116 'Kim' 5463 4-8 Erweiterte Relationenmodelle und -algebra (1) z erlauben weitere Attributtypen: Tupeltyp, Kollektionstyp, Referenztyp z Operationen für tupelwertige Attribute Tupelkomponentenselektion Navigation (Pfadausdrücke): Zugriff auf Attribute geschachtelter Tupeln auch über mehrere Tupeleinbettungen hinweg – – z Operationen für kollektionswertige Attribute Elementselektion und Teilmengenbeziehungen Entschachtelung (UNNEST) und Erzeugen einer Kollektion – – R A1 A21 69 1970 13 1972 17 1969 <A2> {A22} {41, 16} {12, 1, 78} {13, 11, 69} σ[A2.A21>1971](R) A1 13 σ[12∈A2.A22](R) A1 13 Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) <A2> A21 {A22} 1972 {12, 1, 78} <A2> A21 {A22} 1972 {12, 1, 78} 4-9 Erweiterte Relationenmodelle und -algebra (2) z Operationen für referenzwertige Attribute Dereferenzierung (Referenzauflösung): Zugriff auf das referenzierte Objekt Navigation (Pfadausdrücke): Zugriff auf Attribute referenzierter Objekte auch über mehrere Objektreferenzen hinweg – – R TID @911 @655 @876 @324 Name 'Jim' 'Joe' 'Bob' 'Kim' Chef @655 @324 @655 @324 π[Name, DEREF(Chef)] (R) Name <DEREF(Chef)> Name Chef 'Jim' 'Joe' @324 'Joe' 'Kim' @324 'Bob' 'Joe' @324 'Kim' 'Kim' @324 π[Name, Chef→Name](R) Name Chef→Name 'Jim' 'Joe' 'Joe' 'Kim' 'Bob' 'Joe' 'Kim' 'Kim' Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-10 Was können wir bisher? z Selektion auf Mengen von Tupeln/Objekte z Projektion bestimmter Attribute z Verbund von Mengen von Tupeln/Objekten z Klassische Mengenoperationen z Navigation in verschachtelten Strukturen – z Navigation in vernetzten Strukturen – z Pfadausdrücke über eingebettete Tupel bzw. Objekte Pfadausdrücke über Referenzen ... Was fehlt noch für XML-Anfragesprachen? Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-11 XML-spezifische Anforderungen an Anfragesprachen z Schemalose Anfragen: Anfragen müssen nicht an ein Schema gebunden sein, Schema kann aber zur Optimierung genutzt werden; Unterstützung von "Wildcards“ auf Pfaden z Flexible Typen: Semistrukturiertheit der Dokumente erfordert das Verarbeiten gleicher Elemente mit unterschiedlichen Typen z Einbettung: Anfragen lassen sich in XML einbetten und XML-Fragmente können in Anfragen enthalten sein z Ordnungserhaltung: Ordnung der Dokumentelemente ist relevant; sie muss daher erhalten bleiben Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-12 Grundoperationen von XML-Anfragesprachen Mindestforderung nach W3C/XML/QL98/David Maier z Selektion: Selektion eines Dokumentes oder Dokumentelementes anhand Inhalt, Struktur oder Attribute z Extraktion und Reduktion: gezielte Extraktion von Subelementen eines Dokumentes, Löschen ausgewählter Subelemente eines Elementes z Kombination und Restrukturierung: Zusammenfassen zweier oder mehrerer Elemente in einem neuen Element, Erzeugen einer neuen Elementmenge, die Anfrageergebnisse enthalten In Datenbanken: Algebra zur Implementierung, Optimierung Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-13 Selektion Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-14 Extraktion und Reduktion Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-15 Kombination und Restrukturierung Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-16 UnQL: Unstructured data Query Language z UnQL ist ein früher Vertreter von Anfragesprachen für semistrukturierte Daten z Einfaches Datenmodell: Bäume – – z Grundidee: Eine Anfrage ist eine Funktion auf einem Baum – – z Kanten mit Labels Blattknoten mit Labels Eingabe: Baum Ausgabe: (transformierter) Baum Verfahren: Strukturelle Rekursion – – Funktion arbeitet rekursiv auf der Baumstruktur Funktion wird definiert durch eine Menge rekursiver Regeln Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-17 Datenmodell von UnQL z Konstrukte zur Erzeugung von Bäumen – – – – z Leerer Baum: {} (leere Menge) ist ein Baum ohne Knoten und Kanten Blattknoten: ist v ein Wert, dann ist {v} ein Baum Kantenerzeugung: ist T ein Baum und l ein Label, dann ist auch {l:T} ein Baum Baumvereinigung: sind T1 und T2 Bäume, dann ist auch T1 ∪ T2 ein Baum Sehr einfaches Datenmodell im Vergleich zu XML – – nur ein Knotentyp keine Ordnung, da nur Mengen verwendet werden XML-Dokument Darstellung im UnQL-DM <book> <title> Autobiography of Benjamin Franklin </title> <price> 8,99 </price> </book> {book: {title: "Autobiography of Benjamin Franklin"} {price: 8,99} } Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-18 Anfragesprache von UnQL (1) z Eine Anfrage entspricht einer Funktion z Eine Funktion ist eine geordnete Menge von Regeln z Eine Regel umfasst zwei Komponenten: – – z Beispiele für Regeln: – – – – – z LHS: left-hand-side – ein Muster das beschreibt, wann die Regel feuert RHS: right-hand-side – Operationen zur Erzeugung des Ergebnisbaums F({"a"}) = {"A"} F({"b": T}) = {"B": F(T)} F({})={} F(T1 ∪ T2) = F(T1) ∪ F(T2) F({L: T}) = if L = "book" then {"Buch": T} else F(T) F({})={} und F(T1 ∪ T2) = F(T1) ∪ F(T2) sind vordefinierte Standardregeln der UnQL-Sprache Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-19 Anfragesprache von UnQL (2) z SELECT-WHERE-Syntax als Alternative zu Regeln – – – Select-Klausel definiert das Ergebnis unter Verwendung der Konstruktionsoperationen für Bäume Where-Klausel definiert die Suchmuster mit Variablen Variablen in der Where-Klausel können in weiteren Prädikaten für Selektion und Kombination verwendet werden z Selektion: SELECT <Muster> WHERE <Muster>, <Selektionsprädikat> z Extraktion und Reduktion: SELECT <Ergebnisbaum> WHERE <Muster> z Kombination und Restrukturierung: SELECT <Ergebnisbaum> WHERE <Muster>, <Kombinationsprädikat> z Beispiele auf den folgenden Folien illustrieren diese Operationen Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-20 Beispielanfragen in UnQL (1) z Übersetzung ins Deutsche und Unterdrückung der Preisinformation {book: {title: "Autobiography of Benjamin Franklin"} {price: 8,99} } z F({"book": T}) = {"Buch": F(T)} F({"title": T}) = {"Titel": F(T)} F({L : T}) = {} F({v})=v {Buch: {Titel: "Autobiography of Benjamin Franklin"} } Hier zugrunde liegende Operationen: Umbenennung (Restrukturierung) und Extraktion Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-21 Beispielanfragen in UnQL (2) z Alternative Syntax mit SELECT-WHERE {book: {title: "Autobiography of Benjamin Franklin"} {price: 8,99} } SELECT {Buch: {Titel: T} } WHERE {book: {title: T} } in db EingabeMuster Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) {Buch: {Titel: "Autobiography of Benjamin Franklin"} } Konstruktionsoperationen für den Ausgabe-Baum 4-22 Beispielanfragen in UnQL (3) z Suche nach preisgünstigen Büchern (Selektion und Restrukturierung) {book: {title: "Autobiography of Benjamin Franklin"} {price: 8,99} } SELECT {Buch: {Titel: T} } WHERE {book: {title: T} {price: P} } in db, P < 10,00 {Buch: {Titel: "Autobiography of Benjamin Franklin"} } Variablenbindungen Unifikationstabelle T P "Autobiography…" Autobiography… 8,99 … .... Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-23 Beispielanfragen in UnQL (4) z Ausgabe von Büchern mit Reviews (Kombination und Restrukturierung) {store: {book: {isbn: "1-55860-622-X“} {title: "Autobiography of Benjamin Franklin"} {price: 8,99} } {review: {isbn: "1-55860-622-X“} {text: “Good stuff!”} {reviewer: H.-J. Schek} } } SELECT {book: {title: T} {text: TE} } WHERE {book: {isbn: N1} {title: T} } in db, {review: {isbn: N2} {text: TE} } in db, N1 = N2 Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) {book: {title: "Autobiography of Benjamin Franklin"} {text: “Good stuff!”} } 4-24 Beispielanfragen in UnQL (5) z Verwendung regulärer Ausdrücke {book: {title: "Autobiography"} {price: 8,99} } SELECT {Buch: {Titel: T} } WHERE {book: {(title | Titel): T} } in db Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) {Buch: {Titel: "Autobiography"} } 4-25 Zusammenfassung: UnQL z Einfaches Datenmodell auf der Basis von Bäumen z Strukturelle Rekursion zur Formulierung von Anfragen z Wohldefinierte Semantik und Eigenschaften (Komplexität) z Deckt wichtige Anforderungen an XML-Anfragesprachen ab: – – – z Selektion Extraktion und Reduktion Kombination und Restrukturierung Kritik – – – Geordnete Daten werden nicht unterstützt – XML ist aber geordnet Die verschiedenen Knotentypen von XML werden nicht unterschieden Für die Praxis wichtige Konstrukte wie Aggregatfunktionen fehlen Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-26 XPath 1.0 z W3C-Recommendation z XPath definiert Muster, Funktionen und Ausdrücke, um Elemente, Elementgruppen bzw. Attribute genauer zu identifizieren – – – z Grundlegendes Konstrukt sind XPath-Ausdrücke – – – – z Adressierung von Teilen eines Dokumentes Selektion von Knotenmengen Formulierung von Bedingungen an diese Knotenmegen Ausdrücke werden zu Werten von den Typen boolean, number, string oder node-set (ungeordnete Kollektion von Knoten ohne Duplikate) ausgewertet Pfadausdrücke (location paths) Logische und mathematische Verknüpfungen Funktionsaufrufe XPath wird in einer Reihe von Standards benutzt – XSL, XLink/XPointer, XQuery Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-27 Pfadausdrücke z Zentrales Konzept von XPath sind Pfadausdrücke z Ein Pfadausdruck steht für eine Menge von Knoten bzw. für einen Wert – – kann aus mehreren Teilausdrücken (Schritten) bestehen Kopplung erfolgt über ’/’ (analog zu Dateisystemkomponenten) /Schritt/Schritt/…/Schritt z Pfadausdrücke haben folgende Form: z Abarbeitung erfolgt schrittweise “von links” //book[title = 'XML und Datenbanken']/author liefert die Autoren aller Bücher mit dem Titel ’XML und Datenbanken’ z Absolute versus relative Pfadausdrücke z Pfadausdrücke spezifizieren Extraktionen und können durch die Angabe von Filterprädikaten auch Selektionen beinhalten Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-28 Schritte z Ein Schritt erhält eine Folge von Knoten als Eingabe und erzeugt eine Folge von Knoten z Ein Schritt Achse::Knotentest[Prädikat] besteht aus – – – Navigationsachse stellt die Beziehung zwischen Kontextknoten und zu selektierenden Knoten her Knotentest gibt Typ und erweiterten Namen der zu selektierenden Knoten an Prädikat schränkt die zu selektierende Knotenfolge ein z Auswertung eines Schrittes geschieht immer in einem Kontext z Auswertungskontext enthält – – – Kontextknoten (self) Kontextposition und Kontextgrösse Menge von Namensraumsdeklarationen Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-29 Navigationsachsen ancestor ancestor-or-self = ancestor ∪ self descendant-or-self = descendant ∪ self parent preceding sibling following sibling self child following preceding attribute descendant Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) namespace 4-30 Knotentests z Schränken Typ und Namen der auszuwählenden Knoten ein Knotentest Einschränkung auf keine Einschränkung ("wildcard") * Name alle Subelemente mit dem angegebenen Namen text() alle Text-Subelemente node() alle Subelemente Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-31 Prädikate z Schränken die auszuwählende Knotenfolge anhand eines Ausdrucks ein z Mehrere Prädikate können durch Aneinanderreihung kombiniert werden, z.B. /book[3][last-name='Schek'] – – Auswertung erfolgt "von links nach rechts" Achtung: Prädikate sind nicht kommutativ, z.B. gilt a[b][2] != a[2][b] z Ein Prädikat kann auch aus einer Konjunktion von Prädikaten bestehen, z.B. /book[price < 15 and count(author) > 2] z Liefert der Ausdruck einen nicht-booleschen Wert, so wird dieser in einen booleschen Wert umgewandelt – – Ist der Wert numerisch und entspricht er der Kontextposition, so ergibt die Umwandlung den Wert true. Es gilt z.B. /book[3] ≡ /book[position()=3] Sonst ist das Resultat der Umwandlung false Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-32 Syntax: Abkürzungen Abkürzun g Langform liefert tagname child::tagname alle Kinderknoten, die 'tagname'-Elemente sind . self::node() den aktuellen Knoten .. parent::node() den Elternknoten * descendant-or-self:: alle Nachkommen des aktuellen Knotens @name attribute::name Attribut 'name' des aktuellen Knotens / den Wurzelknoten // alle Nachkommen des Wurzelknotens [expr] die Elemente aus der Knotenfolge, für die der aktuelle Teilpfad gilt und der Ausdruck true wird [ n] das n-te Element aus der Knotenfolge, für die der aktuelle Teilpfad gilt Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-33 XPath-Funktionsbibliothek Funktion liefert node-set id(object) Position Elementes number last() string local -name(node-set?) local part ofdes theletzten expanded -name of the node string namespace number position() -uri(node-set?) Kontextposition string string(object?) Summe der zu Zahlen umgewandelten Argumentknoten number sum(node-set) string concat(string, string, string*) Anzahl der Argumentknoten number count(node-set) string substring -before(string, string ) substring -before("1999/04/01","/") returns 1999 stringname(node-set?) substring-after(string, string ) substring -after("1999/04/01","/") returns 04/01 Name des Argumentknotens string string substring (string, number, number ?) substring ("12345",2) returns "2345" liefert den Knoten mit der ID, Auflösung von IDREF node-set id(object) number string-length(string?) boolean contains(string, string)?) true, wenn zweites Argument Teil des ersten ist string normalize -space(string Negation des angegebenen Wertes boolean not(boolean) string translate( string, string, string ) … …floor, ceiling, round Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-34 Beispiele für XPath-Anfragen /bookstore/book/@genre gibt das Attribut 'Genre' aller Bücher aus /bookstore/book[author/name='Plato'] gibt alle Bücher aus, die vom Autor 'Plato' stammen //author[first-name='Herman']/last-name gibt den Nachnamen aller Autoren aus, deren Vorname 'Herman' ist /bookstore/book[author/first-name='Benjamin']/price liefert den Preis für alle Bücher, die mind. einen Autor mit dem Vornamen 'Benjamin' haben //book[count(author)> 2]/title gibt die Titel aller Bücher aus, die mehr als zwei Autoren haben //book[author/name='Plato' and price < 20] selektiert alle Bücher von 'Plato', die weniger als 20 kosten //book[contains(title, 'XML')]/title selektiert alle Bücher, die den Begriff 'XML' im Titel enthalten /bookstore/book/descendant::node() liefert alle Subelemente von Bücher (u.a. die Knoten author, price, title) Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-35 Zusammenfassung: XPath z Einfaches Datenmodell auf der Basis von Bäumen z Anfragen werden als Pfadausdrücke formuliert z Wohldefinierte Semantik und Eigenschaften (Komplexität) z XPath unterstützt – – – – – – z Extraktion und Reduktion (ausgedrückt durch Schritte in Pfadausdrücken) Selektion (ausgedrückt durch Filterprädikate in Schritten) Aggregationfunktionen (count, sum) Umfangreiche Navigationsfunktionen Wildcards Wahrung der Dokumentordnung Kritik – Kombination und Restrukturierung nicht möglich Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-36 XQuery 1.0 z Aktueller W3C-Vorschlag für eine Norm-XML-Anfragesprache z XQuery – – – – – – z basiert auf XPath hat Ähnlichkeit zu SQL/OQL ist eine funktionale Sprache ist streng typisiert basierend auf XML-Schema erlaubt zusammengesetzte Ausdrücke unterstützt orthogonale Anwendung unterschiedlicher Ausdruckstypen Basiskonstrukt: FLWR-Ausdruck, steht für FOR-LET-WHERE-RETURN – – – FOR/LET: geordnete Liste von Tupeln gebundener Variablen WHERE: eingeschränkte Liste von Tupeln gebundener Variablen RETURN: Ergebniskonstruktion, Instanz des XML-Query-Datenmodells Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-37 W3C Working Drafts (Juni 2001) z XML Query Requirements z XML Query Use Cases z XQuery 1.0: An XML Query Language z XQuery 1.0 and XPath 2.0 Data Model z XQuery 1.0 Formal Semantics (ehemals XML Query Algebra) z XML Syntax for XQuery (XQueryX) z Functions and Operators z Inzwischen (seit 16.11.2002) neue Version der Spezifikationen verfügbar Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-38 Formale Semantik von XQuery 1.0 z Basiert auf dem Datenmodell von XQuery 1.0 und XPath 2.0 z Information als geordneter Wald (ordered nodeset) mit folgenden Knotentypen dargestellt – – – – – – – Dokument Element Attribut Text Namensraum Kommentar Verarbeitungsanweisung Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-39 Basiskonstrukte von XQuery z Einbettung von XML in XQuery-Ausdrücke und umgekehrt z Elementkonstruktoren zur Erstellung oder Ableitung neuer XML-Elemente z Pfadausdrücke (XPath 2.0) zur Selektion von Dokumentbestandteilen z Anwendung von datentypspezifischen Operatoren z FLWR-Ausdrücke ermöglichen Anfragen ähnlich zu SFW-Blöcken in SQL z bedingte Anweisungen zur Steuerung der Auswertung von Ausdrücken z quantifizierte Ausdrücke unter Verwendung der Quantoren ALL und SOME z Test von Datentypen und Typumwandlung z Funktionsaufrufe Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-40 Generelle Vorgehensweise z Dokumentzugriff mit document(url) z Knotennavigation mit XPath z Variablenbindung im Kontext existierender Bindungen z Operationen auf den Knotenmengen z Erzeugung neuer Knoten z Einfache Anfragen: //bookstore liefert vollständiges Bookstore-Dokument document("http://www.dbs.ethz.ch/~xml/buecher.xml")//bookstore/book/author liefert alle Autoren Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-41 Anfragen als Ausdrücke über Konstanten, Namen und Operatoren z Konstruktoren für Elemente, Attribute und Referenzen: pcdata(Expr), processing-instruction(Expr, Expr), comment(Expr), ref(Expr), etc. z Zugriffsoperatoren zur Navigation innerhalb eines XML-Dokuments: children(Expr), parent(Expr), attributes(Expr), dereference(Expr), name(Expr), etc. z Arithmetische Funktionen: + | - | * | mod | div z Vergleichsfunktionen: eq | ne | lt | lteq | gt | gteq z Aggregatfunktionen: agg(Expr) mit agg ∈ {count, min, max, sum, avg} z Mengenfunktionen: union | except | intersect z Iteration: FOR Variable IN Expr RETURN Expr z Bedingungen: IF (Expr) THEN Expr ELSE Expr z Lokale Variablenbindungen: LET Variable := Expr z Sortierung: Expr SORT BY (Expr) Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-42 Built-in Datentypen xs:AnySimpleType xs:language xs:unsignedLong xs:string xs:IDREFS xs:unsignedInt xs:boolean xs:ENTITIES xs:unsignedShort xs:float xs:NMTOKEN xs:unsignedByte xs:double xs:NMTOKENS xs:positiveInteger xs:decimal xs:Name xs:timeInstant xs:timeDuration xs:NCName xs:time xs:recurringDuration xs:NOTATION xs:timePeriod xs:binary xs:integer xs:date xs:uriReference xs:nonPositiveInteger xs:month xs:ID xs:negativeInteger xs:year xs:IDREF xs:long xs:century xs:ENTITY xs:int xs:recurringDate xs:Qname xs:short xs:recurringDay xs:CDATA xs:byte xs:token xs:nonNegativeInteger Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-43 Built-in Funktionen pcdata(Expr) Constructs parsable character data from string argument processing-instruction(Expr, Expr) Constructs a processing instruction comment(Expr) Constructs a comment ref(Expr) Constructs a node reference dereference(Expr) Dereferences a node reference string-value(Expr) Returns string value of given node, as defined in [XPath] typed-value(Expr) Returns the simple typed value of an element or attribute attributes(Expr) Returns attributes of element parent(Expr) Returns the parent of a node children(Expr) Returns children of element descendent-or-self(Expr) Returns given node and all its descendents in document order local-name(Expr) Extracts local NCName of a node name(Expr) Returns element or attribute's tag name namespace-uri(Expr) Extracts URI namespace from a node distinct-node(Expr) Removes duplicate nodes from a sequence agg(Expr) Aggregation functions, where agg is avg, count, min, max, sum eop(Expr) Equality functions, where eop is one of eq, neq, lt, lteq, gt, gteq index(Expr) Pairs each element of an sequence with integer index xfo:node-before(Expr, Expr) True if first argument is before second in document order xfo:node-equal(Expr, Expr) Returns true if both expressions denote the same node Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-44 Literale und Operanden NCName Variable ::= $u, $v, $w, ... StringLiteral ::= "", "a", ... NumericLiteral ::= 0, 1, 2, ... BooleanLiteral ::= true | false Literal ::= StringLiteral | NumericLiteral | BooleanLiteral Qname ::= NCName | NCName:NCName Opeq ::= node-equal | eq | ne | lt | lteq | gt | gteq Oparith ::= + | - | * | mod | div Opcoll ::= union | except | intersect Opbool ::= and | or InfixOp ::= Opeq | Oparith | Opcoll | Opbool PrefixOp ::= + | - | not Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-45 Ausdrücke (1) Expr ::= Literal | Variable | QName ( ExpSequence? ) | Expr InfixOp Expr | PrefixOp Expr | ATTRIBUTE QName ( Expr ) | ElementConstructor | ExprSequence | IF (Expr) THEN Expr ELSE Expr | LET Variable := Expr RETURN Expr | Expr : Type | ERROR | FOR Variable IN Expr RETURN Expr | Expr SORT BY (Expr) [ASCENDING | DESCENDING] | CAST AS Type (Expr) | TYPESWITCH (Expr) AS Variable CaseRules Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-46 Ausdrücke (2) CaseRules ::= CASE Type RETURN Expr CaseRules | DEFAULT RETURN Expr ExprSequence ::= Expr (, ExprSequence)* ElementConstructor ::= <NameSpec/> | <NameSpec> EnclosedExpression </NameSpec> EnclosedExpression ::= { ExprSequence } NameSpec ::= Qname | { Expr } TypeDecl ::= TYPE NCName = Type ContextDecl ::= NAMESPACE NCName = StringLiteral | DEFAULT NAMESPACE = StringLiteral FunctionDefn ::= DEFINE FUNCTION QName ( ParamList? ) RETURNS Type { Expr } ParamList ::= Type Variable (, Type Variable)* QueryModule ::= ContextDecl* TypeDecl* FunctionDefn* ExprSequence? QueryModuleList ::= QueryModule ( ; QueryModule )* Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-47 FLWR-Ausdrücke Allgemeine Struktur: FLWR-expr ::= FOR-expr | LET-expr FOR-expr ::= (FOR $var IN expr (, $var IN Expr)*)+ (WHERE Expr)? RETURN expr LET-expr ::= (LET $var := expr (, $var := Expr)*)+ (WHERE Expr)? RETURN expr FOR $v1 IN e1, $v2 IN e2, …, $vn IN en WHERE Selektionsbedingung RETURN Projektionsausdruck ≡ SELECT Projektionsausdruck FROM e1 $v1, e2 $v2, …, en $vn WHERE Selektionsbedingung FOR $v1 IN e1 FOR $v2 IN $v1 WHERE Selektionsbedingung RETURN Projektionsausdruck ≡ SELECT Projektionsausdruck FROM e1 $v1, UNNEST($v1) $v2 WHERE Selektionsbedingung Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-48 Auswertungsreihenfolge von FLWR-Ausdrücken FOR-/LET-Klauseln Geordnete Liste von Tupeln gebundener Variablen WHERE-Klausel Reduzierte Liste von Tupeln gebundener Variablen RETURN-Klausel Instanz des XQuery-Datenmodells Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-49 Jede Klausel schränkt ein XML-Dokument weiter ein! XML-Dokument FOR/LET-Klausel(n) WHERE-Klausel RETURN-Klausel Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-50 Variablen z Variablenwerte sind nach erfolgter Bindung nicht mehr änderbar z Variablenbindung nur innerhalb des aktuellen und aller eingeschlossenen Anfrageausdrücke sichtbar z Variablenbindung wird mit dem Verlassen des Ausdrucks aufgehoben z Zugriff auf ungebundenen Variablen Ausnahme z Bei mehrfacher Bindung ist immer die letzte Bindung sichtbar z Typ einer Variablen ergibt sich aus Bindung z Variablenbindung erfolgt in FOR- und LET-Ausdrücken Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-51 Beispieldaten und -schema TYPE Bib = ELEMENT bib (Book*) TYPE Book = ELEMENT book (ATTRIBUTE year (xs:integer) & ATTRIBUTE isbn (xs:string), ELEMENT title (xs:string), (ELEMENT author(xs:string))+) LET $bib0 := <bib> <book year="1999" isbn="1-55860-622-X"> <title>Data on the Web</title> <author>Abiteboul</author> <author>Buneman</author> <author>Suciu</author> </book> <book year="2001" isbn="1-XXXXX-YYY-Z"> <title>XML Query</title> <author>Fernandez</author> <author>Suciu</author> </book>, </bib> : Bib RETURN $bib0 Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) LET $book0 := <book year="1999" isbn="1-55860-622-X"> <title>Data on the Web</title> <author>Abiteboul</author> <author>Buneman</author> <author>Suciu</author> </book> : Book RETURN $book0 4-52 Extraktion und Reduktion Projektion auf Elemente Projektion auf Attribute $bib0/book/author $book0/@year liefert liefert (<author>Abiteboul</author>, <author>Buneman</author>, <author>Suciu</author>, <author>Fernandez</author>, <author>Suciu</author>) : (ELEMENT author (xs:string))* ATTRIBUTE year "1999" : ATTRIBUTE year (xs:string) Projektion auf Elementinhalte Projektion auf Attributwerte $book0/author/data() $book0/@year/data() liefert liefert ("Abiteboul", "Buneman", "Suciu") : xs:string+ 1999 : xs:integer Pfadausdrücke á la XPath 2.0 als Projektion möglich, z.B. $bib0/book[year=1999]/author Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-53 Iteration Iteration über alle Elemente FOR $b IN $bib0/book RETURN <book> { $b/author, $b/title } </book> liefert (<book> <author>Abiteboul</author> <author>Buneman</author> <author>Suciu</author> <title>Data on the Web</author> </book>, <book> <author>Fernandez</author> <author>Suciu</author> <title>XML Query</author> </book>) : (ELEMENT book( (ELEMENT author(xs:string))+, ELEMENT title(xs:string)) )* Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) Elementkonstruktion mittels reinem XML oder geschachtelten Ausdrücken (wie hier) FOR $b IN $bib0/book RETURN $b/author ist äquivalent zu $bib0/book/author 4-54 Selektion Selektion von Elementen FOR $b IN $bib0/book WHERE $b/@year/data() <= 2000 RETURN $b Selektionsbedingung kann aus beliebig komplexen Prädikaten bestehen liefert <book year="1999" isbn="1-55860-622-X"> <title>Data on the Web</title> <author>Abiteboul</author> <author>Buneman</author> <author>Suciu</author> </book> : Book* Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) FOR $b IN $bib0/book WHERE true RETURN $b/author ist äquivalent zu $bib0/book/author 4-55 Quantifizierung Quantifizierung über Existenzquantor Quantifizierung über Allquantor FOR $b IN $bib0/book WHERE SOME $a IN $b/author SATISFIES $a/data() = "Buneman" RETURN $b FOR $b IN $bib0/book WHERE EVERY $a IN $b/author SATISFIES $a/data() = "Buneman" RETURN $b liefert <book year="1999" isbn="1-55860-622-X"> <title>Data on the Web</title> <author>Abiteboul</author> <author>Buneman</author> <author>Suciu</author> </book> : Book* liefert () : Book* Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-56 Kombination und Umstruktrurierung TYPE Reviews = ELEMENT reviews ((ELEMENT book (ELEMENT title (xs:string), ELEMENT review (xs:string)))*) LET $review0 := <reviews> <book> <title>XML Query</title> <review>A darn fine book.</review> </book>, <book> <title>Data on the Web</title> <review>This is great!</review> </book> </review> : Reviews RETURN ... FOR $b IN $bib0/book, $r IN $review0/book WHERE $b/title/data() = $r/title/data() RETURN <book>{ $b/title, $b/author, $r/review }</book> liefert Verbundbedingung (<book> <title>Data on the Web</title> <author>Abiteboul</author> <author>Buneman</author> <author>Suciu</author> <review>A darn fine book.</review> </book>, <book> <title>XML Query</title> <author>Fernandez</author> <author>Suciu</author> <review>This is great!</review> </book>) : (ELEMENT book( ELEMENT title (xs:string), (ELEMENT author (xs:string))+, ELEMENT review (xs:string)) )* Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-57 Referenz- und Dereferenz-Operator LET $book2 := <newbook> { (FOR $a IN $book0/author RETURN ref($a)), ref($book0/title) } </newbook> RETURN $book2 liefert <newbook> <q:ref><author>Abiteboul</author></q:ref> <q:ref><author>Buneman</author></q:ref> <q:ref><author>Suciu</author></q:ref> <q:ref><title>Data on the Web</title></q:ref> </newbook> : ELEMENT newbook ( (REFERENCE (ELEMENT author (xs:string)))+, REFERENCE (ELEMENT title (xs:string)) ) Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) FOR $v IN $book2/* RETURN deref($v) liefert (<author>Abiteboul</author>, <author>Buneman</author>, <author>Suciu</author>, <title>Data on the Web</title>) : (ELEMENT author (xs:string))+, ELEMENT title (xs:string) 4-58 Parent-Operator TYPE Bib1 = <bib>Article*</bib> TYPE Article =ELEMENT article (ATTRIBUTE year (xs:integer), ELEMENT title (xs:string), ELEMENT journal(xs:string), (ELEMENT author (xs:string))+) FOR $a IN contains(($bib0, $bib1), "Abiteboul") RETURN $a LET $bib1 := <bib> <article year="2000"> <title>Queries and computation on the web</title> <journal>Theoretical Computer Science</journal> <author>Abiteboul</author> <author>Vianu</author> </article> </bib> : Bib1 RETURN ... FOR $a IN contains(($bib0, $bib1), "Abiteboul") RETURN $a/.. Parent-Operator liefert (<author>Abiteboul<author>, <author>Abiteboul</author>) : AnyTree* liefert (<book year="1999" isbn="1-55860-622-X"> <title>Data on the Web</title> <author>Abiteboul</author> <author>Buneman</author> <author>Suciu</author> </book>, <article year="2000"> <title>Queries and computation on the web</title> <journal>Theoretical Computer Science</journal> <author>Abiteboul</author> <author>Vianu</author> </article>) : AnyElement* Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-59 Typanpassungen: Treat- und Cast-Operator FOR $p IN $book0/title/.. RETURN TREAT AS Book ($p) liefert <book year="1999" isbn="1-55860-622-X"> <title>Data on the Web</title> <author>Abiteboul</author> <author>Buneman</author> <author>Suciu</author> </book> : Book? Semantik von TREAT AS und CAST AS wie in SQL:1999 TREAT nimmt eine dynamische Typanpassung entlang der Typhierarchie vor TYPE Book0 = ELEMENT book (ATTRIBUTE year (xs:integer) & ATTRIBUTE isbn (xs:string), ELEMENT title (xs:string), (ELEMENT author (xs:string))* ) CAST AS Book0 ($book0) liefert <book year"1999" isbn="1-55860-622-X"> <title>Data on the Web</title> <author>Abiteboul</author> <author>Buneman</author> <author>Suciu</author> </book> : Book0 CAST konvertiert den Typ statisch Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-60 Gruppierung FOR $a IN distinct-value($bib0/book/author/data()) RETURN <biblio> <author>{ $a }</author> { FOR $b IN $bib0/book, $a2 IN $b/author/data() WHERE $a = $a2 RETURN $b/title } </biblio> Gruppierung durch Schachtelung von For-Schleifen liefert (<biblio> <author>Abiteboul</author> <title>Data on the Web</title> </biblio>, <biblio> <author>Buneman</author> <title>Data on the Web</title> </biblio>, <biblio> <author>Suciu</author> <title>Data on the Web</title><title>XML Query</title> </biblio>, <biblio> <author>Fernandez</author> <title>XML Query</title> </biblio>) : (ELEMENT biblio ( ELEMENT author (xs:string), (ELEMENT title (xs:string))*) )* Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-61 Aggregatfunktionen FOR $b IN $bib0/book WHERE count($b/author) > 2 RETURN $b Aggregatfunktionen können auch in der For- und Return-Klausel auftauchen liefert <book year="1999" isbn="1-55860-622-X"> <title>Data on the Web</title> <author>Abiteboul</author> <author>Buneman</author> <author>Suciu</author> </book> : Book* Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-62 Sortieren $review0/book SORTBY ./title/data() ASCENDING liefert Sortierung kann auch absteigend erfolgen (DESCENDING) (<book> <title>Data on the Web</title> <review>This is great!</review> </book>, <book> <title>XML Query</title> <review>This is pretty good too!</review> </book>) : (ELEMENT book ( ELEMENT title (xs:string), ELEMENT review (xs:string)) )* Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-63 Ordnung index($book0/author) liefert (<q:pair><q:fst>1</q:fst> <q:snd><q:ref><author>Abiteboul</author></q:ref></q:snd></q:pair>, <q:pair><q:fst>2</q:fst> <q:snd><q:ref><author>Buneman</author></q:ref></q:snd></q:pair> <q:pair><q:fst>3</q:fst> <q:snd><q:ref><author>Suciu</author></q:ref></q:snd></q:pair>) : (ELEMENT q:pair( ELEMENT q:fst (xs:integer), ELEMENT q:snd (REFERENCE (ELEMENT author (xs:string)))) )+ FOR $p IN index($book0/author) WHERE ($p/q:fst/data() <= 2) RETURN $p/q:snd/deref() liefert (<author>Abiteboul</author>, <author>Buneman</author>) : (ELEMENT author (xs:string))* FOR $b IN $bib0/book WHERE $b/@year/data() = 2001 RETURN (FOR $a IN $bib0/book/author WHERE $b before $a RETURN $a) liefert (<author>Fernandez</author>, <author>Suciu</author>) : (ELEMENT author (xs:string))* Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-64 Unordered UNORDERED FOR $b IN $bib0/book, $r IN $review0/book WHERE $b/title/data() = $r/title/data() RETURN <book> { $b/title, $b/author, $r/review } </book> Optimierungshinweis zeigt an, dass die Ordnung irrelevant ist liefert (<book> <title>XML Query</title> <author>Fernandez</author> <author>Suciu</author> <review>This is great!</review> </book>, <book> <title>Data on the Web</title> <author>Abiteboul</author> <author>Buneman</author> <author>Suciu</author> <review>A darn fine book.</review> </book>) : ELEMENT book ( ELEMENT title (xs:string), ELEMENT author (xs:string)+, ELEMENT review (xs:string) )* Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-65 Vergleich XQuery und SQL XQuery SQL FOR $k IN /bookstore RETURN $k SELECT * FROM bookstore FOR $k IN //book RETURN $k SELECT * FROM bookstore FOR $k IN //book/title RETURN $k SELECT title FROM bookstore FOR $k IN //book RETURN $k/title SELECT title FROM bookstore FOR $k IN //book/author RETURN $k/last-name SELECT author.last-name FROM bookstore FOR $k IN /bookstore WHERE $k/title='XML und Datenbanken' RETURN $k/author SORTBY ./last-name/data() SELECT author FROM bookstore WHERE title='XML und Datenbanken' ORDER BY author.last-name FOR $k IN /bookstore/book WHERE count($k/author) > 2 RETURN $k/title SELECT title FROM bookstore GROUP BY title HAVING COUNT(author) > 2 Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-66 Zusammenfassung: XQuery z ist der kommende Standard für XML-Anfragesprachen z basiert auf einem Baummodell, das die verschiedenen Knotentypen von XML berücksichtigt z ist wohldefiniert mit einer präzisen Semantik z ist streng typisiert z erfüllt die Anforderungen an XML-Anfragesprachen – – – – z Selektion Extraktion und Reduktion Kombination und Umstrukturierung Wahrung der Dokumentordnung bietet einige SQL-"Goodies" wie – – – Gruppierung und Aggregatfunktionen Sortierung dynamische und statische Typanpassung Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-67 Erweiterung der Anfragesprachen um IR-Funktionalität z Bislang diskutierte Anfragesprachen fokussieren auf Datenbankanfragen über stark strukturierte XML-Datenbestände – – → z Präzise Prädikate, wohldefinierte Ergebnismenge Datenbankoperationen wie Selektion, Extraktion, Restrukturierung, Aggregation datenorientierte Sicht Dokumentenorientierte Sicht – – XML als Format zur Repräsentation der logischen Struktur von (Text-)Dokumenten Mit XQuery ist aber nur einfaches boolesches Retrieval möglich: – z Suche nach einzelnen Wortvorkommen (Substring-Matches) keine Gewichtung von Deskriptoren keine nach Relevanz sortierten Ergebnislisten Bislang diskutierte Anfragesprachen eignen sich nicht für IR auf XML-Dokumenten Erweiterung der bestehenden Konzepte um IR-Techniken nötig – – – – Gewichtung und Ranking Relevanzorientierte Suche Datentypen mit vagen Prädikaten Struktureller Relativismus Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-68 Anforderungen: Gewichtung und Ranking z Klassisches IR betrachtet Dokumente als Ganzes z XML dagegen: beliebige Kombinationen von Elementtypen zur Suche – z /document[.//heading ∋ "XML" ∨ .//section//* ∋ "XML"] Problem: Gewichtung unterschiedlicher Vorkommensformen von Termen document chapter chapter heading Introduction This. . . heading section XML Query Language XQL heading heading Examples Syntax Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) section We describe syntax of XQL 4-69 Anforderungen: relevanzorientierte Suche z Anfragen unabhängig von der Dokumentstruktur ("content-only-queries") – – z z.B.: "Suche Dokument(teil)e über XML-Anfragesprachen" Retrievalstrategie: liefere spezifischsten Teilbaum, der die Anfrage am besten (mit der grössten Relevanzwahrscheinlichkeit) beantwortet Anfragen mit Einschränkung der Dokumentstruktur ("content-and-structure-queries") – – z.B.: "Suche nach Abstracts oder Zusammenfassungen über XMLAnfragesprachen" Retrievalstrategie: liefere die Strukturelemente mit der höchsten Relevanzwahrscheinlichkeit, die gleichzeitig die Bedingungen an die Struktur erfüllen Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-70 Anforderungen: Datentypen mit vagen Prädikaten z XML-Markup ermöglicht detaillierte Auszeichnung von Textelementen z Ausnutzung des Markups für präziseres Suchen z gleichzeitig Berücksichtigung von Unsicherheit und Vagheit beim Retrieval z Datentypen mit vagen Prädikaten – – z "Suche Informationen über das Werk eines Künstlers namens ‘Ulbrich‘, der um 1900 im Rhein-Main-Gebiet tätig war'' Gemeint ist: Ernst Olbrich, Darmstadt, 1899 (Erweiterbare) Datentypen für dokumentenorientierte Sicht – – – – Personennamen Datumsangaben geographische Bezeichnungen Bilder, Audio, Video, ... Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-71 Anforderungen: Struktureller Relativismus z Bislang: präzise Bedingungen bei Pfadausdrücken – – – – z XPath: /store/auction/name[last-name="Schek"] XPath mit Wildcards: //name[last-name="Schek"] Formulierung erfordert gute Kenntnis der Struktur, bspw. ob eine Information als Attribut oder als Element abgelegt ist Bei grossen Kollektionen ist gute Kenntnis der Struktur unrealistisch Struktureller Relativismus: Ausdehnung des Prinzips der relevanzorientierten Suche auf Pfade und Pfadausdrücke – – – – Unterscheidung Element/Attribut fallenlassen Suche in allen Elementen eines bestimmten Datentyps wie z.B. Datum Suche nach Elementen, deren Pfad bestimmte Schlüsselwörter enthält Suche nach Elementen, deren Pfad die höchste Relevanz bezüglich eines Query-Textes hat Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-72 Anfragesprache XIRQL z Erweiterung der XPath-Pfadausdrücke von XQuery – – – – z Probabilistisches Retrieval mit gewichteter Dokumentindexierung Relevanzorientierte Suche Datentypen mit vagen Prädikaten Struktureller Relativismus Syntax von XIRQL basiert auf XPath mit folgenden Erweiterungen: – Vage Prädikate (statt "=" oder "<") in Filter-Ausdrücken – Gewichtung der Bedingungen in der Query: – //section[… $c-phrase$ "XML retrieval"] Struktureller Relativismus: keine Unterscheidung zwischen Element und Attribut z //*[0.7 . $c-word$ "retrieval" + 0.3 . $c-word$ "XML"] IR-Suche auf Teilbäumen des XML-Dokuments: – gewichtete Suche nach Schlüsselwort: //title $c-word$ "autobiography" phonetische Übereinstimmung: //author $soundslike$ "franklin" //#author $soundslike$ "franklin" XIRQL ist offen für Erweiterungen durch zusätzliche vage Operatoren bspw. für neue Datentypen Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-73 XIRQL-Operatoren z XIRQL-Operatoren erweitern die XPath-Ausdrücke in XQuery z Für neue Datentypen können weitere Operatoren ergänzt werden z Einige wichtige Operatoren stellt folgende Tabelle zusammen Operator Semantik nodeset $c-word$ string Gewichtete Suche nach Wortvorkommen nodeset $c-phrase$ string Gewichtete Suche nach Vorkommen einer Phrase nodeset $soundslike$ string Gewichtete phonetische Suche #name Keine Unterscheidung zwischen Attribut und Element … … Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-74 XIRQL: Beispieldokument <bib> <book year="1999" isbn="1-55860-622-X"> <title>Data on the Web</title> <author>Abiteboul</author> <author>Buneman</author> <author>Suciu</author> <abstract> The Web is causing a revolution in how we present, retrieve, and process information. … </abstract> </book> <book year="2001" isbn="1-XXXXX-YYY-Z"> <title>XML Query</title> <author>Fernandez</author> <author>Suciu</author> <summary> …. </summary> </book> </bib> Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-75 XIRQL: Beispielanfrage (1) Gewichtete Suche nach Schlüsselwort //book[abstract $c-word$ "Web" Web ]/title liefert <title rsv="0.75"> Data on the Web </title> Gewichtung der Ergebnisse <title rsv="0.1"> XML Query </title> Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-76 XIRQL: Beispielanfrage (2) Unterschiedliche Gewichtete der Bedingungen //book[0.7 ./abstract $c-word$ "Web" Web + 0.3 ./author $soundslike$ "Sutschu"] liefert <book year="1999" isbn="1-55860-622-X" rsv="0.6"> <title>Data on the Web</title> <author>Abiteboul</author> <author>Buneman</author> <author>Suciu</author> <abstract> …</abstract> </book> <book year="2001" isbn="1-XXXXX-YYY-Z" rsv="0.2"> <title>XML Query</title> <author>Fernandez</author> <author>Suciu</author> <summary> …. </summary> </book> Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-77 XIRQL: Beispielanfrage (3) Retrieval auf XML-Teilbäumen Sub-TreeOperator //*[… $c-word$ "Web"] liefert Unterschiedliche Typen im Ergebnis – das spezifischste Ergebnis mit der höchsten Relevanz sollte als erstes im Ranking stehen z Relevanz-Ranking ist wichtiges (und offenes) Problem – – z <title rsv="0.8">Data on the Web</title> <book year="1999" isbn="1-55860-622-X" rsv="0.6"> <title>Data on the Web</title> <author>Abiteboul</author> <author>Buneman</author> <author>Suciu</author> <abstract> … </abstract> </book> <summary rsv="0.2"> …. </summary> Struktur des XML-Dokuments berücksichtigen Möglichst genauen Treffer als oberstes im Ranking liefern Wird in der Vorlesung später genauer betrachtet Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-78 Zusammenfassung: XIRQL z Anfragesprache für XML-Daten – – – Komplexe Operationen auf dem XML-Baummodell Wohldefinierte, präzise Semantik und streng typisiert Leistungsfähige Datenbankoperationen für XML-Daten: – z Selektion Extraktion und Reduktion Kombination und Restrukturierung Beispiele: UnQL, XPath, XQuery (und viele mehr, die wir nicht diskutiert haben) Datenbankoperationen sind nicht geeignet für IR-Suche auf XML – – – Vage Prädikatauswertung nötig Gewichtete Ergebnisse Beispiel für eine solche IR-Erweiterung: XIRQL Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-79 Gegenüberstellung der Anfragesprachen Allgemeine Anforderungen UnQL XPath XQuery XIRQL Schemalose Anfragen + + + + Flexible Typen - - + ? Einbettung (-) (-) (+) (-) Ordnungserhaltung - + + + Gewichtete Anfragen - - - + Operationen UnQL XPath XQuery XIRQL Selektion + + + + Extraktion und Reduktion + + + + Kombination und Restrukturierung + - + + Vorlesung "XML und Datenbanken" - WS 2002/2003 (Schek/Türker/Grabs) 4-80