Formulierung eines vollständig äußeren Verbunds
Die auf der vorherigen Seite gezeigte alternative asymmetrische Formulierung eines einseitig äußeren Verbunds kann nun herangezogen werden, um einen vollständig äußeren Verbund in XQuery zu formulieren. Die eine Seite wird dabei nach dem Prinzip der Schachtelung, die andere Seite durch das Prinzip der Zweiteilung des Ergebnisdokumentes – wie vorher gezeigt – realisiert.
Realistischerweise kann z.B. nicht davon ausgegangen werden, dass jeder Arzt in einem Ort wohnt, in dem auch ein Patient seinen Wohnort besitzt, so dass ein vollständiger äußerer Verbund notwendig ist, um sowohl alle Patienteneinträge als auch alle Ärzte im Ergebnisdokument zu erhalten. Die entsprechende Anfrage kombiniert somit die beiden einseitigen Verbundoperationen zu einer Anfrage mit einem vollständig äußeren Verbund:
<Notfallliste>
(: Alle Patienten mit Notfallarzt, falls möglich :)
<Patienten>
{
for $p in fn:collection("Patienten")
order by $p//Nachname, $p//Vorname
return
<Patient>
{ $p/*/Name,
for $a in fn:doc("Hochwaldklinik.xml")//Arzt
where $p//Adresse/Stadt = $a//Adresse/Stadt
return
<Notfallarzt>
{ $a//Vorname }
{ $a//Nachname }
</Notfallarzt>
}
</Patient>
}
</Patienten>,
(: Ärzte ohne Notfallpatienten :)
<SpringerÄrzte>
{
for $a in fn:doc("Hochwaldklinik.xml")//Arzt
where fn:empty(fn:collection("Patienten")/Adresse
[./Stadt = $a//Adresse/Stadt])
order by $a//Nachname, $a//Vorname
return
<Notfallarzt>
{ $a//Vorname }
{ $a//Nachname }
</Notfallarzt>
}
</SpringerÄrzte>
}
</Notfallliste>
Dieses Beispiel illustriert eindrucksvoll den Aufwand, den es bedarf, um komplex strukturierte Ergebnisdokumente in einer XQuery-Anfrage zu spezifizieren. Dem Aufwand steht jedoch die enorme Flexibilität bei der Strukturierung des Ergebnisses gegenüber.
Quelle: "XQuery – Grundlagen und fortgeschrittene Methoden", dpunkt-Verlag, Heidelberg (2004)
<< zurück | vor >> |