Xquery 如何在MarkLogic中知道数据库中不同的名称空间?

Xquery 如何在MarkLogic中知道数据库中不同的名称空间?,xquery,marklogic,marklogic-9,Xquery,Marklogic,Marklogic 9,我在MarkLogic server中有一个数据库。数据库有许多集合。其中一些集合具有名称空间,而另一些集合具有不同的名称空间。要知道不同名称空间的查询是什么?我的目标是构建一个搜索应用程序,允许用户使用搜索栏并从最相关的集合返回文档。由于所有集合都有不同的xml结构,我还希望根据集合和搜索自定义文档的显示。获取数据库中唯一集合列表的一种方法是使用。您可以在搜索选项中指定集合约束,该约束将返回唯一的集合。下面的示例指定了一个不带前缀的集合约束,然后返回一个刻面值列表,其中包含为每个集合计算的文档

我在MarkLogic server中有一个数据库。数据库有许多集合。其中一些集合具有名称空间,而另一些集合具有不同的名称空间。要知道不同名称空间的查询是什么?我的目标是构建一个搜索应用程序,允许用户使用搜索栏并从最相关的集合返回文档。由于所有集合都有不同的xml结构,我还希望根据集合和搜索自定义文档的显示。

获取数据库中唯一集合列表的一种方法是使用。您可以在搜索选项中指定集合约束,该约束将返回唯一的集合。下面的示例指定了一个不带前缀的集合约束,然后返回一个刻面值列表,其中包含为每个集合计算的文档数

(: insert test documents here :)
xquery version "1.0-ml";
for $i in 0 to 5
  let $collection := "https://example.com/" || $i
  for $j in 0 to $i
    return xdmp:document-insert("/example-doc/" || $i || "-" || $j, <example/>, (), $collection);

(: Use search API to get collections as a facet :)
xquery version "1.0-ml";
import module namespace search = 
  "http://marklogic.com/appservices/search"
  at "/MarkLogic/appservices/search/search.xqy";

(: build a collection constraint facet :)
let $options := 
  <options xmlns="http://marklogic.com/appservices/search">
    <constraint name="collections">
      <collection prefix="" facet="true" />
    </constraint>
  </options>

(: return facets ordered by the number of documents in each collection :)
let $facets := search:search("", $options)/search:facet/search:facet-value
for $facet in $facets
   order by $facet/@count descending
   return (element collection {($facet/@name, $facet/@count)})
(:在此处插入测试文档:)
xquery版本“1.0-ml”;
从0到5美元兑换1美元
让$collection:=”https://example.com/“| |$i
从0到i的$j
返回xdmp:documentinsert(“/example doc/”| |$i | |“-”| |$j,(),$collection);
(:使用搜索API获取集合作为方面:)
xquery版本“1.0-ml”;
导入模块命名空间搜索=
"http://marklogic.com/appservices/search"
位于“/MarkLogic/appservices/search/search.xqy”;
(:生成集合约束方面:)
let$options:=
(:返回按每个集合中的文档数排序的面:)
让$facets:=search:search(“,$options)/search:facet/search:facet值
对于$facets中的$facets
按$facet/@count降序排序
返回(元素集合{($facet/@name,$facet/@count)})
返回:

<collection name="https://example.com/5" count="6"/>
<collection name="https://example.com/4" count="5"/>
<collection name="https://example.com/3" count="4"/>
<collection name="https://example.com/2" count="3"/>
<collection name="https://example.com/1" count="2"/>
<collection name="https://example.com/0" count="1"/>

然而,我不清楚您的问题,但如果您想从数据库中获取所有唯一名称空间,您可以运行:

fn:distinct-values(//namespace-uri())
若您希望从DB获取所有唯一的集合(在DB的集合词条上):

如果您只想对特定集合执行搜索:

在搜索中:搜索使用:

<additional-query>{cts:collection-query('collectionName')}</additional-query>
cts:collection-query(("reports", "analysis")))

对于基于MarkLogic构建的应用程序,我看到的最典型的情况是,它们要么对所有文档类型都有一个单一的搜索ui,要么对每个文档类型都有单独的搜索ui。您可以始终跨任何文档类型进行全文搜索,并且可以定义和显示方面,而不管它们是应用于所有文档还是仅应用于文档的子集。例如,集合名称可以是一个方面,但也可以有一个称为Keyword的方面,该方面仅适用于其中两个集合,另一个方面称为Company,该方面适用于其他三个集合

简言之,首先考虑您希望为最终用户提供什么功能,然后将如何在技术上实现这一功能作为第二步。我怀疑是否知道名称空间对搜索ui真正重要,而且可能只在索引级别重要


我不太清楚你想做什么。如果我理解正确,您需要文档集合和命名空间的所有排列的列表?您是在尝试查找所有集合的不同列表,还是在数据库中加载的文档中找到的命名空间的不同列表?根据您的描述,不清楚名称空间是否恰好用于集合名称,或者集合与节点的名称空间有何关系。如果您需要解析集合名称,那么如果您提供了一些示例集合名称以及您试图实现的目标,这将很有帮助。
cts:collection-query(("reports", "analysis")))