我在变量$data
中有1000个TEI文档的集合(请注意:每个文档中最高的节点是tei:TEI
)。
在Xpath中(在Xquery中),我可以使用以下命令输出所有@type="example"
文档:
let $coll := $data/tei:TEI[@type="example"]
return $coll
然后我可以使用以下方法从上述结果中进一步提取一个文档:
let $coll := $data/tei:TEI[@type="example"]
return $coll[@xml:id="TC0005"]
以上工作正常。
现在,我想获取某个文档之前和之后的文档,我认为可以通过preceding-sibling
/ following-sibling
完成:
let $coll := $data/tei:TEI[@type="example"]
return ($coll[@xml:id="TC0005"]/preceding-sibling[1],
$coll[@xml:id="TC0005"],
$coll[@xml:id="TC0005"]/following-sibling[1])
但是以上内容仅返回$coll[@xml:id="TC0005"]
的文档。
此语法对于在集合中的文档之间导航是正确的吗?
非常感谢。
答案 0 :(得分:2)
在文档节点的集合或序列中,您没有任何同级,同级仅存在于每个文档树中,因此我认为您只是希望采用以下形式的位置访问
let $examples := $data/tei:TEI[@type="example"]
for $example at $pos in $examples
where $example/@xml:id = 'TC0005'
return (
$examples[$pos - 1],
$example
$examples[$pos + 1]
)
这是基于我对XQuery和XPath序列的理解,希望它也适用于XQuery数据库中的集合。