我目前正在使用Brackit1和2改进JSON查询能力,这是一个带有额外数组和“记录”的XQuery引擎。我现在基本上使用与JSONiq相同的XQuery,但遗憾的是我不是XDM专家。我想我或多或少已经从Sebastian那里接管了这个项目,并特别增加了时间上的增强。
Brackit使用记录/对象的解引用运算符=>来获取名称的值。
另外,我猜就像纯粹的JSONiq规范一样,它使用[[expr()]]进行数组索引查找。
我相信你有很好的理由去做动态函数调用,所以我可能不得不改变它。然而,我认为取消引用操作符在所有情况下都可以工作,在我看来这是一个更好的语法。
我认为这个愿景很棒,因为有了一个针对半结构化数据的查询编译器,并且经过验证的优化可以在数据存储中使用:http://wwwlgis.informatik.uni-kl.de/cms/dbis/projects/brackit/mission/
Brackit的一个决定性特性可能是FLOWR表达式的流水线,用于面向集合的处理。
亲切的问候
约翰尼斯
2
发布于 2020-04-16 16:20:03
谢谢你的问题,约翰斯。
使用动态函数调用的数组和对象查找是在非常早的JSONiq版本中引入的,该版本最初是XQuery的扩展。在扩展数据模型和语法之前,尝试重用早期研究中的现有机制是语言设计中的常见做法。
由于对象和数组可以被视为显式列出输入-输出对的“扩展函数”,(Ab)使用动态函数调用进行对象和数组查找是非常自然的。在XQuery 3.1中也采用了这种方法。
句法扩展出现的时间较晚。在“纯JSONiq”语法中,我们为对象选择了.Expr,为数组选择了[]和[[Expr]] (为了不与谓词混淆,选择了两个[[]] )。XQuery 3.1还通过?为对象和数组添加了一种方便的语法。
对于FLWOR表达式,我建议查看Rumble,它几乎已经以这种方式处理管道了。这篇论文是here。
https://stackoverflow.com/questions/61096536
复制相似问题