# Les commentaires sont précédés d'un signe "#", comme cette ligne. ############# # SCALAIRES # ############# # Les scalaires sont l'ensemble des types YAML qui ne sont pas des collections # (listes ou tableaux associatifs). # Notre objet root (racine), sera une map (carte) et englobera # l'intégralité du document. Cette map est l'équivalent d'un dictionnaire, # hash ou objet dans d'autres langages. clé: valeur autre_clé: une autre valeur valeur_numérique: 100 notation_scientifique: 1e+12 booléen: true valeur_null: null une_autre_valeur_null: ~ clé avec espaces: valeur # Bien qu'il ne soit pas nécessaire de mettre les chaînes de caractères # entre guillemets, cela reste possible, et parfois utile. toutefois: "Une chaîne, peut être contenue entre guillemets." "Une clé entre guillemets.": "Utile si l'on veut utiliser ':' dans la clé." # Les chaînes couvrant plusieurs lignes, peuvent être écrites au choix, # comme un "bloc littéral" (avec '|') ou bien un "bloc replié" (avec '>'). bloc_littéral: | Tout ce bloc de texte sera la valeur de la clé "bloc_littéral", avec préservation des retours à la ligne. Le littéral continue jusqu'à ce que l'indentation soit annulée. Toutes lignes qui seraient "davantage indentées" conservent leur indentation, constituée de 4 espaces. bloc_replié: > Tout ce bloc de texte sera la valeur de la clé "bloc_replié", mais cette fois-ci, toutes les nouvelles lignes deviendront un simple espace. Les lignes vides, comme ci-dessus, seront converties en caractère de nouvelle ligne. Les lignes "plus-indentées" gardent leurs retours à la ligne - ce texte apparaîtra sur deux lignes. ############### # COLLECTIONS # ############### # L'imbrication est créée par indentation. une_map_imbriquée: clé: valeur autre_clé: autre valeur autre_map_imbriquée: bonjour: bonjour # Les clés des maps ne sont pas nécessairement des chaînes de caractères. 0.25: une clé de type flottant # Les clés peuvent également être des objets s'étendant sur plusieurs lignes, # en utilisant le signe "?" pour indiquer le début de la clé. ? | ceci est une clé sur de multiples lignes : et ceci est sa valeur # YAML autorise aussi l'usage des collections à l'intérieur des clés, # mais certains langages de programmation ne le tolère pas si bien. # Les séquences (équivalent des listes ou tableaux) ressemblent à cela : une_séquence: - Objet 1 - Objet 2 - 0.5 # les séquences peuvent contenir des types variés. - Objet 4 - clé: valeur autre_clé: autre_valeur - - Ceci est une séquence - dans une autre séquence # YAML étant un proche parent de JSON, vous pouvez écrire directement # des maps et séquences façon JSON json_map: {"clé": "valeur"} json_seq: [1, 2, 3, "soleil"] ################################ # AUTRES FONCTIONNALITÉES YAML # ################################ # YAML possède une fonctionnalité fort utile nommée "ancres". Celle-ci # vous permet de dupliquer aisément du contenu au sein de votre document. # Les deux clés suivantes auront la même valeur : contenu_ancré: &nom_ancre Cette chaîne sera la valeur des deux clés. autre_ancre: *nom_ancre # Avec les tags YAML, vous pouvez explicitement déclarer des types de données. chaine_explicite: !!str 0.5 # Certains analyseurs syntaxiques (parsers) implémentent des tags spécifiques à # d'autres langages, comme par exemple celui des nombres complexes de Python. python_complex_number: !!python/complex 1+2j ##################### # AUTRES TYPES YAML # ##################### # YAML interprète également les données formatées ISO de type date et datetime, # pas seulement les chaînes et nombres. datetime: 2001-12-15T02:59:43.1Z datetime_avec_espaces: 2001-12-14 21:59:43.10 -5 date: 2002-12-14 # Le tag !!binary indique que la chaîne à suivre est la représentation binaire # d'un blob encodé en base64. En clair ? Une image ! fichier_gif: !!binary | R0lGODlhDAAMAIQAAP//9/X17unp5WZmZgAAAOfn515eXvPz7Y6OjuDg4J+fn5 OTk6enp56enmlpaWNjY6Ojo4SEhP/++f/++f/++f/++f/++f/++f/++f/++f/+ +f/++f/++f/++f/++f/++SH+Dk1hZGUgd2l0aCBHSU1QACwAAAAADAAMAAAFLC AgjoEwnuNAFOhpEMTRiggcz4BNJHrv/zCFcLiwMWYNG84BwwEeECcgggoBADs= # YAML a de même un type "set", semblable à ceci : set: ? item1 ? item2 ? item3 # Comme dans Python, les sets ne sont que des maps contenant des valeurs null ; # le set précédent est l'équivalent du suivant : set2: item1: null item2: null item3: null