Вызов пользовательской функции 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:

  1. У вас есть две функции с именем local:toto(), Каждая функция должна иметь отдельное имя.
  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"))

Затем вы можете вызвать это через REST-сервер, используя URL-адрес, например:

  http://localhost:8080/exist/rest/db/ProjetXML/orange.xqy?name=carmen
Другие вопросы по тегам