mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-07-27 23:21:02 +03:00
5.7 KiB
5.7 KiB
XSD ↔ XDTO — справочник
Соответствия
| XML Schema | Модель XDTO |
|---|---|
xs:schema/@targetNamespace |
пространство имён пакета |
elementFormDefault / attributeFormDefault |
elementFormQualified / attributeFormQualified |
xs:import/@namespace |
зависимость от другого пакета (разрешается по namespace) |
xs:complexType |
объектный тип |
xs:simpleType |
тип значения |
xs:element / xs:attribute на верхнем уровне |
глобальное свойство пакета |
xs:element / xs:attribute внутри типа |
свойство типа |
@minOccurs / @maxOccurs="unbounded" |
lowerBound / upperBound="-1" |
@nillable, @default, @fixed, @ref |
те же по смыслу |
анонимный xs:simpleType/xs:complexType в объявлении |
встроенный тип свойства |
xs:complexContent/xs:extension/@base |
наследование типа |
@abstract, @mixed |
те же |
xs:choice |
тип-выбор одного из вариантов |
xs:any + xs:anyAttribute |
открытый тип |
xs:simpleContent/xs:extension/@base |
свойство собственного значения элемента |
xs:restriction + фасеты |
базовый тип + ограничения |
xs:pattern, xs:enumeration |
те же |
xs:list/@itemType |
список |
xs:union/@memberTypes |
объединение |
Порядок объявлений верхнего уровня в XSD произвольный — навык сам расставит их в порядке, который требует модель.
Аннотации xdto:
Пространство имён — http://v8.1c.ru/8.1/xdto. Нужны только там, где XML Schema
не может выразить то, что умеет модель. В большинстве схем не нужны вовсе.
Правило: чего XSD сказать не может — пиши атрибутом xdto: с тем же именем,
что и в модели.
| Аннотация | Где | Назначение |
|---|---|---|
xdto:nillable |
xs:attribute |
nillable у свойства-атрибута (XSD допускает только у элементов) |
xdto:lowerBound, xdto:upperBound |
xs:attribute |
кратность свойства-атрибута |
xdto:qualified |
объявление | переопределение *FormQualified для одного свойства |
xdto:name |
объявление | имя свойства, если XML-имя не годится как идентификатор 1С; XML-имя уйдёт в localName |
xdto:form |
xs:element |
записать form явно |
xdto:variety |
xs:restriction, xs:list, xs:union |
записать разновидность типа явно |
xdto:open, xdto:abstract, xdto:mixed, xdto:ordered, xdto:sequenced |
xs:complexType |
флаги типа, не выводимые из модели содержимого |
xdto:order |
xs:complexType |
исходный порядок свойств, если он не «атрибуты первыми»; имена через | |
xdto:textName, xdto:textlowerBound, xdto:textupperBound, xdto:textnillable |
xs:extension в xs:simpleContent |
параметры свойства собственного значения |
xdto:type |
xs:enumeration |
тип литерала перечисления |
xdto:prefix |
объявление | осмысленный префикс пространства имён вместо генерируемого |
xdto:memberTypesForm="prefixed" |
xs:union |
записать состав объединения префиксами, а не {ns}имя |
xdto:declareNs |
xs:union |
объявить префикс пространства имён на узле |
xdto:elementFormQualified, xdto:attributeFormQualified |
xs:schema |
записать флаги явно |
Пример:
<xs:complexType name="КонтактнаяИнформация" xdto:sequenced="true">
<xs:sequence>
<xs:element name="Комментарий" type="xs:string" minOccurs="0"/>
<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>
Аннотации, которые проставляет /xdto-decompile при выгрузке существующего пакета,
писать вручную не нужно — они нужны, чтобы обратная сборка вернула ровно тот же файл.
Свойства объекта метаданных
<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:synonym lang="en">Bank exchange</xdto:synonym>
<xdto:comment>Формат 1С:Предприятие — Клиент банка</xdto:comment>
</xdto:package>
</xs:appinfo>
</xs:annotation>
Пространство имён пакета берётся из targetNamespace и здесь не дублируется.
Параметры -Name, -Synonym, -Comment имеют приоритет над этим блоком.