Xquery / eXist-db - перебирает коллекцию +/- 3 позиции из текущего документа - PullRequest
0 голосов
/ 11 октября 2018

В 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 голосов
/ 11 октября 2018

Если бы это был список строк $ list, а "текущая строка" - это $ s, то я бы сделал

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

Я не уверен, является ли тот факт, что у вас есть списокдокументы (а не строки) изменяют это.

...