V tomto článku se budeme věnovat tématu YAML široce a podrobně. YAML je dnes velmi aktuální téma, které vyvolalo četné debaty a protichůdné názory. V tomto směru budeme analyzovat různé aspekty související s YAML, od jeho původu až po jeho dopady na současnou společnost. Kromě toho budeme zkoumat různé pohledy a názory odborníků s cílem poskytnout čtenáři úplný a objektivní pohled na toto téma. Nenechte si ujít tento článek, ve kterém odhalíme všechna tajemství YAML.
YAML Ain't Markup Language (zkráceně YAML /jæml/) je formát pro serializaci strukturovaných dat.
Mezi rysy tohoto formátu patří:
3. vydání specifikace formátu, verze 1.2, vyšla 1. října 2009.
string: 'Wendy''s'
unicode: "Sosa did fine.\u263A"
control: "\b1998\t1999\t2000\n"
hex esc: "\x0d\x0a is \r\n"
Víceřádkový řetězec:
quoted: "So does this
quoted scalar.\n"
canonical: 12345
decimal: +12345
octal: 0o14
hexadecimal: 0xC
exponential: 12.3015e+02
fixed: 1230.15
negative infinity: -.inf
not a number: .NaN
fraction: .5
Tzv. časové značky (timestamps) se zadávají ve tvaru RRRR-MM-DD, následovaném volitelným uvedením času, které odděluje buď mezera nebo (velké či malé) písmeno T a čas ve tvaru HH:MM:SS. Za časem může být volitelně uvedeno časové pásmo buď jako celé číslo nebo ve formátu HH:MM.
canonical: 2001-12-15T02:59:43.1Z
iso8601: 2001-12-14t21:59:43.10-05:00
spaced: 2001-12-14 21:59:43.10 -5
date: 2002-12-14
YAML podporuje booleovské hodnoty false a true
- false
- False
- true
- TRUE
YAML podporuje hodnotu NULL, která může být zadána explicitně (null) nebo s použitím tildy ~ nebo může (na místech, kde se očekává hodnota, jako např. prvek sekvence, viz dále) být vynechána.
- Null
- null
-
- NULL
- ~
# toto je poznámka
# vše až do konce řádky je ignorováno
# poznámky mohou začínat na libovolném místě
- 1 # poznámky mohou být vkládány i do řádků s hodnotami,
# ... pak však musí být před # mezera
- CSharp se označuje jako C#
Víceřádkové poznámky (blokové komentáře) nejsou podporovány.
Odpovídá neasociativnímu poli.
- Banány
- Pomeranče
- Mandarinky
Odpovídá asociativnímu poli (ukládá dvojic klíč:hodnota, běžně se označuje termínem hash).
Božena Němcová: Babička
Ernest Hemingway: Stařec a moře
Douglas Addams: Stopařův průvodce po Galaxii
1984: 1984
--- # Seznam knih
Autor: Božena Němcová
Kniha: Babička
---
Autor: Ernest Hemingway
Kniha: Stařec a moře
...
Sekvence „---
“ značí začátek dokumentu, „...
“ konec dokumentu nebo datového proudu.
data: |
There once was a short man from Ealing
Who got on a bus to Darjeeling
It said on the door
"Please don't spit on the floor"
So he carefully spat on the ceiling
specialDelivery: >
Follow the Yellow Brick
Road to the Emerald City.
Pay no attention to the
man behind the curtain.
Data je možné libovolně vnořovat. Úroveň zanoření je určena a označena odsazením textu od levého okraje:
adresa:
ulice: U mlýna
"č. p.": 15 # ve verzi 1.2 nemusí být v uvozovkách
město: Bílé Bělidlo
knihy:
- autor: Božena Němcová
název: Babička
- autor: Ernest Hemingway
název: Stařec a moře
Odkazování dovnitř struktur v YAMLu může být (v závislosti na cílovém jazyku) např.: adresa.ulice
nebo adresa
.
YAML podporuje také zadání více dat v jednom řádku (in-line). Jako např. v JavaScriptu, jsou asociativní pole uvedena ve složených závorkách. Jako znak, oddělující klíč a hodnotou, je dvojtečka, samotné dvojice se oddělují čárkou.
- {name: John Smith, age: 33}
to samé jako:
- name: John Smith
age: 33
Neasociativní pole (seznamy) se v jednom řádku uvádějí v hranatých závorkách.
bill-to: &id001 # definuje identifikátor id001
street: |
123 Tornado Alley
Suite 16
city: East Centerville
state: KS
ship-to: *id001 # reference na id001
state: Kansas # pozměňuje položku
country: USA # doplňuje novou položku
---
a: 123 # celé číslo
b: "123" # řetězec, vynuceno uvozovkami
c: 123.0 # číslo s plovoucí desetinnou čárkou
d: !!float 123 # ditto, přetypování vynuceno klíčovým slovem
e: !!str 123 # přetypování pro řetězec, jako b)
g: Yes # boolean
f: No # boolean
h: !!str Yes # řetězec, přetypování vynuceno klíčovým slovem
i: Yes we have No bananas # řetězec
j: !!bool No # boolean
--- # binární data (base64)
picture: !!binary |
R0lGODlhDAAMAIQAAP//9/X
17unp5WZmZgAAAOfn515eXv
Pz7Y6OjuDg4J+fn5OTk6enp
56enmleECcgggoBADs=mZmE
Níže uvedený řádek (direktiva) dovoluje uvést verzi formátu obsahu, který za ním následuje.
%YAML 1.2
Některé skriptovací jazyky nebo frameworky (např. Symfony) využívají soubory YAML mj. jako tabulku překladů. Do nich pak mohou vkládat „placeholdery“, které slouží jako místa pro doplnění proměnných. Příklad:
messages:
forFree: Nic neplatíš!
payPrice: Zaplatíš %price% Kč.
Použití těchto textů ve Twigu:
{% trans %}messages.pay{% trans %}<br>
{% trans with({'%price%': 99}) %}messages.payPrice{% trans %}