J'essaie d'utiliser une condition if pour attribuer une valeur à une variable dans une xquery. Je ne sais pas comment procéder.
Voici ce que j'ai essayé:
declare namespace libx='http://libx.org/xml/libx2';
declare namespace atom='http://www.w3.org/2005/Atom';
declare variable $entry_type as xs:string external;
let $libx_node :=
if ($entry_type = 'package' or 'libapp') then
{element {fn:concat("libx:", $entry_type)} {()} }
else if ($entry_type = 'module') then
'<libx:module>
<libx:body>{$module_body}</libx:body>
</libx:module>'
Ce code renvoie une erreur d'expression "X" incomplète [XPST0003]. Quelqu'un peut-il m'aider à résoudre ce problème?
Aussi, quelqu'un peut-il suggérer de bons tutoriels pour apprendre les xqueries.
Merci, Sony
C'est parce que dans XQuery spécification d'expression conditionnelle else-expression est toujours requis:
[45] IfExpr ::= "if" "(" Expr ")" "then" ExprSingle "else" ExprSingle
Vous devez donc écrire la deuxième clause else
(par exemple, elle peut retourner une séquence vide):
declare namespace libx='http://libx.org/xml/libx2';
declare namespace atom='http://www.w3.org/2005/Atom';
declare variable $entry_type as xs:string external;
let $libx_node :=
if ($entry_type = ('package','libapp')) then
element {fn:concat("libx:", $entry_type)} {()}
else if ($entry_type = 'module') then
<libx:module>
<libx:body>{$module_body}</libx:body>
</libx:module>
else ()
... (your code here) ...
Quelques bugs évidents sont également corrigés:
if($entry_type = ('package', 'libapp'))
Concernant les tutoriels XQuery. Le Tutoriel XQuery de W3CSchools est un très bon point de départ.