Формат NEON
NEON е формат за структурирани данни, който може да се чете от човек. В Nette той се използва за конфигурационни файлове. Той се използва и за структурирани данни, като настройки, езикови преводи и др. Изпробвайте го в пясъчника.
NEON е съкращение от Nette Object Notation. Тя не е толкова сложна и елементарна, колкото XML или JSON, но предоставя подобни възможности. Много е подобен на YAML. Основното предимство е, че NEON разполага с т.нар. същности, благодарение на които конфигурирането на DI услугите е толкова секси. И позволява табулации за отстъпление.
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
, като
интервалът след :
е задължителен. Стойността може да бъде
всякаква: низ, число, булева, нула, последователност или друго
съпоставяне.
В PHP същата структура ще бъде записана по следния начин:
Този запис се нарича блоков запис, защото всички елементи са на отделен ред и са отстъпени по един и същи начин (в този случай няма отстъпление). NEON също така поддържа представяне по редове за показване, което е затворено в скоби, отстъпите не играят роля, а всеки елемент се отделя със запетая или нов ред:
Това е едно и също нещо, написано на няколко реда (отстъпът е без значение):
Вместо това можете да използвате =
вместо :
, както в
блоков, така и във вграден запис:
Последователности
Последователностите са индексирани масиви в PHP. Те се записват като
низове, започващи с дефис -
, последван от интервал. Стойността
може да бъде всякаква: низ, число, булева, нула, последователност или
друго съпоставяне.
В PHP същата структура би изглеждала по следния начин:
Този запис се нарича блоков запис, защото всички елементи са на отделен ред и имат едно и също отстъпление (в този случай няма такова). NEON също така поддържа инлайн представяне на последователности, които са затворени в скоби, отстъпите не играят роля и всеки елемент се отделя със запетая или нов ред:
Това е едно и също нещо, написано на няколко реда (отстъпът е без значение):
Не могат да се използват тирета в инлайн представяне.
Комбинацията
Стойностите на съпоставянията и последователностите могат да бъдат
други съпоставяния и последователности. Степента на врязване играе
важна роля. В следващия пример тирето, използвано за елементите на
последователността, е отстъпено повече от ключа pets
, така че
елементите стават стойности на първия ред:
В PHP същата структура ще бъде записана по следния начин:
Възможно е да комбинирате блоково и инлайн записване:
Блоковата нотация вече не може да се използва в рамките на инлайн нотация, тя не работи:
В предишния случай написахме съпоставяне, чиито елементи бяха последователности. Сега нека опитаме да направим обратния опит и да създадем последователност, съдържаща мапинг:
Не е необходимо точките да са на отделни редове; те могат да бъдат разположени и по този начин:
От вас зависи дали ще подравните булетите в колона, като използвате интервали или табулация.
Тъй като PHP използва една и съща структура за съпоставки и последователности, т.е. масиви, двете могат да се комбинират. Този път отстъпите са същите:
На PHP същата структура ще бъде записана като:
Редове
Низовете в NEON могат да бъдат оградени с единични или двойни кавички. Но, както виждате, те могат да бъдат и без кавички.
Ако даден низ съдържа символи # " ' , : = - [ ] { } ( )
които могат да
бъдат объркани със синтаксиса на NEON, трябва да бъдат поставени в
кавички. Препоръчваме ви да използвате единични кавички, тъй като при
тях не се използва ескапиране. Ако трябва да поставите кавички в такъв
низ, удвоете ги:
Двойните кавички ви позволяват да използвате escape последователности
за записване на специални символи с помощта на обратни наклонени черти
\
. 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!