#xml #nosql #exist-db #flwor #restxq
#xml #nosql #exist-db #флвор #restxq
Вопрос:
Я пытаюсь адаптировать максимально простой FLWOR
BaseX
eXist
вариант, как показано ниже.
Ошибка в eXist
:
XML Parsing Error: no root element found
Location: http://localhost:8080/exist/rest/db/scripts/notes.xq
Line Number 1, Column 1:
Запрос:
xquery version "3.0";
for $note in collection("/db/temp/notes")
return $note
Коллекция:
<notes>
<note>
foo
</note>
<note>
bar
</note>
<note>
baz
</note>
</notes>
От BaseX
:
nicholas@mordor:~/basex$
nicholas@mordor:~/basex$ cat notes.xq
xquery version "3.1";
for $note in db:open("notes")
return $note
nicholas@mordor:~/basex$
nicholas@mordor:~/basex$ basex notes.xq
[warning] /usr/bin/basex: Unable to locate /usr/share/java/tagsoup.jar in /usr/share/java
[warning] /usr/bin/basex: Unable to locate /usr/share/java/xml-resolver.jar in /usr/share/java
[warning] /usr/bin/basex: Unable to locate /usr/share/java/jing.jar in /usr/share/java
<notes>
<note>foo</note>
<note>bar</note>
<note>baz</note>
</notes>nicholas@mordor:~/basex$
nicholas@mordor:~/basex$
не уверен, как адаптировать это к eXist
описанному выше.
Незначительный момент заключается в том, что это есть 3.0
и eXist
используется 3.1
, в противном случае я бы ожидал, что он будет переносимым. Итак, должно быть, какая-то ошибка синтаксиса или конфигурации?
Не уверен, как использовать «консоль» в eXist
so из eXide
:
и
этот запрос:
xquery version "3.0";
for $notes in collection('/db/temp')
return $notes
возвращает пустую страницу. Данные находятся в «файле» с именем notes.xml
/db/tmp
, указанным выше.
Я добавил xml-объявление:
<?xml version="1.0" encoding="UTF-8" ?>
кроме того, в xml
документ данных.
Комментарии:
1. Ваша коллекция неверна:
collection("/db/tmp")
2. ах, но все та же ошибка
no root element
.3. Что произойдет, если вы удалите все и просто запустите этот запрос:
xquery version "3.0"; collection("/db/tmp")
? И что произойдет, если вы запустите это:xquery version "3.0"; doc("/db/tmp/notes.xml")
? (т.Е. Исключите ПОТОК)4. В eXide вы нажимаете кнопку «создать», чтобы создать запрос. Вставьте приведенный выше запрос в окно запроса. Нажмите кнопку «eval». Результаты отображаются в нижнем окне.
5. кстати, eXide — это интерфейс разработки, специфичный для существующей базы данных: вы можете выполнять все свои запросы там для тестирования, и вы можете управлять коллекциями баз данных и документами (удалять, создавать, загружать) через меню eXide -> file -> manage. Я рекомендую вам использовать только eXide, прежде чем каким-либо образом экспериментировать с существующими службами REST. Создайте свой XML-документ в eXide, чтобы eXide мог проверить его структуру. Оттуда переходите к написанию запроса и выполнению его в eXide. Это позволит вам легко перехватывать ошибки на ранней стадии, потому что на данный момент невозможно точно диагностировать ваши проблемы.
Ответ №1:
Похоже, у вас есть два XML-файла в /db/tmp (не /db / temp). Я предполагаю, что note.xml является единым <note>...</note>
документом и notes.xml это <notes>...</notes>
документ, содержащий три <note>...</note>
элемента.
Ошибка, которую вы видите, заключается в том, что вы не запрашиваете какие-либо элементы из коллекции. То есть, как только у вас есть коллекция, вам нужно указать элементы в этой коллекции с помощью инструкции XPath.
Пожалуйста, попробуйте это:
xquery version "3.0";
for $note in collection('/db/tmp')//note
return $note
«// примечание» получит все <note>...</note>
элементы под корневым элементом каждого документа в коллекции. Это должно вернуть три <note>...</note>
тега в notes.xml плюс <note>...</note>
документ в note.xml .
Если вы измените часть XPath запроса на «/ notes/ note», то вы получите только три из notes.xml документ. Это происходит потому, что note.xml документ не имеет <notes>...</notes>
элемента в своем корне.
Вы правы в том, что версия XQuery 3.0 или 3.1 в данном случае не имеет значения. В этом простом запросе нет функций 3.1.
Комментарии:
1. Ошибка синтаксического анализа XML: мусор после расположения элемента документа: localhost:8080/exist/rest/db/scripts/notes.xq Номер строки 7, столбец 1: <примечание> ^
2. В eXide вы можете управлять всеми коллекциями и файлами в БД, используя окно «управление» (меню eXide -> файл -> управление).
3. Ошибка
XML Parsing Error: junk after document element
связана с тем, что у вас есть плохо сформированный XML-документ.