2009-06-12 8 views
4

Je cherche des moyens de spécifier formellement le format de divers flux binaires et d'utiliser un outil pour vérifier la conformité des flux aux spécifications. Quelque chose comme XSD + un des outils de validation pour XML. Ou comme une expression grep extrêmement compliquée travaillant sur un niveau binaire (de préférence pas - ce serait vraiment difficile à lire).Validation de structure pour les fichiers binaires

Est-ce que quelqu'un connaît une spécification/un outil qui serait utile? [Justification: Nous recevons tous les jours de nombreux fichiers binaires créés par des tiers et utilisons souvent de mauvais outils pour produire des fichiers invalides. Nous voulons leur donner un outil qu'ils pourraient utiliser comme un validateur et nous ne voulons pas écrire un outil spécifique pour chaque format.]

+0

Ces problèmes sont bien sûr exactement pourquoi XML a été inventé - est-il aucune chance de passer à elle? –

+0

Non, nous devons soutenir les formats existants :( – gabr

Répondre

3

Si vous pensez que la documentation des fichiers .class Java est un bon exemple d'une spécification, Reconsidérer regardant Preon Preon est capturing it entirely et génère une documentation comme this.

Il existe actuellement plusieurs autres initiatives pour capturer la 'syntaxe' des fichiers binaires codés. ASN.1 est utile, mais il ne vous donne pas beaucoup de kilométrage si vous avez l'intention de capturer, disons, des fichiers de classe Java. La même chose vaut pour BSDL, Flavor, BFlavor et quelques autres initiatives.Le problème est: il y a un million de façons de coder des données binaires, beaucoup de techniques de compression binaires, et je pense que cela veut dire qu'il y aura jamais quelque chose qui capte entièrement, à moins que la langue elle-même est extensible.

tampons de protocole Google a fondamentalement le même problème. Il définit quelque chose comme CDR de Corba, et c'est bien, tant que vous n'avez pas besoin de quelque chose de plus avancé. Les tampons de protocole de Google ne vont pas vous permettre de capturer le format de fichier de classe de Java.

0

Notation de syntaxe abstraite numéro un: ASN.1. Voir aussi la boîte à outils NCBI:

+0

Intéressant, mais peut-être un peu trop de poids lourd pour nous. De plus, je détestais toujours les spécifications qui ne sont pas librement disponibles. – gabr

+0

Les spécifications à NCBI et les outils sont librement abailable. Par exemple http : //tinyurl.com/mlylt4 est la définition d'une séquence d'ADN Il peut être en lecture/écriture sous forme binaire (http://www.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=nucleotide&id. = 5 & retmode = ASN.1), texte (http://www.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=nucleotide&id=5&rettype=fasta&retmode=text), xml (http: // www .ncbi.nlm.nih.gov/Entrez-/eutils/efetch.fcgi? db = nucléotide & id = 5 & rettype = FASTA & retmode = xml), ... – Pierre

1

Ceci est une question intéressante, mais je serais très surpris si un tel langage de spécification existe. C'est parce que les possibilités de méta-structure des fichiers binaires sont effectivement infinies. Comparez cela avec XML, où la méta-structure (les balises contiennent d'autres balises, un seul attribut peut avoir un nom, etc.) est strictement spécifiée. Et même avec cette structure, écrire des schémas pour XML est difficile! La seule façon de voir les possibilités infinies des formats de fichiers binaires est d'utiliser quelque chose qui permet une variabilité infinie - un langage de programmation Turing-complet. Ceci ne veut bien sûr pas dire que pour votre domaine de problème spécifique, un langage de spécification utile et un processeur pour celui-ci n'ont pas pu être produits. Je pense juste que vous aurez du mal à trouver un pré-construit. J'espère que les réponses ici me prouvent le contraire!

+0

Ouais, vos pensées exactement le mien écho. Mais j'ai promis mon patron à la recherche du problème, donc ... – gabr

3

donner un essai à Preon:

    annotation
  • conduit
  • parties de conditionals
  • langage d'expression

chaque classe annotée est une description Codec qui est capable de générer à la fois un Encoder et un Decoder.

+0

Merci, mais comme nous n'utilisons pas le Java, cela semble être de peu d'utilité.Si je le lis correctement, je dois réimplémenter h protocole comme un ensemble de classes Java, puis utiliser Preon pour générer un décodeur, que je pourrais ensuite utiliser pour tester. Je cherche quelque chose de plus formel et plus proche du niveau binaire (c'est-à-dire que je voudrais partir de bits en haut, pas vice versa). De cette façon, je pourrais utiliser le même outil pour tester nos générateurs de flux. – gabr

+1

Vérifiez également la mémoire tampon de protocole google: http://code.google.com/apis/protocolbuffers/docs/overview.html – dfa

+0

Cela pourrait potentiellement être utile. S'il vous plaît ajouter comme une réponse séparée afin que je puisse voter :) – gabr

Questions connexes