2016-07-04 12 views
2

cts:uris()を使用して、特定のXPathが含まれているURIを検索することはできますか?私はそれがcts:searchからのurisを返すより速いかもしれないと思った。ここで私は、現在持っているものです。MarkLogic:cts:urisを使用してXPathを検索する方法

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) 
} ; 

cts:uris()を使用して、XPathの//a/bに試合を含むドキュメントを返すために迅速な方法はありますか? b要素の子孫を持つa要素を持っている文書を検索するXPath式//a/bと同様の機能クエリ:

+0

あなたはFLWORを排除し、単に使用することができますベース - : 'のCTS:検索(// A/B、CTS:とクエリ((CTS:コレクション - クエリ($コレクション))))/ FN url() ' –

答えて

1

あなたはCTSを構築するためにcts:element-query()を使用することができます。それはまったく同じではなく、実際には//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

関連する問題