当我发送这样的查询xml doc时
<query><text><![CDATA[
let $facts := fn:collection("factbook/factbook.xml")/mondial
let $c := ("Antarktika", "Atlantis")
for $name at $id in $c
return
insert node (<continent id="f0_aaa{$id}" name="{$name}" />) into $facts
]]></text></query>
使用REST API
curl -i --data '...' 'http://localhost:8984/rest'
BaseX将报告以下错误:
[XPST0003] Incomplete FLWOR expression: expecting 'return'.
如果我在Web管理查询页面上执行相同的查询,则接受查询并插入节点。
为什么拒绝REST呼叫?是否有任何进一步的限制不适用于管理界面?
如果我删除let
s并展开相应的变量,则REST API接受该查询:
<query><text><![CDATA[
for $name at $id in ("Antarktika", "Atlantis")
return
insert node (<continent id="f0_aaa{$id}" name="{$name}" />) into fn:collection("factbook/factbook.xml")/mondial
]]></text></query>
REST用户具有写入权限。我正在使用BaseX 9.0.2。
原来,问题不是查询,而是--data
的curl
选项与@
结合发送文件内容。此选项在发送之前剥离换行符(CR和LF)。使用--data-binary '@...'
,查询按预期工作。