Имя: Пароль:
1C
 
Поправить схему XML
0 vicof
 
18.12.24
11:56
Всем привет. Должна получиться такая схема:

<xs:schema xmlns:tns="http://www.111.ru xmlns:xs="http://www.w3.org/2001/XMLSchema targetNamespace="http://www.111.ru/api/v1 attributeFormDefault="unqualified" elementFormDefault="qualified">
	<xs:complexType name="ArrayOfObjectRights">
		<xs:sequence>
			<xs:element name="ObjectRight" type="tns:ObjectRight" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
</xs:schema>


Никак не могу заставить схему для ObjectRight установить minOccurs и maxOccurs

СхемаXML = Новый СхемаXML;
	СхемаXML.ПространствоИмен		 = URIПространстваИмен;
	СхемаXML.ФормаАтрибутовПоУмолчанию = ФормаПредставленияXS.Неквалифицированная;
	СхемаXML.ФормаЭлементовПоУмолчанию = ФормаПредставленияXS.Квалифицированная;
	
	//------------------------------
	
	ФрагментСхемыМассивОбъектныхПрав = Новый ФрагментXS;
	ФрагментСхемыМассивОбъектныхПрав.Часть = Новый ГруппаМоделиXS;
	
	ТипМассивОбъектныхПрав = Новый ОпределениеСоставногоТипаXS;
	ТипМассивОбъектныхПрав.Имя		= "ArrayOfObjectRights";
	ТипМассивОбъектныхПрав.Содержимое = ФрагментСхемыМассивОбъектныхПрав;
	
	СхемаXML.Содержимое.Добавить(ТипМассивОбъектныхПрав);
	
	ТипЭлементМассиваОбъектныхПрав = Новый ОбъявлениеЭлементаXS;
	ТипЭлементМассиваОбъектныхПрав.Имя	 = "ObjectRight";
	ТипЭлементМассиваОбъектныхПрав.ИмяТипа = Новый РасширенноеИмяXML(URIПространстваИмен, "ObjectRight");
	
	ФрагментыТипаМассивОбъектныхПрав = ТипМассивОбъектныхПрав.Содержимое.Часть.Фрагменты;
	ФрагментыТипаМассивОбъектныхПрав.Добавить(ТипЭлементМассиваОбъектныхПрав)


Если делаю так, то у меня минимальное значение появляется на уровень выше, что логично.
ТипМассивОбъектныхПрав.Содержимое.МинимальноВходит = 0;


Судя по СП, "Минимимально входит" может появляться только у "ФрагментXS".

Куда еще копнуть, чтобы именно у элемента установить минимально возможное количество элементов, не правя схему руками?
1 Андрюха
 
18.12.24
10:47
<xs:element name="ObjectRight" type="tns:ObjectRight" minOccurs="0" maxOccurs="unbounded"/>

По значениям минимум-максимум запись корректная.
2 vicof
 
18.12.24
12:10
Это в том результате, который нужно получить.
А у меня или на уровне выше получается, или тип у ObjectRight нужно менять, что тоже неправильно.
3 vicof
 
19.12.24
09:44
уп
4 vicof
 
24.12.24
02:27
В общем, я победил, если кому надо:

&НаСервере
Функция СоздатьСхемуМассиваОбъектныхПрав(СхемаXML)
    
    URIПространстваИмен = URIПространстваИмен();
    
    ИмяМассива          = "ArrayOfObjectRights";
    ИмяЭлементаВМассиве = "ObjectRight";
    
    СхемаМассива = Новый ОпределениеСоставногоТипаXS;
    СхемаМассива.Имя = ИмяМассива;
    
    ГруппаМодели = Новый ГруппаМоделиXS;
    
    СхемаЭлементаМассива = Новый ОбъявлениеЭлементаXS;
    СхемаЭлементаМассива.Имя      = ИмяЭлементаВМассиве;
    СхемаЭлементаМассива.ИмяТипа  = Новый РасширенноеИмяXML(URIПространстваИмен, ИмяЭлементаВМассиве);
    
    ФрагментСхемы = Новый ФрагментXS;
    ФрагментСхемы.МинимальноВходит  = 0;
    ФрагментСхемы.МаксимальноВходит = "unbounded";
    ФрагментСхемы.Часть             = СхемаЭлементаМассива;
    
    ГруппаМодели.Фрагменты.Добавить(ФрагментСхемы);
    
    СхемаМассива.Содержимое = ГруппаМодели;
    
    СхемаXML.Содержимое.Добавить(СхемаМассива);
    
    Возврат СхемаМассива;
    
КонецФункции
Программист всегда исправляет последнюю ошибку.