Валидация модели данных iTop через XSD-схему

Всем привет!

Хочу поделиться небольшой находкой, которая заметно упрощает жизнь при написании datamodel.my-module.xml: XSD-схема для валидации модели данных iTop, от rudnerbjoerniTop DataModel XSD | iTop schema.

Что это

Обычная XSD-схема, которая проверяет структуру вашего datamodel-файла ещё до того, как вы попытаетесь залить его в iTop и получите (а может и нет) ошибку где-то в недрах системы. Подключается элементарно: в шапке XML достаточно добавить ссылку на схему через xsi:noNamespaceSchemaLocation, и дальше IDE сама разбирается.

<?xml version="1.0" encoding="UTF-8"?>
<itop_design version="3.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:noNamespaceSchemaLocation="https://rudnerbjoern.github.io/iTop-schema/itop_design.xsd">

Но можно запускать и руками через утилиту для валидации xml:

xmllint --noout --schema https://rudnerbjoern.github.io/iTop-schema/itop_design.xsd datamodel.my-module.xml

Есть версия под конкретный iTop 3.2 LTS от 2024 года и просто latest, которая всегда смотрит на последний релиз.

Как использую я

Пробовал в IDE PhpStorm, и там это заработало прямо из коробки после указания схемы в заголовке файла. Из практического:

  • Валидация на лету: опечатался в названии атрибута, перепутал вложенность — IDE подсвечивает сразу, не надо гонять тулкит и разбирать ошибки.

  • Автодополнение: это лично для меня оказалось приятнее валидации. Пишешь < внутри <field>, и IDE сама предлагает список валидных дочерних элементов и их значений. Экономит время на подглядывание в вики по XML reference.


Но автор честно предупреждает, что схема пока неполная: где-то она не понимает xsi:type для брендинга/порталов, где-то ругается на вполне легальные конструкции типа constants/constant. То есть штука не отменяет проверку через тулкит, но как страховка на этапе написания XML работает хорошо.

Если у кого-то есть свои кастомные атрибуты или плагины, схему можно расширить локально через xs:include, автор в документации приводит пример.

Проект живёт на энтузиазме одного разработчика, и он открыто зовёт всех желающих помочь: с опытом в iTop datamodel или в самих XSD, с тестированием на реальных datamodel.xml, или просто с issues/pull request’ами в репозитории. Так что если кому-то знакомо и есть время, велкам.