0

我目前正在使用 Brackit[1] 和 [2] 改进 JSON 查询功能,这是一个带有附加数组和“记录”的 XQuery 引擎。我现在基本上遵循与 JSONiq 使用相同的 XDM,但遗憾的是我不是 XQuery 专家。我想我或多或少地从 Sebastian 那里接手了这个项目,特别是添加了时间增强功能。

Brackit=>对记录/对象使用取消引用运算符来获取名称的值。

此外,它[[expr()]]用于数组索引查找,我想就像纯 JSONiq 规范一样。

我确定您有充分的理由改为执行动态函数调用,因此我可能不得不更改它。但是,我认为取消引用运算符可能适用于所有情况,我认为这是一种更好的语法。

我认为这个愿景非常棒,可以为半结构化数据提供一个经过验证的优化用于数据存储的查询编译器:http ://wwwlgis.informatik.uni-kl.de/cms/dbis/projects/brackit/mission/

Brackit 的决定性功能之一可能是面向集合处理的 FLOWR 表达式的流水线化。

亲切的问候

约翰内斯

[1] https://github.com/sirixdb/brackit

[2] http://wwwlgis.informatik.uni-kl.de/cms/fileadmin/publications/2013/Dissertation-Baechle.pdf

4

1 回答 1

0

谢谢你的问题,约翰内斯。

带有动态函数调用的数组和对象查找是在 JSONiq 的早期版本中引入的,它最初是作为 XQuery 的扩展。在扩展数据模型和语法之前,尝试在早期调查中重用现有机制是语言设计中的常见做法。

由于对象和数组可以被视为明确列出输入-输出对的“扩展函数”,因此(ab)使用动态函数调用进行对象和数组查找是很自然的。XQuery 3.1 也采用了这种方法。

语法扩展是后来出现的。在“纯 JSONiq”语法中,我们选择了.Expr对象和[]数组[[Expr]](双 精度[[]]以免与谓词混淆)。?XQuery 3.1 还为对象和数组添加了一种方便的语法。

对于 FLWOR 表达式,我建议查看Rumble,它几乎已经以这种方式完成了管道。论文在这里

于 2020-04-16T08:20:02.583 回答