ТипЗначенияXDTO.URIПространстваИмен

Свойства · NamespaceURI

Тип: Строка. URI пространства имен типа значения модели XDTO.

Полное описание, параметры и ограничения

ТипЗначенияXDTO.URIПространстваИмен (XDTOValueType.NamespaceURI)

ТипЗначенияXDTO (XDTOValueType)

URIПространстваИмен (NamespaceURI)

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

Использование:
Только чтение.
Описание:
Тип: Строка.
URI пространства имен типа значения модели XDTO.
Доступность:

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

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

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

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

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

Создать XDTO decimal и отделить число от его лексической формы

Стандартный XML Schema decimal не является произвольным объектом товара. Фабрика создаёт типизированное значение по заданному скалярному типу.

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

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

Подготовка

  1. Используется стандартная фабрика созданного сериализатора и стандартное пространство имён XML Schema.

  2. Свой пакет XDTO, WSDL и внешняя XSD для этого скалярного примера не нужны.


СтандартныйСериализатор = Новый СериализаторXDTO;
Фабрика = СтандартныйСериализатор.Фабрика;
ТипDecimal = Фабрика.Тип("http://www.w3.org/2001/XMLSchema", "decimal");
Если ТипDecimal = Неопределено Тогда
    ВызватьИсключение "Стандартный тип decimal не найден в фабрике";
КонецЕсли;
Значение = Фабрика.Создать(ТипDecimal, "1234.50");
Сообщить(ТипЗнч(Значение) = Тип("ЗначениеXDTO"));
Сообщить(Значение.Значение = 1234.5);
Сообщить(Значение.Тип().Имя = "decimal");
Сообщить(Значение.Тип().URIПространстваИмен = "http://www.w3.org/2001/XMLSchema");
Сообщить("Лексическая форма: " + Значение.ЛексическоеЗначение);
Если ТипDecimal.БазовыйТип <> Неопределено Тогда
    Сообщить("Базовый тип: " + ТипDecimal.БазовыйТип.Имя);
КонецЕсли;
Сообщить(Значение.Фабрика() = Фабрика);
ДругойСериализатор = Новый СериализаторXDTO(Фабрика);
Сообщить(ДругойСериализатор.XMLЗначение(Тип("Число"), Значение.ЛексическоеЗначение) = 1234.5);

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

  1. Фабрика содержит модель типов, а Тип ищет конкретный тип по двум частям: URI и имени.

  2. Создать по ТипЗначенияXDTO и лексической строке возвращает ЗначениеXDTO, не ОбъектXDTO.

  3. Значение содержит число 1234.5; ЛексическоеЗначение — допустимое текстовое представление, которое не обязано сохранять все исходные нули.

  4. Тип() и Фабрика() возвращают происхождение значения. БазовыйТип может отсутствовать, поэтому обращение защищено.

  5. Создаём второй сериализатор на той же фабрике и проверяем числовое чтение лексического представления.

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

  1. Тип результата ЗначениеXDTO, числовое значение 1234.5 и имя типа decimal.

  2. URI соответствует http://www.w3.org/2001/XMLSchema, фабрика значения совпадает с использованной.

  3. Повторное чтение лексического числа даёт 1234.5. Не требуйте посимвольного сохранения 1234.50.

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

Стандартное значение XDTO проверено по типу, числовому значению и происхождению фабрики.

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

  1. decimal здесь не устанавливает ограничения цены 12.2, валюту или правила округления конкретного приложения.

  2. ЗначениеXDTO имеет свойства только для чтения; для другого значения вызовите Создать заново.

  3. Для составного товарного объекта нужна собственная согласованная схема и ТипОбъектаXDTO.

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

Различить XDTO-список артикулов и объединение допустимых типов

SkuList содержит несколько артикулов в одном простом значении, QuantityOrCode допускает один положительный integer либо один Sku. Это не одно и то же, что список строк заказа.

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

Полный серверный общий модуль собственной отдельной учебной конфигурации.

