【发布时间】:2016-06-03 13:15:59
【问题描述】:
我想定义一个 XSD,它允许一个元素具有关于其属性值之一的特定子级。此属性值是使用多个xsd:enumeration 定义的。
这是我的 XML 可以是这样的:
<root>
<Conversion type="Phys" />
<Conversion type="Fact">
<Factor>13</Factor>
<Offset>37</Offset>
</Conversion>
<Conversion type="List">
<Item>
<Key>0</Key>
<Value>KEY_0</Value>
</Item>
<Item>
<Key>1</Key>
<Value>KEY_1</Value>
</Item>
</Conversion>
</root>
到目前为止,我已经设法将 Conversion 标记限制为只有这 3 个属性,并且只有这 3 个序列作为子项(Factor/Offset;Item 列表;没有)。
这是我的 XSD:
<xs:element name="Conversion">
<xs:complexType>
<xs:choice>
<xs:sequence>
<xs:element name="Item" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="Key" type="xs:decimal" />
<xs:element name="Value" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:sequence>
<xs:element name="Factor" type="xs:double" />
<xs:element name="Offset" type="xs:double" />
</xs:sequence>
<xs:sequence />
</xs:choice>
<xs:attribute name="Type">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="Fact" />
<xs:enumeration value="List" />
<xs:enumeration value="Phys" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
我想做的是根据我的属性值来限制孩子,以避免禁止混合属性和内容。
【问题讨论】:
标签: xml xsd xsd-validation xml-validation