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

8

I have an XML document like:

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

节点的顺序并不重要。每个节点可以出现零次或一次,除了Charlie节点。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,那我应该使用什么?


我的问题与“XSD - 如何允许元素以任意顺序出现多次?”的编辑版本非常相似。没有人能够提供XSD的答案。 - NotMyName
2个回答

2

Schematron. :)

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


可以用XSD 1.0表达这个意思,但有些棘手:基本上你必须计算元素的所有可能顺序,然后左因式化正则表达式以避免与确定性规则产生麻烦。在XSD 1.1中,对于所有组的约束有所放宽;特别是maxOccurs不再需要为1。 - C. M. Sperberg-McQueen

1

必须有一个指示器:序列、选择、全部。然而,单独使用它们中的任何一个都无法满足我的需求。 - NotMyName

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接