2013-04-26 76 views
0

我需要在许多文件中进行搜索,但不想在查询中写入它们的名称。在我的情况下,我需要查询500个XML文件,每个名称都不相同。那么,有没有办法。加载多个XML文件(MarkLogic)

我可以说:

for $x in doc("ALL XML files under a specific directory") 
return $x/Something 

我使用UbuntuMarkLogic5

回答

7

如果你的文件实际上是在“目录” ...(即它们是URL的形式像“ /a/b/c.xml“),那么你可以使用xdmp:directory()

http://docs.marklogic.com/xdmp:directory

for $x in xdmp:directory("https://stackoverflow.com/a/b/") 
return $x/something 
+0

感谢您的回复!但是当我在xdmp:目录(“/ home/user/desktop/xml /”)中尝试 返回$ x 我得到“您的查询返回了空序列” – Judavi 2013-04-26 03:52:01

+1

@Judavi这看起来像文件系统路径;是加载到Marklogic的文件吗? – 2013-04-26 09:51:33

1

如果用“directory”表示一个Marklogic目录,Mads的答案是正确的。如果你指的是文件系统路径,那么答案就是在Marklogic可以处理这些文档之前,你需要将它们加载到数据库中。

为此,请查看ML计算机上的端口8000(本地主机?)并选择该页面上的“加载内容”选项。这将允许你选择一个文件系统目录来加载文件。

通过在加载之前更改“文档设置”,还可以选择将该文件系统路径的多少(如果有)作为Markloic中docuemnt URI的一部分进行维护,并将集合分配给所有加载的文档。我鼓励你去做这两件事;一旦他们加载的时候将简化指的是所有这些文件专门的(无论是查询或缺失,一旦你与他们做。)

一旦文件被加载,您可以使用xdmp:directory()fn:collection()或任何询问他们你喜欢的其他方法。

0

从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)