Вызов XQuery с помощью javascript

Я хочу вызвать функцию XQuery с помощью JavaScript для извлечения данных из XML-файла. Я могу вызвать эту простую функцию, которая ничего не читает ни из одного файла:

<script type="text/javascript" 
        src="mxqueryjs/mxqueryjs.nocache.js"
        ></script>
<script type="application/xquery">
   module namespace m = "http://www.xqib.org/module";

   declare function m:GetNearestLocations($node as node()+) {
     let $message := "Hello XQuery!"
     return $message

   };
</script>

С помощью этого JavaScript:

var output = xqib.call(
    'http://www.xqib.org/module',
    'GetNearestLocations',
    center.lat());

Возвращаемый результат, как и ожидалось, "Hello XQuery!".

Теперь я хочу импортировать математический модуль, чтобы использовать некоторые его функции при чтении данных из XML-файла.

Вот что у меня есть, но математический модуль не импортируется и вызывает ошибку XQST0059, говорящую о том, что нет информации о местоположении для загрузки модуля с пространством имен "http://www.w3.org/2005/xpath-functions/math":

<script type="text/javascript" 
        src="mxqueryjs/mxqueryjs.nocache.js"
        ></script>
<script type="application/xquery">
   module namespace m = "http://www.xqib.org/module";
   import module namespace math
     = "http://www.w3.org/2005/xpath-functions/math";

   declare function m:GetNearestLocations($node as node()+) {
     let $message := "Hello XQuery!"
     return $message

   };
</script>

Что странно, так это то, что когда я использую Stylus Studio X15 Entreprise Suite для тестирования той же функции, импорт работает.

Важно: я использую один и тот же вызов JavaScript, когда импортирую или не импортирую математический модуль, поэтому, возможно, моя проблема связана с этим, но я не знаю, как это исправить.

Если бы вы также могли немного подсказать мне, что я могу установить в качестве параметра для m: GetNearestLocations, чтобы я мог передавать его целыми числами или строками.

Большое спасибо.


person CharleyXIV    schedule 23.07.2013    source источник
comment
Вам не нужно at "path/to/some-module.xqy" как часть строки импорта?   -  person wst    schedule 23.07.2013
comment
Ну, я не уверен, что он делает. Нужно ли мне загружать модуль в path/to/some-module.xqy? Я не знаю, как его скачать, если это так.   -  person CharleyXIV    schedule 23.07.2013
comment
Правильно, если нет ничего особенного в математическом модуле в xqib, я думаю, вам нужно на самом деле ссылаться на модуль XQY, чтобы импортировать его. w3.org/TR/xquery/#doc-xquery-ModuleImport   -  person wst    schedule 23.07.2013
comment
Что касается вашего последнего вопроса: целые числа и строки имеют корневой тип xs:anyAtomicType. Однако, если вы используете это, вы также можете передать другие типы. Вы можете проверить это с помощью оператора instance of. Я бы все же использовал другой подход: сделать вашу общую функцию приватной и просто вызывать ее из двух других функций, ожидая на вход строку или целое число соответственно.   -  person dirkk    schedule 24.07.2013


Ответы (1)


Теперь я хочу импортировать математический модуль, чтобы использовать некоторые его функции при чтении данных из XML-файла.

Это звучит разумно. Поэтому вашей первой задачей будет найти реализацию математического модуля для пространства имен http://www.w3.org/2005/xpath-functions/math, который может обработать XQiB/MXQuery, установить его на свой сервер и указать на него из оператора импорта модуля, как показано в пример импорта модуля на веб-сайте XQiB.

Или же вы можете решить, что можете работать с математическими функциями в http://www.zorba-xquery.com/zorba/math-functions, которые MXQuery (и, следовательно, XQiB) поддерживают изначально. (Я вижу это в документации MXQuery, но не в документацию XQiB, поэтому я предполагаю, что существует теоретическая возможность того, что XQiB использует более старую версию MXQuery, но более вероятно, что команда разработчиков просто лучше что делать со своим временем, чем документировать модули, уже задокументированные в другом месте.)

person C. M. Sperberg-McQueen    schedule 24.07.2013
comment
Что вы подразумеваете под установкой на свой сервер? Я должен установить функции? Потому что я думаю, что это то, чего не хватает в моем случае. - person CharleyXIV; 26.07.2013
comment
Под «вашим сервером» я подразумеваю машину, которая обслуживает ваш HTML-документ и mxqueryjs/mxqueryjs.nocache.js по HTTP. Под «установкой» я подразумеваю «сделать копию соответствующего программного обеспечения в соответствующем месте на сервере». Функции XQuery, которые вы хотите запустить, будут выполняться на клиенте, но да, вам нужно установить их на свой сервер, чтобы клиент мог их загрузить и запустить — точно так же, как вы должны были установить mxqueryjs.nocache.js на свой сервер. server, чтобы заставить XQiB вообще работать в вашем браузере. (Встроенные библиотеки — одной из них может быть математическая библиотека Zorba — были установлены при установке MXQuery.) - person C. M. Sperberg-McQueen; 26.07.2013