Каковы лучшие практики для управления версиями XML-схем? - PullRequest
66 голосов
/ 06 января 2010

Мне часто приходится разрабатывать схемы XML для различных процедур импорта баз XML. Понятно, что схемы XML со временем будут развиваться, или они могут содержать ошибки, которые необходимо исправить, поэтому важно захватить версию схемы и иметь некоторый механизм привязки к определенной версии.

В настоящее время у меня есть два сценария:

  1. Ошибка обнаружена в схеме, и все экземпляры схемы должны соответствовать фиксированной версии.

  2. Схема обновлена ​​и должна рассматриваться как предпочтительная, но также должна поддерживаться старая.

Наконец, я решил сохранить информацию о версии в пространстве имен схемы:

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

При исправлении ошибки я исправляю ее в том же пространстве имен, но если я собираюсь обновить схему, мне нужно создать новое пространство имен, но с добавленным месяцем обновления:

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

И если у меня более одного обновления в месяц, просто добавьте день:

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

Знаете ли вы лучший подход?

Ответы [ 2 ]

85 голосов
/ 11 января 2010

Это настолько сложный вопрос, что он даже не смешной, и на который я потратил годы, предоставляя консультационную поддержку.

Существует множество лучших практик , но большинство из них работают не во всех ситуациях. Например, многие выступают за использование «xsd: any» для разрешения расширений, и это всего лишь рецепт катастрофы, если разработчики отвечают за поддержку схемы, превращая ее в дамп.

Вот несколько советов, если вы только начинаете:

  • Не не вставьте вспомогательный номер версии, номер микро-версии, дату или что-либо еще в этом роде в ваше пространство имен. Каждый раз, когда вы меняете пространство имен, вы ломаете все приложения обработки.
  • Do помещает атрибут "version" в документ экземпляра XML. Это позволит приложению обработки или службе адаптера версии выяснить, что оно обрабатывает.
  • Do указать политику того, что представляет собой обратно совместимое изменение, например: добавление необязательных элементов не сломает отправителей и не сломает получателей, если они используют политику игнорирования неизвестных им элементов (JAXB и XMLBeans могут быть настроены таким образом)

Удачи!

6 голосов
/ 22 июля 2013

http://www.xml.com/pub/a/2004/07/21/design.html предоставляет хорошие рекомендации, а XML Schema 1.1 позволяет «управлять версиями» посредством условного включения (http://www.w3.org/TR/xmlschema11-1/#cip).

...