在XSD架构中,我怎么说一个元素可能有任何数量的子元素必须从某种类型继承?

时间:2009-06-19 08:57:27

标签: xsd

说我在XSD中定义了这些类型:

<complexType name="NamedEntity">
    <attribute name="ix" type="positiveInteger"></attribute>
    <attribute name="sName" type="string"></attribute>
    <attribute name="txtDesc" type="string"></attribute>
</complexType>

<complexType name="Node">
    <complexContent>
        <extension base="tns:NamedEntity">
        </extension>
    </complexContent>
</complexType>

<complexType name="Source">
    <complexContent>
        <extension base="tns:NamedEntity">
            <attribute name="dt" type="dateTime"></attribute>
        </extension>
    </complexContent>
</complexType>

现在我要表示Node元素可能包含零个或多个子元素,可能属于NodeSource类型。

如果我不得不以某种方式枚举子节点的允许类型,那就没关系了,但由于我有更多类型继承自NamedEntity,如果我只能指定基类型,那就好了。

编辑: 我宁愿不在文档中使用xsi:type,但在元素名称和类型之间存在明确的关系。相当多的XML处理似乎依赖于此,我也发现它更具可读性。

4 个答案:

答案 0 :(得分:1)

如果可以避免,请不要使用xsi:type。这是evil。好吧,也许我夸大了,但它确实无法在没有亲密模式知识的情况下解析文档,这在实践中已经足够糟糕了。

帮助您:substitutionGroup

答案 1 :(得分:0)

在架构中,Node元素包含零个或多个类型为NamedEntity的子元素。在实际文档中,使用xsi:type属性(xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance")为每个属性选择子类型("Node""Source")。

答案 2 :(得分:0)

可能超出了XSD的功能。您是否考虑过使用Schematron进行额外验证?

答案 3 :(得分:0)

我想你想要一个substitution group