XML vs YAML vs JSON

en supposant que je commence un projet à partir de zéro, qui ne dépend d'aucun autre projet. Je voudrais utiliser un format pour stocker des flux, quelque chose comme XML, puisque XML n'est pas le seul format disponible de ce type, je voudrais savoir: pourquoi devrais-je choisir un format plutôt que le reste?

j'utiliserai perl.

"Alimentation" est une description d'un produit (dénomination, prix, type, description courte, jusqu'à 120 mots).

24
demandé sur Merlyn Morgan-Graham 2010-10-17 02:16:43

10 réponses

nous ne pouvons pas vraiment répondre à cela sans en savoir beaucoup plus. Juste parce que vous n'êtes pas dépendant d'autres projets, êtes-vous susceptible d'interagir avec eux à un certain moment dans l'avenir? Dans l'affirmative, quelles technologies préfèrent-ils? À la BBC, nous avons eu quelques projets "JSON-only", seulement pour découvrir que les développeurs Java qui voulaient accéder à notre API étaient Supplier nous de fournir une API XML simple simplement parce qu'ils ont tellement d'outils construits autour de XML. Ils n'ont pas même les espaces de noms, les attributs, ou n'importe quoi d'autre; ils voulaient juste ces crochets d'angle.

quant à" stocker des flux", Je ne sais pas non plus ce que vous voulez dire par là. Vous expliquez les données dans le flux, mais qu'allez-vous faire de ces flux? Les analyser? Cache et Réserve-les? Écrire pour tablettes cunéiformes? :)

je sonne comme ce que vous voulez réellement est une base de données et vous voulez y persister les données et plus tard le rendre sérialisable comme JSON / YAML / XML ou quel que soit le format désiré. Ce que je recommande est de pouvoir extraire les données dans une structure de données Perl et ensuite avoir des "formateurs" qui savent comment sérialiser cette structure de données à la sortie désirée. De cette façon, vous pouvez serialiser à, disons, JSON, et plus tard si ce n'est pas assez bon, facilement passer à YAML ou quelque chose d'autre. En fait, si d'autres ont besoin de vos données (les données à Sens Unique ont tendance à ne pas être utiles), ils peuvent demander JSON, YAML, XML ou autre. Vous avez plus de souplesse et ne sont pas liés à une décision que vous avez fait avant.

cela étant dit, je ne connais pas votre système, il est donc difficile de dire quelle est la bonne chose à faire. De plus, ce n'est pas que JSON et YAML ne sont pas exactement interchangeables avec XML. Les différences subtiles peuvent vous faire trébucher.

27
répondu Ovid 2010-10-17 07:26:54

chacun fera le travail.

JSON a l'avantage de l'analyse ultra-facile en JavaScript, bien que vous devrez probablement trouver et introduire une bibliothèque dans d'autres langues.

XML a l'avantage que plus de langue regrouper les bibliothèques pertinentes, et est utile pour le stockage que vous mentionnez. Ainsi, il est utile pour passer par différents systèmes, à la fois" en mouvement "et"au repos".

YAML a des bibliothèques pour tous langues, mais est un peu moins couramment utilisé, de sorte que vous êtes plus susceptible de devoir trouver et introduire une bibliothèque.

22
répondu Joshua Fox 2016-11-23 09:56:32

je pense que XML a été expliqué en détail par les autres. Cependant, YAML et JSON sont deux langages élégants, et ils ne sont pas aussi semblables que vous pourriez le croire à première vue.

quelques-unes des particularités de YAML

  • références

    - person: &id002
        name:   James
        age:    5.0
    
    - person: *id001
    

    la seconde personne est un tableau associatif égal à premier.

  • Casting "types de données 1519120920"

    foobar: !!str 123
    

    foobar est " 123 " (Type string).

  • "les types de données peu communes ne sont pas pris en charge par chaque implémentation

    Wikipédia:

    Particulièrement intéressantes [...] sont des ensembles, cartes commandées, horodatages et hexadécimal.

par conséquent, je considère JSON beaucoup plus simple.

un argument pour JSON

pas seulement pour JavaScript

bien qu'il puisse sembler stupide d'utiliser la "Notation objet JavaScript" pour votre application si vous n'utilisez pas JavaScript, vous devriez vraiment l'envisager de toute façon, parce que les types de données offerts dans JSON sont probablement le plus commun dans votre langue.

lisible, même si l'espace est facultatif

je pense que JSON est très lisible une fois prétifié, ce qui est très facile à faire. YAML est difficile à rendre compact, car il s'appuie sur l'espace blanc. D'accord, vous devriez compter sur la compression pour économiser la bande passante. Les références dans YAML peuvent vous sauver quelques bytes, mais elles ajoutent beaucoup de complexité. Si vous avez vraiment affaire avec des quantités de données qui rendent important d'éviter la duplication, je suggérerais de résoudre ce problème à un tout autre niveau. Même XML ne supporte pas ce genre de macros.

