Jest to minimalistyczny język pozwalający przechowywać/przesyłać dane opierając się w dużej mierze na idei wcięć. Podwójna spacja służy do grupowania elementów.
Minimalistyczny
Porównując język YAML do języka JSON można łatwo zauważyć jego minimalizm (po lewej YAML, po prawej JSON):
saxophone equipment:
mouthpiece: Selmer
ligature: Rovner
reeds:
- Vandoren
- Rico
{
"saxophone equipment": {
"mouthpiece": "Selmer",
"ligature": "Rovner",
"reeds": [
"Vandoren",
"Rico"
]
}
}
Idea wcięć
Język YAML posługuje się wcięciami aby definiować kolejne zagnieżdżenia:
saxophone:
body:
keys:
...
Kolekcje
Oczywiście nie mogło zabraknąć wsparcia dla kolekcji. Tutaj także obowiązuje wcięcie, ale dodatkowo każdy element kolekcji należy poprzedzić znakiem myślnika i spacją (przynajmniej jedną):
saxophones:
- Yamaha
- Selmer
- Keilwerth
Dziedziczenie
Aby uniknąć powtórzeń, język YAML udostępnia możliwość dziedziczenia przy użyciu kotwic (anchors) i aliasów. Załóżmy, że mamy następujące definicje saksofonów:
keilwerth saxophone:
name: Keilwerth
parts:
- neck
- body
- bell
selmer saxophone:
name: Selmer
parts:
- neck
- body
- bell
jak łatwo zauważyć, każdy saksofon składa się z nazwy i części. Ale części saksofonu są identyczne. Można użyć kotwicy i aliasu do uniknięcia powtórzeń:
base saxophone: &base-saxophone
parts:
- neck
- body
- bell
keilwerth saxophone:
<<: *base-saxophone
name: Keilwerth
selmer saxophone:
<<: *base-saxophone
name: Selmer
&base-saxophone – to stworzenie aliasu (zaktowiczenie) obiektu base saxophone o nazwie base-saxophone.
*base-saxophone – to po prostu użycie aliasu.
<<: – to składnia pozwalająca na osadzenie obiektu aliasowanego w obiekcie docelowym (wszystkie elementy obiektu base saxophone będą wrzucone do obiektów keilwerth saxophone i selmer saxophone).