Схема XML: все, последовательность и группы

Я впервые пишу XML-схему и нашел несколько полезных инструментов, которые помогут мне ее написать.

Сейчас я в странной ситуации. Схема, которую я написал, действительна для некоторых инструментов, а не для некоторых других. Эта схема представляет собой смесь «все», «последовательность» и "группа". Вот моя XML-схема:

<?xml version="1.0" encoding="utf-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
     <xsd:group name="test">

        <xsd:all>
                <xsd:element name="e2" minOccurs="0" maxOccurs="1"/>
                <xsd:element name="e3" minOccurs="0" maxOccurs="1"/>
                <xsd:element name="e4" minOccurs="0" maxOccurs="1"/>
        </xsd:all>
    </xsd:group>

    <xsd:element name="e0">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="e1" maxOccurs="unbounded"/>
                <xsd:group ref="test"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>

Правильна ли эта схема? Это идет прямо сэтот валидатор а такжеэтот тоже но плагин XML Tools для Notepad ++ сообщает "Невозможно проанализировать файл схемы".

П.С .: Я написал эту схему, потому что хотел иметь элемент "e0" с этим возможность иметь смесь e1, e2, e3 и e4. e2, e3 и e4 должны появляться 0 или 1 раз, а e1 может возникать в незапланированное время. Например, эти XML-файлы должны пройти:

<e0>
   <e1/>
   <e1/>
   <e1/>
   <e1/>
   <e1/>
   <e2/>
</e0>

<e0>
   <e2/>
   <e3/>
   <e4/>
</e0>

<e0>
   <e1/>
   <e2/>
   <e3/>
   <e4/>
</e0>

Вы знаете другой способ сделать это?

Спасибо

Ответы на вопрос(1)

Решение Вопроса

что ваша схема недействительна в соответствии с версией 1.0, в которой говоритсяпрямо здесь (учебник для начинающих) тот

XML Schema stipulates that an all group must appear as the sole child at the top of a content model.

Либо попробуйте прочитать раздел 3.8.6 структур XML-схем.Вот, В ваш список я бы добавил XSD-процессор .NET, который в вашем случае будет жаловаться на:

The group ref to 'all' is not the root particle, or it is being used as an extension.

В XSD 1.0 не существует решения, которое дало бы вам то, что вы хотите, и с кратким синтаксисом, если вы не создадите оболочку для элементов e1 (ниже как e1s).

<?xml version="1.0" encoding="utf-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:group name="test">
        <xsd:all>
            <xsd:element name="e1s" minOccurs="0">
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:element name="e1" maxOccurs="unbounded"/>
                    </xsd:sequence>
                </xsd:complexType>
            </xsd:element>
            <xsd:element name="e2" minOccurs="0"/>
            <xsd:element name="e3" minOccurs="0"/>
            <xsd:element name="e4" minOccurs="0"/>
        </xsd:all>
    </xsd:group>
    <xsd:element name="e0">
        <xsd:complexType>
            <xsd:group ref="test"/>
        </xsd:complexType>
    </xsd:element>
</xsd:schema> 

Когда дело доходит до элементов e1, они должны быть заключены в e1s

<e0>
    <e1s>
        <e1/>
        <e1/>
        <e1/>
        <e1/>
        <e1/>
    </e1s>
    <e2/>
</e0>  

или же

<e0>
    <e1s>
        <e1/>
    </e1s>
    <e2/>
    <e3/>
    <e4/>
</e0>     

Тогда это все подтвердит ...

 30 мая 2012 г., 11:31
Довольно часто можно найти инструменты, которые чрезмерно либеральны в том, что они принимают. И Xerces, и Saxon достаточно согласны: если эти двое принимают это, то это, вероятно, допустимо. Что, к сожалению, не означает, что оно будет работать везде, потому что некоторые инструменты чрезмерно ограничивают то, что они принимают ...
 09 дек. 2016 г., 15:11
Очень странно, что нет решения (по крайней мере, простого) для такой простой задачи.
 TheArsenik30 мая 2012 г., 22:28
ОК, спасибо за ваши ответы! Я постараюсь сделать это по-другому.

Ваш ответ на вопрос