• +49-(0)721-402485-12
Ihre Experten für XML, XQuery und XML-Datenbanken

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.

Konstrukte eines FLWOR-Ausdrucks

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ückvor >>