YAML

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 24. prosince 2021; kontroly vyžadují 4 úpravy .
YAML
Rozšíření .yamlnebo.yml
MIME typ application/x-yaml [1] [2] , text/yaml [3] [2] a text/x-yaml [4]
Vývojář Clark Evans [d]
zveřejněno 11. května 2001 [5]
Poslední vydání 1.2.2 (1. října 2021 ) ( 2021-10-01 )
Typ formátu Výměna dat
Rozšířeno z XML , Perl a JSON
otevřený formát ? Ano
webová stránka yaml.org

YAML ( zkratka anglicky  "Yet Another Markup Language"  - " Another Markup Language ", později - rekurzivní zkratka angličtina  "YAML Ain't Markup Language" - "YAML - not a markup language") - "přátelský"  formát serializace dat , koncepčně blízký na  značkovací jazyky , ale zaměřil se na pohodlí I/O typických datových struktur mnoha programovacích jazyků .

Interpretace názvu odráží historii vývoje: v raných fázích YAML znamenal Yet Another Markup Language (“ Another Markup Language ”) a byl dokonce postaven jako konkurent XML , ale později byl přejmenován, aby se zaměřil na  data , a není na označení dokumentu [6] .

Účely tvorby

Podle cílů uvedených Clarkem Evansem se  YAML 1.0 zaměřuje na [7] :

  1. být pro člověka srozumitelný;
  2. podpora datových struktur podobných programovacím jazykům ;
  3. být přenositelný mezi programovacími jazyky;
  4. používat pevný datový model pro podporu konvenčních nástrojů;
  5. podpora zpracování proudu ;
  6. být expresivní a rozšiřitelný;
  7. snadno implementovat a používat;

Současnou revizí YAML (1.2) byly provedeny některé změny těchto cílů [8] :

Syntaxe

Syntaxe YAML je minimalistická, zejména ve srovnání se syntaxí XML . Specifikace naznačuje, že velký vliv měla norma RFC 822 . Níže jsou ukázky různých značkovacích komponent. Je třeba poznamenat, že možnost jednořádkového formátu dělá z JSON platnou podmnožinu YAML.

Sekvence (seznamy)

--- # Seznam filmů: sekvence blokového formátu - Casablanca - Spellbound - Notorious --- # Nákupní seznam: sekvence jednoho řádku [ mléko , chléb , vejce , džus ]

Mapování jmen a hodnot (slovníky)

--- # Název formátu bloku : John Smith věk : 33 --- # Formát jednoho řádku { jméno : John Smith , věk : 33 }

Blokové literály

Konce řádků jsou zachovány --- | Byl tu jeden mladík z Warwicka , který měl důvod cítit se euforicky , protože mohl volbou mít trojjedinou erekci iónskou, korintskou a dórskou Konce řádků zmizí ---> Zalomený text bude složen do jednoho odstavce prázdné řádky označují konce odstavců

Sekvence srovnání

- { jméno : John Smith , věk : 33 } - jméno : Mary Smith věk : 27

Párování ze sekvencí

muži : [ John Smith , Bill Jones ] ženy : - Mary Smith - Susan Williams

