Xquery 如何从MarkLogic中的文档URI获取文档目录?

Xquery 如何从MarkLogic中的文档URI获取文档目录?,xquery,marklogic,Xquery,Marklogic,我有一个不同目录的URI列表。这是一种从MarkLogic中的URI获取所有不同目录的方法吗 xdmp:directory用于不同的目的 Example- let $uri := "/test/abc/somepath/abc.xml" Output should be- "/test/abc/somepath/" 有什么建议吗?这没有内置函数,但您可以通过几种不同的方式从URI解析目录值,具体取决于您希望的严格程度 fn:string-join(fn:tokenize('/test/abc

我有一个不同目录的URI列表。这是一种从MarkLogic中的URI获取所有不同目录的方法吗

xdmp:directory
用于不同的目的

Example- 
let $uri := "/test/abc/somepath/abc.xml"
Output should be- "/test/abc/somepath/"

有什么建议吗?

这没有内置函数,但您可以通过几种不同的方式从URI解析目录值,具体取决于您希望的严格程度

fn:string-join(fn:tokenize('/test/abc/somepath/abc.xml', '/')[1 to last()-1], '/')||'/'
或者如果您只想在字符串以
/
开头时进行匹配:

replace('/test/abc/somepath/abc.xml', '^((/[^/]+)*/)[^/]*$', '$1')

这没有内置函数,但您可以通过几种不同的方式从URI解析出目录值,具体取决于您希望的严格程度

fn:string-join(fn:tokenize('/test/abc/somepath/abc.xml', '/')[1 to last()-1], '/')||'/'
或者如果您只想在字符串以
/
开头时进行匹配:

replace('/test/abc/somepath/abc.xml', '^((/[^/]+)*/)[^/]*$', '$1')

有一个实用程序函数可以执行此操作:

import module namespace util="http://marklogic.com/xdmp/utilities" at "/MarkLogic/utilities.xqy";
util:basepath("/test/abc/somepath/abc.xml")

它使用了
fn:replace
加上一点关于边缘情况的逻辑。

有一个实用功能可以实现这一点:

import module namespace util="http://marklogic.com/xdmp/utilities" at "/MarkLogic/utilities.xqy";
util:basepath("/test/abc/somepath/abc.xml")

它使用了
fn:replace
加上一些围绕边缘案例的逻辑。

秘密未记录函数;)@姆霍尔斯特奇——谢谢你。这有助于:)秘密未记录函数;)@姆霍尔斯特奇——谢谢你。这很有帮助:)@wst——非常感谢。这对我来说是有道理的。我使用了
mholstege
@wst建议的inbuild
util:basepath
——非常感谢。这对我来说是有道理的。我使用了
mholstege
所建议的inbuild
util:basepath