YAML Ain’t Markup Language (YAML) est un langage de sérialisation des données pour la plupart des langages de programmation. Comprenons-le en détail.

YAML est un surensemble strict de JSON, donc tout ce qui est écrit en JSON peut être analysé en YAML. Il est principalement utilisé pour les fichiers de configuration dans les projets et il est très facile de comprendre et de lire le code.

L’extension des fichiers YAML est .yaml ou .yml

Dans ce tutoriel, nous allons apprendre les différents types de données présents dans YAML et travailler avec YAML en Python. À la fin de ce tutoriel, vous serez en mesure de comprendre le YAML et sa syntaxe.

Je suppose que vous êtes familier avec Python, si ce n’est pas le cas, consultez les ressources d’apprentissage de Python.

Le YAML suit une syntaxe d’indentation similaire à celle de Python. Mais il n’autorise pas la tabulation (rappelez-vous-en lorsque vous écrivez des fichiers YAML) pour l’indentation.

Configuration

  • Installez un module Python appelé pyyaml pour travailler avec des fichiers YAML .
pip install pyyaml
  • Copiez et collez le code suivant dans un fichier et sauvegardez-le sous le nom de yaml_script.py
import yaml

yaml_file = open("learn_yaml.yaml", 'r')
yaml_content = yaml.load(yaml_file)

print("Clé : Valeur")
for key, value in yaml_content.items() :
    print(f"{clé} : {valeur}")
  • Nous allons utiliser le script ci-dessus pour convertir le code YAML en Python et vérifier les différents types de données.
  • Créez un fichier appelé learn_yaml.yaml et mettez-y en pratique les différents exemples que nous allons aborder dans ce tutoriel.

Sans plus attendre, entrons dans la section des types de données du YAML.

Type de données en YAML

Tout ce qui se trouve dans le YAML est une paire clé-valeur.

Dans les différents langages de programmation, les paires clé-valeur sont appelées différemment : dictionnaires, hachages, objets, etc… Ce sont les éléments constitutifs du YAML.

Les clés peuvent être des chaînes (entre guillemets ou normales), des flottants ou des entiers (la prise en charge peut changer dans une future mise à jour). Les valeurs peuvent être de n’importe quel type de données pris en charge par YAML.

Voyons les différents types de données présents dans YAML.

Nombres

YAML prend en charge les nombres entiers, les nombres flottants et les nombres flottants exponentiels.

entier : 123
flottant : 123.123
exponentiel_float : 1.34e 3

Lorsque vous évaluez le code ci-dessus avec le script Python, vous obtenez le résultat suivant.

Clé : Valeur
entier : 123
float : 123.123
exponentiel_float : 1340.0

Les valeurs peuvent être représentées dans différents systèmes de numération tels que le décimal, l’octal et l’ hexadécimal.

  • Le zéro (0 ) initial indique qu’il s’agit d’un nombre octal.
  • Le préfixe 0x représente sa valeur hexadécimale.

Voyez l’exemple ci-dessous.

nombre entier : 123
octal : 0123
hexa : 0x123

Nous pouvons voir les valeurs décimales converties des valeurs octales et hexadécimales en exécutant notre script Python. Vous devriez voir la sortie exacte comme suit.

Clé : Valeur
entier : 123
octal : 83
hexa : 291

Une autre caractéristique intéressante de YAML est que nous pouvons représenter NAN (Not A Number) et l’infini.

not_a_number : .NAN
infini : .inf
negative_infinity : -.inf

Exécutez le script Python, vous verrez les valeurs de NAN et inf converties en Python.

Clé : Valeur
not_a_number : nan
infini : inf
negative_infinity : -inf

C’est tout pour les types numériques en YAML.

Chaînes de caractères

Les chaînes de caractères en YAML peuvent être représentées avec ou sans guillemets. Les deux sont similaires. Contrairement à JSON, il n’y a pas de règle stricte pour mettre chaque chaîne entre guillemets. Mais si nous devons utiliser les séquences d’échappement, nous devons utiliser des guillemets doubles.

Voyons quelques exemples de chaînes de caractères.

chaîne de caractères : Bonjour, je suis une chaîne
chaîne avec caractère d'échappement : Hi, I am a newline \n character. Et je ne fonctionne pas :(
chaîne avec caractère d'échappement fonctionnel : "Bonjour, je suis un caractère newline \n. Et je travaille :)"

Le caractère de retour à la ligne dans la paire clé-valeur de la section fonctionne comme prévu. Comme nous l’avons déjà dit, nous devons utiliser des guillemets doubles pour travailler avec des séquences d’échappement.

