Quels sont les avantages et désavantages de yaml vs xml pour la définition / sérialisation de graphes d’object?

Le cas d’utilisation est la sérialisation à long terme de graphes d’object complexes dans un format textuel.

Réponse courte

Si vous vous attendez à ce que les humains créent / lisent le document (fichiers de configuration, rapports, etc.), vous pouvez considérer YAML, sinon choisissez XML (pour la communication entre machines).

Longue réponse

Longueur

XML et YAML sont approximativement les mêmes. De bonnes bibliothèques XML peuvent ignorer tous les espaces, alors que pour YAML, cela est requirejs. Un YAML complexe contient beaucoup d’espaces d’indentation (n’utilisez pas de tabulation!)

Panne de réseau

Une partie d’un document YAML est souvent un document valide. Par conséquent, si un document YAML est incomplet, il n’y a pas de moyen automatique de le détecter. Un parsingur XML vérifie toujours si un document est au moins bien formé et peut vérifier automatiquement la validité par rapport à un schéma.

Support linguistique

De nombreux principaux langages de programmation prennent en charge les formats YAML et XML.

Culture générale

Vous n’avez pas besoin d’expliquer à un développeur (même junior) ce qu’est XML. YAML n’est pas encore très utilisé.

Schéma

Avec XML, le producteur et le consommateur peuvent s’accorder sur un schéma pour établir un format d’échange de données fiable.

Syntaxe

XML est très riche: espaces de noms, entités, atsortingbuts.

Dépendances externes

Java et Python prennent en charge XML dans les bibliothèques standard. YAML nécessite une dépendance externe pour ces langues.

Maturité

La spécification XML est plus ancienne et solide. alors que YAML est encore en construction. YAML 1.1 contient des incohérences (il existe même un wiki pour gérer la liste des erreurs).

XSLT

Si vous devez transformer un document XML dans un autre format (XML, HTML, YAML, PDF), vous pouvez utiliser XSLT, tandis que pour YAML, vous devez écrire un programme.

Je suis d’accord: YAML est plus lisible, et semble convenir, par exemple, aux fichiers de configuration dev-read / writable. Mais il y a peu d’avantages pour la communication machine à machine. En outre, pour le balisage textuel (point fort traditionnel de xml, comme xhtml, docbook), xml est meilleur.

Spécifiquement pour la sérialisation d’object, je ne vois pas de bonne raison d’utiliser YAML.

En fait, je suggérerais plutôt de considérer JSON: il est basé sur un modèle object (ou struct, puisqu’il n’y a pas de comportement), plutôt que sur des modèles hiérarchiques (xml) ou relationnels (SQL). De ce fait, il s’agit d’un ajustement plus naturel pour les données d’object. Mais XML fonctionne aussi très bien et il existe de nombreux bons outils.

Dernière chose: les termes “à long terme” et “sérialisation d’object” ne se mélangent pas. Ce dernier implique un couplage étroit: vos objects changent, de même que la sérialisation. La sérialisation d’object réelle ne doit pas être utilisée pour stocker des données, la liaison / mappage de données est plus appropriée. Mais il se peut que vous utilisiez la sérialisation dans le sens de “stocker / restaurer des données en utilisant des wrappers d’objects pratiques”; si c’est le cas, c’est bien.

XML a xpath et xquery.

Mais YAML a des clés complexes et vous permet de copier une valeur à plusieurs endroits avec des alias (syntaxe & *).

Je pense que la force de YAML n’est pas la lisibilité humaine, comme on dit… Je peux très bien lire un XML correctement formaté.

En réalité, la force de YAML réside dans sa capacité d’ écriture humaine. Si vous êtes sur un iPhone en train de saisir rapidement des données lors de l’architecture d’un modèle de données, YAML est beaucoup plus facile à saisir. Les alias sont géniaux pour cela.

Ensuite, vous pouvez le convertir en n’importe quoi.

Les fonctionnalités les plus avancées de YAML telles que la frappe et les balises ssortingctes, je ne les utilise jamais. Les gars de YAML discutent actuellement de la création d’un “micro YAML” pour concurrencer JSON, pour ceux d’entre nous qui l’utilisons comme un JSON plus propre avec des pseudonymes.

Mais XML est préférable en tant que langage de balisage où vous souhaitez distinguer visuellement quelles parties des données sont visibles pour l’utilisateur final, comme l’a souligné quelqu’un d’autre.

Si vous utilisez YAML, vous aurez peut-être un peu moins d’octets traversant le réseau. Pas assez pour être significatif, je pense, mais dans certaines situations, cela pourrait être pertinent. Je pense aussi que YAML est plus facile à lire et à utiliser dans un éditeur de texte, mais c’est vraiment subjectif, et cela n’aurait pas vraiment d’importance si ce n’était pas un scénario d’utilisation normale.

Si la bande passante n’est pas un facteur et que vous ne travaillerez pas souvent avec YAML / XML dans un éditeur de texte, je pense que peu importe ce que vous utilisez.