YAML

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită pe 24 decembrie 2021; verificările necesită 4 modificări .
YAML
Extensie .yamlsau.yml
tip MIME application/x-yaml [1] [2] , text/yaml [3] [2] și text/x-yaml [4]
Dezvoltator Clark Evans [d]
publicat 11 mai 2001 [5]
Ultima lansare 1.2.2 (1 octombrie 2021 ) ( 2021-10-01 )
Tip de format Schimb de date
Extins din XML , Perl și JSON
format deschis ? da
Site-ul web yaml.org

YAML ( acronim engleză  "Yet Another Markup Language"  - " Another Markup Language ", mai târziu - acronim recursiv engleză  "YAML Ain't Markup Language" - "YAML - not a markup language") -  format de serializare a datelor "prietenos" , aproape conceptual la  limbaje de marcare , dar concentrat pe comoditatea I/O a structurilor de date tipice ale multor limbaje de programare .

Interpretarea numelui reflectă istoria dezvoltării: în primele etape, YAML a reprezentat Yet Another Markup Language („ Un alt limbaj de marcare ”) și a fost chiar poziționat ca un concurent pentru XML , dar a fost redenumit ulterior pentru a se concentra pe  date și nu pe marcarea documentelor [6 ] .

Scopurile creației

Conform obiectivelor declarate de Clark Evans ,  YAML 1.0 urmărește [7] :

  1. a fi de înțeles pentru o persoană;
  2. suportă structuri de date asemănătoare limbajelor de programare ;
  3. să fie portabil între limbaje de programare;
  4. utilizați un model de date solid pentru a sprijini instrumentele convenționale;
  5. suport pentru procesarea fluxului ;
  6. să fie expresiv și extensibil;
  7. să fie ușor de implementat și utilizat;

Prin revizuirea actuală a YAML (1.2), au fost aduse unele modificări la aceste ținte [8] :

Sintaxă

Sintaxa YAML este minimalistă, mai ales în comparație cu sintaxa XML . Specificația indică faptul că standardul RFC 822 a avut o mare influență . Mai jos sunt mostre ale diferitelor componente de marcare. Trebuie remarcat faptul că, având opțiunea de format pe o singură linie, JSON este un subset valid de YAML.

Secvențe (liste)

--- # Lista de filme: secvență format bloc - Casablanca - Spellbound - Notorious --- # Lista de cumpărături: secvență cu o singură linie [ lapte , pâine , ouă , suc ]

Mapări nume-valoare (dicționare)

--- # Nume format bloc : John Smith vârsta : 33 --- # Format cu o singură linie { numele : John Smith , vârsta : 33 }

Blocare literale

Spărturile de linie sunt păstrate --- | A existat un tânăr din Warwick care avea motive să se simtă euforic Pentru că ar putea, prin alegere, să aibă o erecție triună ionică, corintică și doric Spărturile de linie dispar ---> Textul împachetat va fi pliat într-un singur paragraf liniile goale denotă întreruperi de paragraf

Secvențe de comparații

- { numele : John Smith , vârsta : 33 } - numele : Mary Smith vârsta : 27

Potrivirea din secvențe

bărbați : [ John Smith , Bill Jones ] femei : - Mary Smith - Susan Williams

