МаскаXS.КатегорияОграниченияПространствИмен

Свойства · NamespaceConstraintCategory

Тип: КатегорияОграниченияПространствИменXS. Содержит категорию ограничений пространств имен.

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

МаскаXS.КатегорияОграниченияПространствИмен (XSWildcard.NamespaceConstraintCategory)

МаскаXS (XSWildcard)

КатегорияОграниченияПространствИмен (NamespaceConstraintCategory)

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

Использование:
Только чтение.
Описание:
Тип: КатегорияОграниченияПространствИменXS.
Содержит категорию ограничений пространств имен.
Доступность:

Сервер, толстый клиент, внешнее соединение.

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

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

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

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

Проверить разные маски элементов и атрибутов

xs:any разрешает два пространства имён, xs:anyAttribute только partner. Проверяем Допускает по URI, не по похожему префиксу.

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

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

Подготовка

  1. Фрагменты запускайте по отдельности на сервере учебной базы. Полная собственная XSD Envelope включена в код, внешние данные и схемы не загружаются.

  2. Маска элементов разрешает только два собственных URN, маска атрибутов один. lax и skip — способы обработки содержимого XSD, а не отключение безопасного XML-парсинга.

  3. Набор.Проверить проверяет структуру XSD. Примеры не заявляют, что проверен XML-экземпляр с неизвестными элементами.

XSD = "<xs:schema xmlns:xs=""http://www.w3.org/2001/XMLSchema"" xmlns:g=""urn:guide:envelope"" targetNamespace=""urn:guide:envelope"" elementFormDefault=""qualified"">
| <xs:complexType name=""Envelope""><xs:sequence>
|  <xs:any namespace=""urn:guide:partner urn:guide:labels"" processContents=""lax"" minOccurs=""0"" maxOccurs=""unbounded""/>
| </xs:sequence><xs:anyAttribute namespace=""urn:guide:partner"" processContents=""skip""/></xs:complexType>
| <xs:element name=""envelope"" type=""g:Envelope""/>
|</xs:schema>";
Чтение = Новый ЧтениеXML;
Чтение.УстановитьСтроку(XSD);
Попытка
    ЧтениеДерева = Новый ПостроительDOM;
    ДокументСхемы = ЧтениеДерева.Прочитать(Чтение);
    Чтение.Закрыть();
Исключение
    Чтение.Закрыть();
    ВызватьИсключение;
КонецПопытки;
Построитель = Новый ПостроительСхемXML;
Схема = Построитель.СоздатьСхемуXML(ДокументСхемы.ЭлементДокумента);
Если Схема = Неопределено Тогда
    ВызватьИсключение "Не удалось построить учебную схему";
КонецЕсли;
Набор = Новый НаборСхемXML;
Набор.Добавить(Схема);
Если Не Набор.Проверить() Тогда
    ВызватьИсключение "Учебная XSD не прошла проверку";
КонецЕсли;
ТипКонверта = Схема.ОпределенияТипов.Получить("Envelope", "urn:guide:envelope");
Если ТипЗнч(ТипКонверта) <> Тип("ОпределениеСоставногоТипаXS") Тогда
    ВызватьИсключение "Не получен собственный составной тип Envelope";
КонецЕсли;
Фрагмент = ТипКонверта.Содержимое;
Если ТипЗнч(Фрагмент) <> Тип("ФрагментXS") Тогда
    ВызватьИсключение "Ожидалась собственная модель sequence";
КонецЕсли;
Группа = Фрагмент.Часть;
Если ТипЗнч(Группа) <> Тип("ГруппаМоделиXS") Тогда
    ВызватьИсключение "Нет модели собственного конверта";
КонецЕсли;
Если Группа.Фрагменты.Количество() <> 1 Тогда
    ВызватьИсключение "Ожидался один собственный xs:any";
КонецЕсли;
МаскаЭлементов = Группа.Фрагменты.Получить(0).Часть;
МаскаАтрибутов = ТипКонверта.МаскаАтрибутов;
Если ТипЗнч(МаскаЭлементов) <> Тип("МаскаXS") Или ТипЗнч(МаскаАтрибутов) <> Тип("МаскаXS") Тогда
    ВызватьИсключение "Не получены собственные маски элементов и атрибутов";
КонецЕсли;
Сообщить(МаскаЭлементов.Допускает("urn:guide:partner"));
Сообщить(МаскаЭлементов.Допускает("urn:guide:labels"));
Сообщить(Не МаскаЭлементов.Допускает("urn:guide:unknown"));
Сообщить(МаскаАтрибутов.Допускает("urn:guide:partner"));
Сообщить(Не МаскаАтрибутов.Допускает("urn:guide:labels"));
Сообщить(МаскаЭлементов.ВидОбработкиСодержимого = ОбработкаСодержимогоXS.Слабая);
Сообщить(МаскаАтрибутов.ВидОбработкиСодержимого = ОбработкаСодержимогоXS.Пропустить);
Сообщить(МаскаЭлементов.КатегорияОграниченияПространствИмен = КатегорияОграниченияПространствИменXS.Набор);
Сообщить(МаскаЭлементов.ОграничениеПространствИмен().Количество() = 2);
Сообщить(МаскаАтрибутов.ОграничениеПространствИмен().Количество() = 1);
Сообщить("Лексическая запись: " + МаскаЭлементов.ЛексическоеЗначениеОграниченияПространствИмен);

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

  1. Составной тип, фрагмент и модель проверены по точному типу, количество фрагментов проверено до доступа к индексу 0.

  2. Маска элементов берётся из sequence, маска атрибутов из отдельного свойства типа.

  3. Допускает сравнивает URI пространства имён. Не требуется передавать XML-префиксы или имена элементов.

  4. ВидОбработкиСодержимого читается независимо: у элементов Слабая, у атрибутов Пропустить.

  5. ОграничениеПространствИмен возвращает массив разрешённых URI, лексическая запись — строковое представление правила.

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

  1. Десять сравнений Истина и одна диагностическая строка.

  2. labels разрешён для элементов, но не для атрибутов.

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

Обе маски и их способы обработки прочитаны на конкретном контракте.

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

  1. Допускает не проверяет тип или содержимое конкретного XML-элемента.

  2. skip не разрешает DTD, внешние сущности или загрузку URL автоматически.

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

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

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

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

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