Databases Reference
In-Depth Information
Die untersuchte Dokumentenmenge haben wir dabei durch die Funktion
db2-fn:sqlquery mit Hilfe einer select -Abfrage eingeschränkt. Wir können
aber nicht nur select -Anweisungen in übergeordnete XQuery-Ausdrücke ein-
betten, sondern auch mit XQuery und der Funktion xmlexists Prädikate für
select -Anweisungen formulieren. Die folgende Anweisung ermittelt die Na-
men derjenigen Personen, zu denen es Sammlungen gibt, in deren Beschreibung
ein Element namens album auftritt. Anders formuliert, sollen die Comicsammler
identifiziert werden.
select k.name
from kontakte k, sammlungen s
where k.id=s.besitzer
and xmlexists('$inhalt//album' passing s.inhalt as "inhalt")
Wie erwartet, ergibt sich
k.name
s.id
Angela
2
Mit Variationen dieser Abfrage lassen sich weitere interessante Informationen aus
der Verknüpfung von Relationen und XML-Daten gewinnen. Mit der folgenden
select -Anweisung erfahren wir etwa, ob es auch Kontakte gibt, deren Namen
im Titel eines Albums einer Sammlung auftauchen:
Listing 22.11: Eine Abfrage mit SQL- und XQuery-Anteilen
select k.name
from kontakte k, sammlungen s
where xmlexists(
'$inhalt//album/titel[contains(text(),$name)]'
passing s.beschreibung as "inhalt",
k.name as "name"
)
Als Ergebnis erhalten wir eine Tabelle mit einem Datensatz:
k.name
Asterix
Auch wenn die Speicherung der XML-Dokumente einen effizienten Zugriff auf
seine Komponenten zulässt, müssen etwa in der Abfrage aus Listing 22.11 für
jeden Kontakt alle Dokumente durchgemustert werden. Bei umfangreichen Do-
kumententabellen kann dies das Tempo der Abfrage dramatisch reduzieren. In
 
Search WWH ::




Custom Search