ОбъявлениеНотацииXS.ЭлементDOM

Свойства · DOMElement

Тип: ЭлементDOM. Элемент DOM, который соответствует данному компоненту схемы XML. Синхронизация значений свойств компонента схемы XML и структуры элемента DOM обеспечивается вызовом метода ОбъявлениеНотацииXS.ОбновитьЭлементDOM. Перед первым вызовом данного метода значение данного свойства может быть Неопределено.

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

ОбъявлениеНотацииXS.ЭлементDOM (XSNotationDeclaration.DOMElement)

ОбъявлениеНотацииXS (XSNotationDeclaration)

ЭлементDOM (DOMElement)

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

Использование:
Только чтение.
Описание:
Тип: ЭлементDOM.
Элемент DOM, который соответствует данному компоненту схемы XML.
Синхронизация значений свойств компонента схемы XML и структуры элемента DOM обеспечивается вызовом метода ОбъявлениеНотацииXS.ОбновитьЭлементDOM.
Перед первым вызовом данного метода значение данного свойства может быть Неопределено.
Доступность:

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

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

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

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

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

Создать и удалить отдельную копию нотации

Копии задаём другое имя и public, присоединяем к своей схеме и удаляем только её. Исходная BookImage остаётся прежней.

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

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

Подготовка

  1. Каждый фрагмент выполните отдельно на сервере учебной базы. Полная собственная XSD с urn:guide:product и нотацией BookImage включена в код.

  2. Это xs:notation внутри XSD, не узел НотацияDOM из DTD. В коде нет DOCTYPE, внешних сущностей, импорта схемы, чтения файла или сетевого запроса.

  3. public и system — вымышленные собственные URN. Объявление метки не загружает изображение и не подтверждает существование файла.

  4. Проверить у НаборСхемXML проверяет схему, не XML-экземпляр товара. Изменения относятся только к собственной модели в памяти.

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:notation name=""BookImage"" public=""urn:guide:book-image:public"" system=""urn:guide:book-image:system"">
|  <xs:annotation><xs:documentation source=""urn:guide:notation-note"" xml:lang=""ru"">Учебная метка изображения, не загрузка картинки</xs:documentation></xs:annotation>
| </xs:notation>
|</xs:schema>";
Чтение = Новый ЧтениеXML;
Чтение.УстановитьСтроку(XSD);
Попытка
    ЧтениеДерева = Новый ПостроительDOM;
    ДокументСхемы = ЧтениеДерева.Прочитать(Чтение);
    Чтение.Закрыть();
Исключение
    Чтение.Закрыть();
    ВызватьИсключение;
КонецПопытки;
Построитель = Новый ПостроительСхемXML;
Схема = Построитель.СоздатьСхемуXML(ДокументСхемы.ЭлементДокумента);
Если Схема = Неопределено Тогда
    ВызватьИсключение "Не удалось построить учебную схему";
КонецЕсли;
Набор = Новый НаборСхемXML;
Набор.Добавить(Схема);
Если Не Набор.Проверить() Тогда
    ВызватьИсключение "Учебная XSD не прошла проверку";
КонецЕсли;
Если Схема.ОбъявленияНотаций.Количество() <> 1 Тогда
    ВызватьИсключение "Ожидалась одна собственная нотация";
КонецЕсли;
Нотация = Схема.ОбъявленияНотаций.Получить(0);
Если ТипЗнч(Нотация) <> Тип("ОбъявлениеНотацииXS") Или Нотация.Имя <> "BookImage" Тогда
    ВызватьИсключение "Не найдена собственная BookImage";
КонецЕсли;
Аннотация = Нотация.Аннотация;
Если Аннотация = Неопределено Тогда
    ВызватьИсключение "У BookImage нет собственной аннотации";
КонецЕсли;
Если Аннотация.Документация.Количество() <> 1 Тогда
    ВызватьИсключение "Ожидалась одна собственная документация нотации";
КонецЕсли;
Документация = Аннотация.Документация.Получить(0);
Копия = Нотация.КлонироватьКомпоненту(Истина);
Если ТипЗнч(Копия) <> Тип("ОбъявлениеНотацииXS") Тогда
    ВызватьИсключение "Не получена копия нотации";
КонецЕсли;
Копия.Имя = "BookImageCopy";
Копия.ПубличныйИдентификатор = "urn:guide:book-image:copy";
Сообщить(Не Нотация.Содержит(Копия));
Схема.Содержимое.Добавить(Копия);
Схема.ОбновитьЭлементDOM();
Сообщить(Схема.ОбъявленияНотаций.Количество() = 2);
Сообщить(Копия.Контейнер = Схема);
Сообщить(Копия.ЭлементDOM.ПолучитьАтрибут("name") = "BookImageCopy");
Сообщить(Копия.ЭлементDOM.ПолучитьАтрибут("public") = "urn:guide:book-image:copy");
Сообщить(Нотация.Имя = "BookImage");
Сообщить(Нотация.ПубличныйИдентификатор = "urn:guide:book-image:public");
Если Не Набор.Проверить() Тогда
    ВызватьИсключение "Своя схема с копией нотации не прошла проверку";
КонецЕсли;
Схема.Содержимое.Удалить(Копия);
Сообщить(Схема.ОбъявленияНотаций.Количество() = 1);
Сообщить(Нотация.Имя = "BookImage");

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

  1. КлонироватьКомпоненту Истина копирует рекурсивно модель; тип результата проверяется до изменения.

  2. Новое уникальное имя предотвращает конфликт двух глобальных нотаций в одном namespace.

  3. Клонирование само по себе не добавляет объект в схему: Содержимое.Добавить выполняется отдельно.

  4. После присоединения обновляем свой DOM, проверяем новое имя и public, затем проверяем набор схем.

  5. Удалить получает конкретную созданную копию. После удаления она не читается; оригинал сохраняется.

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

  1. Девять сообщений Истина; количество нотаций 1→2→1.

  2. Исходная BookImage и её public не изменены.

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

