2010-01-26 8 views
13

La aplicación en la que trabajo tiene una salida XML que se ajusta a un esquema XSD. A medida que se agregan características a la aplicación, el XSD cambia y me gustaría tener en cuenta la versión del esquema en el archivo XSD.¿Dónde agregar una versión a un esquema XSD?

Quizás me falta algo, pero no he encontrado una forma integrada de marcar la versión del esquema.

¿Cómo lo haces?

+1

Por qué no especifican la versión en el nombre del archivo xsd? p.ej. myschema1.0.xsd – Karussell

+0

Esta es una gran idea en realidad. – gooli

+1

Duplicado de [¿Cuáles son las mejores prácticas para el control de versiones de esquemas XML?] (Http://stackoverflow.com/q/2014237/991816) – DanSkeel

Respuesta

16

Usted puede utilizar el espacio de nombres del documento xsd

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

Como ejemplo mira el xsd del definido por w3.org, esta es la forma en que hazlo. Tenga en cuenta que cambiando el número de versión aquí normalmente sería, por definición, un cambio radical para cualquier consumidor de su xsd (sin importar cuán pequeño fuera el cambio real).

Para versiones menos impacto, parece que hay un acuerdo acerca de poner un atributo de versión a su elemento raíz:

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

Creo que esta es una solución adecuada al cambiar la versión principal. Sin embargo, no es tan bueno si desea realizar una corrección o una nueva iteración de desarrollo, ya que todos los documentos XML deberían migrarse a un nuevo espacio de nombres. El atributo de versión del elemento de esquema como señalo en mi parece más apropiado para esos casos IMO. –

+0

Mala respuesta. Ver [recomendaciones] (http://stackoverflow.com/questions/2014237/what-are-the-best-practices-for-versioning-xml-schemas). También puede probar [esto] (http://www.xfront.com/SchemaVersioning.html) – DanSkeel

+5

desde [xml-google-styleguide] (http://google-styleguide.googlecode.com/svn/trunk/xmlstyle .html): 'Los espacios de nombres NO DEBEN cambiarse a menos que la semántica de elementos o atributos particulares haya cambiado de maneras drásticamente incompatibles. [Justificación: Cambiar el espacio de nombres requiere cambiar todo el código del cliente.] ' – DanSkeel

7

De acuerdo con el elemento schema en sí tiene un atributo 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> 

Ver http://www.w3.org/TR/xmlschema-1/#key-schema, "Representaciones 3.15.2 XML de esquemas"

Sin embargo, si usted publicó el esquema, entonces creo que la La mejor forma de manejarlo sería usar el espacio de nombres de destino. Esto haría cumplir la versión correcta está utilizando (pero romper la compatibilidad)

Cuestiones relacionadas