1

それは私を夢中にさせています。

このクエリが機能しない理由を教えてください:

xquery version "3.0";
for $item in collection("openkernel/openehr_ehr/archetyped/")
let $uid:=$item//uid/value
where $uid="51160740-171e-487c-a04d-eae267f7079a"
return $item

愚かなことに違いない、私は知っている。//uid/value の前の二重スラッシュは、クエリ ジェネリックを使用するためです。

私が見つけようとしている XML ドキュメントは、このコレクションにあり、これは次のとおりです。

<openehr-ehr_rm-Composition.composition.v1 xmlns="http://rosa.openkernel/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://rosa.openkernel/ file:/openehr-ehr_rm-Composition.composition.v1.xsd">
<Composition archetype_id="openehr-ehr_rm-Composition.composition.v1">
    <archetype_id>
        <value>openehr-ehr_rm-Composition.composition.v1</value>
    </archetype_id>
    <category>
        <defining_code>
            <code_string>431</code_string>
            <terminology_id>
                <value>openehr</value>
            </terminology_id>
        </defining_code>
        <value>persistent</value>
    </category>
    <something>a composition</something>
    <uid>
        <value>0e15d0f2-0b59-4df7-88f8-27be87e1e2ac</value>
    </uid>
    <content archetype_id="openehr-ehr_rm-ADMIN_ENTRY.admin_entry.v1" archetype_node_id="at0002">
        <archetype_id>
            <value>openehr-ehr_rm-ADMIN_ENTRY.admin_entry.v1</value>
        </archetype_id>
        <an_item>nono</an_item>
        <an_other_item>an_other_item</an_other_item>
        <something>an admin_entry</something>
        <uid>
            <value>51160740-171e-487c-a04d-eae267f7079a</value>
        </uid>
    </content>
</Composition>
</openehr-ehr_rm-Composition.composition.v1>

ありがとう、どうもバート

4

3 に答える 3

2

名前空間を考慮する必要があります。 http://www.w3.org/TR/xquery/#id-default-namespaceを参照してください。

declare default element namespace "http://rosa.openkernel/";
于 2013-05-15T11:39:07.130 に答える
1

これは名前空間の問題です。

xquery version "3.0";
declare namespace rosa = "http://rosa.openkernel/";

for $item in collection("openkernel/openehr_ehr/archetyped/")
let $uid:=$item//rosa:uid/rosa:value
where $uid="51160740-171e-487c-a04d-eae267f7079a"
return $item

または、次を使用してデフォルトの名前空間を宣言することもできます

declare default element namespace "http://rosa.openkernel/";

これまでのコードを使用します。または、ワイルドカードを使用してすべての名前空間の要素<uid/>と要素を選択します。<value/>

let $uid:=$item//*:uid/*:value
于 2013-05-15T11:40:03.837 に答える