YAML

YAML
Rozszerzenia pliku

.yaml, .yml

Data opracowania

11 maja 2001; ponad 21 lat temu

Ostatnia wersja

1.2 (edycja trzecia) (1 października 2009; ponad 12 lat temu)[1]

Typ

Serializacja

Strona internetowa

YAML – uniwersalny język formalny przeznaczony do reprezentowania różnych danych w ustrukturalizowany sposób. YAML jest akronimem rekurencyjnym od słów YAML Ain’t Markup Language. Na początku, skrót YAML miał oznaczać Yet Another Markup Language, jednak zmieniono tę koncepcję, aby położyć nacisk na cel, któremu język miał służyć, czyli opisowi zbioru danych. Jego pierwszą wersję zaproponował w 2001 roku Clark Evans we współpracy z Ingy döt Net oraz Oren Ben-Kiki.

Cechy języka

Poszczególne elementy struktury danych są oddzielane znakami nowej linii, a ich hierarchia ustalana jest na podstawie wcięcia linii. Język wprowadza trzy podstawowe struktury danych, które mogą być wkomponowane w dokument: listy, słowniki i skalary. Obsługuje również referencje, które eliminują konieczność redundancji danych.

Wszystkie te cechy sprawiają, że dokumenty napisane w YAML-u są bardzo zwięzłe, czytelne dla człowieka, dają się też łatwo przetwarzać prostymi narzędziami, takimi jak grep, awk czy sed oraz przy pomocy języków skryptowych.

Cele stawiane przed językiem przez jego twórców są następujące[2]:

  1. YAML ma być czytelny dla człowieka.
  2. YAML ma realizować struktury danych wbudowane w języki programowania.
  3. Dokumenty YAML mają być przenośne pomiędzy językami programowania.
  4. YAML ma być przyjazny dla typowych narzędzi do przetwarzania tekstu.
  5. Dokument YAML ma być przetwarzany przez narzędzia w pojedynczym przejściu.
  6. YAML ma mieć dużą siłę wyrazu i być łatwo rozszerzalny.
  7. YAML ma być prosty w użyciu.

Z powyższych powodów, jak utrzymują twórcy YAML-a, język ten nadaje się dobrze do zapisu konfiguracji systemowej, zapisywania logów, do wymiany komunikatów między procesami, wymiany danych między różnymi językami programowania, do trwałego zapisu obiektów (ang. object persistence) oraz debuggowania złożonych struktur danych[3].

Jak zauważają autorzy raportu porównującego różne języki zapisu danych, „czytelność YAML-a jest tak duża, że główna strona poświęcona językowi[4] sama jest napisana w YAML-u”[5].

Przykładowy dokument

---
receipt: Oz-Ware Purchase Invoice
date: 2007-08-06
customer:
    given:   Dorothy
    family:  Gale

items:
    - part_no:   A4786
      descrip:   Water Bucket (Filled)
      price:     1.47
      quantity:  4

    - part_no:   E1628
      descrip:   High Heeled "Ruby" Slippers
      size:      8
      price:     100.27
      quantity:  1

bill-to: &id001
    street: |
            123 Tornado Alley
            Suite 16
    city:   East Centerville
    state:  KS

ship-to: *id001

specialDelivery: >
    Follow the Yellow Brick
    Road to the Emerald City.
    Pay no attention to the
    man behind the curtain.
...

Przykłady użycia

Przykładowe oprogramowanie z konfiguracją opartą o YAML to m.in. Ansible[6] (zarządzanie aplikacjami), Kubernetes (zarządzanie aplikacjami), Home Assistant[7] (konfigurowanie automatyki domowej), Spring[8] (zarządzanie aplikacjami w Javie), IBM Cloud Manager with OpenStack[9] (zarządzanie serwisami chmurowymi) czy specyfikacja OpenAPI[10] (definiowanie API webowych).

YAML a XML

XML jest najpopularniejszym obecnie uniwersalnym językiem przeznaczonym do reprezentowania danych.

  • Czytelność: składnia YAML-a jest bardziej przejrzysta niż XML, ponieważ struktura dokumentu określona jest niewidocznymi dla człowieka znakami niedrukowalnymi (znakami nowej linii i wcięciami). XML z kolei używa znaczników, które wizualnie się zlewają z istotną treścią dokumentu, co wpływa ujemnie na czytelność zapisu.
  • Struktury danych: YAML, podobnie jak XML, ma strukturę drzewa uporządkowanego, ale ponadto obsługuje kolekcje już na poziomie języka.
  • Format binarny: Żaden z tych formatów nie udostępnia bogatego mechanizmu reprezentacji dużych ilości danych w postaci binarnej.

Zobacz też

Przypisy

  1. YAML Ain’t Markup Language (YAML™) Version 1.2 (ang.). yaml.org. [dostęp 2019-08-01].
  2. YAML Ain’t Markup Language (YAML) Version 1.1, yaml.org [dostęp 2017-11-27].
  3. YAML Ain’t Markup Language (YAML™) Version 1.2 Working Draft 2008-05-11 (ang.).
  4. https://yaml.org.
  5. Lucero del Alba, Data Serialization Comparison: JSON, YAML, BSON, MessagePack, 8 listopada 2016 (ang.).
  6. Intro to Playbooks – Ansible Documentation, docs.ansible.com [dostęp 2019-07-27].
  7. Home Assistant Cookbook, home-assistant.io [dostęp 2019-07-27].
  8. Spring YAML Configuration, Baeldung, 22 czerwca 2017 [dostęp 2019-07-27] (ang.).
  9. IBM Knowledge Center, www.ibm.com [dostęp 2019-07-27] (ang.).
  10. OpenAPI Specification, swagger.io [dostęp 2019-07-27].

Linki zewnętrzne