首页 > 解决方案 > Basex Rest API 在管理页面允许时拒绝查询

问题描述

当我发送这样的查询 xml 文档时

<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 调用被拒绝?是否有任何不适用于管理界面的进一步限制?

如果我删除lets 并展开相应的变量,则查询被 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。

标签: basex

解决方案


原来问题不在于查询,而在于结合发送文件内容的--data选项。此选项在发送前去除换行符(CR 和 LF)。查询按预期工作。curl@--data-binary '@...'


推荐阅读