2011-02-02 3 views
3

BaseX XMLデータベースでxqueryを使用しています。さて、私は私のデータベースに格納されている以下の文書を持っています:doc1、doc2、doc3。xqueryを使用してデータベースに文書が存在するかどうかを調べる方法

Xqueryとは、特定のドキュメントの存在を確認するために使用します。私は以下を試しました:

xs:string externalとして変数$ doc_nameを宣言します。

戻りブール($のdoc_name)

私は次のように動作するように期待

: をdoc_name = nodocが

をfalseを返す場合doc_name = DOC1は真 を返す場合でも、私は例外を参照してください。

java.io.IOException:3行目、7列目で停止しました: [XPST0003]予期しないクエリの終了: 'boolean( "doc1")'。

私もリターン

  • 戻りFNを試してみました:($のdoc_name)に存在し、

  • 戻りFN:DOC-利用可能(doc_uri)

これらはどちらか動作しません。 。同じ終わりのクエリ例外が表示されます。ドキュメントの存在をチェックする正しい方法は何ですか?

おかげで、 ソニー

+0

良い質問、+1。完全で簡単な解決策については私の答えを見てください。 –

答えて

5

は、標準のXPath/XQuery関数doc-available()を使用してください。

スペックから:

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

概要:関数は、関数呼び出しfn:doc($uri)は、文書ノードを返す場合にのみtrueを返します。

$uriが空のシーケンスの場合、この関数はfalseを返します。

fn:doc($uri)の呼び出しでドキュメントノードが返された場合、この関数はtrueを返します。

$urifn:docの実装で適用される規則に従って有効なURIでない場合、エラーが発生します[エラー: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'を使わないでしようとするとどうなりますか? –

関連する問題