На моем недавно запущенном сайте я представляю документы, каждый из которых имеет свой номер 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.