NEON Formatı
NEON insan tarafından okunabilen yapılandırılmış bir veri formatıdır. Nette, yapılandırma dosyaları için kullanılır. Ayrıca ayarlar, dil çevirileri vb. gibi yapılandırılmış veriler için de kullanılır. Sandbox üzerinde deneyin.
NEON, Nette Nesne Notasyonu anlamına gelir. XML veya JSON'dan daha az karmaşık ve hantaldır, ancak benzer yetenekler sağlar. YAML'ye çok benzemektedir. Ana avantajı, NEON'un DI hizmetlerinin yapılandırılmasının çok seksi olması sayesinde sözde varlıklara sahip olmasıdır. Ve girinti için sekmelere izin verir.
NEON, kullanımı basit olacak şekilde sıfırdan inşa edilmiştir.
Entegrasyon
- NetBeans (yerleşik desteği vardır)
- PhpStorm (eklenti)
- Visual Studio Code (eklenti)
- Sublime Text 3 (eklenti)
- Sublime Text 2 (eklenti)
- VIM (eklenti)
- Emacs (eklenti)
- Prism.js (entegre dil)
Sözdizimi
NEON'da yazılmış bir dosya genellikle bir dizi veya eşlemeden oluşur.
Eşlemeler
Eşleme bir anahtar-değer çiftleri kümesidir, PHP'de buna ilişkisel dizi denir. Her çift key: value
şeklinde
yazılır, :
'dan sonra bir boşluk bırakılması gerekir. Değer herhangi bir şey olabilir: dize, sayı, boolean,
null, dizi veya başka bir eşleme.
street: 742 Evergreen Terrace
city: Springfield
country: USA
PHP'de aynı yapı şu şekilde yazılacaktır:
[ // PHP
'street' => '742 Evergreen Terrace',
'city' => 'Springfield',
'country' => 'USA',
]
Bu gösterime blok gösterimi denir çünkü tüm öğeler ayrı bir satırdadır ve aynı girintiye sahiptir (bu durumda hiçbiri). NEON ayrıca parantez içine alınan, girintinin rol oynamadığı ve her bir öğenin ayırıcısının virgül veya satırsonu olduğu eşleme için satır içi gösterimi de destekler:
{street: 742 Evergreen Terrace, city: Springfield, country: USA}
Bu, birden fazla satırda yazılanın aynısıdır (girinti önemli değildir):
{
street: 742 Evergreen Terrace
city: Springfield, country: USA
}
Alternatif olarak, =
yerine kullanılabilir :
, hem blok hem de satır içi gösterimde
kullanılabilir:
{street=742 Evergreen Terrace, city=Springfield, country=USA}
Diziler
Diziler PHP'de dizinlenmiş dizilerdir. Bunlar -
tire işareti ve ardından bir boşluk ile başlayan satırlar
olarak yazılır. Yine, değer herhangi bir şey olabilir: dize, sayı, boolean, null, dizi veya başka bir eşleme.
- Cat
- Dog
- Goldfish
PHP'de aynı yapı şu şekilde yazılacaktır:
[ // PHP
'Cat',
'Dog',
'Goldfish',
]
Bu gösterime blok gösterimi denir çünkü tüm öğeler ayrı bir satırdadır ve aynı girintiye sahiptir (bu durumda hiçbiri). NEON ayrıca diziler için parantez içine alınmış satır içi gösterimi de destekler, girinti bir rol oynamaz ve her bir öğenin ayırıcısı virgül veya satırsonudur:
[Cat, Dog, Goldfish]
Bu, birden fazla satırda yazılanın aynısıdır (girinti önemli değildir):
[
Cat, Dog
Goldfish
]
Satır içi gösterimde kısa çizgiler kullanılamaz.
Kombinasyon
Eşlemelerin ve dizilerin değerleri başka eşlemeler ve diziler olabilir. Girinti seviyesi önemli bir rol oynar.
Aşağıdaki örnekte, sıra öğelerini belirtmek için kullanılan kısa çizgi pets
tuşundan daha büyük bir
girintiye sahiptir, bu nedenle öğeler ilk satırın değeri haline gelir:
pets:
- Cat
- Dog
cars:
- Volvo
- Skoda
PHP'de aynı yapı şu şekilde yazılacaktır:
[ // PHP
'pets' => [
'Cat',
'Dog',
],
'cars' => [
'Volvo',
'Skoda',
],
]
Blok ve satır içi gösterimleri birleştirmek mümkündür:
pets: [Cat, Dog]
cars: [
Volvo,
Skoda,
]
Blok gösterimi artık bir satır içi gösterimin içinde kullanılamaz, bu çalışmaz:
item: [
pets:
- Cat # THIS IS NOT POSSIBLE!!!
- Dog
]
Önceki durumda, elemanları diziler olan bir eşleme yazmıştık. Şimdi de tam tersini deneyelim ve eşlemeleri içeren bir dizi oluşturalım:
-
name: John
age: 35
-
name: Peter
age: 28
Madde işaretlerinin ayrı satırlarda olması gerekli değildir; bu şekilde de yerleştirilebilirler:
- name: John
age: 35
- name: Peter
age: 28
Bir sütundaki tuşları boşluk veya sekme kullanarak hizalayıp hizalamayacağınız size bağlıdır.
PHP eşleme ve diziler için aynı yapıyı, yani dizileri kullandığından, her ikisi de birleştirilebilir. Girintileme bu sefer aynıdır:
- Cat
street: 742 Evergreen Terrace
- Goldfish
PHP'de aynı yapı şu şekilde yazılacaktır:
[ // PHP
'Cat',
'street' => '742 Evergreen Terrace',
'Goldfish',
]
Dizeler
NEON'daki dizeler tek veya çift tırnak içine alınabilir. Ancak görebileceğiniz gibi, tırnak işaretleri olmadan da olabilirler.
- A unquoted string in NEON
- 'A singled-quoted string in NEON'
- "A double-quoted string in NEON"
Dize karakter içeriyorsa # " ' , : = - [ ] { } ( )
NEON sözdizimi ile karıştırılabileceği için tırnak
içine alınmalıdır. Kaçış kullanmadıkları için tek tırnak kullanmanızı öneririz. Böyle bir dizede bir tırnak
işareti içine almanız gerekiyorsa, iki katına çıkarın:
'A single quote '' inside a single-quoted string'
Çift tırnaklar, ters eğik çizgileri kullanarak özel karakterler yazmak için kaçış dizilerini kullanmanıza olanak
tanır \
. All escape sequences as in the JSON format are supported, plus \_
, bu boşluk bırakmayan bir
boşluktur, yani \u00A0
.
- "\t \n \r \f \b \" \\ \/ \_"
- "\u00A9"
Dizeleri tırnak işareti içine almanız gereken başka durumlar da vardır:
- boşluklarla başlar veya biterler
- sayı, boole veya null gibi görünebilir
- NEON bunları tarih olarak anlayacaktır
Çok Satırlı Dizeler
Çok satırlı bir dize ayrı satırlarda üçlü tırnak işaretiyle başlar ve biter. İlk satırın girintisi tüm satırlar için yok sayılır:
'''
first line
second line
third line
'''
PHP'de aynısını şöyle yazardık:
"first line\n\tsecond line\nthird line" // PHP
Kaçış dizileri yalnızca kesme işaretleri yerine çift tırnak içine alınmış dizeler için çalışır:
"""
Copyright \u00A9
"""
Sayılar
NEON, bilimsel gösterim olarak adlandırılan şekilde yazılmış sayıları ve ayrıca ikili, sekizli ve onaltılı sayıları anlar:
- 12 # bir tamsayı
- 12.3 # a float
- +1.2e-34 # üstel bir sayı
- 0b11010 # ikili sayı
- 0o666 # sekizli sayı
- 0x7A # hexa sayısı
Nulls
Null NEON'da null
kullanılarak veya bir değer belirtilmeden ifade edilebilir. Baş harfi büyük olan veya tüm
harfleri büyük olan varyantlara da izin verilir.
a: null
b:
Booleans
Boolean değerler NEON'da true
/ false
veya yes
/ no
kullanılarak ifade
edilir. Baş harfi büyük veya tamamı büyük harf olan varyantlara da izin verilir.
[true, TRUE, True, false, yes, no]
Tarihler
NEON, verileri ifade etmek için aşağıdaki formatları kullanır ve bunları otomatik olarak DateTimeImmutable
nesnelerine dönüştürür:
- 2016-06-03 # tarih
- 2016-06-03 19:00:00 # tarih ve saat
- 2016-06-03 19:00:00.1234 # tarih ve mikro zaman
- 2016-06-03 19:00:00 +0200 # tarih & saat & zaman dilimi
- 2016-06-03 19:00:00 +02:00 # tarih & saat & zaman dilimi
Varlıklar
Varlık, bir fonksiyon çağrısına benzeyen bir yapıdır:
Column(type: int, nulls: yes)
PHP'de bir nesne olarak ayrıştırılır Nette\Neon\Entity:
// PHP
new Nette\Neon\Entity('Column', ['type' => 'int', 'nulls' => true])
Varlıklar da zincirlenebilir:
Column(type: int, nulls: yes) Field(id: 1)
PHP'de aşağıdaki gibi ayrıştırılır:
// PHP
new Nette\Neon\Entity(Nette\Neon\Neon::Chain, [
new Nette\Neon\Entity('Column', ['type' => 'int', 'nulls' => true]),
new Nette\Neon\Entity('Field', ['id' => 1]),
])
Parantezlerin içinde, eşleme ve diziler için kullanılan satır içi gösterim kuralları geçerlidir, bu nedenle birkaç satıra bölünebilir ve virgül eklemek gerekli değildir:
Column(
type: int
nulls: yes
)
Yorumlar
Yorumlar #
ile başlar ve sağdaki tüm karakterler yok sayılır:
# bu satır yorumlayıcı tarafından göz ardı edilecektir
Sokak: 742 Evergreen Terrace
Şehir: Springfield # bu da göz ardı edildi
ülke ABD
NEON JSON'a Karşı
JSON, NEON'un bir alt kümesidir. Bu nedenle her JSON NEON olarak ayrıştırılabilir:
{
"php": {
"date.timezone": "Europe\/Prague",
"zlib.output_compression": true
},
"database": {
"driver": "mysql",
"username": "root",
"password": "beruska92"
},
"users": [
"Dave", "Kryten", "Rimmer"
]
}
Tırnak işaretlerini çıkarırsak ne olur?
{
php: {
date.timezone: Europe/Prague,
zlib.output_compression: true
},
database: {
driver: mysql,
username: root,
password: beruska92
},
users: [
Dave, Kryten, Rimmer
]
}
Parantez ve virgüllere ne dersiniz?
php:
date.timezone: Europe/Prague
zlib.output_compression: true
database:
driver: mysql
username: root
password: beruska92
users: [
Dave, Kryten, Rimmer
]
Mermiler daha okunaklı mı?
php:
date.timezone: Europe/Prague
zlib.output_compression: true
database:
driver: mysql
username: root
password: beruska92
users:
- Dave
- Kryten
- Rimmer
Peki ya yorumlar?
# my web application config
php:
date.timezone: Europe/Prague
zlib.output_compression: true # use gzip
database:
driver: mysql
username: root
password: beruska92
users:
- Dave
- Kryten
- Rimmer
NEON sözdizimini buldunuz!