Variables in XQuery are identified by names that are preceded by a dollar sign ($).[*] The names (not including the dollar sign) must conform to the definition of an XML-qualified name. This means that they can be prefixed, in which case they are associated with the namespace mapped to that prefix. If they are not prefixed, they are not associated with any namespace.
When a query is evaluated, a variable is bound to a particular value. That value may be any sequence, including a single node, a single atomic value, the empty sequence, or multiple nodes and/or atomic values. Once the variable is bound to a value, its value does not change. One consequence of this is that you cannot assign a new value to the variable as you can in most procedural languages. Instead, you must use a new variable.
Variables can be bound in several kinds of expressions: in global variable declarations,
for
or let
clauses of a FLWOR, quantified expressions, or typeswitch expressions. For example, evaluation of the FLWOR:
for$prod
in doc("catalog.xml")/catalog/product return$prod
/number
binds the $prod
variable to a node returned by the path expression doc("catalog.xml")/catalog/product
. The variable is then referenced in the return
clause. Function declarations also bind variables to values. For example, the function declaration:
declare function local:addTwo ($value
as xs:integer) as xs:integer {$value
+ 2 };
binds the $value
variable to the value of the argument passed to it. In this case, the $value
variable is referenced in the function body.
[*] Variable names are most often preceded immediately by the dollar sign, but the XQuery syntax allows for whitespace between the dollar sign and the variable name.
18.118.253.55