sequence і choice в XSD: порядок та альтернативи
XSDHub · 4 листопада 2026 року
Що означає проблема
Для складного типу XSD модель вмісту визначає допустимі дочірні елементи. xs:sequence описує послідовність частинок у заданому порядку, а xs:choice дає змогу обрати одну з гілок за одне входження групи. Однакові назви полів у цих конструкціях не роблять їх взаємозамінними: змінюється множина дозволених документів.
З чого почати перевірку
Наша схема contact дозволяє email або phone. Коректний XML містить лише email, а помилковий додає також phone. Після першого обраного елемента група вже вичерпала своє типове одне входження. Щоб відповідати саме цій схемі, документ має залишити один спосіб зв’язку. Вибір phone замість email також є допустимим варіантом.
Як працює приклад
Значення maxOccurs на choice стосується повторення всієї групи. Якщо дозволити необмежене повторення, можна отримати кілька email, кілька phone або їх чергування залежно від обмежень гілок. Це інша модель, ніж один обов’язковий вибір. Розглядайте межі повторень на кожному рівні вкладеності, щоб правильно прочитати поведінку складної схеми.
На що звернути увагу
У sequence необов’язкове поле зберігає своє місце. Якщо middleName стоїть між firstName та lastName, minOccurs="0" дозволяє пропустити його, але не перенести після прізвища. Помилки часто виникають, коли серіалізатор формує елементи за порядком ключів словника або алфавітом. Генератор має дотримуватися порядку, заданого контрактом формату.
Як застосувати виправлення
Існує також xs:all, проте в XSD 1.0 вона має власні обмеження й не є універсальним способом дозволити будь-які повторення. Для зміни офіційної моделі спершу потрібне узгодження з одержувачем. Відтворіть наведений приклад, окремо перевірте лише 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>