Xquery / eXist-db-迭代集合中当前文档的+/- 3个位置

时间:2018-10-10 23:10:06

标签: xquery exist-db

在eXist-db中,/db/apps/foo/resources/documents中有数百个文档,如下所示:

...
BNF9992-J305-1.xml
BNF9992-J305-5.xml
BNF9992-J308-9.xml
BNF9992-J310-8.xml
BNF9992-J311-1.xml
BNF9992-J312-6.xml
BNF9992-J312-7.xml
BNF9992-J315-9.xml
BNF9992-J316-2.xml
BNF9992-J317-2.xml
BNF9992-J319-3.xml
...

想象一下,我想向用户显示在特定文档之前和之后出现的3个文档的列表(基于字母数字排序)。因此,我的“当前文档”为BNF9992-J312-7.xml,我想向用户显示以下内容:

BNF9992-J310-8.xml
BNF9992-J311-1.xml
BNF9992-J312-6.xml
BNF9992-J312-7.xml (current document)
BNF9992-J315-9.xml
BNF9992-J316-2.xml
BNF9992-J317-2.xml

Xquery 3.1中是否有一个函数/方法,用于在检索文档列表后向上/向下迭代文档列表。我最能做的就是从集合中简单地检索文档名称:

 for $resource in collection("/db/apps/foo/resources/documents")
 let $uri := base-uri($resource)
 return util:unescape-uri(replace($uri, ".+/(.+)$","$1"), "UTF-8")

但是我不知道如何在给定文档中对列表进行上下迭代。

也许将列表写入节点,然后将公式应用于节点序数?

非常感谢。

1 个答案:

答案 0 :(得分:2)

如果这是字符串列表$ list,而“当前字符串”是$ s,那么我会这样做

let $i := index-of($list, $s)
return subsequence($list, $i - 3, 7)

我不确定您拥有文档列表(而不是字符串)的事实是否会改变这一点。