Nous avons utilisé des guillemets doubles dans la paire clé-valeur suivante et cela fonctionne comme prévu. Interprétez le code YAML ci-dessus avec notre script Python. Vous obtiendrez le résultat suivant.

Clé : Valeur
chaîne : Bonjour, je suis une chaîne de caractères
chaîne avec caractère d'échappement : Hi, I am a newline \n character. Et je ne fonctionne pas :(
chaîne avec caractère d'échappement fonctionnel : Bonjour, je suis un caractère 
et je ne fonctionne pas :( Et je fonctionne :)

Il existe deux caractères spéciaux dans YAML que nous pouvons utiliser pour écrire plusieurs phrases comme valeur d’une clé. Imaginons que nous devions diviser une longue phrase en plusieurs lignes. Dans ce type de scénario, nous pouvons utiliser le caractère fold (plus grand que >) ou block (pipe |) pour écrire plusieurs lignes.

Quelle est la différence entre les caractères de pliage et de blocage ? J’y viens.

Le caractère depliage n’interprète pas les nouvelles lignes, alors que le caractère de bloc le fait.

Voyons les exemples.

chaîne de plusieurs lignes avec le caractère fold : >
  Il s'agit d'une
  ligne multiple
  chaîne de plusieurs lignes avec le caractère fold
  caractère de pliage. N'oubliez pas d'utiliser
  l'indentation. Les nouvelles lignes ne seront pas
  interprétées.
chaîne de plusieurs lignes avec caractère de bloc : |
  Il s'agit d'une
  ligne multiple
  chaîne de caractères avec
  avec un caractère de pliage. N'oubliez pas d'utiliser
  l'indentation. Les nouvelles lignes seront
  interprétées.

Exécutez le script Python et vous verrez la différence entre les caractères de pliage et de blocage . Et n’oubliez pas d’utiliser l’indentation.

Clé : Valeur
chaîne de plusieurs lignes avec caractère de pliage : Il s'agit d'une chaîne de plusieurs lignes avec un caractère de pliage. N'oubliez pas d'utiliser l'indentation. Les nouvelles lignes ne seront pas interprétées.

chaîne de plusieurs lignes avec caractère de bloc : Il s'agit d'une chaîne de
ligne multiple
chaîne de caractères avec caractère
caractère. N'oubliez pas d'utiliser
l'indentation. Les nouvelles lignes seront
interprétées.

Booléens

En YAML, nous pouvons représenter les valeurs booléennes True et False de trois manières différentes. Regardez-les.

  • Les valeurs True, On et Yes sont considérées comme True en YAML.
  • Les valeurs False, Off et No sont considérées comme False en YAML.
random_key_1 : Vrai
random_key_2 : Activé
random_key_3 : Oui
random_key_4 : Faux
random_key_5 : Désactivé
random_key_6 : Non

Si vous interprétez le code YAML ci-dessus, vous obtiendrez les 3 premières valeurs de clé comme True et les 3 suivantes comme False.

Clé : Valeur
random_key_1 : Vrai
random_key_2 : Vrai
random_key_3 : Vrai
random_key_4 : Faux
random_key_5 : Faux
random_key_6 : Faux

Nul

YAML prend en charge la valeur null de la même manière que JSON. Nous pouvons utiliser le mot-clé null ou le symbole tilde(~) pour définir la valeur null en YAML. YAML a de belles alternatives, n’est-ce pas ? Oui, elles sont plutôt cool.

null_case_1 : null
null_case_2 : ~

Exécutez le script Python. Vous obtiendrez les deux valeurs sous la forme None , car Python utilise None au lieu du mot-clé null .

Clé : Valeur
null_case_1 : Aucun
null_case_2 : Aucun

Tableaux

Nous pouvons spécifier les tableaux de la même manière que Python dans YAML. Ou nous pouvons écrire tous les éléments du tableau dans des lignes séparées précédées d’un trait d’union (-). Voyons un exemple pour chaque représentation.

langages_de_programmation : [Python, JavaScript, C, HTML, CSS]
bibliothèques : [React, TailwindCSS]

Dans le code YAML ci-dessus, nous avons utilisé des crochets similaires aux listes Python. Voyons une autre façon de représenter les tableaux en YAML (cela ressemble aux listes markdown).

langages_de_programmation :
  - Python
  - JavaScript
  - C
  - HTML
  - CSS
bibliothèques :
  - React
  - TailwindCSS

Si vous utilisez notre script Python pour interpréter les exemples ci-dessus. Vous obtiendrez le résultat suivant.

langages_de_programmation : [Python, JavaScript, C, HTML, CSS]
bibliothèques : [React, TailwindCSS]

