使用javascript调用XQuery

时间:2013-07-23 16:00:30

标签: 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.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来测试相同的功能时,导入工作正常。

重要提示:我在导入或不导入Math模块时使用相同的JavaScript调用,所以也许我的问题来自那里,但我不知道如何解决这个问题。

如果您还可以指导一下我可以设置为m:GetNearestLocations的参数,以便我可以传递整数或字符串

非常感谢。

1 个答案:

答案 0 :(得分:2)

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

这听起来很合理。因此,您的第一个任务是找到XQiB / MXQuery可以处理的命名空间http://www.w3.org/2005/xpath-functions/math的数学模块的实现,将其安装在您的服务器上,并从模块import语句指向它,如{{3在XQiB网站上。

或者,您可以决定使用the module import example中的数学函数,MXQuery(以及XQiB)似乎支持本机。 (我在http://www.zorba-xquery.com/zorba/math-functions中看到了这一点,但在the MXQuery documentation中没有看到,所以我猜XQiB使用旧版MXQuery的理论可能性 - 但开发团队更有可能拥有更好的东西与其他地方已经记录的文件模块有关的时间。)