我在变量 $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"]
的文档。 .此语法对于在集合中导航文档到文档是否正确?
非常感谢。
最佳答案
在文档节点的集合或序列中,您没有任何 sibling , sibling 仅存在于每个文档树中,因此我认为您只需要以下形式的位置访问
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 数据库中的集合。
关于xpath 在同级集合中导航文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57537549/