Etykiety w YAML-u przyjacielem leniwego programisty

Sympatyczny wynalazek, jakim jest YAML, jest używany w Symfony niemal na każdym kroku. I bardzo lepiej, bo to bardzo przyjazny człowiekowi format zapisu. Dokumentacja Symfony na temat YAML-a jest jednak dość lakoniczna i nie opisuje wszystkich jego możliwości. Jednym z pominiętych zagadnień są na ten przykład etykiety, które pozwalają zredukować ilość wklepywanych danych.

Etykiety najbardziej przydają się przy definiowaniu danych statycznych aplikacji (fixtures). Załóżmy, że tworzymy katalog usług hostingowych. Usługę VPS można opisać chociażby tak:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
vps_hitme_openvz_128: &vps_hitme_openvz
  Company:            hitme
  name:               OpenVZ 128
  Virtualization:     openvz
  guaranteed_memory:  128
  burstable_memory:   256
  swap_memory:        0
  disk_space:         20
  uplink:             100
  downlink:           100
  bandwidth:          50
  ip_4_addresses:     1
  ip_6_mask:          64
  root_access:        true
  is_managed:         false
  url:                http://www.hitme.net.pl/openvz-details.php
  is_verified:        true
  is_active:          true

Kolejne pakiety różniące się od powyższego tylko nazwą, ilością dostępnej pamięci, powierzchnią dyskową i transferem można opisać o wiele krócej:

1
2
3
4
5
6
7
vps_hitme_openvz_256:
  <<:                 *vps_hitme_openvz
  name:               OpenVZ 256
  guaranteed_memory:  256
  burstable_memory:   512
  disk_space:         20
  bandwidth:          100

Składnia i działanie etykiet w powyższym przykładzie są oczywiste, opiszę je jedynie dla porządku. Etykietę poprzedzamy znakiem &. Dane oznaczone etykietą włączamy używając operatora << jako klucza, którego wartością jest nazwa etykiety poprzedzona *. Spowoduje połączenie tablicy oznaczonej etykietą z bieżącą tablicą. Jeśli w obu tablicach występuje ten sam klucz to zostanie użyta wartość z bieżącej tablicy. Prawda, że przydatne?