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

时间:2013-04-03 11:37:52

标签: xml xsd xsd-validation

我需要创建具有特殊特征的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>

1 个答案:

答案 0 :(得分:1)

单独的XSD 1.0无法表示跨领域验证。你需要使用Schematron扩展它或切换到XSD 1.1,后者仍然不受欢迎。

为了保持Ammunition标签的使用,我会将其转换为复杂类型并使其成为可选项;它的内容将包含您支持的弹药,实际上它将实现相同的语义。理想的是,我会完全删除Ammunition标签,它不是添加信息,只是开销。