MarkLogic v1 / eval端点返回" XDMP-EXTVAR"

时间:2017-11-09 13:45:25

标签: xquery marklogic

Windows 10上的MarkLogic版本8.0-4.2

我向/ v1 / eval端点发送请求,列出作为变量传入目录路径的文件系统目录(xdmp:filesystem-directory)的内容。代码在qconsole中使用xdmp:eval()但是当使用curl(见下文)或powershell(使用-Body with 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

1 个答案:

答案 0 :(得分:1)

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

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

您可能还需要转义\和&等字符。鉴于语法,它可能遵循JSON表示法要求。

HTH!