Как передать xquery через REST api eXist-db?

Я понимаю, как использовать 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

Страница, которую я возвращаю, выглядит так: page response

Я ошибаюсь? "фильмы" - это коллекция в моей базе данных. введите описание изображения здесь


person alex9311    schedule 18.05.2015    source источник
comment
Какая у вас ошибка? Как выглядит ваш HTTP-запрос?   -  person dirkk    schedule 19.05.2015
comment
Я отредактировал свой вопрос, чтобы он был более подробным, спасибо за ответ!   -  person alex9311    schedule 19.05.2015


Ответы (1)


Похоже, ваш запрос был успешно выполнен. Элемент <exist:result/> выглядит вполне правильным, но он просто не нашел фильмов, соответствующих критериям вашего фильтра. Это также может быть проблема с пространством имен. Вы должны попробовать свой запрос локально, чтобы увидеть, возвращает ли он что-нибудь.

Ваш элемент <script id="tinyhippos-injected"/> довольно странный, так как я не ожидал здесь крошечных бегемотов. Однако, похоже, это из-за используемого вами расширения Chrome.

Кроме того, если ваш XQuery немного длиннее, параметр URL не подойдет, а кодировку в любом случае трудно читать и поддерживать. Возможно, вы захотите взглянуть на документацию eXist о том, как отправить POST запрос с помощью XQuery.

person dirkk    schedule 19.05.2015
comment
Другой вариант - параметризовать ваш XQuery и сохранить его в eXist, затем вы можете вызвать XQuery через REST с вашими параметрами. Это также описано в документации eXist. - person adamretter; 19.05.2015