2017-09-06 2 views
1

활성 버전에 <associated-bundles> 요소가있는 문서에서만 marklogic 검색을 수행해야한다는 요구 사항이 있습니다.검색 API에서 'Exists()'동작에 대한 XQuery 구문이 필요합니다.

은 아래의 문서 구조

<document document-status='active'> 
<file> 
    <version id=1 version-status='active'> 
     <file-name/> 
     <associated-bundles> 
      <bundle doc-id="100082"></bundle> 
      <bundle doc-id="100083"></bundle> 
      <bundle doc-id="100000"></bundle> 
     </associated-bundles> 
     ... 
     <file-level-visits>3</file-level-visits> 
    </version> 
    <version id=2 version-status='archived'> 
     <file-name/> 
     <uploaded-by> 
     ... 
     <file-level-visits>2</file-level-visits> 
    </version> 
    <version id=3 version-status='archived'> 
     <file-name/> 
     <uploaded-by> 
     ... 
     <file-level-visits>4</file-level-visits> 
    </version> 
</file> 

문서 구조 위의 고려, 나는 그들의 활성 버전에서 <associated-bundles> 요소를 가지고있는 문서를 검색을 수행해야합니다.

참고 : 문서에는 활성 버전이 하나뿐입니다.

다음은 활성 파일 "version-status"내에서만 검색하는 쿼리입니다. 그러나이 외에도 'ifExists'에 <associated-bundles> 체크를 포함하고 싶습니다.

cts:element-query (xs:QName ("version"),cts:and-query ((cts:element-attribute-value-query(fn:QName("","version"), fn:QName("","version-status"), "active", ("lang=en"), 1) 
))); 

알려 주시기 바랍니다. 어떻게해야합니까?

+0

당신을 위해이 일을했던가? –

답변

3
당신은 문서에서 아래의 구문을 사용하여 cts:element-query()를 사용하여 요소의 존재를 확인할 수 있습니다

:

cts:element-query(xs:QName("my-element"),cts:and-query(())) 
+2

요즘에는 cts : and-query (())를 더 간단한 cts : true-query()로 대체 할 수 있습니다. – hunterhacker

+0

Jason에게 감사드립니다. 나는 진실 된 속임수를 전에 보았고 결코 내 마음을 초월하지 못했다. 어쩌면 작은 업데이트 요청을 문서에 대한 예제를 신선하게하기위한 것입니다. –

+0

방금 ​​업데이트를 받기 위해 문서 팀에 요청을 보냈습니다. 'cts : true-query'는 MarkLogic 8 이상에서 사용할 수 있습니다. –