YAML

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher

YAML, acronyme récursif de YAML Ain't Markup Language, 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[1], et implémenté par ses soins ainsi que par Brian Ingerson et Oren Ben-Kiki.

Caractéristiques[modifier | modifier le code]

L'idée de fond de YAML est que toute donnée peut être représentée par une combinaison de listes, tableaux (de hachage) 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 et efficace, moins verbeuse que du XML, moins compacte que du CSV, et a été établie de sorte qu'elle soit 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.
  • Une valeur nulle s'écrit avec le caractère tilde (~)
  • Il est possible d'inclure une syntaxe JSON dans une syntaxe YAML.
  • Les items de listes sont dénotés par le tiret (-), suivi d'un espace, à raison d'un item par ligne.
  • Les tableaux sont de la forme clé: valeur, soit à raison d'un couple par ligne.
  • Les scalaires peuvent être entourés de guillemets doubles ("), ou simples ('), ou encore ê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 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[modifier | modifier le code]

La hiérarchie de la structure de données est assurée par une indentation de 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[modifier | modifier le code]

Des bibliothèques pour YAML existent pour les langages suivants :

ActionScript
as3yaml Portage de jvyaml pour Actionscript 3.
C++
surcouche C++ de LibYaml.
voir aussi la bibliothèque C++ native yaml-cpp.
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
jvyaml basé sur Syck API, et inspiré RbYAML.
JYaml petite impleméntation en Java natif.
SnakeYAML YAML 1.1 pour Java 5.
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# Une 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 est en standard, depuis la version 1.8, basé sur SYCK)
Ya2YAML avec support UTF-8 complet.
ZAML nettement plus rapide que l'implémentation standard.
RbYAML Parseur en Ruby natif.
R
CRAN YAML (encapsulation de la bibliothèque LibYAML).
Scala
scala-yaml.
Tcl
Disponible en Tcl 8.4.
XML
YAXML (non finalisé).

Notes et références[modifier | modifier le code]

  1. YAML Draft 0.1, Clark Evans, 11 mai 2001, Yahoo! Tech groups: sml-dev

Voir aussi[modifier | modifier le code]

Liens externes[modifier | modifier le code]