我需要在许多文件中进行搜索,但不想在查询中写出它们的名称。在我的例子中,我需要查询500个名称完全不同的XML 文件。那么,有没有什么办法。
我可以说:
for $x in doc("ALL XML files under a specific directory")
return $x/Something
我正在使用Ubuntu
和MarkLogic5
如果您的文档实际上位于“目录”中......(即它们是一种 URL 形式,例如“ /a/b/c.xml
”),那么您可以使用xdmp:directory()
http://docs.marklogic.com/xdmp:目录
for $x in xdmp:directory("/a/b/")
return $x/something
如果用户具有正确的权限,您可以从 Marklogic 查看文件系统。您可以通过这种方式将数据加载到 marklogic 中,但您不应该以这种方式查询数据。
这是一个示例,可能会帮助您找到所需的内容。
declare namespace dir = "http://marklogic.com/xdmp/directory";
for $file in xdmp:filesystem-directory("/home/user/desktop/xml/")/dir:entry
return xdmp:filesystem-file($file/dir:filename)
如果“目录”是指 Marklogic 目录,Mads 的回答是正确的。如果您的意思是文件系统路径,那么答案是在 Marklogic 可以处理文档之前,您需要将它们加载到数据库中。
为此,请查看 ML 机器(本地主机?)上的端口 8000,然后选择该页面上的“加载内容”选项。这将允许您选择一个文件系统目录来加载文档。
通过在加载之前更改“文档设置”,您还可以选择该文件系统路径的多少(如果有)应该作为 Markloic 中文档 URI 的一部分进行维护,并为所有加载的文档分配一个集合。我鼓励你做这两件事;它们将在加载后简化对所有这些文档的专门引用(完成后用于查询或删除。)
xdmp:directory()
加载文档后,您可以使用fn:collection()
或任何其他您喜欢的方法来查询它们。
要在特定目录中搜索文件,请查看 cts:directory-query() 和文档中的示例。