如何在XML Schema中建模变体数据结构

时间:2011-07-31 07:17:08

标签: xml xsd

如何在不使用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 EvilSmart but useless, part 3

  • 名称xsi:type根本没有足够精确地表达属性的用途。 我宁愿选择datatype

1 个答案:

答案 0 :(得分:3)

您可以使用XSD 1.1中的条件类型分配来执行此操作,该条件在Xerces和Saxon的当前版本中实现。它不能在XSD 1.0中完成 - 这是一个众所周知的限制(通常在“共现约束”标签下引用)。