YAML Ain’t Markup Language
Ressource : https://tutoriels.edu.lat/pub/yaml?alias=tutoriel-yaml
YAML est un format de données très populaire pour stocker des informations de configuration et est utilisé dans presque tous les outils DevOps modernes tels que Docker, Kubernetes, Ansible et bien d’autres.
JSON et XML sont aussi des façons d'écrire des fichiers de configuration. Cependant, Yaml gagne plus de popularité, et voici les raisons suivantes:
- YAML propose un code plus lisible par l'homme.
- Vous pouvez utiliser des chaînes avec YAML sans les enfermer avec des guillemets.
- Yaml est conçu pour gérer les données. Il s'agit uniquement d'un langage de sérialisation des données.
- Il a des fonctionnalités avancées, telles que les ancres relationnelles et les types de données extensibles.
- Vous pouvez ajouter des commentaires à votre fichier YAML.
- Yaml offre une syntaxe simple, et son style en ligne est un superset de JSON.
- Il peut être utilisé avec tous les langages de programmation modernes.
- Le fichier yaml peut prendre le .YML ou .yaml extension.
La principale différence entre YAML et XML ou JSON est la façon dont la structure des données est définie. Pour YAML, la définition est basée sur l'indentation de la ligne et la séparation de ligne. Un mauvais espacement pour YAML augmentera une erreur, mais cela fait de YAML une option lisible par l'homme parmi les trois options.
YAML est un langage de sérialisation de données qui vous permet de représenter les données dans un format facile à lire. La syntaxe de YAML est simple, et le langage offre plusieurs fonctionnalités qui le rendent puissant et polyvalent. YAML est utilisé par de nombreux langages de programmation, et sa popularité ne fera que continuer à croître.
- YAML est un langage très simple, basé sur du texte et lisible par l’homme, utilisé pour échanger des données entre des personnes et des ordinateurs.
- YAML n’est pas un langage de programmation. Il est principalement utilisé pour stocker des informations de configuration.
- Les fichiers YAML stockent des données et n’incluent pas de commandes ni d’instructions.
- YAML est un langage de sérialisation de données similaire à XML ou JSON. Cependant, il est beaucoup plus lisible et concis par l’homme.
La sérialisation des données
La sérialisation des données est le processus de conversion d’objets de données, ou d’états d’objet présents dans des structures de données complexes, en un flux d’octets pour le stockage, le transfert et la distribution sous une forme qui peut permettre la récupération de sa structure d’origine.
La messagerie(messaging) consiste à envoyer des informations à travers divers composants logiciels ou applications.
Utilisation
- YAML peut représenter n’importe quelle structure de données qui peut être représentée à l’aide du format XML ou JSON.
- YAML peut stocker et gérer toutes les données textuelles au format Unicode, comme les fichiers de configuration ou les fichiers journaux. Cela le rend indépendant de la plate-forme logicielle et matérielle pour le stockage, le transport et le partage de données. Il est important de comprendre ce format, car toute modification apportée aux fichiers de configuration peut entraîner un dysfonctionnement de votre application.
YAML est utilisé dans les fichiers de configuration, les fichiers journaux, la persistance d’objets, la mise en cache et la messagerie (envoi d’informations à travers divers composants logiciels ou applications).
La persistance(persistence) est le processus qui consiste à préserver l’état d’un objet plus longtemps que la durée de vie ou la durée du processus de création de l’objet. Ceci est réalisé en stockant l’état de l’objet dans une mémoire non volatile comme un disque dur au lieu d’une mémoire volatile comme la RAM.
La mise en cache(caching) est une technique qui consiste à stocker une copie d’une ressource demandée à plusieurs reprises et à la restituer à partir de la copie elle-même plutôt qu’à partir du serveur distant. Cela rend l’application plus réactive.
Avantages
- Lisible par l’homme - YAML est très lisible par l’homme. Il vous permet de représenter des structures de données complexes d’une manière lisible par l’homme. Pour prouver ce point, même la page d’accueil du site officiel de YAML (https://yaml.org) est affichée comme un document YAML.
- Syntaxe simple et propre - YAML est facile à apprendre et simple à lire. Il peut facilement exprimer une grande variété de structures de données différentes.
- Facile à mettre en œuvre et à utiliser - Il est facile à mettre en œuvre et à utiliser.
- Strict : la spécification YAML dispose d’une très faible marge de manœuvre, ce qui augmente sa robustesse.
- Sans ambiguïté : YAML spécifie sans ambiguïté les structures de données des données sérialisées, il n’est donc pas nécessaire de s’appuyer sur des commentaires ou de la documentation. Comme les structures de données sont sans ambiguïté, il est plus facile d’utiliser des outils automatisés (scripts) pour la lecture et l’écriture de YAML. Par exemple, vous pouvez écrire un script qui lit la structure de données d’un fichier écrit en YAML et la convertit dans un autre format (tel que JSON ou XML).
- Facilité de contrôle de version - YAML stocke le texte brut, de sorte qu’il peut être ajouté à un contrôle de version tel que Git ou Subversion sans aucun problème.
- Portable dans tous les langages de programmation - YAML prend en charge la représentation des séquences sous forme de listes et les mappages sous forme de dictionnaires (hachages dans certains langages) d’une manière indépendante du langage.
- Puissant - Il est plus puissant que JSON lorsqu’il s’agit de spécifier des structures de données complexes. Il s’agit d’un sur-ensemble de JSON, ce qui signifie que tous les documents JSON valides sont également des YAML valides.
- Correspond aux structures de données natives des langages de programmation modernes tels que Python, Ruby et JavaScript. Il existe plusieurs analyseurs YAML dans différentes langues, vous pouvez donc utiliser le même langage pour générer et analyser YAML.
- Modèle de données cohérent pour prendre en charge les outils génériques. Il dispose d’outils puissants, tels que PyYAML.
- Prend en charge le traitement en une passe ou dans une direction : l’analyse de YAML est linéaire. Il n’y a pas de pointeurs avant ou arrière à gérer, il y a donc moins d’ambiguïtés d’analyse.
- Expressif et extensible : par extensibilité, nous entendons que les applications existantes continuent de fonctionner même lorsque de nouvelles données sont ajoutées (ou supprimées).
- Rapide - YAML est rapide à charger et facile à traiter en mémoire.
- Sécurisé : de nombreux problèmes de sécurité dans les langages de programmation sont liés à l’analyse d’entrées non fiables (telles que JSON). Python, Ruby, Java, JavaScript, PHP et bien d’autres permettent aux attaquants d’exploiter ces vulnérabilités en contournant des chaînes d’entrée inattendues vers l’analyseur. YAML est conçu pour empêcher ces types d’exploits en spécifiant le type de données dont chaque partie du flux YAML doit être composée.
En raison des avantages ci-dessus, de nombreux outils et applications modernes s’appuient sur YAML.
Il est important de comprendre YAML, car toute modification apportée aux fichiers qui stockent les données de configuration au format YAML peut entraîner un dysfonctionnement d’une application basée sur celui-ci.
Syntaxe de base
YAML est utilisé pour stocker des listes ou des séquences d’éléments, des paires clé-valeur ou des mappages.
La liste (également appelée séquence) est une collection ordonnée d’éléments. Une séquence est représentée par des crochets ([]). Chaque élément de la séquence est séparé par une nouvelle ligne suivie d’une virgule (, ). Un élément peut être de n’importe quel type comme des chaînes, des nombres ou des cartes, etc.
Les paires clé-valeur (également appelées mappage) sont un ensemble non ordonné de paires clé/valeur. Cependant, les clés ne sont pas uniques car elles peuvent avoir des valeurs en double. Chaque élément d’un mappage est séparé par une nouvelle ligne suivie d’un caractère deux-points (:).
Paires clé-valeur
Une paire clé-valeur est une structure de données composée d’une clé et d’une valeur. La clé est utilisée pour identifier la valeur, et la valeur peut être n’importe quel type de données.
Les paires clé-valeur sont représentées à l’aide de la syntaxe suivante : <key>: <value> où <key> représente le nom et <value> représente les données séparées par : (l’espace est obligatoire).
Exemple de paire clé-valeur :
Clé : Valeur
Liste
Une liste est une structure de données simple composée de zéro ou plusieurs éléments ordonnés. En d’autres termes, une liste est un ensemble ordonné de données.
visualisation d’une liste ou d’une séquence Une liste est représentée en faisant précéder ses éléments d’un - (trait d’union).
Syntaxe
- <élément 1> - <élément 2> - ... - <élément n>
Sa syntaxe simple ne limite pas les capacités linguistiques de YAML. Le langage est suffisamment riche pour représenter presque toutes les structures de données ou objets imaginables à l’intérieur d’un programme informatique en cours d’exécution sous la forme d’un fichier texte brut lisible.
Vous trouverez ci-dessous quelques-unes des principales caractéristiques de YAML qui en font une excellente option pour le formatage des données.
Sensibilité à la casse
YAML est sensible à la casse, donc la clé « DATA » serait différente de « data ».
Chacun des éléments de la liste ci-dessous sera traité comme un élément de liste unique et une paire clé/valeur unique, car la chaîne contient différentes casses d’alphabets.
- DATA - data - key: data - KEY: DATA
Espaces et indentations
Les structures YAML sont déterminées par des espaces et des indentations similaires à ceux du langage de programmation Python. Les espaces sont le seul moyen d’obtenir une indentation. Les tabulations ne sont PAS autorisés dans YAML.
Le code ci-dessous représente une liste sous la forme de YAML.
Learning Objectives: - What is YAML? - Basic Syntax - Data Types - Complex Data Types - Advance Features - Tools Leveraging YAML - Parsers and Emitters
Dans un langage de programmation basé sur C, cela aurait été représenté par programmation sous la forme de l’extrait de code ci-dessous :
LearningObjectives[0] = "What is YAML?" LearningObjectives[1] = "Basic Syntax" LearningObjectives[2] = "Data Types" LearningObjectives[3] = "Complex Data Types" LearningObjectives[4] = "Advance Features" LearningObjectives[5] = "Tools Leveraging YAML" LearningObjectives[6] = "Parsers and Emitters"
Conseil : Lors de la modification d’un fichier YAML, utilisez un éditeur de texte pour vérifier qu’il n’y a pas de tabulations à la place des espacements. Cela peut être fait en activant l’affichage des caractères d’espacement.
Prise en charge de plusieurs documents en YAML
Pour définir un fichier YAML, nous utilisons principalement les extensions .yml ou .yaml, par exemple config.yml. Cependant, certains outils peuvent utiliser une extension différente pour spécifier l’objectif du fichier.
Consultez l’extrait de code ci-dessous pour savoir comment créer plusieurs documents au sein d’un seul fichier ou flux.
--- - Fichier XML - JSON - CSV (en anglais) --- -Unicode -ASCII - UTF8 ...
- Le flux YAML est une collection de zéro ou plusieurs documents.
- Un flux vide ne contient aucun document.
- Un même document peut ou non être marqué d’un (—).
- Vous pouvez ajouter plusieurs documents à un seul fichier YAML.
- Les différents documents sont séparés par trois tirets (—).
- Les documents peuvent se terminer par (…).
- Trois points (…) permettent de marquer la fin d’un document sans en commencer un nouveau.
Style de bloc
Un document de style bloc utilise des espaces pour structurer le document. Il est beaucoup plus facile à lire, mais il est moins compact.
Exemple :
color: - red - yellow - blue
Style de flux
YAML a une syntaxe alternative appelée style de flux, il permet d’écrire des séquences et des mappages en ligne sans avoir à compter sur l’indentation, en utilisant une paire de crochets [] et d’accolades {} respectivement.
Le style Flow est une extension de JSON. Il est moins facile à lire ; Cependant, il offre plus de compacité.
Exemples
Couleur : [rouge, bleu]
et
- { nom : 'James', âge : 35 }
Commentaires
Voici quelques exemples de commentaires
## Un commentaire d’une seule ligne
Un commentaire peut commencer n’importe où dans la ligne.
## le document commence ci-dessous --- clé : « valeur » # mappage # Une liste de deux éléments liste: - « item 1 » # première valeur - « item 2 » # deuxième valeur --- ## fin du document
Conseil : YAML ne prend pas en charge les commentaires de bloc ou sur plusieurs lignes.
Pour créer un commentaire sur plusieurs lignes, vous devez suffixer chaque ligne avec un caractère #.
## Il s’agit d’une multi-ligne ## commentaire en YAML. Il y a ## pas d’autre façon de créer ## bloquer les commentaires.
Vous trouverez ci-dessous un autre exemple de commentaires YAML :
# __ __ __ __ _ # \ \ / / /\ | \/ || | # \ \_/ / / \ | \ / || | # \ / / /\ \ | |\/| || | # | | / ____ \ | | | || |____ # |_|/_/ \_\|_| |_||______|
Valider un document YAML
Validation en ligne (Rapide)
Si vous voulez juste tester un fichier YAML sans installer d'outil, utiliser ces sites :
- YAML Lint
- YAML Validator
Avantage : Rapide et pratique, mais pas toujours suffisant pour une utilisation avancée.
la validation est aussi possible en Python, en PHP ou en ligne de commande.
Résumé
- Les éléments d’une liste en YAML sont représentés en la faisant précéder de - (trait d’union).
- Les paires clé-valeur en YAML sont représentées par <key>:<value>.
- YAML est sensible à la casse.
- YAML utilise des espaces et des indentations pour définir la structure du document.
- Pour définir un fichier YAML, nous utilisons .yml ou .yaml comme extension de fichier.
- Différents documents en YAML peuvent être séparés à l’aide de trois tirets (—).
- À l’aide de trois points, vous marquez la fin d’un document sans en commencer un nouveau.
- Un document de style bloc utilise des espaces pour structurer le document.
- Le style Flow fait de YAML une extension de JSON. Le style Flow est un peu moins lisible que le style bloc, mais il offre plus de compacité au document.
- Tout texte après # qui n’est pas inclus dans ''(guillemets) ou « » (guillemets) est considéré comme un commentaire.
- YAML ne prend pas en charge les commentaires de bloc ou sur plusieurs lignes.