Каковы наилучшие методы для версий 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" 

Вы знаете какой-нибудь лучший подход?

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

Есть много лучших практик , но большинство из них не работают во всех ситуациях. Например, многие выступают за использование «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 / # cip ).

  • Есть ли разница между «действительным xml» и «хорошо сформированным xml»?
  • Проверка файла XML с использованием нескольких схемных определений
  • Для чего нужны пространства имен XML?
  • Рекурсия в XML-схеме?
  • XML-схема: элемент с атрибутами, содержащими только текст?
  • В чем разница между xsd: include и xsd: import?
  • Использование JAXB сгенерированного classа для элемента, для которого требуется целое число с шаблоном
  • API Java для анализа файла схемы XSD
  • Создание WSDL из файла XSD
  • Пространства имен XML и атрибуты
  • Как выбрать DTD и XSD
  • Давайте будем гением компьютера.