2016-07-04 3 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) 
} ; 

는 XPath //a/b에 일치하는 항목을 포함하는 문서를 반환하는 빠른 방법은 cts:uris()를 사용하여, 거기 : 여기에 내가 현재 가지고 무엇인가? b 요소 후손이 a 요소가 문서를 검색하는 XPath 식 //a/b 유사한 기능 쿼리

+0

당신은 FLWOR을 제거하고 바로 사용할 수 있습니다'의 CTS를 : 검색 (// A/B, CTS를 : 및 쿼리 ((CTS를 : 수집 쿼리 ($ 수집))))/FN : 기지 - url()' –

답변

1

당신은 CTS를 구성 cts:element-query()를 사용할 수 있습니다. 정확히 동일하지는 않으며, 오히려 //a//b과 매우 유사하기 때문에 오탐 (false positive)을 줄 수도 있습니다. 그러나 받아 들일 수 있으며 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

관련 문제