YAML
Tasarım > Gelişmiş Bileşenler

YAML'ı diğer veri serileştirme dillerinin yeteneklerinden ayıran iki özellik, yapılar ve veri tipleridir.
YAML yapıları, tek bir dosya içinde birden fazla belgenin saklanmasına, tekrar eden düğümler için referansların kullanılmasına ve key olarak rastgele düğümlerin kullanılmasına olanak tanır.
Açıklık, kompaktlık ve veri giriş hatalarını önlemek için YAML, düğüm çapaları (​&​ kullanarak) ve referanslar (​*​ kullanarak) sağlar. Çapaya yapılan referanslar, tüm veri türleri için geçerlidir (aşağıdaki örnekteki ship-to referansına bakın).
Aşağıda, iki adımın tam olarak tanımlanmadan referans alındığı bir enstrüman dizicisindeki bir kuyruğun bir örneği verilmiştir.
--- # Lazer göz ameliyatı için Dizici protokolleri
- step:  &id001                  # çapa etiketi &id001 tanımlar
    instrument:      Lasik 2000
    pulseEnergy:     5.4
    pulseDuration:   12
    repetition:      1000
    spotSize:        1mm

- step: &id002
    instrument:      Lasik 2000
    pulseEnergy:     5.0
    pulseDuration:   10
    repetition:      500
    spotSize:        2mm
- Enstrüman1: *id001   # ilk adıma referans verir (çapa &id001 ile)
- Enstrüman2: *id002   # ikinci adıma referans verir
Açık veri tipleri, YAML belgelerinin çoğunda nadiren görülür çünkü YAML basit tipleri otomatik olarak algılar. Veri tipleri üç kategoriye ayrılabilir: çekirdek, tanımlı ve kullanıcı tanımlı. Çekirdek olanlar, herhangi bir ayrıştırıcıda bulunması beklenenlerdir (ör. ondalık sayılar, tam sayılar, dizgeler, listeler, haritalar, ...). İkili veri gibi daha birçok gelişmiş veri türü, YAML spesifikasyonunda tanımlanmıştır, ancak tüm uygulamalarda desteklenmez. Son olarak, YAML, kullanıcı tanımlı sınıflara, yapılar veya ilkelere uyum sağlamak için yerel olarak veri türü tanımlarını genişletmenin bir yolunu tanımlar (ör. dört basamaklı ondalık sayılar).
YAML, varlığın veri türünü otomatik olarak algılar, ancak bazen veri türünü açıkça belirtmek istenir. En yaygın durum, tek kelimelik bir dizenin bir sayı, boolean veya etiket gibi göründüğü ve bu durumu ayırmak için tırnak işaretleri veya açık bir veri tipi etiketi kullanılması gerektiği durumdur.
---
a: 123                     # bir tamsayı
b: "123"                   # bir dize, tırnak işaretleri ile ayrılmış
c: 123.0                   # bir ondalık sayı
d: !!float 123             # açık veri tipiyle de bir ondalık sayı (!! ile öneki eklenmiş)
e: !!str 123               # açık tip ile bir dize
f: !!str Evet              # açık tip ile bir dize
g: Evet                    # bir boolean True (yaml1.1), dize "Evet" (yaml1.2)
h: Evet, Hayır muzlarımız var  # bir dize, "Evet" ve "Hayır" bağlama göre ayrılmış.
YAML'ın her uygulamasında, spesifikasyonla tanımlanmış her veri türü bulunmaz. Bu yerleşik türler, çift ünlem işaretiyle (sigil) öneki kullanır (​!!​). Burada gösterilmeyenler arasında özellikle ilginç olanlar setler, sıralı haritalar, zaman damgaları ve onaltılı sayılardır. İşte base64 ile kodlanmış ikili veriye bir örnek.
---
resim: !!binary |
  R0lGODdhDQAIAIAAAAAAANn
  Z2SwAAAAADQAIAAACF4SDGQ
  ar3xxbJ9p0qa7R0YxwzaFME
  1IAADs=
YAML'ın birçok uygulaması, nesne serileştirme için kullanıcı tanımlı veri türlerini destekleyebilir. Yerel veri türleri evrensel veri türleri değildir, ancak YAML ayrıştırıcı kitaplığı kullanılarak uygulamada tanımlanır. Yerel veri türleri, tek bir ünlem işareti (​!​) kullanır.