Формат NEON
NEON – це структурований формат даних, що читається людиною. У Nette він використовується для файлів конфігурації. Він також використовується для структурованих даних, таких як налаштування, мовні переклади тощо. Спробуйте його в пісочниці.
NEON розшифровується як Nette Object Notation. Він менш складний і незграбний, ніж XML або JSON, але надає подібні можливості. Вона дуже схожа на YAML. Основна перевага – NEON має так звані сутності, завдяки яким конфігурація сервісів ІР є такою сексуальною. І дозволяє використовувати табуляцію для відступів.
NEON створений з нуля, щоб бути простим у використанні.
Інтеграція
- NetBeans (має вбудовану підтримку)
- PhpStorm (плагін)
- Visual Studio Code(Nette Latte + Neon) або Nette для 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!