XSD中可用的元素值基于另一个元素的值

时间:2018-10-10 12:50:56

标签: xml xsd xsd-validation

给出以下XML:

<category>1000</category>
<type>a</type>

此XSD用于验证:

<xs:element name="category" type="categoryType"/>
<xs:element name="type" type="xs:string">

<xs:simpleType name="categoryType">
  <xs:restriction base="xs:string">
    <xs:enumeration value="1000"/>
    <xs:enumeration value="1010"/>
    <xs:enumeration value="1020"/>
    <xs:enumeration value="1030"/>
    <xs:enumeration value="1040"/>
  </xs:restriction>
</xs:simpleType>

如果出现以下情况,如何检查类型值:

  • type = a(可用类别:全部)
  • type = b(类别:1000,1020,1030)
  • type = c(可用类别:1000,1010,1030,1040)
  • type = d(类别:1000,1010,1020,1030)

1 个答案:

答案 0 :(得分:0)

XSD 1.0

如果不重新设计XML,以便通过元素名称而不是@type属性来传递类型差异,则不可能。

XSD 2.0

通过对categoryType中的每个b, c, d进行限制来定义新类型,然后使用Conditional Type Assignment来允许每个@type改变类型。

另请参阅:How to make type depend on attribute value using Conditional Type Assignment