我申請的XQuery文件,兩個XML文件:XQuery/XPath:如何使用「|」從祖先節點檢索屬性值運營商?
-file1/snippet1-
<entry xml:id="SCHOM-2">
<form type="hyperlemma" xml:lang="cu">
<orth>абиѥ</orth>
</form>
<form type="lemma" xml:lang="cu">
<orth>абиѥ</orth>
<cit type="counterpart" xml:lang="grc">
<form type="hyperlemma" xml:lang="grc">
<orth>παραχρῆμα</orth>
</form>
<form type="lemma" xml:lang="grc">
<orth>παραχρῆμα</orth>
</form>
</cit>
</form>
</entry>
和 -file2/snippet2-
<entry xml:id="arg-3150">
<form type="hyperlemma" xml:lang="grc">
<orth>ἐξαυτῆς</orth>
</form>
<form type="lemma" xml:lang="grc">
<orth>ἐξαυτῆς</orth>
<cit type="translation" xml:lang="cu">
<form type="hyperlemma" xml:lang="cu">
<orth>абиѥ</orth>
</form>
<form type="lemma" xml:lang="cu">
<orth>абие</orth>
</form>
</cit>
</form>
</entry>
兩個片段具有相同的結構。如果我在任何<form type="hyperlemma">
內查找「абиѥ」,snippet1的路徑爲$file//entry/form[@type='hyperlemma']/orth
(path1),而snippet2的路徑爲$file//entry/form/cit/form[@type='hyperlemma']/orth
(path2)。
在XQuery文件,我有以下FLWOR表達式:
xquery version "3.0";
...
for $file in collection($collection_path),
$path_to_hyperlemma in $file//(entry | cit)/form[@type='hyperlemma']/orth [ft:query(., $searchphrase)]
let $entry_number := $path_to_hyperlemma/../../@xml:id
return
....
$entry_number
應該存儲的<entry xml:id="">
的屬性值。但我這樣做的方式(使用/../../
)只返回,當然,$file//entry/form[@type='hyperlemma']/orth
的屬性值。
是否可以將屬性值存儲在$entry_number
中,而不管它是否爲path1或path2?
另一個問題:我知道使用//
不是理想的性能明智。但是,如果我用絕對路徑替換//
,我似乎無法參考不同級別上的節點集。在這種情況下是否可以設置絕對路徑?
問題的癥結並不十分清楚,您能否顯示一小部分您正在查詢的XML樣本? – 2015-02-12 09:19:44
@IanRoberts:我添加了兩個XML片段並重新表述了我的問題。我希望現在越來越清晰了...... – smo 2015-02-12 11:54:00