在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")
但是我不知道如何在给定文档中对列表进行上下迭代。
也许将列表写入节点,然后将公式应用于节点序数?
非常感谢。
答案 0 :(得分:2)
如果这是字符串列表$ list,而“当前字符串”是$ s,那么我会这样做
let $i := index-of($list, $s)
return subsequence($list, $i - 3, 7)
我不确定您拥有文档列表(而不是字符串)的事实是否会改变这一点。