1

我已经看到 JSONiq 查询语言也支持处理 XM 的声明,但我发现的唯一示例是 JSONiq Wikipedia 文章。看起来 XML 处理只能通过“JSONiq 对 XQuery 的扩展”进行,但这与 JSONiq 不同,不是吗?JSONiq规范不包含 XML 语法,所以应该禁止?

4

1 回答 1

1

核心 JSONiq 语言仅支持 JSON,同样核心 XQuery 语言仅支持 XML。但是,有很多人希望在同一个程序中同时查询 XML 和 JSON,例如将一个转换为另一个。这就是为什么有扩展(两种方式)。我会说它们是可选的(实际上是鼓励的),而不是被禁止。

如果数据是 JSON 和 XML 的混合体,那么您可以使用“JSONiq 对 XQuery 的扩展”或“XQuery 对 JSONiq 的扩展”。差异很小,并且围绕着方便。在功能方面,两者是等价的。

此处全面记录了确切的差异

JSONiq 的完整语法、XQuery 扩展甚至更新和脚本都可以在此处获得。

如果有很多 JSON 和一些 XML,那么“JSONiq 的“XQuery 扩展”就更合适了:您可以用点查询 JSON,字符串中的转义是用反斜杠完成的,并且可以识别像null,true和这样的文字,但是false对 XML 名称的任何 XPath 名称查询都必须以 ./ 为前缀(./foo而不仅仅是foo)等。

如果有很多 XML 和一些 JSON,那么“JSONiq 对 XQuery 的扩展”就更合适了。恰恰相反:支持精确的、符合 W3C 的 XPath 语法,并使用 & 符号进行字符串转义,但例如布尔值和空值必须写为true(), false()null()以免干扰 XPath。

Zorba引擎支持这两种变体,您可以使用xquery version "3.0"jsoniq version "1.0"在查询的标题中进行切换,无需进一步配置:如果您使用 JSONiq,XQuery 扩展也始终可用,如果您使用 XQuery,JSONiq 扩展始终可用。

如果不存在标头,则扩展名.xq.jq用于推断所使用的语言。

JSONiq 处理器是否支持 XQuery 扩展由软件提供商决定。一般来说,如果 JSONiq 引擎的实现者有资源,我们鼓励他们支持 XQuery 扩展。想要保持非常轻量级引擎的提供商将坚持使用核心 JSONiq。

反过来说,使用 JSONiq 扩展来扩展现有的 XQuery 引擎非常容易:当我们在 Zorba 中开始支持 JSON 时这样做时,我们只花了几天时间,因为 JSON 数据模型非常简单。Jonathan Robie 在Youtube上有一个关于这个话题的分享经验。

于 2019-09-24T13:39:12.310 回答