2010-01-06 10 views
58

Ich muss oft XML-Schemas für verschiedene XML-basierte Importroutinen entwerfen. Es ist klar, dass XML-Schemas sich im Laufe der Zeit weiterentwickeln oder Fehler enthalten können, die behoben werden müssen. Daher ist es wichtig, die Version des Schemas zu erfassen und einen Mechanismus zu haben, der gegen eine bestimmte Version bindet.Welche Best Practices gelten für die Versionsverwaltung von XML-Schemas?

Zur Zeit habe ich zwei Szenarien:

  1. Der Fehler innerhalb des Schemas und alle Schema-Instanzen gefunden wird mit der festen Version entsprechen.

  2. Das Schema wurde aktualisiert und sollte als bevorzugt betrachtet werden, aber ein altes Schema sollte ebenfalls unterstützt werden.

Schließlich kam ich mit der Speicherung von Versionsinformationen im Namensraum des Schemas bis:

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

Wenn ein Fehler behebt ich es im gleichen Namensraum beheben, aber wenn ich über ein Schema dann aktualisieren ich brauche einen neuen Namensraum zu schaffen, sondern mit Upgrade Monat hinzugefügt:

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

Und wenn ich mehr als ein Upgrade in einem Monat haben, dann hängen Sie einfach einen Tag zu:

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

Kennen Sie einen besseren Ansatz?

Antwort

79

Das ist so ein schwieriges Thema, dass es nicht einmal lustig ist, und eines, für das ich jahrelang beratend zur Seite gestanden habe.

Es gibt viele best practices da draußen, aber die meisten von ihnen funktionieren nicht in allen Situationen. Zum Beispiel befürworten viele die Verwendung von "xsd: any", um Erweiterungen zuzulassen, und das ist nur ein Rezept für eine Katastrophe, wenn Entwickler dafür verantwortlich sind, das Schema zu pflegen und es in einen Speicherauszug umzuwandeln.

Hier sind einige Tipps für Sie, wenn Sie die ersten Schritte:

  • Sie nicht eine kleinere Versionsnummer setzen, Mikro-Versionsnummer, Datum, oder irgendetwas anderes in der Art, in Ihren Namensraum. Jedes Mal, wenn Sie den Namespace ändern, brechen Sie alle Verarbeitungsanwendungen ab.
  • Geben Sie ein Attribut "Version" in das XML-Instanzdokument ein. Dadurch kann eine Verarbeitungsanwendung oder ein Versionsadapterdienst herausfinden, was sie verarbeitet.
  • Do Geben Sie eine Richtlinie an, was eine abwärtskompatible Änderung darstellt, zum Beispiel: das Hinzufügen optionaler Elemente bricht keine Absender ab und bricht Empfänger nicht, wenn sie eine Richtlinie verwenden, Elemente zu ignorieren, die sie nicht kennen (JAXB und XMLBeans) kann auf diese Weise konfiguriert werden)

Dood Glück!

+1

Sooo, vielleicht sollten wir nur Informationen über die Version im Kommentar setzen? –

+0

Gibt es eine Möglichkeit, die Versionsnummer nach dem Demashalieren mit JAXB im Stammverzeichnis abzurufen? – CMPE

Verwandte Themen