XML und Datenbanken

Werbung
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
Herunterladen