MarkLogic我不知道如何获得所有结果

时间:2017-12-22 22:10:15

标签: xquery marklogic

您好我正在尝试使用此代码读取模块:

(: Entry point - must be a read-only query. :)
xdmp:invoke(
'/path/mydocument.xqy',
(xs:QName('var1'), 'test',
xs:QName('var2'), "response"))

我是MarkLogic的新手,我使用groovy和api连接到它,但我也看到我可以用这个来调用模块而且确实我做了但它还给了我

your query returned an empty sequence

我想知道我是否可以查询xs:QName('var1'), 'test',使用通配符更改测试,或者如何从名为/path/mydocument.xqy的文件中获取所有信息?

我试着用这个:

xdmp:document-get("/path/mydocument.xqy)

但是它说找不到文件。虽然,如果我使用invoke我可以查询它,但我不知道我必须通过什么值。我想知道是否有类似sql使用%%或其他东西给我所有的数据。

2 个答案:

答案 0 :(得分:3)

回答第一个问题:"我正在尝试阅读模块"

  • 如果模块在数据库中,则必须查询模块所在的模块数据库。
  • 如果模块在文件系统中,那么您不能直接将其源作为文档访问,但您可以通过执行xdmp:filesystem-file()

简化:

使用服务器和REST客户端的默认配置,用户放置的模块位于"模块"数据库和用户放置的文档位于"文档"数据库。这意味着,如果您执行GET(读取"文档")而没有其他参数,它将返回来自"文档"数据库。假设您使用的是客户端和服务器的默认配置,这将导致您看到的行为。例如。您的模块代码在模块数据库中,按名称对其执行GET将搜索文档数据库并正确找不到它。

你没有提及,我不知道,正在使用的groovy库,但REST API本身和我熟悉的通用ML REST客户端库的所有实现都有覆盖的选项默认数据库与另一个。如果groovy库支持,那么指定"模块"您的查询的数据库,它应该返回模块文档。注意:content-typeapplication/text而不是text/xml

您可以绕过库简化测试工作,只需使用浏览器并尝试使用此类网址http://yourserver.com:8000/v1/documents?uri=/your/module.xqy&database=Modules

参考:https://docs.marklogic.com/REST/GET/v1/documents

对路径和服务器进行适当的更改以供您使用。

如果您仍然感到困惑,那么您应该从基本的MarkLogic教程开始,逐一完成它们。通过这样做,你很可能会更快地成功,然后直接进入你还不了解的编码。

DETAIL:

注意:默认行为是在使用Modules数据库进行GET调用时执行文档。因此,执行http://yourserver:8000/your/module.xqy的GET将执行它不返回其来源。

您会注意到REST API有一个uri查询参数。这是在/ v1 / documents上执行REST API代码,后者将读取由uri和数据库参数指定的文档并将其返回。

答案 1 :(得分:0)

我想我可以使用:

xdmp:invoke(/pview/get-pview-browse-profiles.xqy,
cts:and-query((
  cts:element-value-query(
    xs:QName("letter"),"*", "wildcarded"),
  cts:element-value-query(
    xs:QName("collection"),"*", "wildcarded"))))

虽然它没有返回任何东西