从existDB请求JSON

时间:2017-06-03 17:34:33

标签: jquery json exist-db

我对eXistDB很新,但我正在尝试用它构建一个小应用程序。

我正在使用一个JavaScript示例,在需要时使用以下代码通过jQuery请求现有的JSON文件:

$.getJSON('path/to/file.json').
    done(function(data) {

        $.each(data, function(key, zone) {
            addRegion(zone, element);
        });
    });

只要存在JSON文件,无论eXistDB如何,这都有效。我现在想要的,不是加载现有的JSON文件,而是调用像app:getJSON这样的eXist函数,它返回一个动态生成的JSON对象。我在这里阅读了一些关于eXists JSON序列化程序http://exist-db.org/exist/apps/wiki/blogs/eXist/XQuery31并且我认为我将设法在XQuery函数中生成并返回一个JSON对象,但我不知道如何调用这样的函数通过我的JavaScript(或这里的JQuery)的URL。

我想要的解决方案看起来有点像这样:

Java脚本:

 $.getJSON('/app-getJSON?parameter1=wert1&parameter2=wert2').
    done(function(data) {

        $.each(data, function(key, zone) {
            addRegion(zone, element);
        });
    });

然后在我的app.xql中我希望有类似的东西:

declare function app:getJSON($node as node(), $model as map(*), $parameter1 as xs:string?, $parameter2 as xs:string?){
    (:here the JSON Object is generated from the XML collection and returned:)
};

所以问题归结为:是否可以通过URL访问xQuery函数,如果是,如何?如果没有,我还能如何通过JS / JQuery请求从我的XML文件生成的JSON数据?我知道这一切都很模糊,问题是我对eXistDB有多新,但是我找不到一个我能理解的类似例子。所以也许有人对我有一个想法,即使它只是一个“你应该真正读到这个,这个和这个”的第一个。 非常感谢。

1 个答案:

答案 0 :(得分:3)

为了创建一个返回JSON的服务,我建议创建一个独立的XQuery,例如getJSON.xq,并将其保存在您的应用程序中。 (您的示例app:getJSON()函数的签名表明您计划使用eXist的HTML模板工具,但该工具实际上是用于生成HTML。)您的getJSON.xq文件可能只是包含以下主要模块:

xquery version "3.1";

declare namespace output="http://www.w3.org/2010/xslt-xquery-serialization";

declare option output:method "json";
declare option output:media-type "application/json";

let $p1 := request:get-parameter('parameter1', ())
let $p2 := request:get-parameter('parameter2', ())
return
    map {
        "parameter1": $p1,
        "parameter2": $p2
    }

将此项保存到/db/apps/getJSON.xq这样的集合中,您就可以致电http://localhost:8080/exist/apps/myapp/getJSON.xq?parameter1=wert1&parameter2=wert2并获得以下回复:

{
    "parameter1" : "wert1",
    "parameter2" : "wert2"
}

注意:此代码假定为eXist v3.x,它增加了对XQuery 3.1的JSON支持的处理。早期版本的eXist可以序列化JSON,但是以特定于实现的方式。此处使用的request模块是特定于eXist的,因为没有广泛支持的跨平台模块用于接收HTTP请求;其他XQuery实现虽然有一些变体。