На самом деле существует простой способ сделать это, используя URI-лексику MarkLogic и некоторые базовые манипуляции со строками. (Подробнее см. https://docs.marklogic.com/cts:uris).
Чтобы просмотреть все подкаталоги в данном каталоге в вашей базе данных MarkLogic, просто запустите приведенный ниже код в консоли запросов, с переменной $root-dir
, установленной в желаемый родительский каталог. Чтобы найти все каталоги в MarkLogic, начиная с корня, установите $root-dir
в "/"
.
В этом коде перечислены все вложенные подкаталоги рекурсивно , показывающие полную иерархию каталогов, начиная с указанного корневого каталога.
(: List all subdirectories present within a ML root directory :)
xquery version "1.0-ml";
let $root-dir := "/directory/"
let $uris := cts:uris((), (), cts:directory-query($root-dir, "infinity"))
let $subdirs :=
for $uri in $uris
return fn:string-join(fn:tokenize(fn:replace($uri, $root-dir, "/"), "/")[1 to fn:last() - 1], "/") || "/"
let $distinct-subdirs := fn:distinct-values($subdirs)
return $distinct-subdirs
Спасибо mblakele за начальный код, использованный здесь.