YAML ( /ˈjæməl/ et YAH-ml ) ( voir § Histoire et nom ) est un langage de sérialisation de données lisible par l’homme . Il est couramment utilisé pour les fichiers de configuration et dans les applications où les données sont stockées ou transmises. YAML cible bon nombre des mêmes applications de communication que XML ( Extensible Markup Language ), mais a une syntaxe minimale qui diffère intentionnellement de SGML . [1] Il utilise à la fois l’ indentation de style Python pour indiquer l’imbrication, et un format plus compact qui utilise pour les listes et pour les cartes [1] donc JSON[…]{…}les fichiers sont valides YAML 1.2. [2]
Extensions de nom de fichier | .yaml,.yml |
---|---|
Type de média Internet | Non enregistré |
Première version | 11 mai 2001 ; il y a 20 ans ( 2001-05-11 ) |
Dernière version | 1.2 (Révision 1.2.2) 1er octobre 2021 ; il y a 7 mois ( 2021-10-01 ) |
Type de format | Échange de données |
Format ouvert ? | Oui |
Site Internet | yaml .org |
Les types de données personnalisés sont autorisés, mais YAML encode nativement les scalaires (tels que les chaînes , les entiers et les flottants ), les listes et les Tableaux associatifs (également appelés cartes, dictionnaires ou hachages). Ces types de données sont basés sur le langage de programmation Perl , bien que tous les langages de programmation de haut niveau couramment utilisés partagent des concepts très similaires. [3] [4] [5] La syntaxe centrée, utilisée pour exprimer des paires clé-valeur , est inspirée des en -têtes de Courrier électronique tels que définis dans la RFC 822 , et du séparateur de document —est emprunté à MIME ( RFC 2046 ). Les Séquences d’échappement sont réutilisées à partir de C , et l’habillage des espaces pour les chaînes multilignes est inspiré de HTML . Les listes et les hachages peuvent contenir des listes et des hachages imbriqués, formant une arborescence ; des graphiques arbitraires peuvent être représentés à l’aide d’alias YAML (similaire à XML dans SOAP ). [1] YAML est destiné à être lu et écrit en flux, une fonctionnalité inspirée de SAX . [1]
La prise en charge de la lecture et de l’écriture de YAML est disponible pour de nombreux langages de programmation. [6] Certains éditeurs de code source tels que Vim , [7] Emacs , [8] et divers environnements de développement intégrés [9] [10] [11] ont des fonctionnalités qui facilitent l’édition de YAML, comme replier des structures imbriquées ou automatiquement mettant en évidence les erreurs de syntaxe.
L’ extension de nom de fichier officielle recommandée pour les fichiers YAML existe .yamldepuis 2006. [12]
Histoire et nom
YAML ( / ˈ j æ m əl / , rime avec chameau [2] ) a été proposé pour la première fois par Clark Evans en 2001, [13] qui l’a conçu avec Ingy döt Net [14] et Oren Ben-Kiki. [14] À l’origine, YAML signifiait Yet Another Markup Language , [15] parce qu’il a été publié à une époque qui a vu une prolifération de langages de balisage pour la présentation et la connectivité (HTML, XML, SGML, etc.). Son nom initial était conçu comme une référence ironique [16] au paysage technologique, faisant référence à son objectif en tant que langage de balisageavec l’ encore une autre construction, mais il a ensuite été réutilisé en tant que YAML Ain’t Markup Language , un acronyme récursif , pour distinguer son objectif en tant qu’orienté vers les données plutôt que vers le balisage de document.
Versions
version | date de sortie |
---|---|
YAML 1.0 | 29 janvier 2004 |
YAML 1.1 | 18 janvier 2005 |
YAML 1.2.0 | 21 juillet 2009 |
YAML 1.2.1 | 1 octobre 2009 |
YAML 1.2.2 | 1 octobre 2021 |
Concevoir
Apprendre encore plus Cette section est rédigée comme un manuel ou un guide . ( août 2016 )Veuillez aider à réécrire cette section d’un point de vue descriptif et neutre et supprimer les conseils ou les instructions. (Découvrez comment et quand supprimer ce modèle de message) |
Syntaxe
Une feuille de triche et des spécifications complètes sont disponibles sur le site officiel. [17] Voici un résumé des éléments de base.
YAML accepte l’intégralité du jeu de caractères Unicode, à l’exception de certains caractères de contrôle , et peut être codé en UTF-8 , UTF-16 ou UTF-32 . (Bien que UTF-32 ne soit pas obligatoire, il est nécessaire qu’un analyseur ait la compatibilité JSON .) [18]
- L’ indentation des espaces blancs est utilisée pour indiquer la structure ; toutefois, les caractères de tabulation ne sont pas autorisés dans le cadre de cette indentation.
- Les commentaires commencent par le signe dièse ( #), peuvent commencer n’importe où sur une ligne et se poursuivre jusqu’à la fin de la ligne. Les commentaires doivent être séparés des autres jetons par des caractères d’espacement. [19] Si # caractères apparaissent à l’intérieur d’une chaîne, alors ce sont des #littéraux dièse ( ).
- Les membres de la liste sont indiqués par un trait d’union ( -) avec un membre par ligne.
- Une liste peut également être spécifiée en plaçant le texte entre Crochets ( […]) , chaque entrée étant séparée par une virgule .
- Une entrée de tableau associatif est représentée à l’aide d’ un espace deux- points sous la forme clé : valeur avec une entrée par ligne. YAML nécessite que les deux-points soient suivis d’un espace afin que les chaînes de style URL comme puissent être représentées sans avoir besoin d’être placées entre guillemets. http://www.wikipedia.org
- Un point d’ interrogation peut être utilisé devant une clé, sous la forme “? clé : valeur” pour permettre à la clé de contenir des tirets, des Crochets, etc., sans guillemets.
- Un tableau associatif peut également être spécifié par du texte entouré d’ Accolades ( {…}), avec des clés séparées des valeurs par deux-points et les entrées séparées par des virgules (les espaces ne sont pas nécessaires pour conserver la compatibilité avec JSON).
- Les chaînes (un type de scalaire dans YAML) ne sont généralement pas entre guillemets, mais peuvent être entourées de guillemets doubles ( “) ou de guillemets simples ( ‘).
- Entre guillemets, les caractères spéciaux peuvent être représentés par des Séquences d’échappement de style C commençant par une barre oblique inverse ( ). Selon la documentation, le seul échappement octal pris en charge est .
- Dans les guillemets simples, la seule séquence d’échappement prise en charge est un guillemet simple doublé ( ”) désignant le guillemet simple lui-même comme dans ‘don”t’.
- Les scalaires de bloc sont délimités par une indentation avec des modificateurs facultatifs pour conserver ( |) ou replier ( >) les retours à la ligne.
- Plusieurs documents dans un même flux sont séparés par trois traits d’union ( —).
- Trois points ( …) terminent éventuellement un document dans un flux.
- Les nœuds répétés sont initialement désignés par une esperluette ( &) et ensuite référencés par un astérisque ( *).
- Les nœuds peuvent être étiquetés avec un type ou une balise à l’aide d’un double point d’exclamation ( !!) suivi d’une chaîne, qui peut être développée en URI.
- Les documents YAML dans un flux peuvent être précédés de “directives” composées d’un signe de pourcentage ( %) suivi d’un nom et de paramètres délimités par des espaces. Deux directives sont définies dans YAML 1.1 :
- La directive %YAML est utilisée pour identifier la version de YAML dans un document donné.
- La directive %TAG est utilisée comme raccourci pour les préfixes d’URI. Ces raccourcis peuvent ensuite être utilisés dans les balises de type de nœud.
Deux caractères sigil supplémentaires sont réservés dans YAML pour une éventuelle spécification future : l’ arobase ( @) et le backtick ( `).
Composants de base
YAML offre un style “en ligne” pour désigner des tableaux et des listes associatifs. Voici un échantillon des composants.
Le format de bloc conventionnel utilise un trait d’union + espace pour commencer un nouvel élément dans la liste.
— # Films préférés – Casablanca – Nord par Nord -Ouest – L’Homme qui n’était pas là
Le format en ligne facultatif est délimité par une virgule + espace et entre Crochets (similaire à JSON ). [20]
— # Liste de courses [ lait , tarte à la citrouille , oeufs , jus ]
Les clés sont séparées des valeurs par deux points + espace. Les blocs en retrait, courants dans les fichiers de données YAML, utilisent l’indentation et les nouvelles lignes pour séparer les paires clé/valeur. Les blocs en ligne, courants dans les flux de données YAML, utilisent une virgule + espace pour séparer les paires clé/valeur entre Accolades.
— # Indented Block name : John Smith age : 33 — # Inline Block { name : John Smith , age : 33 }
Les chaînes ne nécessitent pas de guillemets. Il existe deux manières d’écrire des chaînes multilignes, l’une préservant les retours à la ligne (en utilisant le |caractère) et l’autre repliant les retours à la ligne (en utilisant le >caractère), toutes deux suivies d’un caractère de retour à la ligne.
données : | Il était une fois un homme de grande taille d’Ealing qui est monté dans un bus pour Darjeeling Il était écrit sur la porte “S’il vous plaît ne vous asseyez pas par terre” Alors il s’est soigneusement assis au plafond
Par défaut, l’indentation de début (de la première ligne) et les espaces de fin sont supprimés, bien qu’un autre comportement puisse être explicitement spécifié.
data : > Le texte enveloppé sera plié en un seul paragraphe Les lignes vides indiquent les sauts de paragraphe
Le texte plié convertit les nouvelles lignes en espaces et supprime les espaces de début.
— # The Smiths – { name : John Smith , age : 33 } – name : Mary Smith age : 27 – [ name , age ]: [ Rae Smith , 4 ] # les séquences sous forme de touches sont prises en charge — # People, par sexe hommes : [ John Smith , Bill Jones ] femmes : – Mary Smith – Susan Williams
Les objets et les listes sont des composants importants de yaml et peuvent être mélangés. Le premier exemple est une liste d’objets clé-valeur, toutes les personnes de la famille Smith. La seconde les répertorie par sexe ; c’est un objet clé-valeur contenant deux listes.
Composants avancés
Deux caractéristiques qui distinguent YAML des capacités des autres langages de sérialisation de données sont les structures [21] et le typage des données.
Les structures YAML permettent le stockage de plusieurs documents dans un seul fichier, l’utilisation de références pour des nœuds répétés et l’utilisation de nœuds arbitraires comme clés. [21]
Pour plus de clarté, de compacité et pour éviter les erreurs de saisie de données, YAML fournit des ancres de nœud (en utilisant &) et des références (en utilisant *). Les références au point d’ancrage fonctionnent pour tous les types de données (voir la référence de livraison dans l’exemple ci-dessous).
Vous trouverez ci-dessous un exemple de file d’attente dans un séquenceur d’instruments dans lequel deux étapes sont réutilisées à plusieurs reprises sans être entièrement décrites à chaque fois.
— # Protocoles de séquenceur pour la chirurgie des yeux au laser – étape : &id001 # définit l’étiquette d’ancrage &id001 instrument : Lasik 2000 pulseEnergie : 5,4 pulseDurée : 12 répétitions : 1000 pointsTaille : 1mm – step : &id002 instrument : Lasik 2000 pulseEnergy : 5.0 pulseDurée : 10 répétition : 500 spotSize : 2mm – step : *id001 # fait référence à la première étape (avec ancre &id001) – step : *id002 # fait référence à la deuxième étape – step : *id002
Le typage explicite des données est rarement observé dans la majorité des documents YAML, car YAML détecte automatiquement les types simples. Les types de données peuvent être divisés en trois catégories : principales, définies et définies par l’utilisateur. Les noyaux sont censés exister dans n’importe quel analyseur (par exemple, flottants, entiers, chaînes, listes, cartes, …). De nombreux types de données plus avancés, tels que les données binaires, sont définis dans la spécification YAML mais ne sont pas pris en charge dans toutes les implémentations. Enfin, YAML définit un moyen d’étendre localement les définitions de type de données pour accueillir des classes, des structures ou des primitives définies par l’utilisateur (par exemple, des flottants à quadruple précision).
YAML détecte automatiquement le type de données de l’entité, mais parfois on veut convertir le type de données explicitement. La situation la plus courante est celle où une chaîne d’un seul mot qui ressemble à un nombre, un booléen ou une balise nécessite une désambiguïsation en l’entourant de guillemets ou en utilisant une balise de type de données explicite.
— a : 123 # un entier b : “123” # une chaîne, désambiguïsée par des guillemets c : 123.0 # un flottant d : !!float 123 # également un flottant via un type de données explicite préfixé par (!!) e : ! !str 123 # une chaîne, désambiguïsée par le type explicite f : !!str Oui # une chaîne via le type explicite g : Oui # un booléen Vrai (yaml1.1), chaîne “Oui” (yaml1.2) h : Oui nous avons Pas de bananes # une chaîne, “Oui” et “Non” désambiguïsée par le contexte.
Toutes les implémentations de YAML n’ont pas tous les types de données définis par les spécifications. Ces types intégrés utilisent un préfixe sigil à double exclamation ( !!). Les ensembles, les cartes ordonnées, les horodatages et l’hexadécimal sont particulièrement intéressants et ne sont pas présentés ici. Voici un exemple de données binaires codées en base64 .
— image : !!binaire | R0lGODdhDQAIAIAAAAAAANn Z2SwAAAAADQAIAAACF4SDGQ ar3xxbJ9p0qa7R0YxwzaFME 1IAADs=
De nombreuses implémentations de YAML peuvent prendre en charge des types de données définis par l’utilisateur pour la sérialisation d’objets. Les types de données locaux ne sont pas des types de données universels, mais sont définis dans l’application à l’aide de la bibliothèque d’analyseur YAML. Les types de données locales utilisent un seul point d’exclamation ( !).
— monObjet : !maClasse { nom : Joe , age : 15 }
Exemple
La hiérarchie de la structure des données est maintenue par l’indentation du contour.
— reçu : Oz-Ware Date de la facture d’achat : 2012-08-06 client : prénom : Dorothy nom_famille : Gale articles : – part_no : A4786 descrip : Seau à eau (rempli) prix : 1.47 quantité : 4 – no_part : E1628 descrip : Pantoufles “Ruby” à talons hauts taille : 8 prix : 133.7 quantité : 1 à facturer : &id001 rue : | 123 Tornado Alley Suite 16 ville : East Centerville état : KS destinataire : *id001 specialDelivery : > Suivez la Yellow Brick Road jusqu’à Emerald City. Ne faites pas attention à l’ homme derrière le rideau. …
Notez que les chaînes ne nécessitent pas de mise entre guillemets. Le nombre spécifique d’espaces dans l’indentation n’a pas d’importance tant que les éléments parallèles ont la même justification à gauche et que les éléments imbriqués hiérarchiquement sont davantage en retrait. Cet exemple de document définit un tableau associatif avec 7 clés de niveau supérieur : l’une des clés, “items”, contient une liste à 2 éléments, dont chaque élément est lui-même un tableau associatif avec des clés différentes. Les données relationnelles et la suppression de la redondance sont affichées : le contenu du tableau associatif “ship-to” est copié à partir du contenu du tableau associatif “bill-to” comme indiqué par les étiquettes d’ancrage ( &) et de référence ( ). *Des lignes vierges facultatives peuvent être ajoutées pour plus de lisibilité. Plusieurs documents peuvent exister dans un seul fichier/flux et sont séparés par —….peut être utilisé à la fin d’un fichier (utile pour signaler la fin des communications en streaming sans fermer le tuyau).
Caractéristiques
Délimitation en retrait
Étant donné que YAML repose principalement sur l’indentation des contours pour la structure, il est particulièrement résistant à la collision de délimiteurs . L’insensibilité de YAML aux guillemets et aux Accolades dans les valeurs scalaires signifie que l’on peut incorporer des documents XML, JSON ou même YAML dans un document YAML en l’indentant simplement dans un littéral de bloc (en utilisant |ou >):
— exemple : > HTML passe dans YAML sans message de modification : | <blockquote style=”font: italic 1em serif”> <p>”Trois est toujours supérieur à deux, même pour les grandes valeurs de deux”</p> <p>–Auteur inconnu</p> </blockquote> date : 2007-06-01
YAML peut être placé dans JSON en mettant entre guillemets et en échappant tous les guillemets intérieurs. YAML peut être placé dans XML en échappant les caractères réservés ( <, >, &, ‘, “) et en convertissant les espaces, ou en le plaçant dans une section CDATA .
Modèles de données non hiérarchiques
Contrairement à JSON, qui ne peut représenter les données que dans un modèle hiérarchique avec chaque nœud enfant ayant un seul parent, YAML offre également un schéma relationnel simple qui permet de référencer des répétitions de données identiques à partir de deux ou plusieurs points de l’arborescence plutôt que de les saisir de manière redondante à ces pointes. Ceci est similaire à la fonction IDREF intégrée à XML. [22]L’analyseur YAML étend ensuite ces références dans les structures de données entièrement remplies qu’elles impliquent lors de la lecture, de sorte que tout programme utilisant l’analyseur n’a pas besoin de connaître un modèle de codage relationnel, contrairement aux processeurs XML, qui n’étendent pas les références. Cette expansion peut améliorer la lisibilité tout en réduisant les erreurs de saisie de données dans les fichiers de configuration ou les protocoles de traitement où de nombreux paramètres restent les mêmes dans une série séquentielle d’enregistrements alors que seuls quelques-uns varient. Un exemple étant que les enregistrements “livraison” et “facturation” dans une facture sont presque toujours les mêmes données.
Considérations pratiques
YAML est orienté ligne et il est donc souvent simple de convertir la sortie non structurée des programmes existants au format YAML tout en conservant une grande partie de l’aspect du document d’origine. Parce qu’il n’y a pas de balises fermantes, d’Accolades ou de guillemets à équilibrer, il est généralement facile de générer du YAML bien formé directement à partir d’instructions d’impression distribuées dans des programmes peu sophistiqués. De même, les délimiteurs d’espaces facilitent le filtrage rapide et sale des fichiers YAML à l’aide des commandes orientées ligne dans grep, AWK, Perl, Ruby et Python.
En particulier, contrairement aux langages de balisage, les blocs de lignes YAML consécutives ont tendance à être eux-mêmes des documents YAML bien formés. Cela facilite l’écriture d’analyseurs qui n’ont pas à traiter un document dans son intégralité (par exemple, équilibrer les balises d’ouverture et de fermeture et naviguer entre les guillemets et les caractères d’échappement) avant de commencer à extraire des enregistrements spécifiques à l’intérieur. Cette propriété est particulièrement utile lors de l’itération en une seule passe sans état sur des enregistrements d’un fichier dont la structure de données entière est trop volumineuse pour être conservée en mémoire, ou pour laquelle la reconstitution de la structure entière pour extraire un élément serait d’un coût prohibitif.
De manière contre-intuitive, bien que sa délimitation en retrait puisse sembler compliquer les hiérarchies profondément imbriquées, YAML gère des retraits aussi petits qu’un seul espace, ce qui peut permettre une meilleure compression que les langages de balisage. De plus, une indentation extrêmement profonde peut être entièrement évitée en : 1) revenant au “style en ligne” (c’est-à-dire au format de type JSON) sans l’indentation ; ou 2) en utilisant des ancres relationnelles pour dérouler la hiérarchie sous une forme plate que l’analyseur YAML reconstituera de manière transparente dans la structure de données complète. [ citation nécessaire ]
Sécurité
YAML est purement un langage de représentation de données et n’a donc pas de commandes exécutables. [23] Bien que la validation et l’analyse sécurisée soient intrinsèquement possibles dans n’importe quel langage de données, la mise en œuvre est un écueil si notoire que l’absence de langage de commande associé à YAML peut constituer un avantage relatif en matière de sécurité.
Cependant, YAML autorise les balises spécifiques à la langue afin que des objets locaux arbitraires puissent être créés par un analyseur prenant en charge ces balises. Tout analyseur YAML qui permet d’exécuter une instanciation d’objet sophistiquée ouvre la possibilité d’une attaque par injection. Les parseurs Perl qui permettent le chargement d’objets de classes arbitraires créent des valeurs dites « bénies ». L’utilisation de ces valeurs peut déclencher un comportement inattendu, par exemple si la classe utilise des opérateurs surchargés. Cela peut conduire à l’exécution de code Perl arbitraire. [ citation nécessaire ]
La situation est similaire pour les analyseurs Python ou Ruby. Selon la documentation PyYAML : [24]
Notez que la possibilité de construire un objet Python arbitraire peut être dangereuse si vous recevez un document YAML d’une source non fiable telle qu’Internet. La fonction yaml.safe_loadlimite cette capacité à de simples objets Python comme des entiers ou des listes. […]
PyYAML vous permet de construire un objet Python de n’importe quel type. Même des instances de classes Python peuvent être construites à l’aide de la !!python/objectbalise.
Traitement et représentation des données
La spécification YAML identifie un document d’instance comme une “présentation” ou un “flux de caractères”. [25] Les principales structures logiques d’un document d’instance YAML sont les scalaires, les séquences et les mappages. [26] La spécification YAML indique également certaines contraintes de base qui s’appliquent à ces structures logiques primaires. Par exemple, selon la spécification, les clés de mappage n’ont pas d’ordre. Dans tous les cas où l’ordre des nœuds est important, une séquence doit être utilisée. [27]
De plus, lors de la définition de la conformité des processeurs YAML, la spécification YAML définit deux opérations principales : dump et load . Tous les processeurs compatibles YAML doivent fournir au moins une de ces opérations et peuvent éventuellement fournir les deux. [28] Enfin, la spécification YAML définit un modèle d’information ou “graphe de représentation”, qui doit être créé pendant le traitement pour les opérations de vidage et de chargement , bien que cette représentation n’ait pas besoin d’être mise à la disposition de l’utilisateur via une API. [29]
Comparaison avec d’autres formats de sérialisation
Comparaison avec JSON
La syntaxe JSON est une base de YAML version 1.2, qui a été promulguée dans le but exprès de mettre YAML “en conformité avec JSON en tant que sous-ensemble officiel”. [2] Bien que les versions précédentes de YAML n’étaient pas strictement compatibles, [30] les divergences étaient rarement perceptibles, et la plupart des documents JSON peuvent être analysés par certains analyseurs YAML tels que Syck. [31] C’est parce que la structure sémantique de JSON équivaut au “style en ligne” facultatif de l’écriture de YAML. Bien que les hiérarchies étendues puissent être écrites dans un style en ligne comme JSON, ce n’est pas un style YAML recommandé, sauf lorsqu’il facilite la clarté.
YAML possède de nombreuses fonctionnalités supplémentaires qui manquent à JSON, notamment les commentaires, les types de données extensibles, les ancres relationnelles, les chaînes sans guillemets et les types de mappage préservant l’ordre des clés.
Comparaison avec TOML
TOML a été conçu pour être une avancée vers le format de fichier .ini. La spécification YAML a été signalée comme ayant 23 449 mots, tandis que la spécification TOML n’avait que 3 339 mots. [32] Ces mots supplémentaires et la syntaxe indentée de YAML permettent de l’écrire de manière moins complexe par rapport à TOML . Et la hiérarchie d’un document YAML est évidente à partir de l’indentation [33] .
Comparaison avec XML
YAML n’a pas la notion d’attributs de balise que l’on trouve dans XML. Au lieu de cela, YAML a des déclarations de type extensibles (y compris des types de classe pour les objets).
YAML lui-même n’a pas les descripteurs de schéma de document définis par le langage XML qui permettent, par exemple, à un document de s’auto-valider. Cependant, il existe plusieurs langages de description de schéma définis en externe pour YAML (par exemple Doctrine , Kwalify et Rx) qui remplissent ce rôle. De plus, la sémantique fournie par les déclarations de type définies par le langage de YAML dans le document YAML lui-même réduit fréquemment le besoin d’un validateur dans des situations simples et courantes. De plus, YAXML , qui représente les structures de données YAML en XML, permet aux importateurs de schémas XML et aux mécanismes de sortie comme XSLT d’être appliqués à YAML.
La comparaison des formats de sérialisation des données fournit une comparaison plus complète de YAML avec d’autres formats de sérialisation.
Logiciels (émetteurs et analyseurs)
Pour les structures de données fixes, les fichiers YAML peuvent simplement être générés à l’aide de commandes d’ impression qui écrivent à la fois les données et la décoration spécifique YAML. Cependant, pour vider des données hiérarchiques variables ou complexes, un émetteur YAML dédié est préférable. De même, les fichiers YAML simples (par exemple, les paires clé-valeur) sont facilement analysés avec des expressions régulières. Pour les structures de données plus complexes ou variables, un analyseur YAML formel est recommandé.
Les émetteurs et analyseurs YAML existent pour de nombreux langages populaires. La plupart d’entre eux sont écrits dans la langue maternelle elle-même. Certaines sont des liaisons de langage de la bibliothèque C libyaml ; ils peuvent courir plus vite. Il y avait autrefois une autre bibliothèque C, appelée Syck , écrite et orpheline par pourquoi le chanceux raide : il n’est pas maintenu, il n’y a pas de faisceau de sources faisant autorité et le site Web a été piraté. Par conséquent, la seule bibliothèque C recommandable est libyaml . Il a été initialement développé par Kirill Simonov. En 2018, le développement a été repris par les nouveaux mainteneurs Ian Cordasco et Ingy döt Net . [34]
Les programmeurs C++ ont le choix entre la bibliothèque C libyaml et la bibliothèque C++ libyaml-cpp . Les deux ont des bases de code complètement indépendantes et des API complètement différentes . La bibliothèque libyaml-cpp a toujours un numéro de version majeure de 0, indiquant que l’API peut changer à tout moment, comme cela s’est effectivement produit après la version 0.3. Il existe une implémentation centrée sur la grammaire écrite en C #, avec un objectif sur les extensions pour les éléments imbriqués. [35]
Certaines implémentations de YAML, telles que YAML.pm de Perl, chargeront un fichier entier (flux) et l’analyseront en masse . D’autres implémentations comme PyYaml sont paresseuses et itèrent sur le document suivant uniquement sur demande. Pour des fichiers très volumineux où l’on envisage de traiter les documents de manière autonome, instancier l’intégralité du fichier avant traitement peut être rédhibitoire. Ainsi, dans YAML.pm, il faut parfois découper un fichier en documents et les analyser individuellement. YAML rend cela facile, car cela nécessite simplement un fractionnement sur le marqueur de fin de document, qui est défini comme trois points sur une ligne par eux-mêmes. Ce marqueur est interdit dans le contenu. [36]
Critique
YAML a été critiqué pour ses espaces blancs importants , ses fonctionnalités déroutantes, ses valeurs par défaut non sécurisées et sa spécification complexe et ambiguë : [32] [37] [38]
- Les fichiers de configuration peuvent exécuter des commandes ou charger du contenu sans que les utilisateurs s’en rendent compte. [32]
- La modification de fichiers YAML volumineux est difficile, car les erreurs d’indentation peuvent passer inaperçues. [32]
- L’auto-détection de type est une source d’erreurs. Par exemple, sans guillemets Yeset NOsont convertis en booléens ; les numéros de version du logiciel peuvent être convertis en flottants. [32] [39]
- Les fichiers tronqués sont souvent interprétés comme du YAML valide en raison de l’absence de terminateurs.
- La complexité de la norme a conduit à des implémentations incohérentes et a rendu le langage non portable. [32] [40]
Les défauts perçus et la complexité de YAML ont conduit à l’émergence d’alternatives plus strictes telles que StrictYAML et NestedText . [39]
Voir également
- Comparaison des formats de sérialisation des données
- Langage de balisage léger
Références
- ^ un bcd ” Encore un autre langage de balisage (YAML) 1.0 / Brouillon de travail” . 10 décembre 2001.
- ^ un bc « YAML n’est pas le langage de balisage (YAML) Version 1.2 » . YAML.org . Récupéré le 29/05/2019 .
- ^ “Types intégrés – documentation Python 3.9.6” . docs.python.org . Récupéré le 19/08/2021 .
- ^ “Objets intégrés standard – JavaScript | MDN” . développeur.mozilla.org . Récupéré le 19/08/2021 .
- ^ corob-msft. “Types intégrés (C++)” . docs.microsoft.com . Récupéré le 19/08/2021 .
- ^ “Le site Web officiel de YAML” . yaml.org .
- ^ “Configuration de Vim pour l’édition YAML” . arthurkoziel.com .
- ^ “Mode Yaml” . EmacsWiki. 2015-06-12 . Récupéré le 05/12/2016 .
- ^ aukaost. “Pretty YAML – Packages – Contrôle des packages” . Packagecontrol.io . Récupéré le 05/12/2016 .
- ^ “yaml | Plugins, bundles et produits Eclipse – Eclipse Marketplace” . Marketplace.eclipse.org . Récupéré le 05/12/2016 .
- ^ Ruth Kusterer. “NetBeans IDE – Ruby et Ruby on Rails Development” . Netbeans.org . Récupéré le 05/12/2016 .
- ^ “YAML n’est pas un langage de balisage” . 24 septembre 2006. Archivé de l’original le 2006-09-24.
- ^ Evans, Clark (11 mai 2001). “YAML Brouillon 0.1” . Yahoo! Groupes techniques : sml-dev . Récupéré le 21/03/2019 .
- ^ un b ” YAML n’est pas un langage de balisage : à propos de ” . YAML.org . Récupéré le 29/05/2019 .
- ^ “Encore un autre langage de balisage (YAML) 1.0” . YAML.org . Récupéré le 29/05/2019 .
- ^ “Encore un autre langage de balisage (YAML) 1.0” . stackoverflow.com . Récupéré le 24/03/2021 .
- ^ “Carte de référence YAML 1.1” . YAML.org . Récupéré le 29/05/2019 .
- ^ “YAML n’est pas le langage de balisage (YAML) Version 1.2” . YAML.org . Récupéré le 29/05/2019 .
- ^ “YAML n’est pas le langage de balisage (YAML) Version 1.2” . YAML.org . Récupéré le 29/05/2019 .
- ^ “Applications de gestion basées sur le cloud” . JigoCloud.com . Archivé de l’original le 17/09/2016 . Récupéré le 28/09/2016 .
- ^ un b “la spécification YAML 1.2 de Structures” . YAML.org . Récupéré le 29/05/2019 .
- ^ “Langage de balisage extensible (XML) 1.0 (deuxième édition)” . W3.org . Récupéré le 27 mai 2015 .
- ^ Une étiquette “rendement” proposée permettrait des calculs arithmétiques simples.
- ^ “Documentation PyYAML, chargement de YAML” . Pyyaml.org . Récupéré le 28/09/2016 .
- ^ “Ce n’est pas le langage de balisage (YAML) Version 1.1” . YAML.org . Récupéré le 29/05/2019 .
- ^ Des structures logiques supplémentaires, à usage facultatif, sont énumérées dans le référentiel de types YAML. “Types indépendants de la langue pour YAML version 1.1” . YAML.org . Récupéré le 29/05/2019 .Les types balisés dans le référentiel de types YAML sont facultatifs et ne sont donc pas essentiels pour les processeurs YAML conformes. “L’utilisation de ces balises n’est pas obligatoire.”
- ^ “YAML n’est pas le langage de balisage (YAML) Version 1.1” . YAML.org . Récupéré le 29/05/2019 .
- ^ “Ce n’est pas le langage de balisage (YAML) Version 1.1” . YAML.org . Récupéré le 29/05/2019 .
- ^ “YAML n’est pas le langage de balisage (YAML) Version 1.1” . YAML.org . Récupéré le 29/05/2019 .
- ^ Les incompatibilités étaient les suivantes : JSON autorise les jeux de caractères étendus comme UTF-32 et avait une syntaxe d’échappement de caractères Unicode incompatible par rapport à YAML ; YAML nécessitait un espace après les séparateurs tels que virgule, égal et deux-points, contrairement à JSON. Certaines implémentations non standard de JSON étendent la grammaire pour inclure les/*…*/commentaires de Javascript. La gestion de tels cas extrêmes peut nécessiter un prétraitement léger du JSON avant l’analyse en tant que YAML en ligne. Voir aussi [1] .
- ^ Analyse JSON avec SYCK . Notez que, par exemple, l’analyseur YAML de Symfony ne prend pas en charge les sauts de ligne dans les structures [] ou {}, ce qui constitue une incompatibilité majeure avec JSON.
- ^ un bcdef Tournoij , Martin (4 septembre 2016) . “YAML : probablement pas si génial après tout” . Récupéré le 16 mai 2019 .
- ^ Qu’est-ce qui ne va pas avec TOML ?
- ^ yaml-core@lists.sourceforge.net, courrier du 27 juin 2018.
- ^ ” Grammaire YAML pour Lexepars ” .
- ^ “YAML n’est pas le langage de balisage (YAML) Version 1.2 # 9.1.2 Marqueurs de document” . YAML.org . Récupéré le 29/05/2019 .
- ^ “C’est beaucoup de YAML” . Récupéré le 16 mai 2019 .
- ^ “YAML craint” . Récupéré le 16 mai 2019 .
- ^ un b “Le problème de la Norvège – pourquoi StrictYAML refuse de faire le dactylographie implicite et ainsi devriez-vous” . Récupéré le 3 juin 2020 .
- ^ “Matrice de test YAML” .
Liens externes
- Site officiel