2011-01-10 3 views
2

La société pour laquelle je travaille codifie pour le moment la version du schéma ou du contrat dans le nœud racine. Par exemple,Bonne approche pour le versionnement du schéma XSD?

<PurchaseOrder_v1_2 xmlns="http://someNamespace"> 
... 
</PurchaseOrder> 

Je cherche l'opinion des gens sur cette approche de conception, comme je ne suis pas convaincu qu'il est le son. Par exemple, il exige que tous les services utilisant ce schéma en tant que contrat de messagerie puissent publier plusieurs versions pour satisfaire les exigences du client pour différentes versions.

Répondre

2

Je ne serais probablement pas d'accord avec la suggestion de @ hacktick selon laquelle la version de l'espace de noms est conventionnelle. Je n'ai jamais vu le W3C recommander que l'espace de noms change avec la version - certainement les espaces de noms du W3C ne le font pas - les deux versions de XSLT ont l'espace de noms http://www.w3.org/1999/XSL/Transform, par exemple.

Les deux codant la version dans la racine et l'espace de noms changent le nom de l'élément. Dans le cas de la racine, vous indiquez effectivement qu'il s'agit d'un élément entièrement différent sans relation définie avec l'élément PurchaseOrder dans la version précédente. Dans le cas du changement d'espace de noms, vous dites la même chose à propos de * tous les éléments dans la langue.

Les attributs de version sont plus normaux. Puis-je vous suggérer de lire this thread sur la liste de diffusion XML-dev pour une discussion très éclairée?

+0

Merci Nic. J'ai également lu les conseils ici http://www.xfront.com/SchemaVersioning.html qui soutient basiquement ce que Michael Kay suggère dans la discussion que vous avez liée. Donc, sur cette base, je pense que je vais remettre en question l'approche actuelle de mon projet actuel. Souhaite moi bonne chance! –

1

Normalement, vous mettez à jour l'URL du schéma. Donc, vous auriez un schéma appelé "schéma" et vous feriez alors référence à ceci comme: "http://www.example.com/2011/01/schema" où 2011 et 01 sont des versions dans le forme de l'année et du mois. Exemple:
<PurchaseOrder xmlns="http://www.example.com/2011/01/schema">
</PurchaseOrder>

Une autre approche consiste à utiliser d'indiquer la version de l'élément racine. Si votre élément racine est appelé "PurchaseOrder" par exemple, vous devez ajouter un attribut de version obligatoire (""). votre attribut de version contiendrait un nombre simple qui s'incrémente avec chaque version de votre xsd. vous devez sauvegarder un historique de toutes vos xsds publiques. cela pourrait conduire à des URL xsd plus faciles mais l'extraction et la validation de ces fichiers xml est un peu plus difficile.
Exemple:
<PurchaseOrder version="1" xmlns="http://www.example.com/schema"> </PurchaseOrder>

Si vous versionize le nom de l'élément racine (« PurchaseOrder_v1_2 ») vous auriez des problèmes de conversion dans vos fichiers xml, si vous optez pour une autre version.

Personnellement, je voudrais aller à la solution 1 (espaces de noms versionisés). ceci est également recommandé par le W3C. ne peut pas trouver un lien pour cette déclaration si.

+0

Merci pour votre réponse. –

Questions connexes