institut f¨ur informatik - Lehrstuhl für Datenbanksysteme

Werbung
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
INSTITUT FÜR INFORMATIK
DER TECHNISCHEN UNIVERSITÄT MÜNCHEN
LEHRSTUHL III · DATENBANKSYSTEME · PROF. DR. GRUST
Übungen zur Vorlesung “Database Supported XML Processors”
Wintersemester 2005/2006 · Jens Teubner ([email protected])
3. Übungsblatt
Ausgabe: 2. November 2005 · Besprechung: 10. November 2005
Aufgabe 1: Relationale XPath-Auswertung
Aufgrund ihrer hervorragenden Skalierbarkeit liegt es nahe, relationale Datenbanksysteme auch zur
Speicherung von (baumstrukturierten) XML-Dokumenten zu verwenden. Ein naheliegender Ansatz
dazu ist der folgende:
• Jeder Knoten im XML-Dokument wird mit einem eindeutigen Schlüsselwert identifiziert.
• Zu jedem Knoten im Baum speichern wir ausserdem den Schlüsselwert des entsprechenden
Vaterknotens. Der Wurzelknoten trägt dabei als einziger einen Nullwert.
0a–
1b0
5f 0
6g5
2c 1
3d 2
4e2
7h5
8i 7
9j 7
id
0
1
2
3
4
5
..
.
parent
–
0
1
2
2
0
..
.
tag
a
b
c
d
e
f
..
.
Die document order läßt sich in einer solchen Codierung geschickt implementieren, indem man z. B.
die Schlüsselwerte wie im Beispiel als fortlaufende Werte realisiert. Der Einfachheit halber nehmen wir
im folgenden an, dass unsere XML-Dokumente nur aus Element-Knoten bestehen. In der relationalen
Codierung speichern wir dabei zu jedem Element seinen Tagnamen.
Die relationale Codierung soll nun für die Auswertung von XPath-Anfragen herangezogen werden.
Betrachten Sie dabei die folgenden Anfragen:
(1) v /child::node()/child::h
(2) v /child::node()/descendant::node()
(3) v /child::node()/descendant::j
(4) v /child::b/following-sibling::node()
(5) v /descendant::h/ancestor::node()
Der Kontext-Knoten v sei dabei ein beliebiger Knoten, dessen id-Wert Sie kennen. Wie können die
obigen Anfragen mit Hilfe dieser relationalen Codierung ausgewertet werden?
(a) Formulieren Sie die vier XPath-Anfragen als SQL-Anfragen auf der relationalen Codierung.
Berücksichtigen Sie dabei auch die Semantik von XPath (document order und Duplikatfreiheit).
(b) Das Datenbanksystem wird verschiedene Zugriffstechniken zur Auswertung verwenden. Nehmen
Sie an, das System kennt ausschließlich die folgenden drei Operationen:
(bitte wenden)
lookup-by-id(n) Liefert das Tupel mit dem id-Wert n zurück.
lookup-by-parent(n) Gibt eine Liste aller Tupel zurück mit dem parent-Wert n.
lookup-by-tag(t) Bestimmt eine Liste der Tupel mit dem tag-Wert t.
Wie lassen sich die obigen Anfragen mit Hilfe dieser drei Operationen berechnen? Schätzen
Sie den Aufwand für jede Anfrage, indem Sie die Anzahl benötigter Operationen ermitteln.
Die erste Anfrage könnte zum Beispiel wie folgt ausgewertet werden:
C1 ← lookup-by-parent(parent(v ));
foreach c1 in C1 do
C2 ← lookup-by-parent(parent(c1 ));
foreach c2 in C2 do
if tag(c2 ) = h then
append c2 to result;
Herunterladen