【问题标题】:How do I pass xquery through eXist-db's REST api?如何通过 eXist-db 的 REST api 传递 xquery?
【发布时间】:2015-05-18 22:16:48
【问题描述】:

我了解如何使用 Xpath

http://localhost:8080/exist/rest/db/movies?_query=//movie[title=%22Spider-Man%22]/node()

但是如何传递一个 xquery 查询呢?我一直在阅读 REST api 适用于 xpath 和 xquery 的所有内容,但我无法让我的查询正常工作。以下是我试图传递的示例(我已经在 xquery 沙箱中对此进行了测试并且它有效):

for $movie in doc("movies/movies.xml")/movies/movie[year > 2002]
    return <movie> { ($movie/title, $movie/year) } </movie>

如何在 URL 中传递它?我真的不知道从哪里开始,所以我尝试将上面的查询粘贴为 GET 参数,类似于 xpath 查询。所以我传递的网址是

http://localhost:8080/exist/rest/db/movies/?_query=for%20$movie%20in%20doc(%22movies/movies.xml%22)/movies/movie[year%20%3E%202002]%20return%20%3Cmovie%3E%20{%20($movie/title,%20$movie/year)%20}%20%3C/movie%3E

我返回的页面是这个

我是不是完全走错了路? “电影”是我数据库中的一个集合。

【问题讨论】:

  • 你得到什么错误?您的 HTTP 请求是什么样的?
  • 我已将我的问题编辑得更详细一点,感谢您的回复!

标签: rest xpath xquery exist-db


【解决方案1】:

您的查询似乎已成功执行。 &lt;exist:result/&gt; 元素看起来很正确,但它根本没有找到任何符合您过滤条件的电影。这也可能是命名空间问题。你应该在本地尝试你的查询,看看它是否返回了一些东西。

你的&lt;script id="tinyhippos-injected"/&gt; 元素很奇怪,因为我没想到这里有小河马。但是,这似乎是due to some Chrome extension you use

此外,如果您的 XQuery 有点长,则 URL 参数将无法使用,并且无论如何编码都难以阅读和维护。你可能想看看at the eXist documentation about how to submit a POST request with an XQuery

【讨论】:

  • 另一个选项是参数化您的 XQuery 并将其存储到 eXist 中,然后您可以使用您的参数通过 REST 调用 XQuery。这也包含在 eXist 文档中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-12
  • 2020-09-25
  • 1970-01-01
  • 1970-01-01
  • 2020-10-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多