sequence и choice в XSD: порядок или выбор ветви
XSDHub · 4 ноября 2026 года
Причина и контекст
Модель содержимого complexType определяет, какие дочерние элементы допустимы. Конструкция xs:sequence требует прохождения её частиц в заданном порядке. Конструкция xs:choice выбирает одну из допустимых ветвей за одно появление группы. При изменении этих конструкций меняется контракт XML, даже если названия полей остаются прежними.
Что проверить в документе
Схема примера описывает контакт, у которого разрешён либо email, либо phone. Правильный документ содержит email. Ошибочный содержит оба поля: после выбранной ветви группа уже завершена, и дополнительный phone не ожидается. Чтобы исправить документ по этой схеме, оставьте ровно один способ связи.
Разбор примера
У choice по умолчанию одно появление. Если добавить maxOccurs="unbounded", можно получить последовательность выбранных ветвей, в том числе несколько email или чередование email и phone. Это уже иная модель данных. Ограничение количества повторений самой группы нельзя путать с ограничением отдельного поля внутри выбранной ветви.
Как найти источник ошибки
В sequence необязательные элементы сохраняют своё место относительно остальных. Если middleName имеет minOccurs="0" между firstName и lastName, его можно пропустить, но нельзя перенести после фамилии. Ошибка порядка часто возникает при сериализации из структуры данных, которая не сохраняет порядок ключей ожидаемым способом.
Особые случаи
Модель xs:all допускает другой порядок элементов при ограничениях XSD 1.0 на её состав и повторения. Она не является универсальной заменой sequence. Перед изменением схемы проверьте совместимость с получателем и используемой версией XML Schema. Локальный инструмент ориентирован на XSD 1.0 и не обещает поддержку возможностей XSD 1.1.
Порядок исправления
Вставьте полную схему контакта и сравните оба XML. Затем замените email на один phone: выбранная альтернативная ветвь тоже должна пройти. Для схемы реальной интеграции сначала нарисуйте допустимые варианты на бумаге и только потом меняйте композицию. Проверка небольшого набора примеров помогает обнаружить неверно понятое повторение, но не заменяет спецификацию всех вариантов.
Воспроизведите результат
Открыть инструмент для этих примеров. Сначала проверьте вариант с ошибкой, затем исправленный документ. Вставьте приведённую XSD в поле схемы.
Полная учебная схема XSD 1.0
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"><xs:element name="contact"><xs:complexType><xs:choice><xs:element name="email" type="xs:string"/><xs:element name="phone" type="xs:string"/></xs:choice></xs:complexType></xs:element></xs:schema>XML с ошибкой — ожидается отказ
<contact><email>a@example.com</email><phone>123</phone></contact>Исправленный XML — ожидается успех
<contact><email>a@example.com</email></contact>