Accueil🇫🇷Chercher

YAML

YAML, acronyme de Yet Another Markup Language dans sa version 1.0[1], devient l'acronyme récursif de YAML Ain't Markup Language (« YAML n’est pas un langage de balisage ») dans sa version 1.1[2], est un format de représentation de données par sérialisation Unicode. Il reprend des concepts d'autres langages comme XML, ou encore du format de message électronique tel que documenté par RFC 2822. YAML a été proposé par Clark Evans en 2001[3], et implémenté par ses soins ainsi que par Brian Ingerson et Oren Ben-Kiki.

YAML
Caractéristiques
Extensions
.yaml, .yml
Type MIME
application/x-yaml, text/yaml, text/x-yaml
PUID
Développé par
Clark Evans (d)
Version initiale
Basé sur
Spécification
Site web
(en) yaml.org

Son objectif est de représenter des informations plus élaborées que le simple CSV en gardant cependant une lisibilité presque comparable.

En 2015, Symfony 2, Drupal 8 et phpMyAdmin, entre autres, l'utilisent pour leurs formats d'entrée et de sortie.

Caractéristiques

L'idée de YAML est que presque toute donnée peut être représentée par combinaison de listes, tableaux associatifs et données scalaires. YAML décrit ces formes de données (les représentations YAML), ainsi qu'une syntaxe pour présenter ces données sous la forme d'un flux de caractères (le flux YAML).

Une application informatique passe du flux YAML à la représentation YAML par l'opération de chargement (anglais load). Elle passe de la représentation au flux par l'opération de déchargement (anglais dump).

