2011-01-10 3 views
2

Компания, над которой я сейчас работаю, кодифицирую схему или версию контракта в корневой узел. Например,Хороший подход к управлению версиями схемы XSD?

<PurchaseOrder_v1_2 xmlns="http://someNamespace"> 
... 
</PurchaseOrder> 

Я ищу мнения людей относительно этого подхода к дизайну, поскольку я не уверен, что это звук. Например, это требует, чтобы все службы, использующие эту схему в качестве контракта обмена сообщениями, могли публиковать несколько версий для удовлетворения требований клиентов для разных версий.

ответ

2

Я бы, вероятно, не согласился с предложением @ hacktick о том, что управление версиями пространства имен является обычным. Я никогда не видел, чтобы W3C рекомендовал, чтобы пространство имен менялось с версией - конечно, пространства имен W3C этого не делают - обе версии XSLT имеют пространство имен http://www.w3.org/1999/XSL/Transform, например.

Оба кодирования версии в корне и пространство имен меняют имя элемента. В случае с корнем вы фактически заявляете, что это совершенно другой элемент, не связанный с элементом PurchaseOrder в предыдущей версии. В случае изменения пространства имен вы сообщаете то же самое о * все элементы на этом языке.

Атрибуты версии более нормальные. Могу ли я предложить вам прочитать this thread в списке рассылки XML-dev для очень хорошо информированного обсуждения?

+0

Спасибо, Ник. Я также читал руководство здесь: http://www.xfront.com/SchemaVersioning.html, который в основном поддерживает то, что Майкл Кей предлагает в обсуждении, с которым вы связались. Поэтому, основываясь на этом, я думаю, что собираюсь бросить вызов нынешнему подходу к моему текущему проекту. Пожелай мне удачи! –

1

Обычно вы печатаете URL-адрес схемы.

, поэтому у вас будет схема, называемая «схема», и тогда вы ссылаетесь на это так: «http://www.example.com/2011/01/schema», где 2011 и 01 являются версиями в форме года и месяца. Пример:
<PurchaseOrder xmlns="http://www.example.com/2011/01/schema">
</PurchaseOrder>

другой подход заключается в использовании указать версию в корневом элементе. , если ваш корневой элемент, например, называется «PurchaseOrder», вы должны добавить атрибут требуемой версии («»). ваш атрибут версии будет содержать простое число, которое увеличивается с каждой версией вашего xsd. вы должны сохранить историю всех ваших общедоступных xsds. это может привести к упрощению URL-адресов xsd, но извлечение и проверка этих xml-файлов немного сложнее.
Пример:
<PurchaseOrder version="1" xmlns="http://www.example.com/schema"> </PurchaseOrder>

Если вы versionize имени корневого элемента («PurchaseOrder_v1_2») вы бы проблемы преобразования в ваших XML-файлах, если вы идете на другую версию.

Лично я бы выбрал решение 1 (пространство имен с версией). это также рекомендуется для w3c. не могу найти ссылку для этого утверждения.

+0

Спасибо за ваш ответ. –

Смежные вопросы