xdto-compile について
xdto-compile は、XML Schema から1Cの XDTO パッケージを作成する PowerShell スキルです。パッケージファイルと構成登録を生成し、正確に表現できない構造を警告します。
主な機能
- 01XSD ファイルまたは文字列からパッケージを作成
- 02パッケージファイルと構成登録を生成
- 03appinfo から名前とメタデータを取得
- 04近似変換となるスキーマ構造を警告
- 05Force による既存パッケージの上書き
活用シーン
- 01取引先から受け取った XSD からパッケージを作成
- 02スキーマの修正後にパッケージを再構築
- 03読み込み前に変換できない構造を確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ nikolay-shirokov/ cc-1c-skills --skill xdto-compileインストール後、Claude Code で/xdto-compileを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
xsd-reference.mdscripts/xdto-compile.ps1xdto-compile.pyREADME(原文)English
プロジェクトの README よりこの 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
- Получить XSD от контрагента (или выгрузить схему существующего пакета:
/xdto-decompile) /xdto-compile -XsdPath <файл> -OutputDir <каталог-исходников>— прочитать предупреждения/xdto-validate <каталог-исходников>/XDTOPackages/<Имя>— убедиться, что типы разрешились/db-load-xml+/db-update
Правка существующего пакета: точечно — /xdto-edit; переработать схему целиком —
/xdto-decompile → правка XSD → /xdto-compile -Force.