Hlavní prvky YAML:

  • Datové proudy YAML používají tisknutelné znaky Unicode, a to jak UTF-8, tak UTF-16
  • k označení struktury se používají odsazené mezery (bez tabulátorů).
  • komentáře začínají znakem hash ( # ) , mohou začínat kdekoli na řádku a pokračovat až do konce řádku
  • seznamy jsou označeny pomlčkou na začátku ( - ) s jedním členem seznamu na řádek nebo jsou členy seznamu uzavřeny v hranatých závorkách ( [ ] ) a odděleny čárkou a mezerou ( , )
  • asociativní pole jsou reprezentována dvojtečkou následovanou mezerou ( : ) jako klíč:hodnota, jeden pár klíč-hodnota na řádek nebo jako páry uzavřené ve složených závorkách a oddělené čárkou a mezerou ( , )
    • klíč v asociativním poli může mít předponu otazník ( ? ), který umožňuje zadat komplexní klíč, jako je seznam
  • řetězce jsou psány bez uvozovek, ale mohou být uzavřeny v jednoduchých nebo dvojitých uvozovkách
    • uvnitř dvojitých uvozovek lze použít uvozené znaky ve stylu C začínající zpětným lomítkem ( \ ) .
  • YAML umožňuje specifikovat substituce pomocí kotev & a aliasů (*). Příklad
aliasy : #config sekvence - &myAlias1 datakey : dataval 1 moredata : morevals 1 - &myAlias2 datakey : dataval 2 moredata : morevals 2 config : - *myAlias1 # *myAlias1 bude nahrazeno [{"datakey": "dataval 1", " po parsing moredata": "morevals 1"}]
  • explicitní specifikace typu se provádí pomocí '!![označení typu]'. Například !!str 100 bude analyzovat hodnotu řetězce "100" místo celého čísla 100.
  • Hodnoty data/času jsou uvedeny ve formátu RRRR-MM-DD nebo RRRR-MM-DD HH:MM:SS. Pokud potřebujete zadat datum jako řetězec, musíte jej uzavřít do uvozovek ("2012-12-21")

Příklad

V některých projektech potřebujete uložit konfiguraci, která popisuje mapování ( anglické  vazby ) příkazů IRC na funkce pomocí regulárních výrazů .

Zde je původní konfigurace uvedená v tabulce:

ircEvent metoda regulární výraz
PRIVMSG newUri "^http://.*"
PRIVMSG deleteUri "^smazat.*"
PRIVMSG randomUri "^náhodné.*"

V YAML může být tato konfigurace reprezentována následovně:

vazby : - ircEvent : metoda PRIVMSG : newUri regexp : '^http://.*' - ircEvent : PRIVMSG metoda : deleteUri regexp : '^delete.*' - ircEvent : PRIVMSG metoda : randomUri regexp : '^random.*'

nebo

vazby : - { ircEvent : PRIVMSG , metoda : newUri , regexp : '^http://.*' } - { ircEvent : PRIVMSG , metoda : deleteUri , regexp : '^delete.*' } - { ircEvent : PRIVMSG , metoda : randomUri , regulární výraz : '^random.*' }

Pro srovnání, v reprezentaci XML může být tato konfigurace reprezentována následovně:

< bindings> <binding> <ircEvent> PRIVMSG </ircEvent> <method> newUri </method> <regexp> ^http://.* </regexp> </binding> <binding> <ircEvent> PRIVMSG </ircEvent > <method> deleteUri </method> <regexp> ^delete.* </regexp> </binding> <binding> <ircEvent> PRIVMSG </ircEvent> <method> randomUri </method> <regexp> ^random.* </regexp> </binding> </bindings>

nebo

<vazby> <binding ircEvent= "PRIVMSG" method= "newUri" regexp= "^http://.*" /> <binding ircEvent= "PRIVMSG" method= "deleteUri" regexp= "^delete.*" /> <binding ircEvent= "PRIVMSG" method= "randomUri" regexp= "^random.*" /> </bindings>

Vnořené XML elementy lze použít k zobrazení libovolných struktur a YAML je blíže zobrazení typických datových modelů z Ruby , Perlu , Pythonu , Java , což umožňuje popisovat volné kombinace sekvencí, mapování a skalárních typů – tedy blíže skutečnému datové struktury programovacích jazyků a nevyžaduje různé konvence DOM pro mapování datových struktur do dokumentů az dokumentů, jak vyžaduje XML .

Použití

YAML se používá hlavně jako formát pro konfigurační soubory pro Ruby on Rails , Docker Compose [9] , Dancer , Symfony , GAE framework , Google App Engine a Dart . Je to primární jazyk pro popis tříd, zdrojů a manifestů pro balíčky aplikací OpenStack Murano Project . a Swagger.io . Ve výchozím nastavení se také používá pro konfiguraci chytré domácnosti v systému Home Assistant .

Viz také

Poznámky

  1. shared-mime-info - GitLab .
  2. 1 2 Rails - GitHub .
  3. shared-mime-info - GitLab .
  4. shared-mime-info - GitLab .
  5. Evans K. YAML Draft 0.1 Yahoo! .
  6. Pokud YAML není značkovací jazyk, co to je?  (anglicky) . Stack Overflow (6. srpna 2011). Získáno 15. března 2021. Archivováno z originálu dne 23. dubna 2021.
  7. Oren Ben-Kiki, Clark Evans, Brian Ingerson. YAML Ain't Markup Language (YAML™) 1.0  ( 29. ledna 2004). Získáno 15. března 2021. Archivováno z originálu dne 6. května 2021.
  8. Oren Ben-Kiki, Clark Evans, Ingy dot Net. YAML Ain't Markup Language (YAML™) verze 1.2 (1. října 2009). Získáno 15. března 2021. Archivováno z originálu dne 24. ledna 2019.
  9. Přehled Docker  Compose . Dokumentace Docker (16. března 2022). Získáno 16. března 2022. Archivováno z originálu dne 18. února 2020.

Odkazy

  • YAML.ORG  (anglicky) . - oficiální stránka. Získáno 29. listopadu 2010. Archivováno z originálu 10. února 2012.
  • YAML . CustisWiki . Vlastní InformSystems. Získáno 29. dubna 2006. Archivováno z originálu 10. února 2012.
  •  Validátor YAML . - YAML validátor.