Return-Klausel
Die return-Klausel eines FLWOR-Ausdrucks gibt gewissermaßen die Schablone an, nach der das Ergebnisdokument konstruiert werden soll. Wichtig ist in diesem Kontext, dass die Dereferenzierung von Variablen durch einen Auswertungskontext explizit angezeigt werden muss, falls umgebende Elementkonstruktoren existieren, da sich der XQuery-Prozessor im statischen Modus befindet.
So liefert beispielsweise folgende Anfrage drei Mal den Ausdruck <Berufsgruppen> $x </Berufsgruppen>:
for $x in (<Arzt/>, <Pfleger/>, <Techniker/>)
return
<Berufsgruppen> $x </Berufsgruppen>
Die Dereferenzierung wird durch Einbettung der Variablen $x in einen neuen Auswertungskontext aktiviert, so dass die aus Sicht der Anwendung korrekte return-Klausel lautet:
for $x in (<Arzt/>, <Pfleger/>, <Techniker/>)
return
<Berufsgruppen>{ $x }</Berufsgruppen>
Mit dem berechneten Elementkonstruktor würde die Formulierung lauten:
for $x in (<Arzt/>, <Pfleger/>, <Techniker/>)
return
element Berufsgruppen { $x }
Die berechnete Form der Elementkonstruktion im Kontext der return-Klausel ist dann sinnvoll bzw. ein extrem mächtiges Werkzeug, wenn zum Beispiel bestimmte Unterelemente eines gerade betrachteten Elementes nicht in die Ausgabe mit übernommen werden sollen. Eine anonymisierte Liste von Patienten (ohne Namen) kann somit durch folgende Anweisung erstellt werden:
for $p in fn:collection("Patienten")/*
order by $p/Geburtsdatum
return
element AnonymisierterPatient {
$p/* except $p/Name
}
Da jede Art von Ausdrücken in einem Auswertungskontext auftreten kann, impliziert dies eine mögliche Schachtelung von FLWOR-Ausdrücken.
Quelle: "XQuery – Grundlagen und fortgeschrittene Methoden", dpunkt-Verlag, Heidelberg (2004)
<< zurück | vor >> |