使用可选元素(if - then)创建.xsd和.xml



我需要创建具有特殊特征的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标签的使用,我会将其转换为复杂类型并使其成为可选的;它的内容将包含您支持的弹药,这实际上将实现相同的语义。理想情况下,我将删除弹药标签一起,它不添加信息,只是开销。

最新更新