xQuery на XML-файл с пространством имен - PullRequest
8 голосов
/ 10 марта 2011

Я использую eXist-DB для хранения документов XML.Вот пример XML-файла с информацией о пространстве имен:

<?xml version="1.0" encoding="utf-8"?>
<ClinicalDocument xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                  xmlns="urn:hl7-org:v3">
            <name>
                <family>Smith</family>
                <middle>Blade</middle>
                <first>John</first>
            </name>
            <name>
                <family>Frost</family>
                <middle>Bill</middle>
                <first>Conrad</first>
            </name>
</ClinicalDocument>

Запрос:

declare namespace xsd = "http://www.w3.org/2001/XMLSchema";
declare namespace xsi = "http://www.w3.org/2001/XMLSchema-instance";

for $x in doc("/db/HL7/cda2.xml")/ClinicalDocument/name
return $x/family

Я пытался объявить третье пространство имен в запросе, но оно не работает.

1 Ответ

10 голосов
/ 10 марта 2011

Третий атрибут пространства имен (xmlns = "urn: hl7-org: v3") связывает пространство имен по умолчанию.

Синтаксис для определения пространства имен по умолчанию для элементов в XQuery:

declare default element namespace "urn:hl7-org:v3";

Однако, переопределение пространства имен элемента по умолчанию не позволяет вашему запросу проверять узлы без пространства имен!

Лучший способ сделать это, возможно, привязать новый префикс к этому пространству имен:

declare namespace xsd = "http://www.w3.org/2001/XMLSchema";
declare namespace xsi = "http://www.w3.org/2001/XMLSchema-instance";
declare namespace h17 = "urn:h17-org:v3";

for $x in doc("/db/HL7/cda2.xml")/h17:ClinicalDocument/h17:name
return $x/h17:family
...