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

2 ответа:

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

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

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

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

Dood удачи!

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