Обратитесь к конкретному документу в базе данных BaseX с помощью XQuery - PullRequest
5 голосов
/ 29 июля 2010

Если я добавлю два документа в базу данных BaseX, скажем, normal.xml и normal2.xml, есть ли способ ссылаться на каждый из них в отдельности?

Я знаю о функции doc(), но она смотрит на файловую систему по их расположению, а не в самой базе данных.

Например, если я сделаю запрос: doc("normal.xml")/name, я получу сообщение о том, что normal.xml не найден.

Я также попытался: basex:db("my-db-name")/doc("normal.xml")/name и получил ту же ошибку.

Есть идеи?

Ответы [ 3 ]

9 голосов
/ 03 августа 2010

В итоге я спросил в списке рассылки BaseX , и я получил следующий ответ:

for $doc in collection('test-db')
    where matches(document-uri($doc), 'example.xml')
return $doc

Я также поинтересовался, почему не было прямой ссылкиИз одного документа можно было бы извлечь данные за постоянное время, и ответ был:

Это связано с моделью данных XQuery .XQuery не имеет формального представления о файлах внутри базы данных / коллекции (Кристиан может исправить меня, если я ошибаюсь), поэтому команда collection () возвращает любую последовательность (document-) узлов для данной базы данных.Пользователь может выбрать те узлы, которые он хочет обработать.

В настоящее время мы ищем идеи для более удобного перемещения по коллекциям;что-то похожее на «collection ('db / path-to / document.xml')», которое все равно должно соответствовать текущей рекомендации W3C.Поскольку последующий document-uri () обычно работает достаточно хорошо, он не слишком высок в нашем списке приоритетов.

Спасибо за помощь.

6 голосов
/ 30 июля 2010

Вам может помочь следующий запрос:

for $doc in collection('your-db-name')
let $path := base-uri($doc)
where ends-with($path, 'normal.xml')
return $doc/name
4 голосов
/ 15 сентября 2012

Функция doc() - это все, что вам нужно, если вы знаете. Предполагая, что вы создали и открыли базу данных с именем «mydb», если вы добавляете документ с помощью следующей команды:

ADD TO your_name /some/path/on/filesystem.xml

Вы всегда можете открыть следующий документ, используя:

XQUERY doc('mydb/your_name')

ADD TO будет игнорировать имя файла, которое вы дали, и будет использовать имя, указанное в URI. Тем не менее, будьте осторожны: при выполнении этой команды нет гарантии уникальности вашего имени. И если он не уникален, функция (doc) выдаст ошибку BaseX (не является частью стандарта XQuery), говоря, что она соответствует нескольким документам.

...