
xdmp:value( $expr as xs:string, [$map as map:map?], [$context as item()?], [$options as (element()|map:map)?] ) as item()*
Evaluate an expression in the context of the current evaluating statement.
This differs from xdmp:eval in that xdmp:value
preserves all of the context from the calling query, so you do not
need to re-define namespaces, variables, and so on. Although the expression
retains the context from the calling query, it is evaluated in its own
transaction with same-statement isolation.
| Parameters | |
|---|---|
| expr | The string representing an expression to evaluate. |
| map | A map of namespace bindings. The keys should be namespace prefixes and the values should be namespace URIs. These namespace bindings will be added to the in-scope namespace bindings in the evaluation of the expression. |
| context | Bind the context item to this value during evaluation of the expression. |
| options |
Options with which to customize this operation.
You can specify options as either an options XML element
in the namespace "xdmp:eval", or as a map:map. The
option names below are XML localnames. When using a map, replace any
hyphens in an option name with camel casing. For example, "an-option"
becomes "anOption" when used as a map:map entry key.
This function supports the following options:
true, the code is evaluated without using Amps from the caller.
For more details, see
Temporarily Increasing Privileges with Amps.
This option is not usable with dbg:eval.
true, the expression runs as if outside of an HTTP App
Server: builtins that read the request (e.g.
xdmp:get-request-header) or write the response (e.g.
xdmp:add-response-header) behave as if called outside of
an HTTP context, typically returning the empty sequence.
Session-related builtins likewise have no session to read or update;
in particular, xdmp:set-session-field returns the set
value instead of creating a new session.
This option is intended as a defense-in-depth control when evaluating
user-supplied expressions, and is typically used together with
ignore-amps.
|
http://marklogic.com/xdmp/privileges/xdmp-value
You can only evaluate expressions with xdmp:value; no
prolog definitions (namespace declarations, function definitions,
module imports, and so on) are allowed.
If the expression references something not in the context of either the calling query or the value expression, then an error is thrown. For example, the following throws an undefined variable exception:
xdmp:value("$y")
It is not recommended to use this with an inline function as static analysis of
inline functions do not look inside strings passed to xdmp:value.
let $var := 5
return
xdmp:value("$var")
=> 5
xquery version "1.0-ml";
xdmp:document-insert("/test.xml",
<root>
<step1>this is step1</step1>
<step2>this is step2</step2>
</root>)
;
(:
use xdmp:value to dynamically specify a step
in an XPath expression
:)
for $x in ("step1", "step2")
return
/root/xdmp:value($x)
=>
<step1>this is step1</step1>
<step2>this is step2</step2>
Stack Overflow: Get the most useful answers to questions from the MarkLogic community, or ask your own question.