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 带点,字符串中的转义是用反斜杠完成的,并且可以识别 null
、true
和 false
等文字,但是 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.
上发表了关于此主题的经验分享。
我看到过 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 带点,字符串中的转义是用反斜杠完成的,并且可以识别 null
、true
和 false
等文字,但是 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.
上发表了关于此主题的经验分享。