YAML, acronyme de Yet Another Markup Language dans sa version 1.0[1], devenu 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[3]. YAML a été proposé par Clark Evans en 2001[4], et implémenté par ses soins ainsi que par Brian Ingerson et Oren Ben-Kiki.
| Extensions | .yaml, .yml |
|---|---|
| Type MIME | application/yaml |
| PUID | |
| Développé par |
Clark Evans (d) |
| Version initiale |
11 mai 2001, 25 ans |
| 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
modifierL'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. 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 croisillon (
#) et se prolongent sur toute la ligne. Si par contre le croisillon 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'un 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
modifierLa 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
modifierDes 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 :
- 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 pour .NET (C#) ;
- YAML Parser en C#, implémentation presque complète de YAML ;
- YAML pour .NET, Visual Studio et 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
modifier- ↑ (en) « Yet Another Markup Language (YAML) 1.0 »
- ↑ (en) « YAML Ain’t Markup Language (YAML™) Version 1.1 »
- ↑ (en) « RFC 5322: Internet Message Format », sur rfc-editor.org (consulté le 21 mai 2026)
- ↑ YAML Draft 0.1, Clark Evans, 11 mai 2001, Yahoo! Tech groups: sml-dev.
- ↑ « A YAML Primer », sur octoprint.org (consulté le 12 juin 2023).
- ↑ (en) Dataformat backends for Jackson
- ↑ (en) SnakeYAML
- ↑ « Ruby/psych », sur GitHub (consulté le 1er août 2020).
Voir aussi
modifierLiens externes
modifier- (en) Site officiel
- (en) Le format YAML sur The symfony documentation, ou le format YAML expliqué aux développeurs PHP.