在W3C XML Schema中描述重复的XML节点?

时间:2010-04-06 20:44:32

标签: xml schema xsd

我有一个XML文档,如:

<Root>
    <Bravo />
    <Alpha />
    <Charlie />
    <Charlie />
    <Delta />
    <Foxtrot />
    <Charlie />
</Root>

节点的顺序无关紧要。除Charlie外,每个节点可能出现零次或一次。查理可能出现零,一,或任意多次。在XSD中表达这一点的简单方法是:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:element name="Root">
        <xsd:complexType>
            <xsd:all>
                <xsd:element name="Alpha" minOccurs="0" maxOccurs="1" />
                <xsd:element name="Bravo" minOccurs="0" maxOccurs="1" />
                <xsd:element name="Charlie" minOccurs="0" maxOccurs="unbounded" />
                <xsd:element name="Delta" minOccurs="0" maxOccurs="1" />
                <xsd:element name="Echo" minOccurs="0" maxOccurs="1" />
                <xsd:element name="Foxtrot" minOccurs="0" maxOccurs="1" />
            </xsd:all>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>

但这不起作用,因为xsd:all不允许maxOccurs大于1.因为我不能使用xsd:all,我应该使用什么?

2 个答案:

答案 0 :(得分:2)

Schematron的。 :)

我不是100%肯定,但我认为这个模型不能用XML Schema表达。

答案 1 :(得分:1)

你可以使用xsd:sequence,但是这个顺序很重要,你在问题中说明不会得到保证。

看看:http://www.w3.org/TR/2004/REC-xmlschema-1-20041028/structures.html#element-group似乎没有可以使用的模型组,尽管你可以在不使用内容组的情况下在complexType中定义它们吗?