D'après ce que j'ai compris leur sDNA (pour struct DNA) permet de représenter un objet de façon arborescente (jusque le identique à XML) et de le stocker dans un format binaire.
Typiquement toutes les données sont typées et enregistrées suivant un format binaire connu et non-changé (pour google : [http://code.google.com/apis/protocolbuffers/docs/encoding.ht(...)]). On stocke alors une représentation des données à la version N (le modèle en UML ou la struct en C) ainsi que les données elle-mêmes.
A la lecture on connaît la représentation des données à la version actuelle M et on sait que l'encodage n'a pas changé. Toutes les données sauvegardé sont chargés dans la représentation des données M suivant l'algorithme suivant :
- si l'élément existe dans N et dans M alors on le charge directement
- si l'élément existe dans N mais pas dans M on l'ignore
- si l'élément existe dans M mais pas dans N on le fixe à une valeur par défaut.
En appliquant ces règles on conserve une portabilité binaire entre les versions si les représentations de données ne changent pas trop.
Concernant les différences avec XML on peut considérer ceci :
- Un codage binaire est beaucoup beaucoup beaucoup plus performant que du XML
- Un codage binaire est illisible pour un humain
- En XML on peut réaliser des règles de transformations XML -> XML donc la portabilité entre versions est toujours assurée à partir de ses règles
[^] # Tentative d'explication
Posté par Clément David (site web personnel) . En réponse au journal Blender - explication du DNA. Évalué à 3.
Typiquement toutes les données sont typées et enregistrées suivant un format binaire connu et non-changé (pour google : [http://code.google.com/apis/protocolbuffers/docs/encoding.ht(...)]). On stocke alors une représentation des données à la version N (le modèle en UML ou la struct en C) ainsi que les données elle-mêmes.
A la lecture on connaît la représentation des données à la version actuelle M et on sait que l'encodage n'a pas changé. Toutes les données sauvegardé sont chargés dans la représentation des données M suivant l'algorithme suivant :
- si l'élément existe dans N et dans M alors on le charge directement
- si l'élément existe dans N mais pas dans M on l'ignore
- si l'élément existe dans M mais pas dans N on le fixe à une valeur par défaut.
En appliquant ces règles on conserve une portabilité binaire entre les versions si les représentations de données ne changent pas trop.
Concernant les différences avec XML on peut considérer ceci :
- Un codage binaire est beaucoup beaucoup beaucoup plus performant que du XML
- Un codage binaire est illisible pour un humain
- En XML on peut réaliser des règles de transformations XML -> XML donc la portabilité entre versions est toujours assurée à partir de ses règles
Sur ce bonne lecture :)