2010-01-26 6 views
13

L'application sur laquelle je travaille a une sortie XML conforme à un schéma XSD. Comme les fonctionnalités sont ajoutées à l'application, le XSD change et je voudrais noter la version du schéma dans le fichier XSD.Où ajouter une version à un schéma XSD?

Peut-être qu'il me manque quelque chose, mais je n'ai pas trouvé de manière intégrée pour marquer la version du schéma.

Comment faites-vous?

+1

Pourquoi ne pas spécifier la version dans le nom du fichier xsd? par exemple. myschema1.0.xsd – Karussell

+0

C'est vraiment une bonne idée. – gooli

+1

Dupliquer de [Quelles sont les meilleures pratiques pour les schémas XML de version?] (Http://stackoverflow.com/q/2014237/991816) – DanSkeel

Répondre

16

Vous pouvez utiliser l'espace de noms de votre document xsd

<xs:schema targetNamespace="http://yourcompany/yourapp/1.0" ... > 
    ... 
</xs:schema> 

À titre d'exemple regarder défini par w3.org de la xsd, voici comment ils fais le. Notez que en changeant le numéro de version ici serait habituellement par définition un changement de rupture pour tous les consommateurs de votre xsd (peu importe la taille du changement réel).

Pour moins impactant versioning, il semble y avoir un accord de mettre un attribut de version à votre élément racine:

<xs:schema version="1.0.0" ...> 
    ... 
</xs:schema> 
+2

Je pense que c'est une solution appropriée lors du changement de version majeure. Cependant, ce n'est pas très bon si vous voulez faire une correction ou une nouvelle itération de développement, car les documents XML al devraient être migrés vers un nouvel espace de noms. L'attribut de version de l'élément de schéma comme je souligne dans mon semble plus approprié pour ces cas IMO. –

+0

Mauvaise réponse. Voir [recommandations] (http://stackoverflow.com/questions/2014237/what-are-the-best-practices-for-versioning-xml-schemas). Aussi, vous pouvez essayer [this] (http://www.xfront.com/SchemaVersioning.html) – DanSkeel

+5

De [xml-google-styleguide] (http://google-styleguide.googlecode.com/svn/trunk/xmlstyle .html): 'Les espaces de noms NE DOIVENT PAS être modifiés à moins que la sémantique d'éléments ou d'attributs particuliers ait changé de façon radicalement incompatible. [Justification: La modification de l'espace de nom nécessite de modifier tout le code client.] ' – DanSkeel

7

Selon l'élément schema a lui-même un attribut version:

<schema 
    attributeFormDefault = (qualified | unqualified) : unqualified 
    blockDefault = (#all | List of (extension | restriction | substitution)) : '' 
    elementFormDefault = (qualified | unqualified) : unqualified 
    finalDefault = (#all | List of (extension | restriction | list | union)) : '' 
    id = ID 
    targetNamespace = anyURI 
    version = token 
    xml:lang = language 
    {any attributes with non-schema namespace . . .}> 
    Content: ((include | import | redefine | annotation)*, (((simpleType | complexType | group | attributeGroup) | element | attribute | notation), annotation*)*) 
</schema> 

Voir http://www.w3.org/TR/xmlschema-1/#key-schema, "3.15.2 XML Représentations de schèmes"

Toutefois, si vous avez publié le schéma, je pense que le La meilleure façon d'y faire face serait d'utiliser l'espace de noms cible. Cela imposerait la bonne version utilisée (mais la compatibilité briser)