mcpField
X
xdto-compile

xdto-compile

github.com/nikolay-shirokovDevelopment74143 installsUpdated today
Repository

About xdto-compile

xdto-compile is a PowerShell skill for building 1C XDTO packages from XML Schema. It writes package files and configuration registration, and reports schema constructs that cannot be represented exactly.

Key features

  1. 01Build an XDTO package from an XSD file or string
  2. 02Write package files and configuration registration
  3. 03Read package name and metadata from appinfo
  4. 04Warn about approximated schema constructs
  5. 05Overwrite an existing package with Force

Use cases

  1. 01Create a package from a partner-provided XSD
  2. 02Rebuild a package after revising its schema
  3. 03Review unsupported schema mappings before loading

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/nikolay-shirokov/cc-1c-skills --skill xdto-compile

After installing, type/xdto-compilein Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

xsd-reference.md
scripts/
xdto-compile.ps1
xdto-compile.py

Details

From the project README

/xdto-compile — Создание пакета XDTO из XML-схемы

Собирает пакет XDTO по XML-схеме: XDTOPackages/<Имя>.xml, XDTOPackages/<Имя>/Ext/Package.bin и регистрацию в Configuration.xml.

Вход — обычная XML-схема, писать её нужно так же, как для любого другого инструмента.

Параметры

ПараметрОбязательныйОписание
XsdPathодин из двухПуть к файлу XML-схемы. Псевдоним — -Path
Xsdодин из двухСхема строкой, вместо -XsdPath
OutputDirдаКаталог исходников конфигурации или расширения — там, где лежит Configuration.xml
NameнетИмя объекта метаданных. По умолчанию — из xs:appinfo, иначе имя файла XSD, санированное под идентификатор 1С
SynonymнетСиноним (строка). По умолчанию — из xs:appinfo, иначе имя пакета. Для нескольких языков задавай синоним в схеме, блоком xs:appinfo
CommentнетКомментарий. По умолчанию — из xs:appinfo
ForceнетПерезаписать существующий пакет. Без него навык откажется затирать уже собранный пакет
powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/xdto-compile.ps1" -XsdPath "<схема.xsd>" -OutputDir "<каталог-исходников>"

Примеры:

... -XsdPath bank.xsd -OutputDir src -Name ОбменСБанком -Synonym "Обмен с банком"
... -XsdPath fss.xsd  -OutputDir src -Force

Читай предупреждения

XSD выразительнее модели XDTO. Всё, что не переносится один в один, навык переносит приближённо и пишет об этом:

Предупреждения (2) — конструкции XSD без точного соответствия в модели XDTO:
  ! Документ : вложенная xs:choice уплощена в последовательность — выбор одного из вариантов не сохранён
  ! Документ : кратность на вложенной частице (<xs:sequence minOccurs/maxOccurs>) не выражается в модели XDTO

Такое сообщение означает, что пакет собран, но схема упрощена. Если упрощение недопустимо — меняй схему (например, разноси варианты xs:choice по разным типам), а не игнорируй.

Что переносится приближённо: вложенные xs:sequence/xs:choice (уплощаются в плоский список свойств), xs:all (становится последовательностью), кратность на частице, substitutionGroup, xs:key/keyref/unique, xs:redefine.

xs:group и xs:attributeGroup раскрываются по ссылке — их содержимое попадает в тип. xs:include игнорируется: зависимости в XDTO разрешаются только по namespace, поэтому включаемую схему нужно собрать отдельным пакетом и заменить include на import.

Посмотреть, что получилось

Модель пакета лежит в Ext/Package.bin. Несмотря на расширение, это текстовый XML, но читать его напрямую обычно незачем: состав собранного пакета показывает /xdto-info, а полную схему — /xdto-decompile.

Зависимости между пакетами

<xs:import namespace="…"/> разрешается по namespace среди пакетов конфигурации или расширения. Если пакета с таким пространством имён нет, платформа при загрузке молча подменит тип на xs:anyType — без ошибки. Собирай сначала зависимости, потом зависящий пакет, и проверяй результат через /xdto-validate.

Какие пакеты уже собраны, видно в ChildObjects файла Configuration.xml.

Что XSD выразить не может

Две вещи модель XDTO умеет, а XML Schema — нет: nillable у атрибута и qualified у отдельного свойства. Они пишутся атрибутами из пространства имён модели:

<xs:attribute name="Представление" type="xs:string"
              xmlns:xdto="http://v8.1c.ru/8.1/xdto" xdto:nillable="true"/>

Схема остаётся валидной — валидаторы такие атрибуты игнорируют. Полный список и таблица соответствий XSD ↔ XDTO — в xsd-reference.md.

Свойства объекта метаданных можно задать прямо в схеме:

<xs:annotation>
    <xs:appinfo>
        <xdto:package xmlns:xdto="http://v8.1c.ru/8.1/xdto">
            <xdto:name>ОбменСБанком</xdto:name>
            <xdto:synonym lang="ru">Обмен с банком</xdto:synonym>
        </xdto:package>
    </xs:appinfo>
</xs:annotation>

Типичный workflow

  1. Получить XSD от контрагента (или выгрузить схему существующего пакета: /xdto-decompile)
  2. /xdto-compile -XsdPath <файл> -OutputDir <каталог-исходников> — прочитать предупреждения
  3. /xdto-validate <каталог-исходников>/XDTOPackages/<Имя> — убедиться, что типы разрешились
  4. /db-load-xml + /db-update

Правка существующего пакета: точечно — /xdto-edit; переработать схему целиком — /xdto-decompile → правка XSD → /xdto-compile -Force.

Comments

Markdown supported