feat(xdto-compile,xdto-decompile,xdto-validate): пакеты XDTO из XML-схемы

Три навыка для работы с пакетами XDTO. Формат описания — обычная XSD,
своего DSL нет: рутину снимает конвертер (локальные объявления префиксов
dNpM на каждой ссылке, инвертированная кратность lowerBound/upperBound,
фасеты атрибутами вместо дочерних элементов, обязательный порядок
элементов верхнего уровня). То, чего XSD выразить не может — nillable
у атрибута, qualified у свойства, «атрибут записан явно» — едет
атрибутами из пространства имён модели XDTO по правилу «то же имя,
что в Package.bin». Свойства объекта метаданных живут в xs:appinfo,
поэтому пара decompile → compile замыкается без потерь.

Инвариант bin → xsd → bin проверен побайтово на 760 пакетах выгрузок
Бухгалтерии и ERP 8.3.24 (харнесс debug/xdto/roundtrip-corpus.mjs).
Сборка из рукописной XSD проверена загрузкой в базу 8.3.24 — именно
она вскрыла обязательный порядок import→property→valueType→objectType,
невидимый для корпусной сверки: все выгрузки уже канонические.

xdto-validate ловит два класса тихих дефектов, которые платформа не
диагностирует: подмену неразрешённого чужого типа на xs:anyType при
импорте XML-схемы и nillable у свойства-атрибута, теряемый экспортом
схемы в Конфигураторе.

Тесты: 18 снэпшот-кейсов на синтетических схемах (типовые конфигурации
в репозиторий не тащим), паритет PS↔PY на общих эталонах. Раннер
получил caseFiles — копирование файлов кейса в workDir для навыков
с файловым, а не JSON входом.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-07-25 21:21:57 +03:00
co-authored by Claude Opus 5
parent d544071b1e
commit d05aef54b4
140 changed files with 9601 additions and 1 deletions
@@ -0,0 +1,28 @@
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xdto="http://v8.1c.ru/8.1/xdto"
xmlns:tns="urn:test:annotations"
targetNamespace="urn:test:annotations">
<xs:annotation>
<xs:appinfo>
<xdto:package>
<xdto:name>ПакетСАннотациями</xdto:name>
<xdto:synonym lang="ru">Пакет с аннотациями</xdto:synonym>
<xdto:synonym lang="en">Annotated package</xdto:synonym>
<xdto:comment>Проверка xs:appinfo</xdto:comment>
</xdto:package>
</xs:appinfo>
</xs:annotation>
<xs:complexType name="Контакт" xdto:sequenced="true">
<xs:sequence>
<xs:element name="Комментарий" type="xs:string" minOccurs="0" xdto:form="Element"/>
<xs:element name="Имя с пробелом" type="xs:string" xdto:name="Имя_с_пробелом" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="Представление" type="xs:string" xdto:nillable="true" xdto:lowerBound="0"/>
</xs:complexType>
<xs:complexType name="ЯвныйПорядок" xdto:order="Элемент|Атрибут">
<xs:sequence>
<xs:element name="Элемент" type="xs:string"/>
</xs:sequence>
<xs:attribute name="Атрибут" type="xs:string"/>
</xs:complexType>
</xs:schema>