2010-06-26 21 views
6

Je voudrais savoir si l'expression xquery FLWOR a une instruction de sortie comme continuer et rompre? Par exemple, je veux quitter la boucle for lorsqu'une condition particulière est atteinte.Est-ce que XQuery a une instruction exit pour les expressions FLWOR?

+1

expressions FLWOR ne sont pas des boucles vraiment - il n'y a aucune garantie que les éléments "pour" seront évalués dans un ordre donné, ou même dans un seul fil; ils pourraient tous être faits en parallèle et combinés ensemble à la fois, et tant que la sémantique serait maintenue, cela serait valable. –

Répondre

7

Je voudrais savoir si XQuery FLWOR expression a une déclaration de sortie comme continue et break? Par exemple, je veux quitter la boucle lorsqu'une condition particulière est .

XQuery est un langage fonctionnel , qui, entre bien d'autres choses signifie qu'il n'y a pas de notion stricte de l'ordre d'exécution. Par conséquent, toute tentative de faire quelque chose de spécifique quand quelque chose se passe, n'a pas de sens.

L'approche correcte consiste à faire quelque chose si une condition spécifique est satisfaite.

Il n'existe aucun moyen de quitter une expression FLWOR, autre que l'utilisation de la fonction error(), mais cela met fin au traitement.

Il ne faut pas trop se soucier de l'optimisation - de nombreux processeurs ont de bons optimiseurs.

Ainsi, de nombreux processeurs évalueront paresseusement et arrêtera l'évaluation de l'expression FLOWR ci-dessous, la première fois qu'il produit résultat qui satisfait aux specific-condition():

(someFlowerExpression)[specific-condition(.)][1] 
1

XQuery Scripting a une déclaration de sortie:

variable $i := 0; 
while(true()) 
{ 
    $i := $i + 1; 
    if($i = 3) then 
     exit returning $i 
    else(); 
} 

Ou

for $i in (1 to 1000) 
return 
    if($i = 3) then 
    exit returning $i; 
    else(); 

Vous pouvez essayer cet exemple en direct à http://www.zorba-xquery.com/html/demo#JvSLsVh3ZjhvTHecVd9jyE1vEBc=

+0

Il n'y a pas de mots-clés de sortie ou de retour dans XQuery. –

+0

'pour $ i (1 à 1000) où $ i lt 4 retour i $' –

+0

Les deux liens sont morts :( –

0

Bien que la question soit assez ancienne, je réponds à cela car de nouvelles personnes pourraient faire face à une telle situation et obtiendraient une meilleure solution.

Cette solution fonctionne facilement sur BaseX 7,6

for $i in (1 to 10) 
return 
    if ($i = 3) then 
     $i 
    else 
     exit 

sortie sera - 3

OU cela va générer la sortie - 3,

for $i in (1 to 10) 
return 
    if ($i = 3) then 
     $i 
    else 
     () 
+0

je ne l'ai pas eu le temps d'essayer cela dans BaseX, mais théoriquement cela rien de sortie , depuis la première fois à travers la boucle, à cause de '$ i = 1' il serait déjà sorti –

+0

@Vincent - J'ai mis à jour la réponse.Le second fonctionne avec BaseX, j'ai testé. SEULEMENT 3. – John