Elementele principale ale YAML:

  • Fluxurile YAML folosesc caractere Unicode imprimabile, atât UTF-8, cât și UTF-16
  • spațiile indentate (nu sunt permise file) sunt folosite pentru a indica structura
  • comentariile încep cu un semn hash ( # ), pot începe oriunde pe o linie și pot continua până la sfârșitul liniei
  • listele sunt indicate printr-o cratimă de început ( - ) cu un membru al listei pe linie sau membrii listei sunt încadrați între paranteze drepte ( [ ] ) și despărțiți prin virgulă și spațiu ( , )
  • tablourile asociative sunt reprezentate de două puncte urmate de un spațiu ( : ) ca o cheie: valoare, o pereche cheie-valoare pe linie sau ca perechi cuprinse între acolade și separate prin virgulă și spațiu ( , )
    • o cheie dintr-o matrice asociativă poate fi prefixată cu un semn de întrebare ( ? ), care vă permite să specificați o cheie complexă, cum ar fi o listă
  • șirurile sunt scrise fără ghilimele, dar pot fi incluse între ghilimele simple sau duble
    • în interiorul ghilimelelor duble, pot fi folosite caractere de tip C care încep cu o bară oblică inversă ( \ ) .
  • YAML vă permite să specificați substituții folosind ancore și aliasuri (*). Exemplu
alias : #config secvență - &myAlias1 datakey : dataval 1 moredata : morevals 1 - &myAlias2 datakey : dataval 2 moredata : morevals 2 config : - *myAlias1 # *myAlias1 va fi înlocuit cu [{"datakey": "dataval 1", "după parsing moredata": "morevals 1"}]
  • specificarea explicită a tipului se face prin „!![indicația tipului]”. De exemplu, !!str 100 va analiza valoarea șirului „100” în loc de întregul 100.
  • Valorile date/ora sunt specificate în formatul AAAA-LL-ZZ sau AAAA-LL-ZZ HH:MM:SS. Dacă trebuie să specificați data ca șir, trebuie să o includeți între ghilimele ("2012-12-21")

Exemplu

În unele proiecte, trebuie să stocați o configurație care descrie maparea ( legături în limba engleză  ) a comenzilor IRC la funcții folosind expresii regulate .

Iată configurația originală prezentată într-un tabel:

ircEvent metodă expresie regulată
PRIVMSG nouUri „^http://.*”
PRIVMSG deleteUri „^șterge.*”
PRIVMSG aleatoriuUri „^aleatoriu.*”

În YAML, această configurație poate fi reprezentată după cum urmează:

legături : - ircEvent : metoda PRIVMSG : newUri regexp : '^http://.*' - ircEvent : metoda PRIVMSG : deleteUri regexp : '^delete.*' - ircEvent : metoda PRIVMSG : randomUri regexp : '^aleatoriu.*'

sau

legături : - { ircEvent : PRIVMSG , metoda : newUri , expresie regulă : '^http://.*' } - { ircEvent : PRIVMSG , metodă : deleteUri , expresie regulă : '^delete.*' } - { ircEvent : PRIVMSG , metodă : randomUri , regexp : '^random.*' }

Pentru comparație, în reprezentarea XML, această configurație poate fi reprezentată după cum urmează:

<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>

sau

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

Elementele XML imbricate pot fi utilizate pentru a afișa structuri arbitrare, iar YAML este mai aproape de afișarea modelelor de date tipice din Ruby , Perl , Python , Java , permițându-vă să descrieți combinații libere de secvențe, mapări și tipuri scalare - adică mai aproape de real. structuri de date ale limbajelor de programare și nu necesită convenții DOM diferite pentru maparea structurilor de date către și de la documente, așa cum este cerut de XML .

Utilizare

YAML este folosit în principal ca format pentru fișierele de configurare pentru Ruby on Rails , Docker Compose [9] , Dancer , Symfony , framework GAE , Google App Engine și Dart . Este limbajul principal pentru descrierea claselor, resurselor și manifestelor pentru pachetele de aplicații OpenStack Murano Project . si Swagger.io . Folosit și în mod implicit pentru configurarea casei inteligente în sistemul Home Assistant .

Vezi și

Note

  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. Dacă YAML nu este un limbaj de markup, ce este?  (engleză) . Stack Overflow (6 august 2011). Preluat la 15 martie 2021. Arhivat din original la 23 aprilie 2021.
  7. Oren Ben-Kiki, Clark Evans, Brian Ingerson. YAML Ain't Markup Language (YAML™) 1.0  ( 29 ianuarie 2004). Preluat la 15 martie 2021. Arhivat din original la 6 mai 2021.
  8. Oren Ben-Kiki, Clark Evans, Ingy dot Net. YAML Ain't Markup Language (YAML™) Versiunea 1.2 (1 octombrie 2009). Preluat la 15 martie 2021. Arhivat din original la 24 ianuarie 2019.
  9. Prezentare generală a Docker  Compose . Documentație Docker (16 martie 2022). Preluat la 16 martie 2022. Arhivat din original la 18 februarie 2020.

Link -uri

  • YAML.ORG  (engleză) . - site-ul oficial. Consultat la 29 noiembrie 2010. Arhivat din original pe 10 februarie 2012.
  • YAML . CustisWiki . InformSystems personalizate. Consultat la 29 aprilie 2006. Arhivat din original pe 10 februarie 2012.
  •  Validator YAML . - validator YAML.