Тип: Строка. Лексическое представление фасета.
Полное описание, параметры и ограничения
ФасетДлиныXS.ЛексическоеЗначение (XSLengthFacet.LexicalValue)
ФасетДлиныXS (XSLengthFacet)
ЛексическоеЗначение (LexicalValue)
Доступен, начиная с версии 8.1.
Использование:
Чтение и запись.
Описание:
Тип: Строка.
Лексическое представление фасета.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.
Использование в версии:
Доступен, начиная с версии 8.1.
Методическая информация
Практические примеры
Прочитать ограничения SKU из настоящего простого типа схемы
Тип Sku ограничивает строку длиной 4 и образцом A001. Ограничения читаем как компоненты XSD, не дублируем их только текстом комментария.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Схема полностью дана в начале. Sku — ограничение xs:string: длина 4 и образец одна латинская заглавная буква плюс три цифры.
Ожидаемую ошибку намеренно ограничиваем отдельной попыткой создания A01; остальные ошибки подготовки не скрываются.
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""><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""><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""/>
|</xs:schema>";
Чтение = Новый ЧтениеXML;
Чтение.УстановитьСтроку(XSD);
Попытка
ЧтениеДерева = Новый ПостроительDOM;
ДокументСхемы = ЧтениеДерева.Прочитать(Чтение);
Чтение.Закрыть();
Исключение
Чтение.Закрыть();
ВызватьИсключение;
КонецПопытки;
Построитель = Новый ПостроительСхемXML;
Схема = Построитель.СоздатьСхемуXML(ДокументСхемы.ЭлементДокумента);
Если Схема = Неопределено Тогда
ВызватьИсключение "Не удалось построить учебную схему";
КонецЕсли;
Набор = Новый НаборСхемXML;
Набор.Добавить(Схема);
Если Не Набор.Проверить() Тогда
ВызватьИсключение "Учебная XSD не прошла проверку";
КонецЕсли;
ТипSKU = Схема.ОпределенияТипов.Получить("Sku", "urn:guide:product");
Сообщить(ТипSKU.Имя = "Sku");
Сообщить(ТипSKU.URIПространстваИмен = "urn:guide:product");
Сообщить(ТипSKU.БазовыйТип.Имя = "string");
Сообщить(Не ТипSKU.ЭтоОпределениеЗациклено());
Сообщить(ТипSKU.Фасеты.Количество() = 2);
ДлинаНайдена = Ложь;
ОбразецНайден = Ложь;
Для Каждого Фасет Из ТипSKU.Фасеты Цикл
Сообщить("Вид ограничения: " + Строка(Фасет.ТипКомпоненты));
Сообщить("Лексическое значение: " + Фасет.ЛексическоеЗначение);
Сообщить(Фасет.ОпределениеПростогоТипа.Имя = "Sku");
Сообщить("Фиксирован в потомках: " + Строка(Фасет.Фиксированный));
Если ТипЗнч(Фасет) = Тип("ФасетДлиныXS") Тогда
ДлинаНайдена = Истина;
Сообщить(Фасет.Значение = 4);
ИначеЕсли ТипЗнч(Фасет) = Тип("ФасетОбразцаXS") Тогда
ОбразецНайден = Истина;
Сообщить(Фасет.Значение = "[A-Z][0-9]{3}");
КонецЕсли;
КонецЦикла;
Сообщить(ДлинаНайдена И ОбразецНайден);
Фабрика = Новый ФабрикаXDTO(Набор);
ТипSKUМодели = Фабрика.Тип("urn:guide:product", "Sku");
ПравильныйКод = Фабрика.Создать(ТипSKUМодели, "A001");
Сообщить(ПравильныйКод.Значение = "A001");
ОтклонёнКод = Ложь;
Попытка
НеправильныйКод = Фабрика.Создать(ТипSKUМодели, "A01");
Исключение
ОтклонёнКод = Истина;
Сообщить("Ожидаемое отклонение A01: " + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
Сообщить(ОтклонёнКод);Разбор по шагам
Получить из ОпределенияТипов принимает имя и URI, не XPath и не имя товара.
БазовыйТип string отделён от собственного имени Sku. Фасеты — конкретные компоненты ограничения.
ФасетДлиныXS имеет числовое Значение 4; ФасетОбразцаXS — строковое регулярное выражение.
Фиксированный относится к запрету переопределения фасета в типах-потомках, не к изменяемости переменной кода товара.
Проверяем ограничения на двух настоящих значениях XDTO: A001 допустим, A01 должен быть отклонён.
Как проверить результат
Найдены два фасета, длина 4 и образец [A-Z][0-9]{3}; оба владельца имеют имя Sku.
Правильный код A001 создаётся, короткий A01 отклоняется с ожидаемой диагностикой.
Замените ошибочный код на a001: латинская строчная буква тоже не соответствует учебному контракту.
Ожидаемый результат
Ограничения схемы прочитаны и проверены на допустимом и недопустимом значениях, а не только показаны строкой.
На что обратить внимание
Регулярное выражение XSD и регулярное выражение встроенного языка 1С не обязаны иметь одинаковые правила.
Количество фасетов собственного типа не включает все ограничения его базового типа.
Это учебная схема SKU, не универсальное правило артикулов реальных конфигураций.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.