Обмен данными в XML до сих пор встречается повсюду: SOAP-сервисы, файловые выгрузки, интеграции с банками и государственными системами. Структура таких сообщений часто повторяет таблицы базы. Если модель уже описана в DBML, черновик XML-схемы можно получить из неё автоматически.
Как преобразовать
- Откройте модель в редакторе DBML.
- Выберите Файл → Преобразовать в → XSD — структуры таблиц.
- Проверьте предпросмотр, выберите папку проекта и название — появится новый артефакт XSD. В песочнице результат откроется в редакторе XSD.

Как переводятся типы
| SQL (DBML) | XSD |
|---|---|
| int, bigint, serial | xs:integer |
| numeric, decimal, float, money | xs:decimal |
| varchar(n), char(n) | xs:string с ограничением xs:maxLength |
| text, uuid | xs:string |
| boolean | xs:boolean |
| date / time / timestamp, timestamptz | xs:date / xs:time / xs:dateTime |
| bytea, blob | xs:base64Binary |
| json, jsonb | xs:anyType |
| Enum | именованный простой тип с xs:enumeration |
Что получается
- Каждая таблица — именованный составной тип (
xs:complexType), каждая колонка — элемент последовательности в том же порядке. - Колонки
not nullи первичный ключ — обязательные элементы. Остальные —minOccurs="0"иnillable="true": элемент можно пропустить или передать пустым сxsi:nil. - Заметки таблиц и колонок, внешние ключи («→ customers.id») и значения по умолчанию — в
xs:documentation. - Корневой элемент назван по имени проекта (
Project blog { … }) или по названию документа и содержит строки всех таблиц (maxOccurs="unbounded") — схема сразу подходит для выгрузки данных. - Таблицы из схем БД (
sales.orders) получают имена с подчёркиванием:sales_orders.
Пример
Enum order_status { new
paid }
Table orders {
id int [pk, increment]
customer_id int [ref: > customers.id, not null]
status order_status [not null]
total numeric(10,2)
}
превращается в:
<xs:simpleType name="order_status">
<xs:restriction base="xs:string">
<xs:enumeration value="new"/>
<xs:enumeration value="paid"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="orders">
<xs:sequence>
<xs:element name="id" type="xs:integer"/>
<xs:element name="customer_id" type="xs:integer">
<xs:annotation>
<xs:documentation>→ customers.id</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="status" type="order_status"/>
<xs:element name="total" type="xs:decimal" minOccurs="0" nillable="true"/>
</xs:sequence>
</xs:complexType>
Что сделать после
- Посмотрите схему графически в редакторе XSD — см. «Просмотр XSD-схемы графически».
- Сгенерируйте пример XML для согласования с потребителем — см. «Пример XML по XSD».
- Уберите служебные колонки, задайте пространство имён (
targetNamespace) и сгруппируйте связанные данные: сообщение интеграции — не копия таблиц.
Вопросы и ответы
Переносятся ли индексы, уникальность и внешние ключи? Как ограничения — нет: XSD описывает структуру документа, а не целостность базы. Внешние ключи остаются в документации элементов.
Нужна схема для JSON? Пункт JSON Schema — структуры таблиц в том же меню, см. «DBML в OpenAPI и JSON Schema». Между JSON Schema и XSD можно переходить и дальше — см. «JSON Schema в XSD».
