Я не эксперт по XML, хотя использую его довольно часто. Это не тот способ, которым я обычно делаю такую структуру. Я бы предпочел отдельные сложные типы, а не выбор из двух групп (см. Самый конец этого ответа).
Я подозреваю, что проблема в том, что ReservationGroup и CancellationGroup начинаются с одного и того же элемента, и в этом случае вы нарушите ограничение компонента схемы: уникальное присвоение частиц (ниже).
http://www.w3.org/TR/2004/REC-xmlschema-1-20041028/#cos-nonambig
Ограничение компонента схемы: уникальное
Атрибуция частиц
Модель контента
должны быть сформированы так, чтобы во время
· Проверка достоверности · элемента информации
последовательность элементов, компонент частиц
содержится прямо, косвенно или
· Неявно · в нем
попытаться · проверить · каждый элемент в
последовательность в свою очередь может быть однозначно
определяется без изучения
содержание или атрибуты этого элемента,
и без какой-либо информации о
предметы в оставшейся части
последовательность.
Примечание: Это ограничение
реконструирует для XML-схемы
эквивалентные ограничения [XML 1.0
(Второе издание)] и SGML. Учитывая
наличие замены элемента
групповые и групповые символы, краткое
Выражение этого ограничения
трудно, см. Анализ уникального
Ограничение приписывания частиц
(ненормативный раздел) (§H) для дальнейшего
обсуждение.
Например, две нижеприведенные группы недопустимы в одном и том же выборе, поскольку каждый их первый элемент - это «имя», что означает, что вы не можете определить, какую группу вы просматриваете. Однако первый элемент ReservationGroup отличается от группы отмены
(возможно, resDate и cancDate), то это действительно.
Редактировать: Я никогда раньше не сталкивался с подобной проблемой, и мне кажется удивительным, что определения групп являются абсолютно законными, но если вы объедините их в выбор, этот выбор становится незаконным из-за определения каждой группы.
Группы, которые не могут сформировать законный выбор
<xs:group name="ReservationGroup">
<xs:sequence>
<xs:element name="date"/>
<xs:element name="name"/>
<xs:element name="address"/>
</xs:sequence>
</xs:group>
<xs:group name="CancellationGroup">
<xs:sequence>
<xs:element name="date"/>
<xs:element name="name"/>
<xs:element name="address"/>
</xs:sequence>
</xs:group>
Группы, которые могут сформировать законный выбор
<xs:group name="ReservationGroup">
<xs:sequence>
<xs:element name="resDate"/>
<xs:element name="name"/>
<xs:element name="address"/>
</xs:sequence>
</xs:group>
<xs:group name="CancellationGroup">
<xs:sequence>
<xs:element name="cancDate"/>
<xs:element name="name"/>
<xs:element name="address"/>
</xs:sequence>
</xs:group>
Как я упоминал выше, я бы делал подобные вещи со сложными типами. Да, это добавляет еще один элемент, но кажется очевидным, и мне нравится очевидность.
<xs:complexType name="HeaderType">
<xs:sequence>
<xs:element name="reservation-number" type="ReservationNumberType" minOccurs="1" maxOccurs="1" nillable="false" />
<xs:choice minOccurs="1" maxOccurs="1">
<xs:element name="reservation" type="ReservationType" />
<xs:element name="cancellation" type="CancellationType" />
</xs:choice>
</xs:sequence>
</xs:complexType>