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