69 votes

Quelles sont les meilleures pratiques pour la gestion des versions des schémas XML ?

Je dois souvent concevoir des schémas XML pour différentes routines d'importation de bases de données XML. Il est évident que les schémas XML évolueront avec le temps ou qu'ils pourraient contenir des bogues à corriger, il est donc important de capturer la version du schéma et d'avoir un mécanisme lié à une version spécifique.

Actuellement, j'ai deux scénarios :

  1. Le bogue est trouvé dans le schéma et toutes les instances du schéma doivent respecter la version corrigée.

  2. Le schéma est mis à jour et devrait être considéré comme préférable, mais l'ancien doit également être pris en charge.

Enfin, j'ai pensé à stocker les informations de version dans l'espace de noms du schéma :

targetNamespace="http://schemas.company.com/Geodesy/2010/River.xsd"

Lorsque je corrige un bogue, je le corrige dans le même espace de noms, mais si je suis sur le point de mettre à jour un schéma, je dois créer un nouveau espace de noms avec le mois de la mise à jour ajouté :

targetNamespace="http://schemas.company.com/Geodesy/2010/01/River.xsd"

Et si j'ai plus d'une mise à jour dans un mois, il suffit d'ajouter un jour également :

targetNamespace="http://schemas.company.com/Geodesy/2010/01/17/River.xsd"

Connaissez-vous une meilleure approche ?

87voto

xcut Points 3766

C'est un sujet tellement difficile que ce n'est même pas drôle, et un pour lequel j'ai passé des années à fournir un soutien en consultation.

Il y a beaucoup de meilleures pratiques disponibles, mais la plupart d'entre elles ne fonctionnent pas dans toutes les situations. Par exemple, beaucoup préconisent l'utilisation de "xsd:any" pour permettre des extensions, et c'est juste une recette pour le désastre si les développeurs sont responsables de la maintenance du schéma, le transformant en un dépotoir.

Voici quelques conseils si vous débutez :

  • Ne mettez pas de numéro de version mineure, de numéro de version micro, de date, ou autre dans votre espace de noms. Chaque fois que vous changez l'espace de noms, vous casserez toutes les applications de traitement.
  • Placez un attribut "version" dans le document XML d'instance. Cela permettra à une application de traitement ou à un service d'adaptation de version de savoir ce qu'il traite.
  • Spécifiez une politique de ce qui constitue un changement rétrocompatible, par exemple : ajouter des éléments optionnels ne cassera pas les expéditeurs, et ne cassera pas non plus les destinataires s'ils utilisent une politique d'ignorer les éléments qu'ils ne connaissent pas (JAXB et XMLBeans peuvent être configurés de cette manière)

Bonne chance !

6voto

Christian Points 11

http://www.xml.com/pub/a/2004/07/21/design.html fournit de bonnes directives et XML Schema 1.1 permet le 'versioning' à travers l'inclusion conditionnelle (http://www.w3.org/TR/xmlschema11-1/#cip).

0voto

YAVS Points 11

Utiliser la version dans le nœud racine ne semble pas une bonne solution. Cela entraîne un impact énorme sur le changement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X