xdmp:完整网址的目录

时间:2016-02-15 21:39:52

标签: marklogic marklogic-8

是否存在类似于xdmp:directory的内容,用于遍历具有不以“/”开头的uris的文档,即“http://something.other.com/documents/”?或者是否有某种方法可以获取文档uri与正则表达式匹配的所有文档?

例如,我想提取文件:

1 个答案:

答案 0 :(得分:5)

cts:uri-match应该是您正在寻找的。您可以在其中放置通配符表达式,例如cts:uri-match('/myDirectory/sub-dir/*.xml')。这将返回一个URI列表作为字符串,然后您可以通过执行类似的操作来获取这些文档(注意:fn:doc()可以采用零到多个uri')

let $uris as xs:string* := cts:uri-match("/you/directory/structure/*.xml")
let $docs as document-node()* := fn:docs($uris)
return $docs

根据Tyler的评论,如果可能,您应该在此搜索中传入cts:query限定符,例如:

let $uris as xs:string* := cts:uri-match("/your/directory/structure/*.xml", (), cts:directory-query("/your/directory/structure/", "infinity"))
let $docs as document-node()* := fn:docs($uris)
return $docs

在上面的示例中,cts:directory-query将范围缩小了一点,并注意到"无穷大"将所有子目录带到无限级别。

或者,如果它们都在您想要的目录(或多个目录)下,并且不需要通配符来进一步限定文件名等,那么您可以更好地使用:

cts:search(fn:collection(), cts:directory-query("/some-dir/", "infinity"))

但是如果你想使用正则表达式 - esque搜索,第一个选项肯定是你的朋友。

http://docs.marklogic.com/7.0/cts:uri-match