我如何通过 eXist-db 的 REST api 传递 xquery?

How do I pass xquery through eXist-db's REST api?

我了解如何使用 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 查询。所以我传递的 url 是

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

我返回的页面是这个

我是不是完全错了? "movies" 是我数据库中的一个集合。

看起来您的查询已成功执行。 <exist:result/> 元素看起来很正确,但它根本没有找到任何符合您筛选条件的电影。这也可能是命名空间问题。你应该在本地尝试你的查询,看看它是否 returns 东西。

你的<script id="tinyhippos-injected"/>元素有点奇怪,我没想到这里有小河马。不过,这好像是due to some Chrome extension you use.

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