2016-07-04 85 views
2

是否可以使用cts:uris()来搜索其文档包含特定XPath的uri?我认为它可能比从cts:search返回uris更快。以下是我目前有:MarkLogic:如何使用cts搜索XPath: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) 
} ; 

是否有返回包含匹配到的XPath //a/b文件更快的方法,使用cts:uris()

+0

你可以消除FLWOR,只需使用:'CTS:搜索(// A/B,CTS:和查询((CTS:收集查询($集合))))/ FN:碱基uri()' –

回答

1

您可以使用cts:element-query()构建CTS:查询功能类似于XPath表达式//a/b寻找有有b元素子孙a元素的文档。它不完全一样,并可能会给你一些误报,因为它更类似于//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(())))))) 
}; 
+0

如果你愿意创建一个路径范围索引,你可以用相同的方式替换嵌套的cts:element-queries,但是需要这些路径索引使得这种方法不那么灵活。 – grtjn