Как моделировать различные структуры данных в XML-схеме - PullRequest
1 голос
/ 31 июля 2011

Как бы вы смоделировали вариант структуры данных в XML-схеме, не используя xsi:type? Моя цель - определить схему для элемента с именем <property>, чьи атрибуты и типы атрибутов зависят от атрибута datatype; например:

<property datatype="integer" default="1234"/>
<property datatype="string" default="Abcde" maxlength="255"/>

Здесь атрибут default свойства целочисленного типа должен принимать только допустимые целочисленные значения, тогда как атрибут default свойства строкового типа должен принимать любые символы.

Кроме того, атрибут maxlength допускается, только если datatype="string".

т.е. ошибка проверки схемы должна возникать в обоих следующих свойствах:

<property datatype="integer" default="NotAnInteger"/>
<property datatype="integer" default="12345" maxlength="100"/>  <!-- maxlength not allowed -->

Я знаю, что если бы я использовал xsi:type вместо datatype, это было бы легко смоделировать в XML-схеме. Однако есть по крайней мере две причины, по которым я не хочу использовать xsi:type здесь:

  • Я читал во многих местах, что не рекомендуется использовать xsi:type, например. XSI: тип Зло или Умно, но бесполезно, часть 3 .

  • Имя xsi:type просто недостаточно точно выражает назначение атрибута. Я бы предпочел datatype.

1 Ответ

3 голосов
/ 31 июля 2011

Это можно сделать с помощью условного присвоения типов в XSD 1.1, который реализован в текущих версиях Xerces и Saxon.Это не может быть сделано в XSD 1.0 - это хорошо известное ограничение (часто упоминаемое под меткой «ограничения совместного использования»).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...