Каковы наилучшие методы для версий XML-схем?
Мне часто приходится разрабатывать схемы XML для разных процедур импорта XML-баз. Понятно, что XML-схемы будут развиваться со временем или они могут содержать исправления, поэтому важно зафиксировать версию схемы и связать какой-то механизм с конкретной версией.
В настоящее время у меня есть два сценария:
-
Ошибка найдена в схеме, и все экземпляры схемы должны соответствовать фиксированной версии.
-
Схема обновлена и должна рассматриваться как предпочтительная, но также должна поддерживаться старая.
Наконец, я пришел с сохранением информации о версии в пространстве имен схемы:
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"
Знаете ли вы какой-нибудь лучший подход?
Ответы
Ответ 1
Это такой сложный вопрос, что это даже не смешно, и тот, который я провел годы, предоставляя консультационную поддержку.
Существует много лучших практик, но большинство из них не работают во всех ситуациях. Например, многие выступают за использование "xsd: any", чтобы разрешать расширения, и это всего лишь рецепт катастрофы, если разработчики отвечают за сохранение схемы, превращая ее в дамп.
Вот несколько советов для вас, если вы начинаете:
- Сделайте не поместить в ваше пространство имен младший номер версии, номер версии микро, дату или что-то еще в этом роде. Каждый раз, когда вы меняете пространство имен, вы разбиваете все обрабатывающие приложения.
- Do поместите атрибут "version" в документ экземпляра XML. Это позволит обработчику или службе адаптера версии выяснить, что она обрабатывает.
- Укажите политику того, что представляет собой обратное совместимое изменение, например: добавление необязательных элементов не приведет к разрыву отправителей и не будет прерывать приемники, если они используют политику игнорирования элементов, которые они не выполняют знать (JAXB и XMLBeans могут быть настроены таким образом)
Удача удачи!
Ответ 2
http://www.xml.com/pub/a/2004/07/21/design.html содержит хорошие рекомендации, а XML Schema 1.1 позволяет "управлять версиями" посредством условного включения (http://www.w3.org/TR/xmlschema11-1/#cip).