使用XPath a/b/c
,有没有办法找出元素c
上是否有元素范围索引?
答案 0 :(得分:2)
我也不确定我是否理解这个问题,但有几种方法可以确定是否存在范围索引。
您可以尝试使用https://docs.marklogic.com/cts:element-reference或https://docs.marklogic.com/cts:path-reference构建范围索引引用。如果范围索引不存在,则引用构造函数将抛出错误,您可以测试该错误。例如:
try { cts:element-reference(xs:QName('DNE')) }
catch($ex) {
if (not($ex/error:code = 'XDMP-ELEMRIDXNOTFOUND')) then xdmp:rethrow()
else xdmp:log(text { 'No element range index on DNE!' }) }
另一种方法是使用admin API:https://docs.marklogic.com/admin:database-get-range-element-indexes及其相关功能。您可能期望这比元素引用上的try-catch更有效,但它可能会更慢。但是,管理API允许相当容易地测试任意数据库配置。
答案 1 :(得分:0)
这听起来像是一个“反向”XPath选择,XPath类似于reverse query。给定一组与特定节点匹配的路径?对于元素范围索引,它非常直接地匹配本地名称,名称空间和类型。与路径或字段匹配更复杂。
一个想法:路径匹配是否可以通过为每个路径设置一个xsl:template match="path"
的动态XSLT样式表并转换节点的父文档来完成?有更简单的方法吗?
答案 2 :(得分:-1)
您问题的简单答案是:如果您没有配置元素范围索引,那么您就没有。您可以查看数据库配置,以查看是否创建了元素范围索引或以您关注的元素结尾的路径索引。
我怀疑你可能会问一个不同的问题,但我不确定它是什么。你为什么想知道?