Подпоследовательность XQuery обрабатывает список документов как «цикл» - PullRequest
0 голосов
/ 04 декабря 2018

На моем недавно запущенном сайте я представляю документы, каждый из которых имеет свой номер MS609-0001 ... MS609-3826.Когда я представляю документ, такой как MS609-0003, боковая панель должна показывать предыдущие / следующие 5 документов по порядку, предполагая начало с первого документа в буквенно-цифровом порядке.Но, глядя на http://medieval -inquisition.huma-num.fr / doc / MS609-0003 список документов выглядит следующим образом:

 MS609-0001 Arnald Garnier
 MS609-0002 Guilhem de Rosengue
 > MS609-0003 Hugo de Mamiros
 MS609-0004 P Lapassa senior
 MS609-0005 Guilhem de la Silva
 MS609-0006 Pons Rainart
 MS609-0007 B de Vasega
 MS609-0008 P de Vasega
 MS609-3824 Arnaut Bartholomieu
 MS609-3825 Arnaut Ademar
 MS609-3826 Arnaud Sabater

Очевидно, что код циклически возвращается по спискудокументов и идти до конца, чтобы получить достаточно для 10 документов.Он делает то же самое (в обратном порядке), когда вы смотрите в конец http://medieval -inquisition.huma-num.fr / doc / MS609-3825 .

XQuery для получения этих записейиспользует subsequence().

let $listlength := 10
let $docprefix := "MS609"

let $list := xmldb:get-child-resources($globalvar:URIdata)[starts-with(., $docprefix)]

let $i := index-of($list, "MS609-0003.xml")

(: $listlength should be an odd number to place the active doc in the middle :)
let $listlength := if ($listlength mod 2 = 0) then ($listlength + 1) else $listlength

(: reduce list to max ODD number requested :)
let $list := subsequence($list, $i - (($listlength - 1) div 2), $listlength)

for $x in $list

order by $x ascending

return $x

Я в недоумении относительно того, как оперативно предотвратить возврат кода в конец / начало списка.

Это XQuery 3.1под eXist-db 3.6.

...