JSONiq是否支持处理XML?

时间:2019-09-24 08:36:36

标签: xml jsoniq

我已经看到JSONiq查询语言也支持处理XM的陈述,但是我发现的唯一示例是在JSONiq Wikipedia文章中。看起来只有使用“ XQuery的JSONiq扩展名”才可以进行XML处理,但这与JSONiq不同,不是吗? JSONiq specification不包含XML语法,因此应禁止使用它?

1 个答案:

答案 0 :(得分:1)

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

如果数据是JSON和XML的混合,则可以使用“ XQuery的JSONiq扩展名”或“ JSONiq的XQuery扩展名”。差异很小,并且围绕便利性。就功能而言,两者是等效的。

确切的差异已得到全面记录here

here提供了有关JSONiq,XQuery扩展甚至更新和脚本的完整语法。

如果有很多JSON和一些XML,那么“ JSONiq的XQuery扩展”就足够了:您可以使用点查询JSON,并使用反斜杠完成字符串转义,而{{{1 }},nulltrue被识别,但是对XML名称的任何XPath名称查询都必须以./(false而不是./foo)开头,等等。< / p>

如果有很多XML和一些JSON,那么“ XQuery的JSONiq扩展”就足够了。情况恰恰相反:支持确切的,符合W3C的XPath语法,并使用&符号对字符串进行转义,但例如,布尔值和null必须写为footrue()false()而不是干扰XPath。

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

如果不存在标题,则使用扩展名jsoniq version "1.0".xq来推断所使用的语言。

JSONiq处理器是否支持XQuery扩展是由软件提供商决定的。通常,我们鼓励JSONiq引擎的实现者在有资源的情况下支持XQuery扩展。希望保持非常轻量级引擎的提供程序将坚持使用核心JSONiq。

反之,用JSONiq扩展来扩展现有的XQuery引擎非常容易:当我们在开始支持JSON时在Zorba中这样做时,只花了几天时间,因为JSON数据模型是如此简单。乔纳森·罗比(Jonathan Robie)的一个演讲在Youtube上分享了有关此主题的经验。