类型取决于属性值的元素的XSD?

时间:2016-07-13 18:40:22

标签: xml xsd jaxb schema

我正在尝试为以下XML文件创建XSD:

<config xmlns="tbd">
    <root>C:\workspace\</root>
    <zone type="directories" delay="30000">
        <directory>output</directory>
        <directory>input</directory>
        <directory>errors</directory>
    </zone>
    <zone type="database" delay="50000">
        <table name="OUTPUT_VIEW">
            <column>ID</column>
            <column>TYPE</column>
            <column>SUB_TYPE</column>
            <column>COUNT(*)</column>
            <column>SUM(BASE_AMOUNT)</column>
        </table>
    </zone>
</config>

我在创建XSD时遇到问题,因为zone元素可以是XML文件的两种类型。

1 个答案:

答案 0 :(得分:2)

XSD 1.0

您不能让内容模型因XSD 1.0中的属性值而异。如果您可以重新设计XML,请考虑将zone拆分为两个不同的元素directoriesdatabase。如果您无法重新设计XML,那么您可以合并单独的内容模型,并使两个模型不共享的所有元素都是可选的;你将失去执行某些要求的能力,但至少你能够涵盖这两种情况。

XSD 1.1

这正是Conditional Type Assignment的目的。有关示例,请参阅How to make type depend on attribute value using Conditional Type Assignment