Xquery MarkLogic v1/eval端点返回“XDMP-EXTVAR”

Xquery MarkLogic v1/eval端点返回“XDMP-EXTVAR”,xquery,marklogic,Xquery,Marklogic,Windows 10上的MarkLogic 8.0-4.2版 我正在向/v1/eval端点发送一个请求,以列出作为变量传入目录路径的文件系统目录xdmp:filesystem directory的内容。代码在带有xdmp:eval的qconsole中工作,但是当使用curl see beep或powershell使用-Body with Invoke RestMethod时,当访问外部变量时,我会收到以下错误消息。我使用的代码基于在 这和预期的一样 答复: ... HTTP/1.1 400 Ba

Windows 10上的MarkLogic 8.0-4.2版

我正在向/v1/eval端点发送一个请求,以列出作为变量传入目录路径的文件系统目录xdmp:filesystem directory的内容。代码在带有xdmp:eval的qconsole中工作,但是当使用curl see beep或powershell使用-Body with Invoke RestMethod时,当访问外部变量时,我会收到以下错误消息。我使用的代码基于在 这和预期的一样

答复:

...
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语句:

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

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

vars={"dpath":"d:/wrk/markLogic/"}
您可能还需要转义字符,如\和&。给定语法,它可能遵循JSON符号要求


谢谢你的回复,我已经尝试了你的建议,但没有乐趣,甚至取代了D:\。。。用猫这个词也没什么区别。我可以尝试Marklogic建议的纯URL路由,该路由也可以使用urlencoded?xquery参数使用相同的代码在运行8.0-4.2相同问题的Linux框中使用相同的代码我现在改变了方法,在不使用外部变量的情况下发送查询的完成版本