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

Мне часто приходится разрабатывать схемы 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 ответа

Решение

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

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

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

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

Удачи удачи!

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

Другие вопросы по тегам