Поиск в массиве и объектах в JSONiq - PullRequest
0 голосов
/ 08 апреля 2020

В настоящее время я работаю над улучшением JSON возможностей запросов с помощью Brackit [1] и [2], который является движком XQuery с дополнительными массивами и «записями». Сейчас я в основном следую тому же XDM, что и JSONiq, но, к сожалению, я не эксперт по XQuery. Полагаю, я более или менее перенял проект у Себастьяна и особенно добавил временные улучшения.

Brackit использует оператор разыменования => для записей / объектов, чтобы получить значение для имени.

Кроме того, он использует [[expr()]] для поиска по индексу массива, я полагаю, точно так же, как чистая спецификация JSONiq.

Я уверен, что у вас есть веские причины вместо этого делать вызовы функции dynamici c, поэтому я мог бы должен изменить это. Тем не менее, я считаю, что оператор разыменования может работать во всех случаях, что, на мой взгляд, является более приятным синтаксисом.

Я думаю, что это идеальное решение - иметь компилятор запросов для полуструктурированных данных с проверенной оптимизацией для использования. в хранилищах данных: 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

1 Ответ

0 голосов
/ 16 апреля 2020

Спасибо за ваш вопрос, Йоханнес.

Поиск массивов и объектов с динамическими вызовами функций c был представлен в очень ранних версиях JSONiq, который начинался как расширение XQuery. В разработке языков принято пытаться повторно использовать существующий механизм на ранних этапах исследования, прежде чем расширять модель данных и синтаксис.

Поскольку объекты и массивы можно рассматривать как «экстенсиональные функции», которые явно перечисляют ввод-вывод пары, (ab) с использованием динамических вызовов функций c для поиска объектов и массивов вполне естественно. Этот подход был также использован в XQuery 3.1.

Расширения Syntacti c появились позже. В синтаксисе «чистого JSONiq» мы выбрали .Expr для объектов и [], а также [[Expr]] для массивов (двойной [[]], чтобы не путать с предикатами). В XQuery 3.1 также добавлен удобный синтаксис с ? как для объектов, так и для массивов.

Для выражений FLWOR я рекомендую изучить Rumble , который в значительной степени уже работает с конвейерами. Бумага здесь .

...