где объявить функции xquery?

Возьмем самую простую функцию, которую я могу придумать, написанную на xquery:

declare function local:identityFunction($v as xs:integer) 
{
  return ($v)
}; 

Где мне это заявить?

Я пробую как exist-db, так и basex, но если я напишу его в окне обработчика запросов, они выдадут мне несколько ошибок (хотя нормальные запросы xqueries работают).

Например, basex жалуется на следующее сообщение: «Ожидается выражение».


person Kami    schedule 24.01.2013    source источник


Ответы (1)


Вы можете вставить их перед обычным выражением.

Ваша ошибка - использовать return, который здесь не нужен и не разрешен, поскольку функция xquery всегда возвращает последнее (и единственное) значение.

После точки с запятой следует поставить другое выражение.

Следовательно, это будет работать:

declare function local:identityFunction($v as xs:integer) 
{
  $v
};     
local:identityFunction(17)
person BeniBela    schedule 24.01.2013
comment
Большое тебе спасибо. Я знал, что это простая проблема. Могу я спросить, как базы данных xml управляют этими функциями? Вы можете хранить их в реляционных базах данных. То же самое и в этом случае? - person Kami; 24.01.2013
comment
На самом деле я ничего не знаю о базах данных .. Но в автономном xquery вы можете либо сохранить их в выражении, либо поместить их в модули для них. - person BeniBela; 24.01.2013
comment
Спасибо. Под модулем вы имеете в виду простой текстовый файл со всеми этими объявлениями? - person Kami; 24.01.2013
comment
Это немного сложнее. Вы начинаете, например, с module namespace test = "pseudo://test-module"; и вызовите все функции test:functionname, а затем вы можете использовать import module "pseudo://test-module"; для загрузки всех этих функций. (как он на самом деле находит файл с функциями, зависит от реализации) - person BeniBela; 24.01.2013
comment
В eXist-db вы можете хранить свои модули как файлы .xq, а затем вызывать их через браузер. Например, вы можете сохранить my-module.xq в /db/apps/my-app/my-module.xq, а затем вы можете выполнить этот запрос, обратившись к localhost: 8080 / exist / apps / my-app / my-module.xq. Есть несколько способов загрузить файлы в eXist-db. См. demo.exist-db.org/exist/apps/doc /uploading-files.xml. - person Joe Wicentowski; 25.01.2013