Как в схему XSD передать сложный тип

1. Kokariko 08.06.23 17:54 Сейчас в теме
Доброго времени суток, пишу обработку для выгрузки метаданных в XSD. Сейчас я могу выгружать в xsd примитивные и ссылочные типы. Но некоторые реквизиты имеют несколько типов. Подскажите, как можно описать элемент с несколькими типами.
Функция создания элемента:
Функция СоздатьЭлемент(ИмяЭлемента,UriПространстваИмен,ИмяТипа) Экспорт
	Элемент=Новый ОбъявлениеЭлементаXS;//Новый ФрагментXS;
	Элемент.Имя=ИмяЭлемента;  
	Элемент.ИмяТипа=новый РасширенноеИмяXML(UriПространстваИмен, Строка(ИмяТипа));
	возврат Элемент
КонецФункции
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Оберон 16 09.06.23 14:57 Сейчас в теме
Функция СоздатьЭлемент(ИмяЭлемента,ИмяТипа = "string", UriПространстваИмен = "http://www.w3.org/2001/XMLSchema") Экспорт
 
    Элемент = Новый ОбъявлениеЭлементаXS;
 
    Элемент.Имя      = ИмяЭлемента;
    Элемент.ИмяТипа  = Новый РасширенноеИмяXML(UriПространстваИмен, ИмяТипа);
 
    Возврат Элемент
 
КонецФункции

Функция СоздатьТип(ИмяТипа, БазовыйТип = Неопределено) Экспорт
	
	Тип = Новый ОпределениеСоставногоТипаXS;
    Тип.Имя = ИмяТипа;                                              
    Тип.МодельСодержимого = МодельСодержимогоXS.Составная;
    
    Если БазовыйТип <> Неопределено Тогда   
        Тип.ИмяБазовогоТипа        = БазовыйТип; 
        Тип.МетодНаследования    = МетодНаследованияXS.Расширение;
    КонецЕсли;                           
   
    Часть = Новый ГруппаМоделиXS;
    Содержимое = Новый ФрагментXS;
    Содержимое.Часть = Часть;
    
    Тип.Содержимое = Содержимое;
    
    Возврат Тип    
КонецФункции     

БазовыйТип = Новый РасширенноеИмяXML("https://forum.infostart.ru/", "Значение");
ИмяТипа 	= ЭлементаПравила.ИмяТипаXDTO + "_" + Выборка.ТабличнаяЧасть; 
Тип 		= СоздатьТип(ИмяТипа);

Фрагменты = Тип.Содержимое.Часть.Фрагменты;
Фрагмент  = Новый ФрагментXS;

Элемент 		= СоздатьЭлемент(Выборка.ТабличнаяЧасть,ИмяТипа,Схема.ПространствоИмен);
Фрагмент.Часть  = Элемент;
Показать
3. Kokariko 09.06.23 15:16 Сейчас в теме
(2)
МетодНаследованияXS


Подобный код у меня реализован, но с ним есть ньюанс. Таким образом он выгрузит следующий xml
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:tns="http://www.TestShema.ru/sample" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.TestShema.ru/sample" attributeFormDefault="unqualified" elementFormDefault="qualified">
	<xs:complexType name="ВариантыОтчетов">
		<xs:sequence>
			<xs:element name="Автор" type="tns:ВнешниеПользователи"/>
			<xs:element name="Автор" type="tns:Пользователи"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="Справочники">
		<xs:sequence>
			<xs:element name="ВариантыОтчетов" type="tns:ВариантыОтчетов"/>
		</xs:sequence>
	</xs:complexType>
</xs:schema>
Показать


И в xdto загрузит 2 автора (скриншот в приложении).
У XSD есть свойство union membertype. Есть ли аналог в 1С?

P.s
Решил руками поправить xsd, и да, это работает:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:tns="http://www.TestShema.ru/sample" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.TestShema.ru/sample" attributeFormDefault="unqualified" elementFormDefault="qualified">
	<xs:complexType name="ВариантыОтчетов">
		<xs:sequence>
			<xs:element name="Автор">
				<xs:simpleType>
					<xs:union memberTypes="tns:ВнешниеПользователи tns:Пользователи" />
				</xs:simpleType>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="Справочники">
		<xs:sequence>
			<xs:element name="ВариантыОтчетов" type="tns:ВариантыОтчетов"/>
		</xs:sequence>
	</xs:complexType>
</xs:schema>
Показать
Прикрепленные файлы:
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот