JSONiq 是否支持处理 XML?

Does JSONiq support processing XML?

我看到过 JSONiq 查询语言也支持处理 XM 的说法,但我找到的唯一示例是在 JSONiq 维基百科文章中。看起来 XML 处理只能使用 "JSONiq extension to XQuery" 但这与 JSONiq 不同,不是吗? JSONiq specification 不包含 XML 语法,所以应该被禁止?

核心JSONiq语言只支持JSON,同理核心XQuery语言只支持XML。但是,有很多人想在同一个程序中同时查询 XML 和 JSON,例如将一个转换为另一个。这就是为什么有扩展(双向)的原因。与其说是禁止,不如说它们是可选的(实际上是鼓励的)。

如果数据是 JSON 和 XML 的混合,那么您可以使用 "JSONiq extension to XQuery" 或 "XQuery extension to JSONiq." 差异很小,主要是为了方便. Feature-wise,两者等价。

确切的差异已全面记录here

包含 JSONiq、XQuery 扩展甚至更新和脚本的完整语法可用 here

如果有很多 JSON 和一点 XML,那么 "the "XQuery extension to JSONiq" 就更合适了:你可以查询 JSON 带点,字符串中的转义是用反斜杠完成的,并且可以识别 nulltruefalse 等文字,但是 XML 名称上的任何 XPath 名称查询必须以 ./ 为前缀(./foo 而不仅仅是 foo),等等

如果有很多XML和一点JSON,那么"JSONiq extension to XQuery"就足够了。恰恰相反:支持精确的、符合 W3C 的 XPath 语法,并使用 & 符号转义字符串,但例如布尔值和空值必须写成 true()false()null() 才能不干扰 XPath。

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

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

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

相反,使用 JSONiq 扩展扩展现有的 XQuery 引擎非常容易:当我们在开始支持 JSON 时在 Zorba 中这样做时,我们只花了一些时间天,因为 JSON 数据模型非常简单。乔纳森·罗比 (Jonathan Robie) 在 Youtube.

上发表了关于此主题的经验分享。