Тип: ОбъединениеНедопустимыхПодстановкиXS. Определяет значение, запрещающее подстановку вместо элемента данного типа элементов, имеющих тип, являющийся расширением или ограничением данного типа. Также может запрещаться подстановка элементов из группы подстановки возглавляемой данным элементом.
Полное описание, параметры и ограничения
ОбъявлениеЭлементаXS.Блокировка (XSElementDeclaration.Block)
ОбъявлениеЭлементаXS (XSElementDeclaration)
Блокировка (Block)
Доступен, начиная с версии 8.1.
Использование:
Чтение и запись.
Описание:
Тип: ОбъединениеНедопустимыхПодстановкиXS.
Определяет значение, запрещающее подстановку вместо элемента данного типа элементов, имеющих тип, являющийся расширением или ограничением данного типа. Также может запрещаться подстановка элементов из группы подстановки возглавляемой данным элементом.
Доступность:
Сервер, толстый клиент, внешнее соединение.
Использование в версии:
Доступен, начиная с версии 8.1.
Методическая информация
Практические примеры
Разделить блокировку типа и подстановки элемента
У Product и корневого product явно заданы extension/restriction. Читаем семь масок с одинаковыми флагами, но разным назначением.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Каждый фрагмент выполните отдельно на сервере учебной базы. Полная собственная XSD включена в код; используются только namespace urn:guide:product и встроенные типы языка XSD.
Sku описывает код, SkuList — список кодов, SkuOrQuantity — выбор допустимого типа значения. Product и Price — разные составные типы.
Нет DTD, include/import, чтения или записи файла и сетевого доступа. НаборСхемXML.Проверить проверяет собственную схему, не XML-экземпляр товара.
XSD = "<xs:schema xmlns:xs=""http://www.w3.org/2001/XMLSchema""
| xmlns:g=""urn:guide:product"" targetNamespace=""urn:guide:product""
| elementFormDefault=""qualified"" version=""1.0"" xml:lang=""ru"">
| <xs:annotation><xs:documentation>Учебный товар, не контракт внешнего API</xs:documentation></xs:annotation>
| <xs:simpleType name=""Sku"" final=""list union""><xs:restriction base=""xs:string"">
| <xs:length value=""4""/><xs:pattern value=""[A-Z][0-9]{3}""/>
| </xs:restriction></xs:simpleType>
| <xs:complexType name=""Product"" block=""extension restriction"" final=""extension restriction""><xs:sequence>
| <xs:element name=""name"" type=""xs:string""/>
| <xs:element name=""quantity"" type=""xs:nonNegativeInteger""/>
| <xs:element name=""note"" type=""xs:string"" minOccurs=""0""/>
| </xs:sequence><xs:attribute name=""code"" type=""g:Sku"" use=""required""/>
| </xs:complexType>
| <xs:element name=""product"" type=""g:Product"" block=""extension restriction"" final=""extension restriction""/>
|</xs:schema>";
Чтение = Новый ЧтениеXML;
Чтение.УстановитьСтроку(XSD);
Попытка
ЧтениеДерева = Новый ПостроительDOM;
ДокументСхемы = ЧтениеДерева.Прочитать(Чтение);
Чтение.Закрыть();
Исключение
Чтение.Закрыть();
ВызватьИсключение;
КонецПопытки;
Построитель = Новый ПостроительСхемXML;
Схема = Построитель.СоздатьСхемуXML(ДокументСхемы.ЭлементДокумента);
Если Схема = Неопределено Тогда
ВызватьИсключение "Не удалось построить учебную схему";
КонецЕсли;
Набор = Новый НаборСхемXML;
Набор.Добавить(Схема);
Если Не Набор.Проверить() Тогда
ВызватьИсключение "Учебная XSD не прошла проверку";
КонецЕсли;
ТипТовара = Схема.ОпределенияТипов.Получить("Product", "urn:guide:product");
Если ТипТовара = Неопределено Тогда
ВызватьИсключение "В собственной схеме не найден тип Product";
КонецЕсли;
Если ТипЗнч(ТипТовара) <> Тип("ОпределениеСоставногоТипаXS") Тогда
ВызватьИсключение "У Product другой вид определения типа";
КонецЕсли;
Элемент = Схема.ОбъявленияЭлементов.Получить("product", "urn:guide:product");
Если Элемент = Неопределено Тогда
ВызватьИсключение "Не найден собственный корневой product";
КонецЕсли;
Маски = Новый Массив;
Маски.Добавить(ТипТовара.Блокировка);
Маски.Добавить(ТипТовара.ЗапрещенныеПодстановки);
Маски.Добавить(ТипТовара.Завершенность);
Маски.Добавить(Элемент.Блокировка);
Маски.Добавить(Элемент.НедопустимыеПодстановки);
Маски.Добавить(Элемент.Завершенность);
Маски.Добавить(Элемент.ИсключенияГруппПодстановки);
Для Каждого Маска Из Маски Цикл
Сообщить(Маска.Расширение И Маска.Ограничение);
Сообщить(Маска.Значения().Количество() = 2);
Сообщить("Тип маски: " + Строка(ТипЗнч(Маска)) + "; Все: " + Строка(Маска.Все));
КонецЦикла;Разбор по шагам
ТипТовара и Элемент — разные компоненты: определение Product и глобальное объявление product.
Блокировка/ЗапрещенныеПодстановки составного типа и его Завершенность отражают разные правила block/final.
У объявления элемента Блокировка/НедопустимыеПодстановки и Завершенность/ИсключенияГруппПодстановки относятся к допустимости подстановок для элемента.
Все соответствующие свойства берутся из собственной XSD с явно заданными двумя способами, а не у неизвестного объекта.
Общие флаги Расширение/Ограничение и метод Значения не делают семь масок одной и той же сущностью.
Как проверить результат
На каждую из семи масок два сообщения Истина и диагностическая строка.
Новые подстановки, производные типы и XML-экземпляры не создаются.
Ожидаемый результат
Схожие флаги разных компонентов разобраны без смешивания block, final и прав доступа.
На что обратить внимание
Не переносите ограничения элемента на тип или наоборот по одному только сходству названий.
Все свойства этих масок readonly; пример не присваивает флаги.
Структурная проверка этой схемы не доказывает валидацию внешнего XML-файла.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.