Хороший подход к версии XSD-схемы? - PullRequest
2 голосов
/ 10 января 2011

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

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

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

Ответы [ 2 ]

2 голосов
/ 10 января 2011

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

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

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

1 голос
/ 10 января 2011

обычно вы версализируете URL для схемы.

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

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

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

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

...