2010-01-06 9 views
58

A menudo tengo que diseñar esquemas XML para diferentes rutinas de importación de bases XML. Está claro que los esquemas XML evolucionarán con el tiempo o podrían contener errores por corregir, por lo que es importante capturar la versión del esquema y tener algún mecanismo para enlazar con una versión específica.¿Cuáles son las mejores prácticas para el control de versiones de esquemas XML?

Actualmente tengo dos escenarios:

  1. El error se encuentra dentro del esquema y todas las instancias de esquema deben cumplir con la versión fija.

  2. El esquema se actualizó y debería considerarse como preferible, pero también debería admitirse uno anterior.

Finalmente se me ocurrió con el almacenamiento de información de la versión dentro del espacio de nombres del esquema:

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

Al fijar un error lo fijo en el mismo espacio de nombres, pero si estoy a punto de actualizar un esquema a continuación, necesito crear un nuevo espacio de nombres pero con meses de actualización ha añadido:

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

Y si tengo más de una actualización en un mes a continuación, sólo añadir un día demasiado:

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

¿Conoces algún mejor enfoque?

Respuesta

79

Este es un tema tan difícil que ni siquiera es gracioso, y al que he dedicado años brindando apoyo de consultoría.

Hay muchos best practices por ahí, pero la mayoría de ellos no funcionan en todas las situaciones. Por ejemplo, muchos abogan por el uso de "xsd: any" para permitir extensiones, y eso es solo una receta para el desastre si los desarrolladores están a cargo de mantener el esquema, convirtiéndolo en un vertedero.

Éstos son algunos consejos para usted si usted está introducción:

  • Haz no poner un número menor de versión, número de micro versión, la fecha, o cualquier otra cosa por el estilo, en su espacio de nombres. Cada vez que cambie el espacio de nombres, romperá todas las aplicaciones de procesamiento.
  • Do ponga un atributo "versión" en el documento de instancia XML. Eso permitirá que una aplicación de procesamiento o un servicio de adaptador de versión descubra qué se está procesando.
  • Do especifique una política de lo que constituye un cambio retrocompatible, por ejemplo: agregar elementos opcionales no afectará a los remitentes, y no romperá los receptores si usan una política de ignorar elementos que desconocen (JAXB y XMLBeans se puede configurar de esta manera)

Dood luck!

+1

Entonces, ¿deberíamos poner información sobre la versión en un comentario? –

+0

¿Hay alguna manera de obtener el número de versión en la raíz después de demarshalling con JAXB? – CMPE

Cuestiones relacionadas