Запрос XPath на exist-db не возвращает совпадений

Я использую чистый exist-db 4.5.0 на MacOS. Только что установил пакет "shakespeare" для тестирования. Когда я выполняю следующий запрос через браузер, я не получаю обращений. Но he5.xml является допустимым файлом TEI и содержит в body один text элемент.

http://127.0.0.1:8080/exist/rest/apps/shakespeare/data/he5.xml?_query=//text

<exist:result xmlns:exist="http://exist.sourceforge.net/NS/exist" exist:hits="0" exist:start="1" exist:count="0" exist:compilation-time="0" exist:execution-time="0"/>

Использование базовых учетных данных аутентификации (пользователь: admin, пароль: EMPTY) в URL-адресе ничего не меняет. http://admin:@127.0.0.1:8080/exist/rest/apps/shakespeare/data/he5.xml?_query=//text

Кажется, работает только //* XPATH (или игнорируется?), Потому что я получаю все содержимое файла. Остальные запросы тоже не работают (правильно). Как //text() xquery:

<exist:result xmlns:exist="http://exist.sourceforge.net/NS/exist" exist:hits="10313" exist:start="1" exist:count="10" exist:compilation-time="1" exist:execution-time="1">
The Life of King Henry the Fifth William Shakespeare Craig A. Berry, Martin Mueller, and Clifford Wulfman
</exist:result>

Это всего лишь первое попадание текста ...

Пробовал это также на Ubuntu с exist-db 4.4.0 ... тот же "результат".


person zypro    schedule 22.11.2019    source источник


Ответы (1)


Я думаю, вы ошиблись в своем запросе. Вы заявляете, что пробовали:

http://127.0.0.1:8080/exist/rest/apps/shakespeare/data/he5.xml?_query=//text

Этот запрос пытается найти все элементы с именем text. Я думаю, вы, вероятно, хотели просто получить все текстовые узлы, поэтому вместо этого вам понадобятся:

http://127.0.0.1:8080/exist/rest/apps/shakespeare/data/he5.xml?_query=//text()

Обратите внимание на дополнительный ().

Также я думаю, что ваш URL-путь тоже выглядит подозрительным, если вы пытаетесь использовать REST API, вам следует использовать полный путь к коллекции базы данных, то есть:

    http://127.0.0.1:8080/exist/rest/db/apps/shakespeare/data/he5.xml?_query=//text()

Обратите внимание на дополнительный /db.

person adamretter    schedule 23.11.2019
comment
Спасибо за ответ, но я знаю разницу между text и text(). Но ни один из них не дал ожидаемого / правильного результата. Кроме того, дополнительный /db не имеет значения ... - person zypro; 23.11.2019