Вызов пользовательской функции xquery в eXist-db с использованием URL
Как вызвать пользовательскую функцию xquery в exist-db с помощью REST API? Можно ли иметь более 1 функции в файле 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()]
Ваша помощь ценится.
1 ответ
У вас есть синтаксические ошибки в вашем 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"))
Затем вы можете вызвать это через REST-сервер, используя URL-адрес, например:
http://localhost:8080/exist/rest/db/ProjetXML/orange.xqy?name=carmen