mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-09-15 22:35:23 +03:00
fix(xdto-compile,xdto-validate): не терять конструкции молча; вычитать инструкции
xdto-compile терял свойства без единого слова: на реалистичной чужой схеме из шести объявленных доезжало одно. Вложенные xs:sequence/xs:choice теперь уплощаются (модель хранит плоский список), xs:all трактуется как последовательность, xs:group и xs:attributeGroup раскрываются по ссылке — и о каждом приближении навык пишет предупреждение. Молчаливая потеря — тот же класс дефекта, что мы ловим у платформы, лечится так же: сообщением, не отказом. xdto-validate получил проверки на грабли, найденные при разработке: порядок элементов верхнего уровня (платформа отвергает пакет, не называя причины), конфликты объявлений (name+ref, type+вложенный тип, тип без разновидности), несовпадение рода базового типа, дубли имён свойств. Новые правила прогнаны по всем 760 пакетам выгрузок: всё, что породила платформа, валидно по определению, поэтому каждая ошибка там — ошибка правила. Первый прогон дал 7, и все три класса оказались реальным поведением платформы: length вместе с minLength/maxLength встречается, два пакета делят один targetNamespace (Envelope и SOAP_Envelope_1_1 в БП), form="Text" называется не только __content. Правила понижены до предупреждений либо сняты. Заодно убран шум: предупреждение о неиспользуемом import срабатывало на четверти корпуса — теперь только вместе с anyType, где оно и означает проблему. Итог: 0 ошибок на корпусе, предупреждений 53 вместо 242. Инструкции переписаны под читателя-исполнителя: убраны детали реализации и наши мерки, каталог проверок валидатора (его вывод самодостаточен), локальные пути в примерах заменены нейтральными. Таблица соответствий XSD и справочник аннотаций вынесены в xdto-compile/xsd-reference.md. Round-trip 760/760 сохранён, паритет PS/PY сохранён. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
d05aef54b4
commit
7ca6dfa6b2
@@ -10,16 +10,15 @@ allowed-tools:
|
||||
|
||||
# /xdto-decompile — Выгрузка пакета XDTO в XML-схему
|
||||
|
||||
Превращает `Ext/Package.bin` в обычную XML-схему. Заменяет чтение модели XDTO с её
|
||||
инвертированной кратностью, фасетами-атрибутами и локальными объявлениями префиксов
|
||||
`dNpM` на каждой ссылке.
|
||||
Превращает пакет XDTO в обычную XML-схему — читаемую и редактируемую.
|
||||
Заменяет чтение `Ext/Package.bin` напрямую.
|
||||
|
||||
## Параметры
|
||||
|
||||
| Параметр | Описание |
|
||||
|----------|----------|
|
||||
| `PackagePath` | Каталог пакета, путь к `Ext/Package.bin` или к `<Имя>.xml` объекта метаданных |
|
||||
| `OutFile` | Записать схему в файл (UTF-8 BOM). Без него — вывод в stdout |
|
||||
| `OutFile` | Записать схему в файл. Без него — вывод в stdout |
|
||||
|
||||
```powershell
|
||||
powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/xdto-decompile.ps1" -PackagePath "<путь>"
|
||||
@@ -27,38 +26,27 @@ powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/xdto-decompile.ps1"
|
||||
|
||||
Примеры:
|
||||
```powershell
|
||||
... -PackagePath C:\cfsrc\erp\XDTOPackages\ClientBankExchange
|
||||
... -PackagePath C:\cfsrc\erp\XDTOPackages\ClientBankExchange -OutFile bank.xsd
|
||||
... -PackagePath src/XDTOPackages/ОбменСБанком
|
||||
... -PackagePath src/XDTOPackages/ОбменСБанком -OutFile bank.xsd
|
||||
```
|
||||
|
||||
## Round-trip
|
||||
## Правка пакета
|
||||
|
||||
`/xdto-decompile` → правка XSD → `/xdto-compile -Force` возвращает исходный `Package.bin`
|
||||
байт-в-байт. Инвариант проверен на 760 пакетах выгрузок Бухгалтерии и ERP.
|
||||
`/xdto-decompile` → правка XSD → `/xdto-compile -Force` возвращает пакет без потерь,
|
||||
включая имя, синоним и комментарий объекта метаданных — они выгружаются
|
||||
в `xs:annotation/xs:appinfo`. Это основной способ менять существующий пакет:
|
||||
отдельных операций правки не нужно, схема читается и правится целиком.
|
||||
|
||||
Это основной способ править существующий пакет: точечных операций не требуется, схема
|
||||
целиком читаема и редактируема.
|
||||
В схеме могут встретиться атрибуты с префиксом `xdto:` — так записано то, что
|
||||
XML Schema выразить не может (например `nillable` у атрибута). Схема при этом остаётся
|
||||
валидной, валидаторы такие атрибуты игнорируют. Трогать их обычно не нужно; смысл
|
||||
каждого описан в справочнике навыка `/xdto-compile`.
|
||||
|
||||
Свойства объекта метаданных (`Name`, `Synonym`, `Comment`) выгружаются в
|
||||
`xs:annotation/xs:appinfo`, поэтому при обратной сборке не теряются. `Namespace` не
|
||||
дублируется — его несёт `targetNamespace`.
|
||||
## Передача схемы наружу
|
||||
|
||||
## Отличия от экспорта XML-схемы в Конфигураторе
|
||||
|
||||
Штатный экспорт Конфигуратора теряет данные: `nillable` у свойств-атрибутов
|
||||
(спецификация XSD не допускает его у атрибутов), а для пакетов с
|
||||
`elementFormQualified="false"` выдаёт невалидную схему — `form="qualified"` на
|
||||
глобальных объявлениях.
|
||||
|
||||
Навык пишет валидную схему, а то, что XSD выразить не может, выносит в атрибуты
|
||||
пространства имён модели XDTO:
|
||||
|
||||
```xml
|
||||
<xs:attribute name="Представление" type="xs:string" xdto:nillable="true"/>
|
||||
```
|
||||
|
||||
Такие атрибуты валидаторы игнорируют, а `/xdto-compile` читает обратно. Схему без
|
||||
потерь можно отдавать контрагенту как есть.
|
||||
Полученную XSD можно отдавать контрагенту как есть. В отличие от команды
|
||||
«Экспорт XML-схемы» в Конфигураторе, навык не теряет `nillable` у свойств-атрибутов
|
||||
и не пишет `form` на глобальных объявлениях, где спецификация XSD его не допускает.
|
||||
|
||||
## Верификация
|
||||
|
||||
|
||||
Reference in New Issue
Block a user