Запуск XQuery в oXygen: нет доступа к узлам внутри узла документа

Я хочу написать запрос, который возвращает определенный элемент в XML-документе, но когда я использую выражение пути для возврата элемента в документе (то есть за пределами узла документа), он всегда возвращает пустую последовательность.

Вот несколько первых строк XML, которые я хочу запросить:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-model href="http://www.tei-c.org/release/xml/tei/custom/schema/relaxng/tei_all.rng" type="application/xml" schematypens="http://relaxng.org/ns/structure/1.0"?>
<?xml-model href="http://www.tei-c.org/release/xml/tei/custom/schema/relaxng/tei_all.rng" type="application/xml"
    schematypens="http://purl.oclc.org/dsdl/schematron"?>
<TEI xmlns="http://www.tei-c.org/ns/1.0">
   <teiHeader>
      <fileDesc>
         <titleStmt>
            <title>LMW Day Book, pp. 160-161</title>

Я могу запускать запросы на узлах документов. Например, следующее возвращает узлы документа в обратном алфавитном порядке:

for $file in collection("/db/apps/Step3_LMWdbk_Jana's_Files")
order by $file descending
return $file

Я также могу использовать функцию doc () для возврата одного узла документа. Однако я не могу использовать выражения пути для возврата узлов в пределах узла документа. Например, следующее возвращает пустую последовательность:

let $title := doc("/db/apps/Step3_LMWdbk_Jana's_Files")/TEI/teiHeader/fileDesc/titleStmt/title
return $title

Что я исключил:

Для дальнейшего тестирования я написал еще несколько запросов, в том числе один для доступа к самому внешнему элементу (то есть doc(...)/TEI) и один для доступа ко всем элементам (то есть doc(...)//cell): все они вернули пустую последовательность. Это говорит о том, что ошибки в выражениях пути не являются основной проблемой.

Я запускаю XQuery в редакторе XML oXygen. Я подключил базу данных eXist к oXygen и использую механизм XQuery, предлагаемый базой данных eXist. Я проверил, что я подключен к eXist, и что мой сценарий преобразования использует eXist в качестве преобразователя.


person Ethan Powell    schedule 24.06.2017    source источник
comment
Вы должны оставить свой отзыв на ответ ниже ...   -  person Sorin Adrian Carbunaru    schedule 04.07.2017


Ответы (1)


Обратите внимание, что документ имеет пространство имен по умолчанию <TEI xmlns="http://www.tei-c.org/ns/1.0">, поэтому перед запросом укажите declare default element namespace "http://www.tei-c.org/ns/1.0". Поскольку вы не показываете весь документ, могут использоваться другие пространства имен.

person chrisis    schedule 24.06.2017
comment
Согласен, что это, скорее всего, проблема с пространством имен. Другой подход - объявить пространство имен с помощью declare namespace tei="http://www.tei-c.org/ns/1.0"; и добавить префикс пространства имен tei к элементам в выражении пути, например: /tei:TEI/tei:teiHeader/tei:fileDesc/tei:titleStmt/tei:title. - person Joe Wicentowski; 26.06.2017