Тип: ЭлементDOM. Элемент DOM, который соответствует данному компоненту схемы XML. Синхронизация значений свойств компонента схемы XML и структуры элемента DOM обеспечивается вызовом метода МаскаXS.ОбновитьЭлементDOM. Перед первым вызовом данного метода значение данного свойства может быть Неопределено.
Полное описание, параметры и ограничения
МаскаXS.ЭлементDOM (XSWildcard.DOMElement)
МаскаXS (XSWildcard)
ЭлементDOM (DOMElement)
Доступен, начиная с версии 8.1.
Использование:
Только чтение.
Описание:
Тип: ЭлементDOM.
Элемент DOM, который соответствует данному компоненту схемы XML.
Синхронизация значений свойств компонента схемы XML и структуры элемента DOM обеспечивается вызовом метода МаскаXS.ОбновитьЭлементDOM.
Перед первым вызовом данного метода значение данного свойства может быть Неопределено.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.
Использование в версии:
Доступен, начиная с версии 8.1.
Методическая информация
Практические примеры
Изменить копию маски, не расширяя оригинальный контракт
Маска принадлежит модели Envelope. Копии задаём другой список URI, оригинал продолжает разрешать только partner и labels.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Фрагменты запускайте по отдельности на сервере учебной базы. Полная собственная XSD Envelope включена в код, внешние данные и схемы не загружаются.
Маска элементов разрешает только два собственных URN, маска атрибутов один. lax и skip — способы обработки содержимого XSD, а не отключение безопасного XML-парсинга.
Набор.Проверить проверяет структуру 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:envelope");
Сообщить(МаскаЭлементов.Аннотация = Неопределено);
Сообщить("Тип компонента: " + Строка(МаскаЭлементов.ТипКомпоненты));
Сообщить("Компонентов маски: " + Строка(МаскаЭлементов.Компоненты.Количество()));
МаскаЭлементов.ОбновитьЭлементDOM();
Сообщить(МаскаЭлементов.ЭлементDOM.ПолучитьАтрибут("processContents") = "lax");
Копия = МаскаЭлементов.КлонироватьКомпоненту(Истина);
Если ТипЗнч(Копия) <> Тип("МаскаXS") Тогда
ВызватьИсключение "Не получена независимая копия маски";
КонецЕсли;
Копия.ЛексическоеЗначениеОграниченияПространствИмен = "urn:guide:unknown";
Копия.ВидОбработкиСодержимого = ОбработкаСодержимогоXS.Пропустить;
Сообщить(Копия.Допускает("urn:guide:unknown"));
Сообщить(Не МаскаЭлементов.Допускает("urn:guide:unknown"));
Сообщить(МаскаЭлементов.Допускает("urn:guide:partner"));
Сообщить(Не МаскаЭлементов.Содержит(Копия));Разбор по шагам
Контейнер и Схема связывают оригинальную маску с собственным деревом.
ОбновитьЭлементDOM обновляет DOM оригинала и позволяет прочитать processContents=lax.
Рекурсивная копия проверена по типу, перед изменением её лексического списка URI.
Копия разрешает unknown, но не добавлена в исходную модель. Оригинал его по-прежнему не разрешает.
Содержит не подтверждает принадлежность клона; сам факт клонирования не расширяет исходный контракт.
Как проверить результат
Девять сравнений Истина и две диагностические строки.
Оригинальная маска не разрешает unknown после изменения копии.
Ожидаемый результат
Проверено независимое изменение разрешённых пространств имён.
На что обратить внимание
Изменение отсоединённой копии не изменяет действующую XSD.
В рабочих интеграциях расширение маски требует отдельного решения о допустимых данных.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.