Полный жизненный цикл собственной копии не удаляет исходное объявление.

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

  1. Не очищайте всю коллекцию нотаций чужой схемы.

  2. Проверки скалярных свойств не выдаются за доказательство независимости всех DOM-узлов копии.

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

Разобрать собственную нотацию XSD без DTD

BookImage имеет публичный и системный идентификаторы и аннотацию. Проверяем связи модели и соответствующие атрибуты DOM.

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

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

Подготовка

  1. Каждый фрагмент выполните отдельно на сервере учебной базы. Полная собственная XSD с urn:guide:product и нотацией BookImage включена в код.

  2. Это xs:notation внутри XSD, не узел НотацияDOM из DTD. В коде нет DOCTYPE, внешних сущностей, импорта схемы, чтения файла или сетевого запроса.

  3. public и system — вымышленные собственные URN. Объявление метки не загружает изображение и не подтверждает существование файла.

  4. Проверить у НаборСхемXML проверяет схему, не XML-экземпляр товара. Изменения относятся только к собственной модели в памяти.

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:notation name=""BookImage"" public=""urn:guide:book-image:public"" system=""urn:guide:book-image:system"">
|  <xs:annotation><xs:documentation source=""urn:guide:notation-note"" xml:lang=""ru"">Учебная метка изображения, не загрузка картинки</xs:documentation></xs:annotation>
| </xs:notation>
|</xs:schema>";
Чтение = Новый ЧтениеXML;
Чтение.УстановитьСтроку(XSD);
Попытка
    ЧтениеДерева = Новый ПостроительDOM;
    ДокументСхемы = ЧтениеДерева.Прочитать(Чтение);
    Чтение.Закрыть();
Исключение
    Чтение.Закрыть();
    ВызватьИсключение;
КонецПопытки;
Построитель = Новый ПостроительСхемXML;
Схема = Построитель.СоздатьСхемуXML(ДокументСхемы.ЭлементДокумента);
Если Схема = Неопределено Тогда
    ВызватьИсключение "Не удалось построить учебную схему";
КонецЕсли;
Набор = Новый НаборСхемXML;
Набор.Добавить(Схема);
Если Не Набор.Проверить() Тогда
    ВызватьИсключение "Учебная XSD не прошла проверку";
КонецЕсли;
Если Схема.ОбъявленияНотаций.Количество() <> 1 Тогда
    ВызватьИсключение "Ожидалась одна собственная нотация";
КонецЕсли;
Нотация = Схема.ОбъявленияНотаций.Получить(0);
Если ТипЗнч(Нотация) <> Тип("ОбъявлениеНотацииXS") Или Нотация.Имя <> "BookImage" Тогда
    ВызватьИсключение "Не найдена собственная BookImage";
КонецЕсли;
Аннотация = Нотация.Аннотация;
Если Аннотация = Неопределено Тогда
    ВызватьИсключение "У BookImage нет собственной аннотации";
КонецЕсли;
Если Аннотация.Документация.Количество() <> 1 Тогда
    ВызватьИсключение "Ожидалась одна собственная документация нотации";
КонецЕсли;
Документация = Аннотация.Документация.Получить(0);
Сообщить(Нотация.URIПространстваИмен = "urn:guide:product");
Сообщить(Нотация.ПубличныйИдентификатор = "urn:guide:book-image:public");
Сообщить(Нотация.СистемныйИдентификатор = "urn:guide:book-image:system");
Сообщить(Нотация.Контейнер = Схема);
Сообщить(Нотация.КорневойКонтейнер <> Неопределено);
Сообщить(Нотация.Схема.ПространствоИмен = "urn:guide:product");
Сообщить(Нотация.Содержит(Аннотация));
Сообщить("Тип компонента: " + Строка(Нотация.ТипКомпоненты));
Сообщить("Дочерних компонентов XS: " + Строка(Нотация.Компоненты.Количество()));
Нотация.ОбновитьЭлементDOM();
Если Нотация.ЭлементDOM = Неопределено Тогда
    ВызватьИсключение "Не сформирован собственный DOM нотации";
КонецЕсли;
Сообщить(Нотация.ЭлементDOM.ПолучитьАтрибут("name") = "BookImage");
Сообщить(Нотация.ЭлементDOM.ПолучитьАтрибут("public") = "urn:guide:book-image:public");
Сообщить(Нотация.ЭлементDOM.ПолучитьАтрибут("system") = "urn:guide:book-image:system");

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

  1. Проверяем количество нотаций до индекса 0, затем тип и имя BookImage.

  2. URIПространстваИмен относится к собственной схеме; public и system — два разных идентификатора объявления.

  3. Контейнер у глобальной нотации — Схема. Содержит проверяет принадлежность её аннотации.

  4. Компоненты — дочерние объекты XS, не число изображений и не список пикселей.

  5. ОбновитьЭлементDOM синхронизирует своё объявление; наличие ЭлементDOM проверяется перед ПолучитьАтрибут.

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

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

  2. В DOM name=BookImage; public/system совпадают с разными собственными URN.

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

Нотация XSD связана с собственной схемой, аннотацией и реальными атрибутами DOM.

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

  1. Наличие system не означает, что ресурс загружен или доступен.

  2. Не заменяйте xs:notation узлом НотацияDOM и не добавляйте DTD в этот пример.

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

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

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

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

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