eXistdb JSON 序列化

eXistdb JSON serialization

我已经针对 http://www.w3schools.com/xsl/books.xml

创建了一个 XQuery
xquery version "3.0";
for $x in collection("/db/books")//book
return 
    <book title="{$x/title}">
    {$x//author}
    </book>

如果我在 eXistdb 的 eXide 中评估它,我会在预览窗格中得到合理的输出。

<book title="Everyday Italian">
   <author>Giada De Laurentiis</author>
etc.

如果我尝试 "run" 它,我在网络浏览器中收到以下错误:

This page contains the following errors:

error on line 4 at column 1: Extra content at the end of the document
Below is a rendering of the page up to the first error.

Giada De Laurentiis

我想也许我应该把它序列化为JSON。基于对 http://exist-db.org/exist/apps/wiki/blogs/eXist/JSONSerializer 的快速阅读,我在 xquery 版本行之后添加了以下两行:

declare namespace json="http://www.json.org";
declare option exist:serialize "method=json media-type=text/javascript";

但我得到了同样可接受的 xml 预览结果和同样的浏览器错误。

如何在 Web 浏览器中以 XML 或 JSON 的形式获取输出?

我查看了 ,但没有看到如何将其用作起点。

需要一个顶级标签和一些额外的花括号:

xquery version "3.0";
declare namespace json="http://www.json.org";
declare option exist:serialize "method=json media-type=text/javascript";
<result> 
{for $x in collection("/db/books")//book
return 
    <book title="{$x/title}">
    {$x//author}
    </book>
}
</result>

或者,对于格式良好的 XML 序列化:

xquery version "3.0";
<result> 
{for $x in collection("/db/books")//book
return 
    <book title="{$x/title}">
    {$x//author}
    </book>
}
</result>

来源:http://edutechwiki.unige.ch/en/XQuery_tutorial_-_basics

很高兴您发现最初的问题是浏览器需要 well-formed XML,而 eXide 很乐意向您显示任意节点。

关于 JSON 序列化的主题,简要地(我在 phone 上),请参阅标题为 "Serialization" 的部分中的 http://exist-db.org/exist/apps/wiki/blogs/eXist/XQuery31。确保您是 运行 eXist 3.0 RC1。