Когда есть только пример сообщения, а схему нужно согласовать с партнёром, быстрее начать с автоматического черновика и доработать его, чем писать XSD с нуля.
Как сгенерировать XSD
- Откройте пример в редакторе XML.
- Выберите Файл → Преобразовать в → XSD — по примеру.
- Посмотрите предпросмотр и замечания. В песочнице нажмите Открыть в песочнице XSD, в аккаунте — выберите папку и название и нажмите Создать артефакт.
- В редакторе XSD проверьте модель на диаграмме и доработайте схему.

Что выводится из примера
- Структура: каждый элемент с потомками — составной тип с последовательностью (
xs:sequence) в порядке первого появления. - Кратность: элемент, который повторяется, получает
maxOccurs="unbounded"; элемент, которого нет у части родителей, —minOccurs="0". - Атрибуты: если атрибут есть у всех экземпляров элемента —
use="required". - Типы значений:
xs:integer,xs:decimal,xs:boolean,xs:date,xs:dateTime— если так выглядят все значения; иначеxs:string. - Пространство имён корня становится
targetNamespaceсelementFormDefault="qualified".
Что доработать
- Типы, которые пример угадал случайно: код «0012» станет
xs:integer, хотя это строка с ведущими нулями. - Перечисления (
xs:enumeration) для статусов и кодов. - Ограничения длины и шаблоны.
- Повторяющиеся структуры удобно вынести в именованные типы (
xs:complexType name="…") — черновик строится вложенными анонимными типами. - Документацию:
xs:annotation/xs:documentationвидна на диаграмме.
Затем проверьте исходный пример по новой схеме — «Проверка XML по XSD».
Пример
Из документа
<order id="42">
<item qty="2">Книга</item>
<item qty="1">Закладка</item>
<total>1990.00</total>
</order>
получится схема, где order содержит последовательность item (maxOccurs="unbounded") и total (xs:decimal), у item — текст и обязательный атрибут qty типа xs:integer, у order — обязательный атрибут id.
Вопросы и ответы
Как получить более точную схему? Возьмите пример, где встречаются все варианты: необязательные элементы присутствуют хотя бы в одном месте и отсутствуют в другом, повторяющиеся — повторяются. Генератор видит только то, что есть в документе.
Можно ли получить схему с именованными типами? Черновик строится вложенными анонимными типами — это самый наглядный вид. Вынесите повторяющиеся структуры в xs:complexType name="…" вручную; диаграмма в редакторе XSD поможет увидеть их.
Подходит ли результат для обмена с госсистемами? Как черновик — да; официальные форматы обычно заданы схемами регулятора, и лучше брать их, а не выводить из примера.
