YAML è un formato per la serializzazione dei dati facilmente leggibile dagli esseri umani. Sviluppato nel 2001 da Clark Evans e Brian Ingerson, inizialmente YAML era l’acronimo di “Yet Another Markup Language” che è andato perso in favore di “YAML Ain’t a Markup Language” per richiamare la memorizzazione dei dati del linguaggio, al contrario dei soliti linguaggi di markup. YAML prende ispirazione da molti linguaggi di programmazione ed è disponibile per molti di essi come Java, C/C++, Python e Javascript.
YAML si propone di risolvere i seguenti obiettivi:
- Essere facilmente leggibile per gli essere umani;
- Essere portabile tra i vari linguaggi di programmazione;
- Utilizzare strutture dati simili ai linguaggi più utilizzati;
- Essere espressivo e espandibile;
- Facile da implementare ed usare.
Per alcuni sviluppatori YAML è simile al JSON, entrambi sono dei formati per scambiare dati ma la principale differenza tra i due è che la priorità principale di JSON è la semplicità e l’universalità del formato. Garantire questi obiettivi compromette la leggibilità dei dati da parte degli essere umani, per questo motivo la priorità assoluta per YAML è di fornire un formato dati facilmente leggibile dagli esseri umani e offrire un supporto per la serializzazione di strutture di dati native. Un file YAML è più difficile da generare e analizzare, ma è più facile da leggere, ed offre alcuni tipi di dato da utilizzare per il passaggio da un linguaggio di programmazione ad un altro, ciò comporta che un qualsiasi file JSON è anche un file YAML perfettamente valido.
Ecco alcune regole di sintassi per scrivere un file YAML:
- Vengono utilizzati gli spazi per denotare le strutture;
- Il commenti iniziano con il simbolo del cancelletto (#);
- Le liste sono denotate con il simbolo del trattino (–);
- Gli array associativi sono rappresentati utilizzano il simbolo dei due punti (:).
Ecco un esempio di un file YAML:
invoice: 34843
date : 2001-01-23
bill-to: &id001
given : Chris
family : Dumars
address:
lines: |
458 Walkman Dr.
Suite #292
city : Royal Oak
state : MI
postal : 48046
ship-to: *id001
product:
- sku : BL394D
quantity : 4
description : Basketball
price : 450.00
- sku : BL4438H
quantity : 1
description : Super Hoop
price : 2392.00
tax : 251.42
total: 4443.52
comments:
Late afternoon is best.
Backup contact is Nancy
Billsmer @ 338-4338.
In questo esempio è possibile notare che vengono definite 8 chiavi top level con alcune chiavi che contengono degli array o liste. Le stringhe non devono essere racchiuse tra apici e viene utilizzata l’indentazione per determinare la gerarchia degli elementi.
Un esempio di strumento che utilizza i file .yaml è Yeoman per creare una struttura nei progetti software (ad esempio creare cartelle e file per un widget). Per approfondire la sintassi di un file YAML vi rimando alla documentazione ufficiale.