Проверка по XSD — обязательный шаг в интеграциях на XML: обмене с госсистемами, банковских форматах, SOAP-сервисах. Валидатор находит отсутствующие обязательные элементы, неверный порядок, значения вне ограничений и неизвестные атрибуты.
Как проверить
- Откройте документ в редакторе XML.
- Выберите Файл → Проверить по XSD….
- Выберите схему из своих артефактов XSD — подключённые ею схемы (
xs:include,xs:import) возьмутся по дереву папок проекта. Или нажмите Загрузить схемы (.xsd) и выберите сразу несколько файлов: главную схему и подключаемые ею. - Нажмите Проверить. Над редактором появится итог: «Документ соответствует схеме …» или «Не соответствует схеме …: ошибок N», а ошибки — в строках документа.

Как работает проверка
- Документ проверяется на сервере валидатором Xerces — тем же, что встроен в Java, поэтому результат совпадает с тем, что получит большинство Java-систем.
- Поддерживается XML Schema 1.0. Конструкции XSD 1.1 (
xs:assert,xs:alternative) не проверяются. - Схемы не загружаются из интернета: все файлы, на которые ссылается схема, должны быть в проекте или среди загруженных. Так проверка воспроизводима и безопасна.
- Атрибут
xsi:schemaLocationв документе не нужен — схема выбирается в окне.
Как читать типичные сообщения
| Сообщение Xerces | Что означает |
|---|---|
| cvc-complex-type.2.4.a: Invalid content was found starting with element … | элемент не на своём месте: неверный порядок в xs:sequence или неожиданный элемент |
| cvc-complex-type.2.4.b: The content of element … is not complete | не хватает обязательного дочернего элемента |
| cvc-datatype-valid.1.2.1 / cvc-type.3.1.3 | значение не подходит к типу: текст вместо числа, неверный формат даты |
| cvc-enumeration-valid | значения нет в перечислении |
| cvc-complex-type.4: Attribute … must appear | нет обязательного атрибута |
| cvc-elt.1.a: Cannot find the declaration of element … | корневой элемент или его пространство имён не совпадает со схемой |
Последняя ошибка часто означает расхождение в targetNamespace: если схема объявляет пространство имён, корневой элемент документа должен быть в нём (xmlns="…").
Если схемы нет
Черновик схемы можно получить из примера документа — см. «Генератор XSD из XML».
Пример
Схема требует в заказе customer, затем один или больше item и атрибут id типа xs:int. Документ
<order id="A42">
<item>Книга</item>
<customer>Иван</customer>
</order>
получит две ошибки: значение A42 не подходит к типу xs:int (cvc-datatype-valid) и item стоит раньше customer (cvc-complex-type.2.4.a). Обе отмечены в строках документа.
Вопросы и ответы
Схема ссылается на xmldsig или другие стандартные схемы по адресу в интернете — что делать? Скачайте эти схемы (например, xmldsig-core-schema.xsd) и положите в проект так, чтобы путь в schemaLocation совпал, или поменяйте путь на относительный. Загрузку из интернета валидатор не выполняет.
Можно ли проверить сразу много документов? Проверка выполняется для документа, открытого в редакторе. Для пакетной проверки в CI используйте валидатор вашей платформы (например, xmllint --schema) с теми же файлами схем, что лежат в проекте.
Нужна ли сама схема без ошибок? Да: если схема не компилируется, проверить документ нельзя. Откройте её в редакторе XSD — ошибки схемы видны там.
