集合名称作为谓词(即作为某种xpath过滤器)?

我有一个集合/db/apps/myfoo/data(在eXist-db 4.7中),其中/data包含几百个集合,如下所示:

/db/apps/myfoo/data/TC0001
/db/apps/myfoo/data/TC0002
/db/apps/myfoo/data/TC0003
/db/apps/myfoo/data/TC0004
/db/apps/myfoo/data/TC0005
etc.

每个集合都包含大量XML文档,每个XML文档的属性都@corresp类似@corresp="TC0001"

在我的Xquery模块中,我将数据收集加载到一个变量中

let $mydata := collection("/db/apps/myfoo/data") 

因为该data函数将以许多不同的方式访问整个集合。

某一时刻,我需要计算每个集合中的文档,因此我将添加一个谓词,例如:

let $ct := count($mydata//tei:TEI[@corresp eq "TC0001"])

但是,我想通过将集合作为谓词添加而不是强制在数千个不相关的文档中进行搜索来加快计数速度(如果可能)。据我了解,集合不是node那有可能吗?

这是伪代码的示例,其中TC0001是集合:

let $ct := count($mydata/TC0001/tei:TEI)

非常感谢。

亚当瑞特

您可以从节点使用获取文档的URI fn:document-uri(fn:root($node))

由此,您可以使用一些正则表达式来获取Collection URI,例如 fn:replace($doc-uri, "(.*)/.*", "$1")

然后,您可以在谓词比较中使用它。

例如:

let $mydata := collection("/db/apps/myfoo/data")
let $ct := count($mydata//tei:TEI[fn:replace(fn:document-uri(fn:root(.)), "(.*)/.*", "$1")  eq "my-sub-collection-name"])

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章