AFAIK

YAML Nedir?

Güncelleme:
YAML, YAML Ain’t Markup Language, hem insan tarafından kolaylıkla okunabilen hemde sayısal olarak kolaylıkla işleme alınabilen ve tüm programlama dilleri tarafından kullanılabilen bir veri değişim ...
GÖRSEL
YAML, YAML Ain’t Markup Language, hem insan tarafından kolaylıkla okunabilen hemde sayısal olarak kolaylıkla işleme alınabilen ve tüm programlama dilleri tarafından kullanılabilen bir veri değişim formatıdır. Temel amacı oldukça kompleks bir yapı sunan XML‘e basitleştirilmiş bir alternatif sunabilmek olan YAML ile ilgili gelişmeler ve desteklenen programlama dilleriyle ilgili yaml.org adresi takip edilebilir. Bu özellikleri bir liste haline getirecek olursak;
  • Kolay okunabilir,
  • Farklı programlama dilleri arasında veri taşıma amacıyla ortak bir şekilde kullanılabilir,
  • Tutarlı bir modele sahiptir,
  • Esnek ve geliştirilebilir bir yapı sunar,
  • Uygulaması, entegre etmesi ve kullanması kolaydır.
Daha fazla bilgi ve detaylı bir değerlendirme için Martin Tournoij tarafından paylaşılan YAML: probably not so great after all başlıklı yazıya ve Reddit tartışmasına göz atmanızı öneririm. Tüm diller tarafından ortak bir şekilde kullanılabilen yapısı sayesinde nesne yapılarının temsilinin yanı sıra konfigürasyon amaçlı da kullanılmaktadır. JSON Nedir? başlıklı yazıda JSON ve XML yapılarına değinmiştim. Aynı XML örneğini YAML ile oluşturulmuş şekilde aşağıda ayrıca iletiyorum.
<?xml version="1.0" encoding="UTF-8" ?>
<root>
  <name>Charles</name>
  <surname>Freck</surname>
  <age>31</age>
  <address>
    <city>Anaheim</city>
    <county>Orange County</county>
    <state>California</state>
    <coordinates>
      <ID>
        <row>33</row>
        <row>50</row>
        <row>7.0548</row>
        <row>N</row>
      </ID>
      <ID>
        <row>117</row>
        <row>54</row>
        <row>52.218</row>
        <row>W</row>
      </ID>
    </coordinates>
  </address>
  <contact>
    <type>telephone</type>
    <number>25052006</number>
  </contact>
  <contact>
    <type>e-mail</type>
    <name>ascanner@darkly.com</name>
  </contact>
  <contact>
    <type>
      <account>facebook</account>
      <url>https://facebook.com/charles.freck</url>
      <official>0</official>
    </type>
    <type>
      <account>twitter</account>
      <url>https://twitter.com/charles.freck</url>
      <official>1</official>
    </type>
    <type>
      <account>instagram</account>
      <url>https://instagram.com/charles.freck</url>
      <official>0</official>
    </type>
    <type>
      <account>linkedin</account>
      <url/>
      <official/>
    </type>
  </contact>
</root>
XML içeriği okumanın zorluğunu ve katı kuralları sebebiyle esnetilmesindeki güçlüklerden tekrar detaylıca bahsetmeye gerek yok. Aşağıda, bu yapının JSON formatındaki karşılığına baktığımızda daha kolay okunabildiğini ve esnek bir şekilde kullanılabildiğini görebilmekteyiz.
{
	"root": {
		"name": "Charles",
		"surname": "Freck",
		"age": "31",
		"address": {
			"city": "Anaheim",
			"county": "Orange County",
			"state": "California",
			"coordinates": {
				"ID": [
					{
						"row": [
							"33",
							"50",
							"7.0548",
							"N"
						]
					},
					{
						"row": [
							"117",
							"54",
							"52.218",
							"W"
						]
					}
				]
			}
		},
		"contact": [
			{
				"type": "telephone",
				"number": "25052006"
			},
			{
				"type": "e-mail",
				"name": "ascanner@darkly.com"
			},
			{
				"type": [
					{
						"account": "facebook",
						"url": "https://facebook.com/charles.freck",
						"official": "0"
					},
					{
						"account": "twitter",
						"url": "https://twitter.com/charles.freck",
						"official": "1"
					},
					{
						"account": "instagram",
						"url": "https://instagram.com/charles.freck",
						"official": "0"
					},
					{
						"account": "linkedin",
						"url": "",
						"official": ""
					}
				]
			}
		]
	}
}
JSON ile YAML karşılaştırmasını yaptığımızda ise ilk dikkatimizi çeken konu JSON formatında sıklıkla yer bulan süslü ve köşeli parantez ({}, []) kullanımları olacaktır. Bunun yerine YAML boşlukları, çizgi ve bazı diğer karakterleri kullanır. Yapı (structure) girintiyle (bir veya daha fazla boşluk), sıra öğeleri (sequence) bir çizgi () ve map kapsamındaki anahtar değer (key value) üst üste iki nokta (:) ile ayrılır; key (anahtar): value (değer). Referans tanımlamalardan bazılarını (YAML 1.1+ için) listeleyecek olursak;
Göstergeler Koleksiyonu:
    '? ' : Anahtar (key) gösterge.
    ': ' : Değer (value) gösterge.
    '- ' : İç içe seri giriş göstergesi.
    ', ' : Ayrı satır içi Separate in-line dal ayrıştırıcı.
    '[]' : Satır içi seri kapsayıcı.
    '{}' : Satır içi ifade kapsayıcı.

Ad Tanımlama Koleksiyonu:
    '&'  : Çapa tanımı.
    '*'  : Takma ad göstergesi.
Referans gösterge koleksiyonlarının tamamını yaml.org > Reference card sayfası üzerinden görüntüleyebilir, How To Write YAML ve Complete idiot’s introduction to yaml ile yazım konusundaki örnekleri inceleyebilirsiniz.
root: 
 name: Charles
 surname: Freck
 age: 31
 address: 
  city: Anaheim
  county: "Orange County"
  state: California
  coordinates: 
   ID: 
    - 
   row: 
      - 
   33
      - 
   50
      - 
   "7.0548"
      - 
   N
    - 
   row: 
      - 
   117
      - 
   54
      - 
   "52.218"
      - 
   W
 contact: 
  - 
   type: telephone
   number: 25052006
  - 
   type: "e-mail"
   name: "ascanner@darkly.com"
  - 
   type: 
    - 
   account: facebook
     url: "https://facebook.com/charles.freck"
     official: 0
    - 
   account: twitter
     url: "https://twitter.com/charles.freck"
     official: 1
    - 
   account: instagram
     url: "https://instagram.com/charles.freck"
     official: 0
    - 
   account: linkedin
     url: ""
     official: ""
Hatırlarsanız, WP-CLI konfigürasyon işlemleri için de *.yml (YAML) dosyalarına müdahale etmiştik. Benzer şekilde daha pek çok uygulama ve servis bağlamında YAML dosyalarıyla haşır neşir olmaktayız; Docker Compose ve Symfony2 konfigürasyon süreçlerini de örnek olarak gösterebiliriz.

HABERDAR OL

Yeni eklenen projeler, eğitimler, içerikler ve yayınlanan videolar e-posta adresine gelsin.