Получает схему из набора.
Синтаксис
Получить(<Индекс>)Получить(<URIПространстваИмен>)Полное описание, параметры и ограничения
НаборСхемXML.Получить (XMLSchemaSet.Get)
НаборСхемXML (XMLSchemaSet)
Получить (Get)
Доступен, начиная с версии 8.1.
Вариант синтаксиса: По индексу
Синтаксис:
Получить(<Индекс>)
Параметры:
<Индекс> (обязательный)
Тип: Число.
Индекс схемы в наборе.
Вариант синтаксиса: По URI пространства имен
Синтаксис:
Получить(<URIПространстваИмен>)
Параметры:
<URIПространстваИмен> (обязательный)
Тип: Строка.
URI пространства имен, для которого нужно получить схему из набора.
Возвращаемое значение:
Тип: СхемаXML.
Описание:
Получает схему из набора.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.
Использование в версии:
Доступен, начиная с версии 8.1.
Методическая информация
Практические примеры
Записать учебный товар в XML и проверить восстановленные поля
После проверки модели используем фабрику именно нашей схемы. Явно задаём корневой элемент product и URI, а при чтении — ожидаемый Product.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Не заменяйте учебный XML ответом реального сервиса: его схема может быть другой.
Фабрика создана в памяти из одного собственного набора; экспортируется только URI urn:guide:product.
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 не прошла проверку";
КонецЕсли;
Фабрика = Новый ФабрикаXDTO(Набор);
ТипТовара = Фабрика.Тип("urn:guide:product", "Product");
Если ТипТовара = Неопределено Тогда
ВызватьИсключение "В фабрике не найден тип Product";
КонецЕсли;
Товар = Фабрика.Создать(ТипТовара);
Свойства = Товар.Свойства();
Код = Свойства.Получить("code");
Название = Свойства.Получить("name");
Количество = Свойства.Получить("quantity");
Примечание = Свойства.Получить("note");
Если Код = Неопределено Или Название = Неопределено
Или Количество = Неопределено Или Примечание = Неопределено Тогда
ВызватьИсключение "Не найдены четыре свойства учебной модели";
КонецЕсли;
Товар.Установить(Код, Фабрика.Создать(Код.Тип, "A001"));
Товар.Установить(Название, Фабрика.Создать(Название.Тип, "Книга"));
Товар.Установить(Количество, Фабрика.Создать(Количество.Тип, "3"));
Товар.Проверить();
Запись = Новый ЗаписьXML;
Запись.УстановитьСтроку();
Попытка
Фабрика.ЗаписатьXML(Запись, Товар, "product", "urn:guide:product");
XML = Запись.Закрыть();
Исключение
Запись.Закрыть();
ВызватьИсключение;
КонецПопытки;
Сообщить(XML);
ЧтениеТовара = Новый ЧтениеXML;
ЧтениеТовара.УстановитьСтроку(XML);
Попытка
Копия = Фабрика.ПрочитатьXML(ЧтениеТовара, ТипТовара);
ЧтениеТовара.Закрыть();
Исключение
ЧтениеТовара.Закрыть();
ВызватьИсключение;
КонецПопытки;
Копия.Проверить();
КопияКода = Копия.ПолучитьXDTO("code");
КопияНазвания = Копия.ПолучитьXDTO("name");
КопияКоличества = Копия.ПолучитьXDTO("quantity");
Сообщить(КопияКода.Значение = "A001");
Сообщить(КопияНазвания.Значение = "Книга");
Сообщить(КопияКоличества.Значение = 3);
Сообщить(Не Копия.Установлено(Примечание));
ЭкспортированныйНабор = Фабрика.ЭкспортСхемыXML("urn:guide:product");
Сообщить(ЭкспортированныйНабор.Получить("urn:guide:product").ПространствоИмен = "urn:guide:product");Разбор по шагам
Фабрика.ЗаписатьXML записывает данные модели, а не платформенный объект справочника.
Корневой элемент и URI задаём явно. Префикс при сериализации может отличаться, поэтому сравниваем значения после чтения, а не текст XML целиком.
Чтение использует ТипТовара из той же фабрики. Копия.Проверить проверяет восстановленный объект.
ПолучитьXDTO по именам читает три поля, отсутствующее note проверяем через описатель Примечание.
ЭкспортСхемыXML возвращает набор схем в памяти для конкретного пакета, не записывает файлы автоматически.
Как проверить результат
После XML-цикла код A001, название Книга, количество 3; note всё ещё отсутствует.
В XML code — атрибут, а название и количество — элементы.
Экспортированный набор содержит схему пространства urn:guide:product. Нет файлов или сетевых запросов.
Ожидаемый результат
Учебный объект прошёл полный цикл собственная XSD → XDTO → XML → XDTO с проверкой значений и необязательного поля.
На что обратить внимание
Одинаковый локальный тег product с другим URI — другой контракт.
Внешние XML проверяйте по согласованной схеме и ограничениям размера; этот урок читает только собственную короткую строку.
Наличие свойства товара в XDTO не создаёт товар в 1С: нет записи в справочник или документ.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Построить собственную XSD-схему товара и проверить её состав
Полный учебный контракт дан прямо в строке: код A001, название, неотрицательное количество и необязательное примечание. Не читаем чужие XSD с импортами.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Вставьте весь код в серверную учебную процедуру. В конфигураторе не нужно добавлять пакет XDTO.
XSD не содержит include/import, внешних DTD и ссылок на файлы. URI urn:guide:product — локальный идентификатор модели.
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 не прошла проверку";
КонецЕсли;
Сообщить(Набор.Количество() = 1);
Сообщить(Схема.ПространствоИмен = "urn:guide:product");
Сообщить(Схема.Версия = "1.0");
Сообщить(Схема.Язык = "ru");
Сообщить(Схема.ОпределенияТипов.Количество() = 2);
Сообщить(Схема.ОбъявленияЭлементов.Количество() = 1);
Сообщить(Схема.Аннотации.Количество() = 1);
Сообщить("Всего компонентов содержимого: " + Строка(Схема.Содержимое.Количество()));
Сообщить(Набор.Получить(0).ПространствоИмен = "urn:guide:product");
Сообщить(Набор.Получить("urn:guide:product").Версия = "1.0");Разбор по шагам
Читаем собственную XML-строку в DOM и передаём корневой элемент ПостроительСхемXML.
СоздатьСхемуXML может вернуть Неопределено, если структура не подходит; это проверяем до обращения к свойствам.
НаборСхемXML содержит одну схему и проверяет правильность её построения. Эта проверка ещё не проверяет конкретный товар.
Два глобальных определения типов — Sku и Product; один глобальный элемент — product. name/quantity/note вложены в составной тип и не считаются глобальными.
Версия и Язык относятся к описанию схемы. Аннотация содержит учебное объяснение, а не бизнес-значение товара.
Как проверить результат
Одна схема, пространство urn:guide:product, версия 1.0 и язык ru.
Два определения типов, одно глобальное объявление элемента и одна аннотация.
Получить по индексу 0 и по URI находит одну и ту же учебную схему.
Ожидаемый результат
Создан и проверен собственный XSD-контракт без изменения конфигурации и обращения к внешним ресурсам.
На что обратить внимание
Проверить набор схем — не Проверить товар: это два разных уровня валидации.
Регулярные выражения XML Schema имеют собственную семантику, не переносите их без проверки в СтрНайтиПоРегулярномуВыражению.
Дополнительная длина 4 вместе с образцом фиксирует учебный SKU; одним образцом полное совпадение автоматически не подменяйте.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.