18
répondu Janus Troelsen 2012-01-06 03:11:46

choisir XML si vous avez besoin d'interopérer avec des systèmes que vous ne contrôlez pas (le schéma XML est inestimable ici), si vous allez transformer les données en texte, HTML, ou XML (nonobstant haters, XSLT est peerless), si vos données comprennent beaucoup de texte de balisage, si vos données doivent être modifiables par l'homme (haters nonobstant, éditable XML qui est validé contre un schéma est un assez bon outil pour beaucoup de travaux), et / ou si vous avez besoin d'interopérer l'un des nombreux outils et les technologies qui fonctionnent avec XML.

choisissez JSON si vous ne pouvez vraiment pas être ennuyé avec l'un des ci-dessus.

choisissez YAML si vous travaillez dans un environnement qui a beaucoup de soutien YAML.

9
répondu Robert Rossney 2010-10-16 23:18:14

Je suis D'accord avec Joe. Par exemple, si c'est une application javascript; json serait un bon candidat. Personnellement, j'irais avec json pour n'importe quoi, mais seulement parce que c'est celle dont je suis le plus à l'aise avec.

7
répondu orolo 2010-10-16 22:25:32

JSON serait mon choix. JSON et YAML sont légers et faciles à démarrer (aucun Schéma formel requis). JSON est plus largement utilisé et plus compatible avec D'autres technologies que YAML. Par exemple, PHP a une fonction intégrée pour décoder ou encoder JSON, pas YAML. JavaScript aime bien sûr JSON, étant donné qu'il s'agit d'un sous-ensemble strict de JavaScript valide.

7
répondu Alan H. 2010-10-16 22:48:09

Dépend de vos besoins. Pour les petites applications légères, je pense personnellement que XML est exagéré: http://www.codinghorror.com/blog/2008/05/xml-the-angle-bracket-tax.html

je préfère YAML dans ce cas. pour l'interaction avec javascript, utilisez json. Si vous avez vraiment besoin de définir votre propre grammaire (lire: schema) alors xml est cela. Très puissant, vous devez décider ce que vous essayez de faire - sinon votre question est trop large pour donner un réponse.

6
répondu Joe 2010-10-16 22:24:29

si les données ne sont pas hiérarchiques ou vont avoir des données intercalées dans, par exemple, la description This product is great for <targetDemo/> who love it's <featureSet/> ), vous pouvez considérer valeurs séparées par des virgules ( CSV ) ou un autre format comme tab séparé.

c'est de la vieille école, mais ça se fait sans alourdir votre dossier avec un tas de textes descriptifs. C'est-à-dire: en XML,vous avez les données suivantes pour chaque flux.

<feed name="" price="" type="" description=""/>

...en contraste avec CSV:

"", , "", ""

si vous voulez, vous pouvez ajouter une ligne d'en-tête en haut à des fins de documentation.

il y a aussi beaucoup de tooling autour de CSV, des utilitaires en ligne de commande comme awk aux interfaces graphiques comme Excel.

une autre alternative, si vous n'avez pas vraiment besoin que les données soient éditables via un éditeur de texte mais ne voulez pas déployer un service de base de données plus robuste, serait SQLite qui vous permet d'effectuer des opérations CRUD de type RDBMS sur un fichier binaire plat.

3
répondu steamer25 2010-10-18 20:03:02

en l'absence de problèmes d'interopérabilité, Je ne pense pas qu'il y ait grand chose à y gagner. Il y a de bonnes bibliothèques pour tous dans toutes les langues; certaines sont intégrées, d'autres pas. L'interface de Yur vers ces bibliothèques sera étroite-juste dans le code d'accès aux données - donc si on a une API douloureuse, même cela n'a pas beaucoup d'importance.

JSON est, pour moi, le plus agréable à éditer à la main, ce qui est un petit plus.

YAML peut gérer des structures de données non arborescentes utilisation de la notation&/*. Ni XML ni JSON n'ont de méthode intégrée pour le faire. Mais ton usage n'en a pas besoin.

1
répondu Tom Anderson 2010-10-19 14:38:45

je pense que xml est pour les données volumineuses et json est pour les données petites et pas trop complexes qui n'ont pas besoin de la dimension multiple du tableau. J'ai peut-être tort. ^^ Et je ne vois que yaml dans google app engine. Qui me semblent, il est tout à fait approprié pour stocker les préférences et les données d'une application.

0
répondu wizztjh 2010-10-17 07:38:57