首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSONiq和XQuery 3.1有什么区别?

JSONiq和XQuery 3.1有什么区别?
EN

Stack Overflow用户
提问于 2017-07-05 07:19:11
回答 2查看 1.1K关注 0票数 9

JSONiqXQuery 3.1都扩展了XQuery 3.0,支持JSON。

它们有何不同?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-05 07:19:11

整体动机

XQuery 3.1的目的是支持内存中的附加数据结构(映射、数组)。这些结构被映射到JSON进行输入和输出。自2017年3月以来,XQuery 3.1一直是W3C的推荐。

JSONiq的设计目标是在文档存储等设置中查询和更新JSON。它也是由XML查询工作组成员(免责声明:我是其中之一)在研究各种支持JSON的可能性时设计的。虽然这不是一项官方建议,但它是稳定和公开的。

数据模型

XQuery 3.1和JSONiq都用对象和数组扩展了数据模型,但是由于它们各自不同的关注点,它们以不同的方式进行扩展。总的来说,XQuery 3.1有一个更通用的数据模型,而JSONiq将其限制为镜像JSON。

在JSONiq中,对象键必须是字符串。在XQuery 3.1中,它们可以是任何原子值。

在JSONiq中,对象和数组中的值必须是单个项,尤其是数组与序列同态,即使它们是不同的。在XQuery 3.1中,对象和数组中的值可以是项的序列。

在JSONiq中,空用专用原子类型表示。在XQuery 3.1中,它们用空序列表示(这些序列是数据模型中接受的值)。

在XML3.1中,不通过填充数组或映射来复制值,后者支持在XQuery节点上构建索引。在JSONiq中,复制类似于XML构造函数,以确保严格的树语义。

施工

在JSONiq中构造对象和数组的语法是JSON的超集。

代码语言:javascript
复制
{ "foo" : [ 1 to 10 ] }

在XML3.1中,它类似于计算的XQuery节点构造函数:

代码语言:javascript
复制
map { "foo" : array { 1 to 10 } }

XQuery 3.1为数组提供了另一种语法,其中逗号分隔值的槽,以嵌套序列:

代码语言:javascript
复制
[ 1, (1 to 10), 11 ]

导航

XQuery 3.1使用函数调用在对象和数组中执行查找:

代码语言:javascript
复制
let $map := map { "foo" : "bar" }
return $map("foo")

let $array := array { 1, 2, 3 }
return $array(2)

它还使用?作为未引号名称和整数的快捷方式:

代码语言:javascript
复制
let $map := map { "foo" : "bar" }
return $map?foo

let $array := array { 1, 2, 3 }
return $array?2

let $array := array { 1, 2, 3 }
return $array?*

JSONiq (核心语言)使用点和方括号

代码语言:javascript
复制
let $map := { "foo" : "bar" }
return $map.foo

let $array := [ 1, 2, 3 ]
return $array[[2]]

let $array := [ 1, 2, 3 ]
return $array[]

(JSONiq也作为XQuery的扩展存在,它也重载函数调用语法)。

票数 11
EN

Stack Overflow用户

发布于 2021-03-27 22:33:33

我对XQuery 3.1如何支持Json感到有点失望。

基本要求之一是完全兼容Json语法,Json语法只喜欢XQuery兼容XML语法,JSONiq兼容Json语法,这样客户就可以从现有的Json文件开始。prolog是可以接受的,如果必须显式启用与Json兼容的语法.

不幸的是,在标准XQuery 3.1中,您必须为Json对象编写map{...},为Json值true编写true(),为Json值false编写false(),为Json值null编写()。将Json文件转换为Json模板将是痛苦的。

XQuery 3.1支持为纯文本模板穿插字符串。如果将Json文件转换为纯文本模板,则必须小心处理XQuery返回值,b/c它不关心Json数据类型和转义引号字符串。

结论

JSONiq (仅在Json上工作)和XQuery具有JSONiq扩展(同时处理JSONiq和Json)是将Json文件转换为Json模板的更好解决方案。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44919443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档