web-dev-qa-db-fra.com

Quelles sont les meilleures pratiques pour le contrôle de version des schémas XML?

Je dois souvent concevoir des schémas XML pour différentes routines d'importation de bases XML. Il est clair 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 pour se lier à une version spécifique.

Actuellement, j'ai deux scénarios:

  1. Le bogue se trouve dans le schéma et toutes les instances de schéma doivent être conformes à la version fixe.

  2. Le schéma a été mis à niveau et doit être considéré comme préférable, mais un ancien doit également être pris en charge.

Enfin, j'ai trouvé le stockage des informations de version dans l'espace de noms du schéma:

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

Lors de la correction d'un bug, je le corrige dans le même espace de noms, mais si je suis sur le point de mettre à niveau un schéma, je dois créer un nouvel espace de noms mais avec un mois de mise à niveau ajouté:

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

Et si j'ai plus d'une mise à niveau en un mois, ajoutez également un jour:

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

Connaissez-vous une meilleure approche?

66
Regent

C'est un sujet tellement difficile qu'il n'est même pas drôle, et pour lequel j'ai passé des années à fournir un soutien de conseil.

Il existe de nombreuses meilleures pratiques , mais la plupart d'entre elles ne fonctionnent pas dans toutes les situations. Par exemple, beaucoup préconisent l'utilisation de "xsd: any" pour autoriser les extensions, et ce n'est qu'une recette pour un désastre si les développeurs sont chargés de maintenir le schéma, le transformant en un vidage.

Voici quelques conseils pour vous si vous commencez:

  • Ne pas ne pas mettre un numéro de version mineur, un numéro de version micro, une date ou toute autre chose du genre, dans votre espace de noms. Chaque fois que vous modifiez l'espace de noms, vous interrompez toutes les applications de traitement.
  • Mettez un attribut "version" dans le document d'instance XML. Cela permettra à une application de traitement ou à un service d'adaptateur de version de déterminer ce qu'elle traite.
  • Spécifiez une politique de ce qui constitue une modification rétrocompatible, par exemple: l'ajout d'éléments facultatifs ne cassera pas les expéditeurs et ne cassera pas les récepteurs non plus s'ils utilisent une politique d'ignorer les éléments qu'ils ne connaissent pas (JAXB et XMLBeans peuvent être configurés de cette façon)

Bonne chance!

85
xcut

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

6
Christian