在我的文档中,有两个元素(< a> 和< b> ),其中存在范围索引(相同类型)。我想要所有那些< a> 和< b> 的值相同的文档。我了解使用cts:element-value-co-occurrences()
我可以从每个片段中获取< a> 和< b> 的值对并比较这些值。但是,如何返回找到匹配的片段?或者有更简单的方法吗?我想要的只是要使用的范围索引。
答案 0 :(得分:3)
co-occurences函数返回这两个元素的所有现有(片段内)值组合的列表。如果您只是查找元素a的值等于元素b的值的所有文档,您可以执行以下操作:
for $v in cts:element-values(xs:QName("a"))
return
cts:search(
collection(),
cts:and-query((
cts:element-value-query(xs:Qname("a"), $v),
cts:element-value-query(xs:Qname("b"), $v)
))
)
或者您可以使用cts:uris
代替cts:search
来查找这些文档的数据库uris ..
<强>增加:强>
以下评论中的@mblakele意味着:
let $query :=
cts:or-query(
for $v in cts:element-values(xs:QName("a"))
return
cts:and-query((
cts:element-value-query(xs:Qname("a"), $v),
cts:element-value-query(xs:Qname("b"), $v)
))
)
return
cts:search(
collection(),
$query
)
这使您免于执行cts:分别搜索每个值,并且可能会更快地执行..
HTH!