Quali sono le migliori pratiche per la versione degli schemi XML?

Spesso devo progettare schemi XML per diverse routine di importazione di basi XML. È chiaro che gli schemi XML si evolveranno nel tempo o potrebbero contenere bug da correggere, quindi è importante acquisire la versione dello schema e disporre di un meccanismo per collegarsi a una versione specifica.

Attualmente ho due scenari:

  1. Il bug si trova all’interno dello schema e tutte le istanze dello schema devono essere conformi alla versione fissa.

  2. Lo schema aggiornato dovrebbe essere considerato preferibile, ma dovrebbe essere supportato anche uno vecchio.

Finalmente ho trovato l’archiviazione delle informazioni sulla versione all’interno del namespace dello schema:

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

Quando correggi un bug lo aggiusto nello stesso namespace, ma se sto per aggiornare uno schema devo creare un nuovo spazio dei nomi ma con l’aggiornamento del mese aggiunto:

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

E se ho più di un aggiornamento in un mese, aggiungo anche un giorno:

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

Conosci un approccio migliore?

Questo è un argomento così difficile che non è nemmeno divertente, e uno che ho speso anni a fornire supporto di consulenza.

Esistono molte buone pratiche , ma la maggior parte di esse non funziona in tutte le situazioni. Ad esempio, molti sostengono l’uso di “xsd: any” per consentire estensioni, e questa è solo una ricetta per il disastro se gli sviluppatori sono incaricati di mantenere lo schema, trasformandolo in una discarica.

Ecco alcuni suggerimenti per te se stai per iniziare:

  • Non inserire un numero di versione minore, un numero di versione micro, una data o qualsiasi altra cosa del genere nello spazio dei nomi. Ogni volta che cambi lo spazio dei nomi, interromperai tutte le applicazioni di elaborazione.
  • Metti un attributo “versione” nel documento di istanza XML. Ciò abiliterà un’applicazione di elaborazione o un servizio di adattatore di versione per capire cosa sta elaborando.
  • Specificare un criterio di ciò che costituisce una modifica compatibile con le versioni precedenti, ad esempio: l’aggiunta di elementi facoltativi non interromperà i mittenti e non interromperà i destinatari se utilizzano una politica di ignorare elementi che non conoscono (JAXB e XMLBeans possono essere configurati in questo modo )

Buona fortuna!

http://www.xml.com/pub/a/2004/07/21/design.html fornisce buone linee guida e XML Schema 1.1 abilita il ‘versioning’ attraverso l’inclusione condizionale ( http://www.w3.org/TR/ xmlschema11-1 / # cip ).