FLWOR-Ausdrücke
Jede "sinnvolle" XQuery-Anweisung basiert auf einem FLWOR-Ausdruck, der ähnlich zum SELECT-FROM-WHERE in SQL die Basis für Anfragen an XML-Datenbanken repräsentiert. Das Akronym FLWOR steht dabei als Abkürzung von for-let-where-order by-return und wird üblicherweise wie das englischsprachige Wort "flower" ausgesprochen. Im Folgenden wird zunächst ein genereller Überblick gegeben, woran sich eine detaillierte Beschreibung der einzelnen Klauseln und der Spezifika anschließt.
Klauseln eines FLWOR-Ausdrucks
In einem FLWOR-Ausdruck werden konzeptionell Sequenzen von Knoten durch die Bindung von Variablen in for- und let-Klauseln erzeugt. Die einzelnen Einträge werden in der nachfolgenden where-Klausel bezüglich einem vorgegebenen Prädikat gefiltert, hinsichtlich einer optionalen order by-Klausel sortiert und dann gemäß der angegebenen Elementkonstruktoren in der return-Klausel ausgegeben, wodurch das Ergebnis im Sinne einer gültigen Instanz des XQuery-Datenmodells generiert wird. Die folgende Abbildung zeigt die konzeptionelle Abfolge der Auswertung der in einem FLWOR-Ausdruck angegebenen Klauseln.
Abb. Konstrukte eines FLWOR-Ausdrucks
Die Grammatik für gültige FLWOR-Ausdrücke, wie sie nachfolgend auszugsweise gezeigt ist, verdeutlicht, dass FLWOR-Ausdrücke an einer Vielzahl von Stellen Ausdrücke der XQuery-Anfragesprache (ExprSingle) erwarten. Da FLWOR-Ausdrücke selbst wiederum XQuery-Ausdrücke sind, können valide XQuery-Anfragen aus komplexen,
d. h. ineinander geschachtelten FLWOR-Ausdrücken bestehen.
FLWORExpr | ::= | (ForClause | LetClause)+ WhereClause? OrderByClause? return ExprSingle |
ForClause | ::= | for $VarName TypeDeclaration? PositionalVar? in ExprSingle (, $VarName TypeDeclaration? PositionalVar? in ExprSingle)* |
LetClause | ::= | let $VarName TypeDeclaration? := ExprSingle (, $VarName TypeDeclaration? := ExprSingle)* |
TypeDeclaration | ::= | as SequenceType |
PositionalVar | ::= | at $VarName |
WhereClause | ::= | where Expr |
OrderByClause | ::= | (order by | stable order by) OrderSpecList |
OrderSpecList | ::= | OrderSpec (, OrderSpec)* |
OrderSpec | ::= | ExprSingle OrderModifier |
OrderModifier | ::= | (ascending | descending)? ((empty greatest) | (empty least))? (collation StringLiteral)? |
Quelle: "XQuery – Grundlagen und fortgeschrittene Methoden", dpunkt-Verlag, Heidelberg (2004)
<< zurück | vor >> |