Подготовка

  1. Создайте отдельную собственную конфигурацию с именем УчебнаяКонфигурацияСинтаксиса. Не используйте рабочую КА2, УНФ, УТ или БП.

  2. Создайте неглобальный общий модуль УчебнаяМодельXDTO85 с флагом Сервер. Вставьте весь выбранный пример, включая вспомогательные функции, если они присутствуют.

  3. Из серверной команды своей учебной обработки вызовите УчебнаяМодельXDTO85.ВыполнитьПример(). Передавать неизвестный объект или реквизиты чужой конфигурации не нужно.

  4. XSD целиком встроена в код: артикул Sku, цвет Color, список артикулов, объединение, абстрактный Base, строка Item, производный Order и смешанный Note.

  5. Справочники, документы и пакеты XDTO метаданных создавать не нужно. Схема и фабрика принадлежат только этому выполнению в памяти.

  6. urn:guide:model85 и URI стандартной XML Schema — идентификаторы пространств имён. Код не загружает их из Интернета; import/include, DTD и внешних файлов нет.

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

  8. Это полный учебный исходник с проверенными статически API, но запуск в 1С не проверялся. Ошибку подготовки схемы не следует принимать за успешную проверку данных.

Процедура ВыполнитьПример() Экспорт
    XSD = "<xs:schema xmlns:xs=""http://www.w3.org/2001/XMLSchema"" xmlns:g=""urn:guide:model85"" targetNamespace=""urn:guide:model85"" elementFormDefault=""qualified"" attributeFormDefault=""unqualified"">
    |<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:simpleType name=""Color""><xs:restriction base=""xs:string""><xs:enumeration value=""red""/><xs:enumeration value=""blue""/></xs:restriction></xs:simpleType>
    |<xs:simpleType name=""SkuList""><xs:list itemType=""g:Sku""/></xs:simpleType>
    |<xs:simpleType name=""QuantityOrCode""><xs:union memberTypes=""xs:positiveInteger g:Sku""/></xs:simpleType>
    |<xs:complexType name=""Base"" abstract=""true""><xs:attribute name=""code"" type=""g:Sku"" use=""required""/></xs:complexType>
    |<xs:complexType name=""Item""><xs:sequence><xs:element name=""name"" type=""xs:string""/><xs:element name=""quantity"" type=""xs:nonNegativeInteger""/></xs:sequence></xs:complexType>
    |<xs:complexType name=""Order""><xs:complexContent><xs:extension base=""g:Base""><xs:sequence><xs:element name=""item"" type=""g:Item"" minOccurs=""0"" maxOccurs=""unbounded""/></xs:sequence></xs:extension></xs:complexContent></xs:complexType>
    |<xs:complexType name=""Note"" mixed=""true""><xs:sequence><xs:element name=""amount"" type=""xs:decimal"" minOccurs=""0"" maxOccurs=""unbounded""/></xs:sequence></xs:complexType>
    |<xs:element name=""order"" type=""g:Order""/><xs:element name=""note"" type=""g:Note""/>
    |</xs:schema>";
    ЧтениеСхемы = Новый ЧтениеXML;
    ЧтениеСхемы.УстановитьСтроку(XSD);
    Попытка
        Дерево = Новый ПостроительDOM;
        ДокументСхемы = Дерево.Прочитать(ЧтениеСхемы);
    Исключение
        ОшибкаСхемы = ОписаниеОшибки();
        Попытка
            ЧтениеСхемы.Закрыть();
        Исключение
            ВызватьИсключение ОшибкаСхемы + Символы.ПС + "Закрытие: " + ОписаниеОшибки();
        КонецПопытки;
        ВызватьИсключение ОшибкаСхемы;
    КонецПопытки;
    ЧтениеСхемы.Закрыть();
    ПостроительСхем = Новый ПостроительСхемXML;
    Схема = ПостроительСхем.СоздатьСхемуXML(ДокументСхемы.ЭлементДокумента);
    Если Схема = Неопределено Тогда
        ВызватьИсключение "Не построена собственная схема коллекций";
    КонецЕсли;
    НаборСхем = Новый НаборСхемXML;
    НаборСхем.Добавить(Схема);
    Если НЕ НаборСхем.Проверить() Тогда
        ВызватьИсключение "Собственная схема не прошла проверку";
    КонецЕсли;
    Фабрика = Новый ФабрикаXDTO(НаборСхем);
    ТипСписка = Фабрика.Тип("urn:guide:model85", "SkuList");
    ТипОбъединения = Фабрика.Тип("urn:guide:model85", "QuantityOrCode");
    ТипАртикула = Фабрика.Тип("urn:guide:model85", "Sku");
    Если ТипСписка = Неопределено ИЛИ ТипОбъединения = Неопределено ИЛИ ТипАртикула = Неопределено Тогда
        ВызватьИсключение "Не найдены три собственных простых типа";
    КонецЕсли;
    Сообщить(ТипСписка.ТипЭлементаСписка = ТипАртикула);
    Члены = ТипОбъединения.ТипыЧленовОбъединения;
    Сообщить(Члены.Количество() = 2);
    ИменаЧленов = Новый Соответствие;
    Для Индекс = 0 По Члены.Количество() - 1 Цикл
        ТипЧлена = Члены.Получить(Индекс);
        ИменаЧленов.Вставить(ТипЧлена.URIПространстваИмен + "|" + ТипЧлена.Имя, Истина);
    КонецЦикла;
    Сообщить(ИменаЧленов.Получить("http://www.w3.org/2001/XMLSchema|positiveInteger") = Истина);
    Сообщить(ИменаЧленов.Получить("urn:guide:model85|Sku") = Истина);
    ТипСписка.Проверить("A001 B002");
    ТипОбъединения.Проверить("3");
    ТипОбъединения.Проверить("A001");
    Артикулы = Фабрика.Создать(ТипСписка, "A001 B002");
    КоличествоИлиКод = Фабрика.Создать(ТипОбъединения, "3");
    КодИлиКоличество = Фабрика.Создать(ТипОбъединения, "A001");
    Сообщить("Лексическая запись списка: " + Артикулы.ЛексическоеЗначение);
    Сообщить("Лексическая запись первого объединения: " + КоличествоИлиКод.ЛексическоеЗначение);
    Сообщить("Лексическая запись второго объединения: " + КодИлиКоличество.ЛексическоеЗначение);
    ПроверитьОтклонениеСвоегоЗначения(Фабрика, ТипСписка, "A001 B02");
    ПроверитьОтклонениеСвоегоЗначения(Фабрика, ТипОбъединения, "0");
    ПроверитьОтклонениеСвоегоЗначения(Фабрика, ТипОбъединения, "A01");