Nous pouvons avoir des dictionnaires dans la liste et pas seulement des chaînes de caractères, des nombres, etc..,

langages_de_programmation :
- Python :
auteur : Guido van Rossum
- JavaScript :
auteur : Brendan Eich
- C :
auteur : Brendan Eich Dennis Ritchie
bibliothèques :
- React :
popularité : élevée
- TailwindCSS :
popularité : élevée

Vous obtiendrez un tableau de dictionnaires si vous interprétez le code YAML ci-dessus avec notre script Python.

Clé : Valeur
programming_languages : [{'Python' : {'auteur' : 'Guido van Rossum'}}, {'JavaScript' : {'auteur' : 'Brendan Eich'}}, {'C' : {'auteur' : 'Dennis Ritchie'}}]
bibliothèques : [{'React' : {'popularité' : 'High'}}, {'TailwindCSS' : {'popularité' : 'High'}}]

Dictionnaires

Nous avons déjà vu la syntaxe des dictionnaires dans les exemples ci-dessus. Pour résumer rapidement, les dictionnaires sont des paires clé-valeur. Nous pouvons utiliser n’importe quel type de données valide comme valeur de la clé. YAML supporte même les dictionnaires imbriqués.

Voyons un exemple.

dictionnaire :
  je suis clé : je suis valeur

dictionnaire imbriqué :
  clé imbriquée :
    je suis clé imbriquée : je suis valeur imbriquée

Si vous interprétez le code ci-dessus, vous obtiendrez le même résultat.

Clé : Valeur
dictionnaire : {'je suis la clé' : 'je suis la valeur'}
dictionnaire imbriqué : {'nested key' : {'i am nested key' : 'i am nested value'}}

Savez-vous que vous pouvez convertir une liste en dictionnaire en Python?

Ensemble

YAML prend en charge un autre type de données appelé set. Set contient des valeurs uniques similaires au type de données set de Python. Les éléments de set sont précédés du point d’interrogation ( ?) comme les éléments de liste précédés de traits d’union (-).

Nous devons mentionner que le type de données est set en utilisant !!set après le nom du set.

Regardez l’exemple suivant.

je suis un ensemble : !!ensemble
  ? 1
  ? 2
  ? 2
  ? 3

Comme l’ensemble ne contient que des valeurs uniques, vous n’obtiendrez pas 2 deux fois lorsque vous interprétez le code YAML ci-dessus avec notre script Python.

Voyons le résultat.

Clé : Valeur
set : {1, 2, 3}

Nous pouvons également représenter l’ensemble de manière similaire à la syntaxe Python, comme suit.

je suis un ensemble : !!ensemble
  {1, 2, 2, 3}

Vous obtiendrez le même résultat que dans l’exemple ci-dessus.

C’est tout pour les types de données en YAML. Voyons maintenant quelques fonctionnalités supplémentaires de YAML.

Commentaires

YAML prend en charge les commentaires. C’est génial. Nous pouvons écrire des commentaires en YAML en commençant par un symbole dièse (#) .

# Je suis un commentaire
yAML est génial : # Je suis aussi un commentaire

Si vous interprétez le code YAML ci-dessus, vous obtiendrez une clé vide avec une valeur nulle.

Clé : Valeur
yaml is great : Aucun

YAML ne supporte pas les commentaires multilignes. Nous devons écrire plusieurs lignes commençant par un dièse pour les commentaires multilignes, comme en Python.

Ancres

Lesancres nous permettent de copier le contenu d’une clé où nous voulons dans le document entier. C’est très pratique si vous souhaitez dupliquer certains contenus dans le document.

Pour utiliser les ancres, nous devons leur donner un nom, comme un nom de variable dans les langages de programmation. Ensuite, nous pouvons l’utiliser dans tout le document où nous le souhaitons.

Nous pouvons définir le nom de l’ancre en utilisant & et l’utiliser avec *. Voyons un exemple.

# duplicate_data est le nom de l'ancre
data : &duplicate_data Ce contenu est à dupliquer

# Dopage des données
duplicate_data : *duplicate_data

Dans l’exemple ci-dessus, nous avons utilisé une ancre duplicate_data pour copier la valeur de la clé data . Les deux clés contiennent les mêmes valeurs si vous interprétez le YAML ci-dessus.

Clé : Valeur
données : Ce contenu est à dupliquer
duplicate_data : Ce contenu est à dupliquer

Conclusion

J’espère que vous avez bien compris YAML. Maintenant, vous pouvez utiliser YAML dans le fichier de configuration de votre prochain projet. Vous pouvez vous référer au site officiel de YAML pour obtenir des informations plus avancées.

Bon codage 🙂