basex - 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 调用被拒绝?是否有任何不适用于管理界面的进一步限制?
如果我删除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
选项。此选项在发送前去除换行符(CR 和 LF)。查询按预期工作。curl
@
--data-binary '@...'
推荐阅读
- python - Websocket在python中下载实时数据
- c# - 在 Internet Explorer 中将焦点设置为已打开的选项卡 - 使用 C# 将其置于前台
- python-3.x - Python:自定义可变类可以用作字典的键吗?
- reactjs - 创建 reactjs 包以包含导出的 sass 变量的方法
- java - 检查异常处理程序类中的请求是获取、发布、放置还是删除
- clojure - 从数据结构中访问值
- javascript - React Promise 代码需要更改一个 json 值
- postgresql - 我可以从 JDBC 连接为 Postgres 设置会话变量吗
- python - 如何对 xy 坐标进行排序以获得连续多边形
- reactjs - 父组件高度动画为0时子组件不消失