Jump to content

JSONiq

JSONiq
Парадигма декларативный , функциональный , модульный
Дисциплина набора текста динамичный , сильный
ТЫ Кросс-платформенный
Расширения имен файлов .jq, .jqy
Веб-сайт www .jsoniq .org
Под влиянием
XQuery , SQL

JSONiq — это язык запросов и функционального программирования , предназначенный для декларативного запроса и преобразования коллекций иерархических и разнородных данных в формате JSON , XML , а также неструктурированных текстовых данных.

JSONiq — это открытая спецификация , опубликованная под лицензией Creative Commons Attribution- ShareAlike 3.0. Он основан на языке XQuery , с которым использует одни и те же основные выражения и операции с атомарными типами . JSONiq поставляется в двух синтаксических вариантах, которые изначально поддерживают JSON и XML.

  1. Синтаксис JSONiq (расширенный набор JSON) расширен поддержкой XML посредством совместимого подмножества XQuery.
  2. Синтаксис XQuery (встроенная поддержка XML) дополнен поддержкой JSON через совместимое подмножество (расширение JSONiq для XQuery) вышеуказанного синтаксиса JSONiq.

JSONiq в первую очередь предоставляет средства для извлечения и преобразования данных из документов JSON или любого источника данных, который можно рассматривать как JSON (например, реляционные базы данных или веб-сервисы ).

Основным выражением для выполнения таких операций является SQL -подобное « выражение FLWOR », полученное из XQuery. Выражение FLWOR состоит из пяти предложений, после которых оно названо: FOR, LET, WHERE, ORDER BY, RETURN. Однако он также поддерживает предложения для группировки и работы с окнами.

Язык также предоставляет синтаксис для создания новых документов JSON, в которых имена и значения полей либо известны заранее, либо могут вычисляться динамически. Язык JSONiq (не расширение XQuery) является расширенным набором JSON. То есть каждый документ JSON является допустимой программой JSONiq.

Кроме того, язык также поддерживает навигационный синтаксис для извлечения имен и значений полей из объектов JSON, а также значений из массивов JSON. Навигация устойчива при отсутствии значений или если значения неоднородны, поскольку она молча игнорирует непредвиденные значения, не вызывая ошибок.

Все конструкции определяются как выражения внутри языка и могут иметь произвольную вложенность.

JSONiq не включает функции обновления документов JSON или XML, не имеет возможностей полнотекстового поиска и не имеет операторов. Все эти функции находятся в стадии активной разработки для следующей версии языка.

JSONiq — это язык программирования, который может выражать произвольные преобразования JSON в JSON или XML в XML. Он также позволяет выполнять преобразования между JSON и XML. Все подобные преобразования имеют следующие особенности:

  1. Логическая/физическая независимость данных
  2. Декларативный
  3. Высокий уровень
  4. Без побочных эффектов
  5. Строго типизированный

Модель данных

[ редактировать ]

Язык основан на модели данных JSONiq (JDM), которая является расширением модели данных XQuery и XPath (XDM). JDM использует древовидную модель информационного содержания документа JSON или XML. Он содержит объекты JSON, массивы JSON, все виды узлов XML, а также атомарные значения, такие как целые числа, строки или логические значения, все они определены в XML Schema .

JDM формирует основу языка, ориентированного на множества, поскольку экземпляры модели данных представляют собой последовательности (одноэлементное значение считается последовательностью длины один). Элементами последовательности могут быть объекты JSON, массивы JSON, узлы XML или атомарные значения.

Приведенный ниже пример кода JSONiq вычисляет код города и количество всех людей старше 20 лет из коллекции объектов JSON person ( JSON пример объекта см. в статье ).

 for $p in collection("persons")
 where $p.age gt 20
 let $home := $p.phoneNumber[][$$.type eq "home"].number
 group by $area := substring-before($home, " ")
 return 
   {
     "area code" : $area,
     "count" : count($p)
   }

Все конструкции JSONiq являются выражениями и также могут содержаться в теле функции.

 declare function local:adults()
 {
   for $p in collection("persons")
   where $p.age gt 20
   return $p
 };

Следующий запрос преобразует части каждого объекта person в элемент XML с использованием синтаксиса XQuery (расширение JSONiq для XQuery).

 for $p in collection("persons")
 return 
   <person>
     <firstName>{$p("firstName")}</firstName>
     <lastName>{$p("lastName")}</lastName>
     <age>{$p("age")}</age>
   </person>

Приложения

[ редактировать ]

Ниже приведены несколько примеров того, как и где можно использовать JSONiq:

  1. Извлечение информации из базы данных для использования в веб-сервисе.
  2. Создание сводных отчетов по данным, хранящимся в хранилище документов JSON.
  3. Выбор и преобразование данных JSON в XHTML для публикации в Интернете.
  4. Сопоставление данных из различных источников и форматов (например, хранилище документов JSON, база данных XML, реляционная база данных и веб-служба) и предложение их в веб-службе.
  5. Преобразование коллекций объектов JSON в другую схему.

Сравнение двух синтаксических вариантов

[ редактировать ]

Существует два синтаксиса JSONiq, которые пользователи могут использовать в зависимости от того, фокусируются ли они на JSON или XML. Оба синтаксиса используют одну и ту же модель данных и очень похожи, за некоторыми исключениями.

Синтаксис JSONiq

[ редактировать ]

Чистый синтаксис JSONiq является расширенным набором JSON. Строго говоря, это не расширенный набор XQuery, хотя все его выражения и семантика доступны. Следующие аспекты синтаксиса JSONiq не совместимы с XQuery:

  1. Нет имен, содержащих точки.
  2. Нет . для элемента контекста (вместо этого следует использовать $$).
  3. Никаких литералов в одинарных кавычках.
  4. на основе обратной косой черты JSON, экранирование строковых литералов .
  5. В начале выражения относительного пути шаг оси не допускается.

Синтаксис XQuery с расширением JSONiq

[ редактировать ]

Расширение JSONiq для XQuery является расширенным набором XQuery, но не расширенным набором JSON. Он полностью соответствует и обратно совместим с рекомендацией кандидата XQuery 3.0. Следующие аспекты JSONiq не поддерживаются в синтаксисе XQuery.

  1. Нет поиска объектов по точкам (вместо этого $object(“key”)).
  2. Нет $$ для элемента контекста.
  3. XML, экранирование строковых литералов на основе амперсанда.
  4. Ключи объекта должны быть заключены в кавычки
  5. Нет истинных/ложных/нулевых литералов
  6. Встроенные атомарные типы должны иметь префикс xs:.
  7. За неатомарными типами должны следовать круглые скобки.
  8. Пустая последовательность() должна быть написана как таковая.
  9. Нет поиска по массиву и распаковки массива [].

Дальнейшее чтение

[ редактировать ]
  • JSONiq — SQL NoSQL. Гислен Фурни. Независимая издательская платформа CreateSpace. ISBN   1489530371 .

Реализации

[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 5a3648c694885fa72a3e2c4d8715b192__1702084740
URL1:https://arc.ask3.ru/arc/aa/5a/92/5a3648c694885fa72a3e2c4d8715b192.html
Заголовок, (Title) документа по адресу, URL1:
JSONiq - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)