Как бы вы смоделировали вариант структуры данных в 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
.