La syntaxe du flux YAML est relativement simple, efficace, moins verbeuse que du XML, moins compacte cependant que du CSV. Cela est notamment possible grâce au langage simplifié de feuilles de style Sass, qui se charge de génèrer les fichiers CSS nécessaires de manière automatique[4]. Elle a été établie pour être le plus lisible possible par des humains, tout en pouvant être mise en correspondance facilement avec les types de données précités, communs dans les langages de haut niveau. À ces langages il emprunte certaines notations :

  • les commentaires sont signalĂ©s par le signe dièse (#) et se prolongent sur toute la ligne. Si par contre le dièse apparaĂ®t dans une chaine, il signifie alors un nombre littĂ©ral ;
  • une valeur nulle s'Ă©crit avec le caractère tilde (~) ;
  • il est possible d'inclure une syntaxe JSON dans une syntaxe YAML ;
  • les Ă©lĂ©ments de listes sont dĂ©notĂ©s par le tiret (-), suivi d'une espace, Ă  raison d'un Ă©lĂ©ment par ligne ;
  • les tableaux sont de la forme clĂ©: valeur, Ă  raison d'un couple par ligne ;
  • les scalaires peuvent ĂŞtre entourĂ©s de guillemets doubles ("), ou simples ('), sachant qu'un guillemet s'Ă©chappe avec un antislash (\), alors qu'une apostrophe s'Ă©chappe avec une autre apostrophe[5]. Ils peuvent de plus ĂŞtre reprĂ©sentĂ©s par un bloc indentĂ© avec des modificateurs facultatifs pour conserver (|) ou Ă©liminer (>) les retours Ă  la ligne ;
  • plusieurs documents rassemblĂ©s dans un seul fichier sont sĂ©parĂ©s par trois traits d'union (---) ; trois points (...) optionnels marquent la fin d'un document dans un fichier ;
  • les nĹ“uds rĂ©pĂ©tĂ©s sont initialement signalĂ©s par une esperluette (&) puis sont rĂ©fĂ©rencĂ©s avec un astĂ©risque (*) ; JSON, un langage concurrent de YAML, est compatible avec la syntaxe de JavaScript mais ne supporte pas cette notion de rĂ©fĂ©rence ;
  • l'indentation, par des espaces, manifeste une arborescence.

Il est aussi possible de préciser le type (anglais tag) d'une donnée. Cependant, cette précision n'opère aucune contrainte, et fonctionne plutôt comme un marquage, ou une modélisation.

Un fichier YAML est analysable en une seule passe de lecture.

La syntaxe YAML se distingue de JSON par le fait qu'il se veut plus facilement lisible par une personne. Il se distingue du XML par le fait qu'il s'intéresse d'abord à la sérialisation de données, et moins à la documentation.

phpMyAdmin permet l'export des bases MySQL en YAML, entre autres formats.

Exemple

La hiérarchie de la structure de données est assurée par une indentation homogène, ici quatre espaces par niveau.

---
receipt:     Oz-Ware Purchase Invoice
date:        2012-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.
...

Implémentations

Des bibliothèques pour YAML existent pour différents langages.

ActionScript :

  • as3yaml Portage de jvyaml pour Actionscript 3

C :

  • LibYAML
  • SYCK

C++ :

  • surcouche C++ de LibYAML
  • bibliothèque C++ native yaml-cpp

Crystal

  • module YAML inclus dans la bibliothèque standard Crystal

D :

  • D:YAML

Erlang :

  • yamler basĂ© sur LibYAML

Go :

  • goyaml basĂ© sur LibYAML mais rĂ©Ă©crit entièrement en Go

Haskell :

  • YamlReference implĂ©mentation de la syntaxe YAML et utilitaires
  • yaml encapsulation de LibYAML
  • HsSyck interface de SYCK
  • json2yaml conversion

Java :

  • Jackson[6]
  • jvyaml basĂ© sur Syck API, et inspirĂ© RbYAML
  • SnakeYAML, gère le YAML 1.1[7]

JavaScript :

  • JS-YAML, rĂ©ecriture native de PyYAML. Le parseur YAML 1.1+ le plus complet en JS
  • CommonJS js-yaml, sous-ensemble rĂ©duit de YAML
  • javascript-yaml-parser
  • jsyaml, code on stackoverflow

Lua :

  • Lua-Syck
  • yaml, encapsulation de LibYAML

.NET Framework :

  • Yaml Library for .NET (C#)
  • YAML Parser in C#, implĂ©mentation presque complète de YAML. Écrit en C#.
  • YAML for .NET, Visual Studio and Powershell

OCaml :

  • OCaml-Syck

Objective-C :

  • YAML.framework, basĂ© sur LibYAML.
  • syck/ext/cocoa

Perl :

  • YAML, interface vers plusieurs parseurs YAML.
  • YAML::Tiny, implĂ©mente un sous-ensemble utilisable de YAML ; petit, en Perl pur, et plus rapide que l'implĂ©mentation complète
  • YAML::Syck, encapsulation de la bibliothèque C SYCK, complète et rapide
  • YAML::XS, encapsulation de LibYaml. Meilleure compatibilitĂ© YAML 1.1
  • YAML::Any, dĂ©tecte la meilleure implĂ©mentation YAML et l'encapsule avec l'API standard YAML

PHP :

  • Spyc, implĂ©mentation en pur PHP
  • PHP-Syck, encapsulation de la bibliothèque SYCK
  • Symfony YAML Component, issu du framework Symfony
  • PECL Yaml, encapsulation de la bibliothèque LibYAML

Python :

  • PyYaml, très complète. Python natif ou au choix utilise LibYAML.
  • PySyck, encapsulation de la bibliothèque SYCK.

Ruby :

  • YAML fait partie de la bibliothèque standard (gem Psych[8], encapsulant LibYAML)

R :

  • yaml, package encapsulant la bibliothèque LibYAML

Rust :

  • yaml-rust, ImplĂ©mentation de YAML 1.2 en pur Rust

Scala :

  • scala-yaml

Tcl :

  • Disponible en Tcl 8.4

XML :

  • YAXML, non finalisĂ©

Notes et références

  1. (en) « Yet Another Markup Language (YAML) 1.0 »
  2. (en) « YAML Ain’t Markup Language (YAML™) Version 1.1 »
  3. YAML Draft 0.1, Clark Evans, 11 mai 2001, Yahoo! Tech groups: sml-dev.
  4. « Présentation des YAML », sur IONOS Digitalguide (consulté le )
  5. « A YAML Primer », sur octoprint.org (consulté le ).
  6. (en) Dataformat backends for Jackson
  7. (en) SnakeYAML
  8. « Ruby/psych », sur GitHub (consulté le ).

Voir aussi

Liens externes

Cet article est issu de wikipedia. Text licence: CC BY-SA 4.0, Des conditions supplémentaires peuvent s’appliquer aux fichiers multimédias.