将地图传递给外部功能

时间:2014-06-12 15:25:48

标签: xquery marklogic

我有以下模块

xquery version "1.0-ml";

declare variable $datasets as map:map external;

...

我想打电话给我,所以我这样做xdmp:invoke

...
let $update := xdmp:invoke("/app/lib/my-module.xqy", (xs:QName("datasets"), $map),   <options xmlns="xdmp:eval">
              <modules>{xdmp:modules-database()}</modules>
            </options>)
...

$map的类型为map:map。

运行此操作会出现以下错误

[1.0-ml] XDMP-ARG: xdmp:invoke("/app/lib/20140527-0916-copy-y-axis-labels-from-chart-to-dataset-...", fn:QName("", "datasets"), <options xmlns="xdmp:eval"><modules>0</modules></options>) -- Invalid argument

为什么?

1 个答案:

答案 0 :(得分:2)

很难确定您发布的有限代码示例,但我认为您的$map变量绑定到空序列({{1的粗略模拟)在XPath / XQuery中)。

我创建了以下主模块,它只返回外部变量null

$datasets

按如下方式调用它可以正常工作:

xquery version "1.0-ml";
declare variable $datasets as map:map external;
$datasets

这导致&#34;无效参数&#34;错误:

let $map := map:entry("key", "value")
return
  xdmp:invoke("/test.xqy",
    (xs:QName("datasets"), $map),
      <options xmlns="xdmp:eval">
        <modules>{xdmp:modules-database()}</modules>
      </options>)

XQuery展平序列(它们不像s表达式那样嵌套),所以当let $map := () return xdmp:invoke("/test.xqy", (xs:QName("datasets"), $map), <options xmlns="xdmp:eval"> <modules>{xdmp:modules-database()}</modules> </options>) 是空序列时,$map元素变为{{1}的值param,这是外部变量的无效值。

更新:Doh! @ mblakele在下面的评论解释了错误条件......

TL; DR:<options/>不是$datasets的实例。