← Все гайды

XSD из нескольких файлов: xs:include и xs:import в проекте

· 3 мин чтения

XSD

Как работать со схемой, разбитой на файлы: разложить XSD по папкам проекта, чтобы include и import разрешались по относительным путям, переходить между файлами и проверять схему целиком.

Промышленные схемы почти всегда многофайловые: общие типы в common.xsd, отдельные файлы на каждое сообщение. Чтобы такая схема проверялась и отображалась целиком, редактору нужны все её файлы — их кладут в проект с той же структурой папок.

Как разложить схему

  1. Войдите и создайте проект (меню профиля → «Мои проекты»).
  2. В проекте переключитесь на вид По папкам и создайте папки кнопкой Папка — так же, как файлы лежат у вас на диске, например schemas и types.
  3. Создайте XSD-артефакты с теми же именами файлов (order.xsd, common.xsd): кнопкой Создать в проекте или из редактора XSD — открыть файл, «Сохранить в аккаунт» и «Артефакт → Добавить в проект…».
  4. Перетащите артефакты в нужные папки мышью. Подсказка у артефакта показывает путь, по которому на него ссылаются другие файлы.
  5. Откройте главную схему: ссылки schemaLocation="../types/common.xsd" разрешатся по дереву папок проекта.
Схема с подключёнными файлами в дереве проекта
Подключения схемы разрешаются по папкам проекта

Как разрешаются пути

  • Путь считается от папки текущего файла: ../types/common.xsd — на уровень выше, затем в папку types.
  • Путь, начинающийся с /, — от корня проекта.
  • Регистр букв в имени не важен, расширение можно опустить, если имя уникально.
  • Адреса в интернете (http://…) не загружаются: если схема импортирует внешнюю, скачайте её и положите в проект.

Работа со связанными файлами

  • Ctrl+клик по schemaLocation или по имени типа из другого файла открывает этот файл.
  • В списке компонентов есть раздел Подключения; типы из подключённых схем используются на диаграммах.
  • Проверка на сервере учитывает все подключённые файлы — ошибки в ссылках видны сразу.
  • Проверка XML по такой схеме (Файл → Проверить по XSD…) тоже подтянет все её файлы.

include и import — в чём разница

  • xs:include подключает схему с тем же targetNamespace (или без него) — как будто типы объявлены в этом файле.
  • xs:import подключает схему другого пространства имён; на её типы ссылаются через префикс, объявленный для этого пространства имён.

При преобразованиях (XSD в JSON Schema, пример XML) подключённые файлы тоже учитываются и встраиваются в результат.

Пример структуры

проект/
├── schemas/
│   ├── order.xsd        ← <xs:include schemaLocation="../types/common.xsd"/>
│   └── payment.xsd      ← <xs:import namespace="urn:bank" schemaLocation="../bank/bank.xsd"/>
├── types/
│   └── common.xsd
└── bank/
    └── bank.xsd

Откройте schemas/order.xsd — на диаграмме будут типы из common.xsd; payment.xsd покажет элементы банка по префиксу пространства имён.

Вопросы и ответы

Ошибка «Не удаётся найти схему» при правильном пути? Проверьте название артефакта: оно должно совпадать с именем файла в schemaLocation (с расширением или без). Путь, по которому на артефакт ссылаются, показан подсказкой в дереве проекта.

Можно ли загрузить много файлов сразу? Через интерфейс артефакты создаются по одному. Для переноса большой схемы удобен ИИ-агент через MCP или внешний API — они создают файлы в нужных папках пачкой (см. гайд).

Что с xs:redefine? Подключается так же, как include; проверка выполняется по правилам XML Schema 1.0.