如何在marklogic xquery中将map变量传递给外部函数,如eval和invoke
如何在marklogic xquery中将map变量传递给外部函数,如eval和invoke,xquery,marklogic,Xquery,Marklogic,xdmp:eval($s,(),“world”) 我希望将map作为参数传递给外部函数,而不是将默认值作为上述代码中的第二个参数。如果$s具有例如声明变量$v1 external在序言中,然后我认为您可以使用xdmp:eval($s,map:new(map:entry({}v1',some expression)),或者,正如注释中指出的,甚至可以使用xdmp:eval($s,map:new(map:entry({v1',some expression)))将计算结果作为变量值传递给某些表达式$
xdmp:eval($s,(),“world”)
我希望将map作为参数传递给外部函数,而不是将默认值作为上述代码中的第二个参数。如果
$s
具有例如声明变量$v1 external代码>在序言中,然后我认为您可以使用xdmp:eval($s,map:new(map:entry({}v1',some expression))
,或者,正如注释中指出的,甚至可以使用xdmp:eval($s,map:new(map:entry({v1',some expression)))
将计算结果作为变量值传递给某些表达式
$v1
,例如xdmp:eval($s,map:new(map:entry('v1','foo'))
按照文档中的指示传递字符串值foo,您可以传递一系列交替的QName和value,或者你可以传递一张地图
用于评估代码的外部变量值,表示为交替QName值对序列或map:map
- 如果使用序列,它必须包含交替变量QName和值。e、 g.
(xs:QName(“var1”),“val1”,xs:QName(“var2”),“val2”)
- 如果使用映射,则每个键都是一个字符串,表示变量QName(“{namespaceURI}localname”)的克拉克表示法,其值是相应的变量值。您可以使用生成用作键的Clark符号
xdmp:eval()
文档中的示例显示了如何使用以下序列调用:
xquery version "1.0-ml";
declare namespace my='http://mycompany.com/test';
let $s :=
"xquery version '1.0-ml';
declare namespace my='http://mycompany.com/test';
declare variable $my:x as xs:string external;
declare variable $my:y as xs:string external := 'goodbye';
concat('hello ', $my:x, ' ', $my:y)"
return
(: evaluate the query string $s using the variables
supplied as the second parameter to xdmp:eval :)
xdmp:eval($s, (xs:QName("my:x"), "world"))
因此,您需要创建一个map:map
并创建一个条目,其中QName的键为Clark符号:{http://mycompany.com/test}x
和该条目的值“world”
使用map:map
调用的方法是:
let $vars := map:new() => map:with(xdmp:key-from-QName(xs:QName("my:x")), "world")
return
xdmp:eval($s, $vars)
您的示例代码看起来不正确。您正在为$vars
传递一个空序列,并将字符串“world”作为$options
传递,并且有一个额外的括号。如果从示例中建模,可能意味着发布xdmp:eval($s,(xs:QName(“my:x”),“world”)
,那么您的问题可能会更清楚。您可以在关键字名称中省略带有非前缀变量的{}
。一般注意:如果您不在变量名称前加前缀,则可以省去一些麻烦。名为$x
的外部变量可以通过映射:条目('x','world')
引用。