КонецПроцедуры

Процедура ПроверитьОтклонениеСвоегоЗначения(Фабрика, ТипЗначения, ЛексическоеЗначение)
    Отклонено = Ложь;
    Попытка
        Неподходящее = Фабрика.Создать(ТипЗначения, ЛексическоеЗначение);
        Сообщить("Неожиданно принято: " + Неподходящее.ЛексическоеЗначение);
    Исключение
        Отклонено = Истина;
    КонецПопытки;
    Если НЕ Отклонено Тогда
        ВызватьИсключение "Не отклонено учебное значение: " + ЛексическоеЗначение;
    КонецЕсли;
    Сообщить("Отклонено по собственному контракту: " + ЛексическоеЗначение);
КонецПроцедуры

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

  1. Найти SkuList, QuantityOrCode и Sku в собственной фабрике. Это три простых типа модели.

  2. Проверить, что ТипЭлементаСписка у SkuList — именно Sku: ограничение артикула действует на каждый член списка.

  3. Обойти ТипыЧленовОбъединения через отдельную КоллекцияТиповЗначенийXDTO. Сопоставить URI и имя обоих членов, не полагаться на их порядок.

  4. Проверить лексические строки: пробел разделяет A001/B002 у списка; 3 и A001 по отдельности допустимы у объединения.

  5. После проверки лексических строк создать три ЗначениеXDTO. Показываем лексическое представление, не обещаем платформенный Массив или СписокXDTO в поле Значение.

  6. В A001 B02 второй член списка нарушает Sku. В объединении 0 не положительный integer и не Sku; A01 тоже не подходит ни одному члену.

  7. Зафиксировать три ожидаемых отклонения узкой процедурой. Не считать объединение механизмом автоматического выбора товара по произвольной строке.

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

  1. Четыре булевых сообщения дают Истина: тип элемента, два члена объединения и их количество.

  2. Три допустимых значения прошли проверки; выведено их фактическое лексическое представление без предположений о нормализации пробелов.

  3. Три недопустимые строки A001 B02, 0, A01 отклонены; иначе пример явно завершится ошибкой.

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

На одном контракте разобраны две разные конструкции простых типов и их границы допустимости.

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

  1. XSD list — одно простое значение. СписокXDTO — коллекция значений повторяющегося свойства составного объекта.

  2. Union означает альтернативу одного значения, а не требование одновременного соответствия всем членам.

  3. Не считайте порядок типов объединения постоянным и не определяйте тип только по одному имени без URI.

  4. ЛексическоеЗначение может нормализоваться по правилам XSD; байтовую тождественность входной строке не обещаем.

  5. Не заменяйте ноль на положительное количество молча: исходная модель явно запрещает ноль у QuantityOrCode.

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

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

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

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

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