如何使用REST API在exists-db中调用自定义xquery函数? 是否可以在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()]
感谢您的帮助。
答案 0 :(得分:2)
您的XQuery中存在语法错误:
local:toto()
的函数。每个函数都必须具有不同的名称。}
应为};
。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