MarkLogic:如何使用cts:uris搜索XPath

时间:2016-07-04 15:48:33

标签: xpath marklogic cts-search

是否可以使用cts:uris()搜索其文档包含某个XPath的uri?我认为它可能比从cts:search返回uris更快。这是我目前的情况:

declare function local:xpath-search($collection)  {
 for $i in cts:search(//a/b, cts:and-query((cts:collection-query($collection)) ))[1] return fn:base-uri($i) 
} ;

是否有更快捷的方式使用//a/b将包含匹配的文档返回到XPath cts:uris()

1 个答案:

答案 0 :(得分:1)

您可以使用cts:element-query()构建一个cts:query,其功能类似于XPath表达式//a/b,用于搜索具有a元素后代的b元素的文档。它不完全相同,可能会给你一些误报,因为它实际上更类似于//a//b,但可能是可接受的,可以与cts:uris()一起使用。

xquery version "1.0-ml";

declare function local:xpath-search($collection)  {
  cts:uris("", (), 
    cts:and-query(( 
      cts:collection-query($collection),
      cts:element-query(xs:QName("a"), 
        cts:element-query(xs:QName("b"), cts:and-query(()) ) ) )) )
};