2010-10-12 16 views
1

Je cherche un format de données pour les fichiers texte avec des informations hiérarchiques. Ces fichiers seront créés principalement par une entrée humaine (plutôt que générés par des programmes), mais seront lus principalement par des programmes. Les principales exigences sont:Format de données hiérarchique lisible par l'homme et par ordinateur avec héritage entre fichiers

  1. Syntaxe très simple et épurée. (Exemple: les niveaux de hiérarchie définis par les onglets fonctionneraient correctement.) Il est si simple que toute la description de la langue puisse tenir dans une page.

  2. Modèle mental propre et concis. (Exemple: arbre où les feuilles sont des valeurs de types int, string, float, bool, et les clés sont des noeuds non-leaf Un modèle un peu plus complexe, disons avec les dictionnaires, est également correct).

  3. Une seule façon de représenter une sémantique donnée; c'est-à-dire, aucune syntaxe équivalente avec la même signification. De préférence facile à analyser dans un langage comme Python; ou des bibliothèques stables disponibles à cet effet.

  4. Peut permettre une sorte d'héritage entre les fichiers. C'est-à-dire, je voudrais permettre à un fichier de surcharger partiellement un autre. Idéalement, je voudrais même autoriser l'héritage multiple, les conflits traditionnels de résolution étant gérés simplement en interdisant que toute valeur soit dérivée de plus d'un parent. Ne crée aucun piège pour les données entrées par l'utilisateur (par exemple, le texte non cité peut être une chaîne dans YAML, mais s'il s'agit d'un mot réservé, alors ce n'est pas le cas).

Est-ce quelque chose qui est disponible sur le marché ou dois-je le construire à partir de zéro? YAML ne fonctionne pas car il n'autorise pas l'héritage entre les fichiers, a des pièges comme décrit ci-dessus et possède de nombreuses constructions syntaxiques alternatives pour faire la même chose.

Et YAML/XML ne fonctionne pas parce que la description de l'un ne peut pas tenir sur une page.

Merci!

Répondre

1

Je ne connais aucun langage de sérialisation de données répondant à toutes vos exigences. Je suis très friand de JSON et OGDL (parce qu'ils sont beaucoup plus faciles à lire que XML), mais ils échouent tous les deux (au moins) en permettant l'héritage. PS: Wikipedia a une comparaison des formats de données populaires here. PPS: Je suppose que vous devriez envisager d'écrire DSL. Une implémentation interne (ou faible) ne serait pas si difficile à implémenter, et vous pourriez utiliser Python lui-même comme langage hôte.

+0

En effet, a décidé d'aller avec DSL ... – max