Опишите повторяющиеся узлы XML в XML-схеме W3C? - PullRequest
8 голосов
/ 07 апреля 2010

У меня есть XML-документ вроде:

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

Порядок узлов не имеет значения. Каждый узел может появляться ноль или один раз, кроме Чарли. Чарли может появляться ноль, один или произвольно много раз. Простой способ выразить это в 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 ]

2 голосов
/ 07 апреля 2010

Schematron. :)

Я не уверен на 100%, но я думаю, что эту модель нельзя выразить в XML-схеме.

1 голос
/ 07 апреля 2010

Вы можете использовать xsd: sequence, но тогда важен порядок, который вы указали в вопросе, не будет гарантирован.

Глядя на: http://www.w3.org/TR/2004/REC-xmlschema-1-20041028/structures.html#element-group кажется, что нет группы моделей, которую вы можете использовать, хотя, возможно, вы могли бы просто определить их в complexType без использования группы содержимого?

...