2017-12-31 9 views
1

REST APIを使用してexist-dbでカスタムxquery関数を呼び出す方法はありますか? xqueryファイルに複数の関数を含めることはできますか?urlを使用してeXist-dbでカスタムxquery関数を呼び出してください

declare function local:toto() as node() { 
    return doc("/db/ProjetXML/alice.xml")/raweb/identification/projectName) 
}; 

declare function local:pomme() as node() { 
    return doc("/db/ProjetXML/carmen.xml")/raweb/identification/projectSize); 
}; 

私が使用してそれを呼び出す場合:

http://localhost:8080/exist/rest/db/ProjetXML/orange.xqy?_query=local:toto() 

を私は次のエラーを取得する:

err:XPST0017 Call to undeclared function: local:toto [at line 1, column 1, source: local:toto()] 

あなたの助けが理解されます。

答えて

2

あなたのXQueryの構文エラーがあります。

  1. あなたはlocal:toto()という名前の2つの機能を持っています。各関数には別個の名前が必要です。
  2. 関数定義に続くセミコロンはありません。つまり、}};である必要があります。
  3. また、先のバインディングがないので、return式を削除する必要があります。

別のオプションは、例えば、入力ファイルをパラメータ化するために、次のようになります。

import module namespace request="http://exist-db.org/xquery/request"; 

declare function local:toto($name as xs:string) as node() { 
    let $doc := 
     if($name eq "carmen")then 
     doc("/db/ProjetXML/carmen.xml") 
     else 
     doc("/db/ProjetXML/alice.xml") 
    return 
    $doc/raweb/identification/projectName); 
}; 

local:toto(request:get-parameter("name", "alice")) 

あなたは、その後のようなURLを使用してRESTサーバーを経由して、これを呼び出すことができます:こんにちは

http://localhost:8080/exist/rest/db/ProjetXML/orange.xqy?name=carmen 
+0

、私はしました質問で構文エラーを修正しましたが、本当の問題はURLを使って与えられたxquery関数を呼び出すことです。 – learn26

+0

私はREST経由で呼び出す方法を示すために私の答えを変更しました。 – adamretter

関連する問題