如何在不使用xsi:type
的情况下为XML Schema中的变体数据结构建模?
我的目标是为名为<property>
的元素定义一个模式,其属性和属性类型取决于datatype
属性;例如:
<property datatype="integer" default="1234"/>
<property datatype="string" default="Abcde" maxlength="255"/>
这里,integer-typed属性的default
属性只接受有效的整数值,而string-typed属性的default
属性应接受任何字符。
此外,只有maxlength
时才允许datatype="string"
属性。
即。应在以下两个属性上发生架构验证错误:
<property datatype="integer" default="NotAnInteger"/>
<property datatype="integer" default="12345" maxlength="100"/> <!-- maxlength not allowed -->
我知道如果我使用xsi:type
而不是datatype
,那么在XML Schema中建模很容易。
但是,至少有两个原因,为什么我不想在这里使用xsi:type
:
我在很多地方都读过,使用xsi:type
并不是一种好的风格,例如xsi:type
is Evil或Smart but useless, part 3。
名称xsi:type
根本没有足够精确地表达属性的用途。
我宁愿选择datatype
。
答案 0 :(得分:3)
您可以使用XSD 1.1中的条件类型分配来执行此操作,该条件在Xerces和Saxon的当前版本中实现。它不能在XSD 1.0中完成 - 这是一个众所周知的限制(通常在“共现约束”标签下引用)。