как смешать xsd: sequence с xsd: all - PullRequest
2 голосов
/ 14 сентября 2011

Мне нужно, чтобы первые n элементов были в последовательности, за которой следовали несколько элементов, которые могут быть в любом порядке.

Например, допустим, у меня есть этот xml:

<root>
    <person>
        <fn>First name</fn>
        <ln>Last Name</ln>
        <gender>F</gender>
        <age>33</age>
        <middleName>Middle</middleName>
    </person>
</root>

Мне нужно, чтобы было 2 первых элемента и которые должны быть в этом точном порядке, затем следуют 3 элемента, и эти 3 могут быть в любом порядке.

Я попробовал это, но не похоже, что это правильный xml для схемы:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:element name="person">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="fn" minOccurs = "1" maxOccurs="1" type="xsd:string"/>
                <xsd:element name="ln" minOccurs = "1" maxOccurs="1" type="xsd:string"/>
            </xsd:sequence>

            <xsd:all>
                <xsd:element name="gender" minOccurs = "1" maxOccurs="1"/>
                <xsd:element name="age" minOccurs = "1" maxOccurs="1"/>
                <xsd:element name="middleName" minOccurs = "1" maxOccurs="1"/>
            </xsd:all>

        </xsd:complexType>
    </xsd:element>

</xsd:schema>

1 Ответ

2 голосов
/ 15 сентября 2011

Не может быть сделано напрямую.

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

В XSD 1.1 я бы предложил использовать модель содержимого xsd: all, а затем ограничить ее утверждением.

Однако я бы также спросил почему вы хотитеразработать свой документ таким образом.В тех случаях, когда XSD не позволяет вам что-то делать, это часто происходит потому, что дизайнеры XSD не думают, что это было бы очень умно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...