在XQuery中,使用eXist,如何获取当前集合的子集合? 问题

在XQuery中,使用eXist,如何获取当前集合的子集合? 问题,xquery,exist-db,Xquery,Exist Db,我有一个由eXist通过restapi执行的查询,它被发布到它需要运行的集合,例如/db/foo或/db/bar。在查询中,我想获取当前集合的子集合。也就是说:如果发布在/db/foo上,我希望查询返回xmldb:get子集合('/db/foo')将返回的内容;如果发布在/db/bar上,我希望查询返回xmldb:get子集合('/db/bar')将返回的内容。但当然,我不希望在查询中硬编码当前集合的路径 我试过的 xmldb:get child collection('.'),运气不好,不被

我有一个由eXist通过restapi执行的查询,它被发布到它需要运行的集合,例如
/db/foo
/db/bar
。在查询中,我想获取当前集合的子集合。也就是说:如果发布在
/db/foo
上,我希望查询返回
xmldb:get子集合('/db/foo')
将返回的内容;如果发布在
/db/bar
上,我希望查询返回
xmldb:get子集合('/db/bar')
将返回的内容。但当然,我不希望在查询中硬编码当前集合的路径

我试过的
  • xmldb:get child collection('.')
    ,运气不好,
    不被eXist理解为“当前集合”
  • 查找返回当前集合路径的,如
    pwd
    将在shell中,但我找不到

对于RESTAPI,您可以使用
请求:get-path-info()
获取“当前集合”的路径。例如:

  • 如果您正在执行GET或POST to
    http://www.my-site.com/exist/rest/db/my-collection
  • request:get-path-info()
    将返回
    /db/my collection
    ,这正是您感兴趣的路径部分

我目前无法测试这些,但您是否查看了uu:escape-collection-path()和uu:unescape-collection-path()是否默认为当前集合?主题:父-集合()?或者更少的特定于exist的基本uri($n as node())(通过字符串操作提取集合的名称)?@C.M.Sperberg-McQueen感谢您的参与。我尝试了
base-uri()
返回
错误:XPDY0002:上下文序列为空且未指定参数[在第1行第1列]
,并且我没有看到现有文档中列出的其他3个函数:
uu:escape-collection-path()
uu:unescape-collection-path()
主题:parent-collection()
。我遗漏了什么吗?您需要将节点传递给基uri——如果您在集合中选择任意节点(例如,通过
让$e:=/*[1]
)并请求其基uri,您应该会得到更好的结果。我通过单击页面上的浏览找到的其他功能。也许它们在eXist 2.0中,但不是您正在运行的eXist版本?啊哈。在eXist站点上进一步漫游导致并发现了一个名为
util:collection name
的函数,该函数将节点作为参数并返回包含该节点文档的集合的名称。@C.M.Sperberg-McQueen好主意:
util:collection name((/*)[1])
有效,除非当前集合不包含任何文档。在这种情况下,(a)如果它包含带有文档的集合,则返回其中一个集合的路径,这是不正确的;(b)如果它不包含任何集合,则返回空序列。这是一个局部解决方案,在某些情况下可能会起作用。您可以在Orbeon的eXist持久层的实际代码中看到一个例子。在嵌入的XQuery中查找
请求:get-path-info()