Обратитесь к конкретному документу в базе данных BaseX с помощью XQuery.

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

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

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

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

Любые идеи?


person Ryan    schedule 29.07.2010    source источник


Ответы (3)


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

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

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

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

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

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

person Ryan    schedule 02.08.2010

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

for $doc in collection('your-db-name')
let $path := base-uri($doc)
where ends-with($path, 'normal.xml')
return $doc/name
person Christian    schedule 30.07.2010

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

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

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

XQUERY doc('mydb/your_name')

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

person David Oguns    schedule 14.09.2012