Формат NEON
NEON – это человекочитаемый структурированный формат данных. В Nette он используется для файлов конфигурации. Он также используется для структурированных данных, таких как настройки, языковые переводы и т.д. Попробуйте его в песочнице.
NEON расшифровывается как Nette Object Notation. Она менее сложна и непритязательна, чем XML или JSON, но предоставляет аналогичные возможности. Он очень похож на YAML. Основное преимущество заключается в том, что NEON имеет так называемые сущности, благодаря которым конфигурирование DI-сервисов так сексуально. И позволяет использовать табуляцию для отступов.
NEON создан с нуля, чтобы быть простым в использовании.
Интеграция
- NetBeans (имеет встроенную поддержку)
- PhpStorm (плагин)
- Visual Studio Code(Nette Latte + Neon) или Nette for VS Code)
- Sublime Text 3 (плагин)
- Sublime Text 2 (плагин)
- VIM (плагин)
- Emacs (плагин)
- Prism.js (интегрированный язык)
Синтаксис
Файл, написанный на NEON, обычно состоит из последовательности или отображения.
Сопоставления
Маппинг – это набор пар ключ-значение, в PHP это называется
ассоциативным массивом. Каждая пара записывается как key: value
,
пробел после :
обязателен. Значение может быть любым: строка,
число, булево, null, последовательность или другое отображение.
В PHP та же структура будет записана как:
Эта нотация называется блочной, потому что все элементы находятся на отдельной строке и имеют одинаковый отступ (в данном случае он отсутствует). NEON также поддерживает построчное представление для отображения, которое заключено в скобки, отступы не играют никакой роли, а разделителем каждого элемента является либо запятая, либо новая строка:
Это одно и то же, написанное на нескольких строках (отступ не имеет значения):
В качестве альтернативы можно использовать =
вместо :
,
как в блочной, так и в инлайн-нотации:
Последовательности
Последовательности – это индексированные массивы в PHP. Они
записываются в виде строк, начинающихся с дефиса -
, за которым
следует пробел. Значение может быть любым: строка, число, булево, null,
последовательность или другое отображение.
В PHP та же структура будет выглядеть следующим образом:
Эта нотация называется блочной, потому что все элементы находятся на отдельной строке и имеют одинаковый отступ (в данном случае он отсутствует). NEON также поддерживает поточное представление последовательностей, которые заключаются в скобки, отступы не играют никакой роли, а разделителем каждого элемента является либо запятая, либо новая строка:
Это одно и то же, написанное на нескольких строках (отступ не имеет значения):
Дефисы не могут быть использованы в инлайн-представлении.
Комбинация
Значения отображений и последовательностей могут быть другими
отображениями и последовательностями. Уровень отступа играет важную
роль. В следующем примере дефис, используемый для обозначения
элементов последовательности, имеет больший отступ, чем ключ
pets
, поэтому элементы становятся значениями первой строки:
В PHP та же структура была бы записана как:
Можно комбинировать блочную и инлайн-нотацию:
Блочная нотация больше не может быть использована внутри строчной нотации, это не работает:
В предыдущем случае мы написали отображение, элементами которого были последовательности. Теперь попробуем сделать все наоборот и создать последовательность, содержащую отображения:
Не обязательно, чтобы пункты были расположены на отдельных строках, их можно расположить и таким образом:
Выравнивать ли ключи в колонке с помощью пробелов или табуляции – решать вам.
Поскольку PHP использует одну и ту же структуру для отображения и последовательностей, то есть массивы, оба варианта могут быть объединены. На этот раз отступы одинаковы:
В PHP та же структура будет записана как:
Строки
Строки в NEON могут быть заключены в одинарные или двойные кавычки. Но, как вы видите, они могут быть и без кавычек.
Если строка содержит символы # " ' , : = - [ ] { } ( )
которые можно
спутать с синтаксисом NEON, она должна быть заключена в кавычки. Мы
рекомендуем использовать одинарные кавычки, поскольку они не
используют экранирование. Если вам нужно заключить кавычки в такой
строке, удвойте их:
Двойные кавычки позволяют использовать экранирующие
последовательности для записи специальных символов, используя
обратные косые черты \
. All escape sequences as in the JSON format are supported, plus
\_
, которые представляют собой неразрывный пробел, т.е.
\u00A0
.
Существуют и другие случаи, когда необходимо заключать строки в кавычки:
- они начинаются или заканчиваются пробелами
- выглядят как числа, булевы или null.
- NEON будет понимать их как даты
Многострочные строки
Многострочная строка начинается и заканчивается тройной кавычкой на отдельных строках. Отступ первой строки игнорируется для всех строк:
В PHP мы бы написали то же самое:
Последовательности экранирования работают только для строк, заключенных в двойные кавычки вместо апострофов:
Числа
NEON понимает числа, записанные в так называемой научной нотации, а также числа в двоичной, восьмеричной и шестнадцатеричной системе счисления:
Нули
Нуль может быть выражен в NEON с помощью null
или без указания
значения. Также допускаются варианты с заглавной первой или всеми
прописными буквами.
Булевы
Булевы значения выражаются в NEON с помощью true
/ false
или
yes
/ no
. Также допускаются варианты с заглавной первой или
всеми прописными буквами.
Даты
NEON использует следующие форматы для выражения данных и
автоматически преобразует их в объекты DateTimeImmutable
:
Сущности
Сущность – это структура, напоминающая вызов функции:
В PHP она разбирается как объект Nette\Neon\Entity:
Сущности также могут быть объединены в цепочку:
Что разбирается в PHP следующим образом:
Внутри круглых скобок применяются правила инлайн-нотации, используемые для отображения и последовательностей, поэтому его можно разделить на несколько строк и нет необходимости добавлять запятые:
Комментарии
Комментарии начинаются с #
и все последующие символы справа
игнорируются:
NEON против JSON
JSON является подмножеством NEON. Поэтому каждый JSON может быть разобран как NEON:
Что если бы мы могли опустить кавычки?
Как насчет скобок и запятых?
Являются ли пули более разборчивыми?
Как насчет комментариев?
Вы нашли синтаксис NEON!