使用javascript调用XQuery

使用javascript调用XQuery,javascript,xquery,xquery-3.0,Javascript,Xquery,Xquery 3.0,我想用JavaScript调用XQuery函数从XML文件检索数据。我可以调用这个简单的函数,它不从任何文件读取任何内容: <script type="text/javascript" src="mxqueryjs/mxqueryjs.nocache.js" ></script> <script type="application/xquery"> module namespace m = "http://www.xqi

我想用JavaScript调用XQuery函数从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>
返回的输出如预期的“Hello XQuery!”

现在我想导入一个数学模块,以便在从XML文件读取数据时使用它的一些函数

以下是我所拥有的,但数学模块未导入,并导致XQST0059错误,表示没有可加载命名空间为“”的模块的信息位置:


模块名称空间m=”http://www.xqib.org/module";
导入模块名称空间数学
= "http://www.w3.org/2005/xpath-functions/math";
声明函数m:GetNearestLocations($node as node()+){
let$message:=“你好,XQuery!”
返回$message
};
奇怪的是,当我使用Stylus Studio X15 Enterprise Suite测试导入的相同功能时

重要提示:在导入或不导入数学模块时,我使用的是相同的JavaScript调用,因此我的问题可能来自于此,但我不知道如何解决此问题

如果您也能给我一些指导,我可以将什么设置为m:GetNearestLocations的参数,以便我可以传递整数或字符串

非常感谢。

现在我想导入一个数学模块,以便在从XML文件读取数据时使用它的一些函数

听起来很合理。因此,您的第一个任务是为XQiB/MXQuery可以处理的名称空间找到数学模块的实现,将其安装到服务器上,并从模块导入语句中指向它,如XQiB网站上的中所示


或者,您也可以决定使用中的数学函数,MXQuery(以及XQiB)似乎本机支持这些函数。(我在中看到了这一点,但在中没有看到,因此我猜XQiB在理论上可能使用的是旧版本的MXQuery——但更可能的是,开发团队在时间上做的事情比其他地方已经记录的文档模块更好。)

您不需要在“path/to/some module.xqy”中使用
作为导入行的一部分?我不确定它的作用。我需要将模块下载到“path/to/some module.xqy”吗?如果是这样的话,我不知道如何下载。对,除非xqib中的数学模块有什么特别之处,否则我认为您需要实际引用一个XQY模块来导入它。关于最后一个问题:整数和字符串都是根类型
xs:anyAtomicType
。但是,如果您使用它,还可以传递其他类型。您可能需要使用操作符的
实例进行检查。我仍然会使用另一种方法:将您的通用函数设为私有函数,然后从另外两个函数调用它,分别使用字符串或整数作为输入?我必须安装这些功能吗?因为我认为这就是我的例子中缺少的。所谓“你的服务器”,我指的是通过HTTP为你的HTML文档和mxqueryjs/mxqueryjs.nocache.js提供服务的机器。“安装”是指“在服务器上的适当位置复制相关软件”。您想要运行的XQuery函数将在客户端中执行,但是是的,您必须在服务器上安装它们,以便客户端能够加载和运行它们——就像您必须在服务器上安装mxqueryjs.nocache.js以便让XQiB在浏览器中运行一样。(内置库——Zorba数学库可能就是其中之一——是在安装MXQuery时安装的。)
var output = xqib.call(
    'http://www.xqib.org/module',
    'GetNearestLocations',
    center.lat());
<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>