【问题标题】:MarkLogic v1/eval endpoint returns "XDMP-EXTVAR"MarkLogic v1/eval 端点返回“XDMP-EXTVAR”
【发布时间】:2017-11-09 13:45:25
【问题描述】:

Windows 10 上的 MarkLogic 版本 8.0-4.2

我正在向 /v1/eval 端点发送一个请求,以列出作为变量传入目录路径的文件系统目录 (xdmp:filesystem-directory) 的内容。该代码使用 xdmp:eval() 在 qconsole 中工作,但是当使用 curl(见下文)或 powershell(使用 -Body 和 Invoke-RestMethod)时,当访问外部变量时,我收到以下错误消息。我使用的代码基于https://docs.marklogic.com/9.0/REST/POST/v1/eval 的示例 按预期工作。

回复:

...
HTTP/1.1 400 Bad Request
Content-Type: application/json; charset=utf-8
...
{"errorResponse":{"statusCode":400, "status":"Bad Request",   "messageCode":"XDMP-EXTVAR", "message":"XDMP-EXTVAR: (err:XPDY0002) declare variable $dpath as xs:string external;  -- Undefined external variable fn:QName(\"\",\"dpath\")" ,"messageDetail":{"messageTitle":"Undefined external variable"}}}

Xquery 示例 1:

xquery=
xquery version "1.0-ml";
declare namespace dir="http://marklogic.com/xdmp/directory";
declare variable $dpath as xs:string external;
(string-join( fn:data(xdmp:filesystem-directory($dpath)//dir:pathname), ",") )
& 
vars=("dpath":"d:\wrk\markLogic\")

Xquery 示例 2:

xquery=
xquery version "1.0-ml";
declare namespace dir="http://marklogic.com/xdmp/directory";
declare variable $dpath as xs:string external;
($dpath)
& 
vars=("dpath":"abc")

卷曲语句:

curl --anyauth --user user:password -X POST -i -d @./body.xqy  -H "Content-type: application/x-www-form-urlencoded"  -H "Accept: multipart/mixed; boundary=BOUNDARY"   http://localhost:8000/v1/eval

【问题讨论】:

  • 在运行 8.0-4.2 相同问题的 Linux 机器上触发了相同的代码
  • 我现在改变了发送查询完成版本而不使用外部变量的方法

标签: xquery marklogic


【解决方案1】:

使用大括号,而不是圆括号:

vars={"dpath":"d:/wrk/markLogic/"}

您可能还需要对 \ 和 & 等字符进行转义。给定语法,它可能遵循 JSON 表示法要求。

HTH!

【讨论】:

  • 感谢您的回复,我已经接受了您的建议,但并不高兴,即使将“D:\...”替换为“猫”这个词也没有任何区别。我可以尝试 Marklogic 建议的纯 URL 路由(使用 ?xquery 参数进行 urlencoded)
猜你喜欢
  • 2014-06-16
  • 2013-05-29
  • 1970-01-01
  • 2023-02-09
  • 1970-01-01
  • 1970-01-01
  • 2021-11-25
  • 2021-11-17
  • 2016-07-10
相关资源
最近更新 更多