Język YAML

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).

Warto zajrzeć

1. https://yaml.org/

Pozostaw komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *