Генерация XSD из AsyncAPI¶
Для работы адаптера с произвольным контрактом данных (не EnterpriseData) потребуется XDTO-пакет. Создать его можно двумя способами — вручную в EDT или сгенерировать из AsyncAPI-спецификации.
Скрипт asyncapi2xsd.py¶
Скрипт из набора скриптов принимает YAML-файл в формате AsyncAPI и генерирует XSD-схему, которую затем импортируют в XDTO-пакет.
Запуск¶
python asyncapi2xsd.py spec.yaml out.xsd \
-n http://example.com/ns \
--prefix crm. \
--suffix .changed
| Аргумент | Назначение |
|---|---|
spec.yaml | Входной файл AsyncAPI |
out.xsd | Результирующий файл XSD |
-n | targetNamespace — пространство имён XDTO-пакета |
--prefix | Префикс адреса канала (обрезается при формировании имени типа) |
--suffix | Суффикс адреса канала (обрезается при формировании имени типа) |
Правила генерации¶
Именование типов¶
Из адреса канала <prefix><имя><suffix> тип получает имя <Имя> (первая буква заглавная). Для схем без канала — имя схемы с заглавной первой буквой.
Пример:
- Канал:
crm.order.changed - Префикс:
crm., суффикс:.changed - Результат:
Order
Соответствие JSON Schema → XSD¶
| JSON Schema | XSD-тип |
|---|---|
string | xs:string |
string, format: uuid | tns:UUID (restriction с паттерном UUID) |
string, format: date-time | xs:dateTime |
string, format: date | xs:date |
string, format: time | xs:time |
string, maxLength: 36 или minLength: 36 | tns:UUID |
integer | xs:int |
number | xs:decimal |
boolean | xs:boolean |
Структурные конструкции¶
| Конструкция в схеме | Результат в XSD |
|---|---|
enum (inline) | xs:simpleType с именем {ТипРодитель}.{ИмяПоля} |
$ref на enum-схему | отдельный xs:simpleType |
$ref на объект | ссылка tns:{ИмяТипа} |
type: object (вложенный) | xs:complexType с именем {ТипРодитель}.{ИмяПоля} |
type: array, items — объект | два типа: {ТипРодитель}.{ИмяПоля} (таблица с элементом row maxOccurs="unbounded") и {ТипРодитель}.{ИмяПоля}.Row (тип строки) |
type: array, items — примитив | элемент с maxOccurs="unbounded" |
Ссылки 1С¶
Все поля, содержащие ссылки на объекты 1С, должны иметь тип tns:UUID. По этому типу адаптер выполняет автоматическую конвертацию между ссылкой (ref) и её UUID-представлением при сериализации/десериализации.
Как пометить поле как ссылку
В AsyncAPI-схеме укажите format: uuid либо ограничение длины строки (maxLength: 36 / minLength: 36) — скрипт сгенерирует поле с типом tns:UUID.
Опциональные поля¶
Поля, не перечисленные в массиве required, получают атрибут nillable="true".
Параметры XSD¶
elementFormDefault="qualified";attributeFormDefault="unqualified";targetNamespaceзадаётся через аргумент-n.
Импорт XSD в XDTO-пакет¶
После генерации XSD:
- Откройте XDTO-пакет в EDT или Конфигураторе.
- Импортируйте XSD через стандартное меню импорта.
- Проверьте типы — структура должна соответствовать схеме.
- Используйте полученный XDTO-пакет в настройках продюсера/консьюмера в поле Формат сериализации / десериализации.
Смотрите также¶
- Расширение адаптера.
- Конвертация данных 3.1 (руководство пользователя).
- Набор скриптов — репозиторий с
asyncapi2xsd.pyи другими утилитами.