2015-05-18 2 views
1

Я понимаю, как использовать XpathКак передать xquery через REST api eXist-db?

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 

страница я вернусь это page response

Собираюсь ли я об этом совершенно неправильно? «Фильмы» - это коллекция в моем db. enter image description here

+0

Какая ошибка у вас возникла? Как выглядит ваш HTTP-запрос? – dirkk

+1

Я отредактировал мой вопрос, чтобы быть немного более подробным, спасибо за ответ! – alex9311

ответ

3

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

Элемент <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.

+2

Другим вариантом является параметризация вашего XQuery и сохранение его в eXist, затем вы можете вызвать XQuery через REST с вашими параметрами. Это также рассматривается в документации eXist. – adamretter

Смежные вопросы