Marklogic xs:QName的前缀中可以有一个通配符。我不知道';你不知道名称空间uri吗?

Marklogic xs:QName的前缀中可以有一个通配符。我不知道';你不知道名称空间uri吗?,marklogic,Marklogic,我正在尝试执行一个简单的查询,以获取包含元素localName的所有URI。但是,所有文档都是命名空间限定的,我不知道存在多少命名空间?有没有一种方法可以在前缀中提供通配符,或者以任何其他方式获取所有具有localName的文档,而不管它们的名称空间是什么 cts:element-value-match(xs:QName("*:localName"), "*", ("collation=http://marklogic.com/collation

我正在尝试执行一个简单的查询,以获取包含元素
localName
的所有URI。但是,所有文档都是命名空间限定的,我不知道存在多少命名空间?有没有一种方法可以在前缀中提供通配符,或者以任何其他方式获取所有具有localName的文档,而不管它们的名称空间是什么

cts:element-value-match(xs:QName("*:localName"), "*", ("collation=http://marklogic.com/collation/codepoint"))

这对我不起作用。

不,不可能用通配符构造QName

不幸的是,也没有可用的元素QName词典

您可以尝试进行一些采样,或者进行递归搜索,查找包含具有该本地名称的元素的文档,不包括您已经知道的元素的QName。大概是这样的:

xquery version "1.0-ml";

declare function local:reportNamespacesFor($localName, $known-namespaces) {
  let $namespace :=
    if ($known-namespaces)
    then cts:search(doc(), cts:not-query( $known-namespaces ! cts:element-query(fn:QName(., $localName), cts:true-query())) )[1]//*[local-name() eq $localName and not(namespace-uri() = $known-namespaces)]/namespace-uri()
    else doc()[//*[local-name() eq $localName]][1]//*[local-name() eq $localName]/namespace-uri()
  return
    if ($namespace)
    then local:reportNamespacesFor($localName, ($known-namespaces, $namespace))
    else distinct-values($known-namespaces)
};

let $localName := "localName"
let $namespaces := local:reportNamespacesFor($localName, ())
let $qnames := $namespaces ! fn:QName(., $localName)
let $count := xdmp:estimate(cts:search(doc(), cts:element-query($qnames, cts:true-query())))
return "There are "||$count||" documents that have the element "||$localName||" bound to the namespaces "||$namespaces