2011-02-02 3 views
3

BaseX XML 데이터베이스에서 xquery를 사용하고 있습니다. 예를 들어, 데이터베이스에 다음 문서가 저장되어 있습니다 : doc1, doc2, doc3.xquery를 사용하여 데이터베이스에 문서가 있는지 찾는 방법

Xquery를 사용하여 주어진 문서의 존재 여부를 확인합니다. 나는 다음을 시도했다 :

xs : string external;로 변수 $ doc_name 선언;

반환 부울 ​​($의 DOC_NAME)

I는 다음과 같이 작동 할 것으로 예상

: 를 DOC_NAME = nodoc이

를 false를 반환하는 경우 DOC_NAME = DOC1 사실 를 반환한다면, 나는 예외를 참조하십시오

java.io.IOException : 3 행 7 열에서 중지되었습니다. [XPST0003] 예기치 않은 쿼리 종료 : 'boolean ("doc1").

또한

  • 가 반환 FN 복귀 시도 : ($의 DOC_NAME) 및

  • 반환 FN 존재 : 문서-가능 (doc_uri)

이 중 하나가 작동하지 않는에게 . 같은 끝의 쿼리 예외가 나타납니다. 문서의 존재 여부를 확인하는 올바른 방법은 무엇입니까?

감사합니다, 소니

+0

좋은 질문, +1. 완전하고 쉬운 솔루션에 대한 내 대답을 참조하십시오. –

답변

5

를 사용하여 표준의 XPath/XQuery 함수 doc-available(). 스펙에서

:

fn:doc-available($uri as xs:string?) as xs:boolean

요약 : 함수가 true를 돌려주는 경우와 함수 호출 fn:doc($uri) 문서 노드를 반환하는 경우에만.

$uri이 빈 시퀀스 인 경우이 함수는 false을 반환합니다.

fn:doc($uri)에 대한 호출이 문서 노드를 반환하면이 함수는 true을 반환합니다.

$urifn:doc 구현에서 적용한 규칙에 따라 유효한 URI가 아닌 경우 [err : FODC0005] 오류가 발생합니다.

그렇지 않으면 false을 반환합니다.

이 함수가 true을 반환하면 동일한 실행 범위 내에서 fn:doc($uri)을 호출하면 문서 노드를 반환해야합니다. 그러나 fn:doc 기능에 대해 비 안정적인 처리가 선택되면이 보증이 손실됩니다.

+0

예, 제 편집을 참조하십시오.나는 이것을 시도했다. return fn : doc-available (http://top.cs.vt.edu:8080/editionbuilder/feeds/feed_sony_dot_vibh_at_gmail_dot_com_feed4)은 false를 반환합니다. 그러나 문서가 지정된 URL에 있다는 것을 알 수 있습니다. – sony

+0

@sony : 프로세스에 'http :'프로토콜 사용을위한 충분한 권한이 있습니까? –

+1

@sony :'return'없이 시도하면 어떨까요? –

관련 문제