我需要创建具有特殊特征的xsd和xml文件。例如'Plane'
和'Model' ... 'Ammo'
。如果我将'Ammo'
设置为true
,我需要设置Missiles
的数量(0-10)。如果'Ammo'
设置为false
,我应该无法选择Missiles
的数量。我怎么做这个切换?
部分sxd文件:
<xsd:complexType name="Plane">
<xsd:sequence>
<xsd:element name="Model" type="tns:Model" />
<xsd:element name="Ammunition" type="xsd:boolean" />
<!-- If ammo is true add Missiles -->
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="Model">
<xsd:sequence>
<xsd:element name="ModelType" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
<xsd:simpleType name="Missile">
<xsd:restriction base="xsd:byte">
<xsd:minExclusive value="0" />
<xsd:maxInclusive value="10" />
</xsd:restriction>
</xsd:simpleType>
和xml
文件的一部分:
<Plane>
<Model>
<ModelType>MiG-29</ModelType>
</Model>
<Ammunition>true</Ammunition>
<!-- Set amount of missiles -->
</Plane>
XSD 1.0单独不能表示跨字段验证。您需要使用Schematron扩展它,或者切换到XSD 1.1,后者仍然不流行。
为了保持Ammunition
标签的使用,我会将其转换为复杂类型并使其成为可选的;它的内容将包含您支持的弹药,这实际上将实现相同的语义。理想情况下,我将删除弹药标签一起,它不添加信息,只是开销。