НаборСхемXML.Получить

Методы · Get

Получает схему из набора.

Синтаксис

Получить(<Индекс>)
Получить(<URIПространстваИмен>)
Полное описание, параметры и ограничения

НаборСхемXML.Получить (XMLSchemaSet.Get)

НаборСхемXML (XMLSchemaSet)

Получить (Get)

Доступен, начиная с версии 8.1.

Вариант синтаксиса: По индексу

Синтаксис:
Получить(<Индекс>)
Параметры:

<Индекс> (обязательный)
Тип: Число.
Индекс схемы в наборе.
Вариант синтаксиса: По URI пространства имен

Синтаксис:
Получить(<URIПространстваИмен>)
Параметры:

<URIПространстваИмен> (обязательный)
Тип: Строка.
URI пространства имен, для которого нужно получить схему из набора.
Возвращаемое значение:
Тип: СхемаXML.

Описание:

Получает схему из набора.

Доступность:

Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.

Использование в версии:

Доступен, начиная с версии 8.1.

Методическая информация

Практические примеры

Записать учебный товар в XML и проверить восстановленные поля

После проверки модели используем фабрику именно нашей схемы. Явно задаём корневой элемент product и URI, а при чтении — ожидаемый Product.

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. Не заменяйте учебный XML ответом реального сервиса: его схема может быть другой.

  2. Фабрика создана в памяти из одного собственного набора; экспортируется только 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");

Разбор по шагам

  1. Фабрика.ЗаписатьXML записывает данные модели, а не платформенный объект справочника.

  2. Корневой элемент и URI задаём явно. Префикс при сериализации может отличаться, поэтому сравниваем значения после чтения, а не текст XML целиком.

  3. Чтение использует ТипТовара из той же фабрики. Копия.Проверить проверяет восстановленный объект.

  4. ПолучитьXDTO по именам читает три поля, отсутствующее note проверяем через описатель Примечание.

  5. ЭкспортСхемыXML возвращает набор схем в памяти для конкретного пакета, не записывает файлы автоматически.

Как проверить результат

  1. После XML-цикла код A001, название Книга, количество 3; note всё ещё отсутствует.

  2. В XML code — атрибут, а название и количество — элементы.

  3. Экспортированный набор содержит схему пространства urn:guide:product. Нет файлов или сетевых запросов.

Ожидаемый результат

Учебный объект прошёл полный цикл собственная XSD → XDTO → XML → XDTO с проверкой значений и необязательного поля.

На что обратить внимание

  1. Одинаковый локальный тег product с другим URI — другой контракт.

  2. Внешние XML проверяйте по согласованной схеме и ограничениям размера; этот урок читает только собственную короткую строку.

  3. Наличие свойства товара в XDTO не создаёт товар в 1С: нет записи в справочник или документ.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Построить собственную XSD-схему товара и проверить её состав

Полный учебный контракт дан прямо в строке: код A001, название, неотрицательное количество и необязательное примечание. Не читаем чужие XSD с импортами.

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. Вставьте весь код в серверную учебную процедуру. В конфигураторе не нужно добавлять пакет XDTO.

  2. 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");

Разбор по шагам

  1. Читаем собственную XML-строку в DOM и передаём корневой элемент ПостроительСхемXML.

  2. СоздатьСхемуXML может вернуть Неопределено, если структура не подходит; это проверяем до обращения к свойствам.

  3. НаборСхемXML содержит одну схему и проверяет правильность её построения. Эта проверка ещё не проверяет конкретный товар.

  4. Два глобальных определения типов — Sku и Product; один глобальный элемент — product. name/quantity/note вложены в составной тип и не считаются глобальными.

  5. Версия и Язык относятся к описанию схемы. Аннотация содержит учебное объяснение, а не бизнес-значение товара.

Как проверить результат

  1. Одна схема, пространство urn:guide:product, версия 1.0 и язык ru.

  2. Два определения типов, одно глобальное объявление элемента и одна аннотация.

  3. Получить по индексу 0 и по URI находит одну и ту же учебную схему.

Ожидаемый результат

Создан и проверен собственный XSD-контракт без изменения конфигурации и обращения к внешним ресурсам.

На что обратить внимание

  1. Проверить набор схем — не Проверить товар: это два разных уровня валидации.

  2. Регулярные выражения XML Schema имеют собственную семантику, не переносите их без проверки в СтрНайтиПоРегулярномуВыражению.

  3. Дополнительная длина 4 вместе с образцом фиксирует учебный SKU; одним образцом полное совпадение автоматически не подменяйте.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.