АннотацияXS

Типы · XSAnnotation

Компонент аннотации схемы XML.

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

АннотацияXS (XSAnnotation)

АннотацияXS (XSAnnotation)

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

Свойства:
Аннотация (Annotation)
Компоненты (Components)
Контейнер (Container)
КорневойКонтейнер (RootContainer)
Схема (Schema)
ТипКомпоненты (ComponentType)
ЭлементDOM (DOMElement)
Документация (Documentations)
ИнформацияДляПриложения (AppInfos)
Состав (Content)

Методы:
КлонироватьКомпоненту (CloneComponent)
ОбновитьЭлементDOM (UpdateDOMElement)
Содержит (Contains)

Конструкторы:
По умолчанию

Описание:

Компонент аннотации схемы XML.

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

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

См. также:
ОпределениеПростогоТипаXS, свойство АннотацияВарианта
ОпределениеСоставногоТипаXS, свойство АннотацияНаследования
ОпределениеСоставногоТипаXS, свойство АннотацияМоделиСодержимого
АннотацияXS, свойство Аннотация
СхемаXML, свойство Аннотация
ИнформацияДляПриложенияXS, свойство Аннотация
ДокументацияXS, свойство Аннотация
ФасетМинимальногоИсключающегоЗначенияXS, свойство Аннотация
ФасетМинимальногоВключающегоЗначенияXS, свойство Аннотация
ФасетМаксимальногоИсключающегоЗначенияXS, свойство Аннотация
ФасетМаксимальногоВключающегоЗначенияXS, свойство Аннотация
ФасетДлиныXS, свойство Аннотация
ФасетМинимальнойДлиныXS, свойство Аннотация
ФасетМаксимальнойДлиныXS, свойство Аннотация
ФасетОбщегоКоличестваРазрядовXS, свойство Аннотация
ФасетКоличестваРазрядовДробнойЧастиXS, свойство Аннотация
ФасетПеречисленияXS, свойство Аннотация
ФасетОбразцаXS, свойство Аннотация
ФасетПробельныхСимволовXS, свойство Аннотация
ОпределениеПростогоТипаXS, свойство Аннотация
ОпределениеСоставногоТипаXS, свойство Аннотация
ОпределениеГруппыАтрибутовXS, свойство Аннотация
ОпределениеГруппыМоделиXS, свойство Аннотация
ОбъявлениеАтрибутаXS, свойство Аннотация
ОбъявлениеЭлементаXS, свойство Аннотация
ОпределениеОграниченияИдентичностиXS, свойство Аннотация
ОпределенияXPathXS, свойство Аннотация
ОбъявлениеНотацииXS, свойство Аннотация
МаскаXS, свойство Аннотация
ИмпортXS, свойство Аннотация
ВключениеXS, свойство Аннотация
ПереопределениеXS, свойство Аннотация
ИспользованиеАтрибутаXS, свойство Аннотация
ГруппаМоделиXS, свойство Аннотация
ФрагментXS, свойство Аннотация

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

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

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

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

Создать и удалить собственную копию appinfo

Рекурсивную копию информационного компонента добавляем в свою аннотацию, задаём другой source и удаляем только её. Оригинал остаётся прежним.

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

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

Подготовка

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

  2. source=urn:guide:training — метка собственного ресурса, не http URL. Текст g:lesson — учебная информация приложения, не требование XML-валидации.

  3. Работа ведётся только со своей моделью и DOM. Проверка набора проверяет схему, а не документ с данными товара.

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:appinfo source=""urn:guide:training""><g:lesson>Учебный код товара</g:lesson></xs:appinfo></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 Тогда
    ВызватьИсключение "Ожидался один собственный appinfo";
КонецЕсли;
Информация = Аннотация.ИнформацияДляПриложения.Получить(0);
Если ТипЗнч(Информация) <> Тип("ИнформацияДляПриложенияXS") Тогда
    ВызватьИсключение "Ожидалось описание информации приложения";
КонецЕсли;
Копия = Информация.КлонироватьКомпоненту(Истина);
Если ТипЗнч(Копия) <> Тип("ИнформацияДляПриложенияXS") Тогда
    ВызватьИсключение "Не получена копия appinfo";
КонецЕсли;
Копия.Источник = "urn:guide:training:copy";
Сообщить(Не Информация.Содержит(Копия));
Аннотация.Состав.Добавить(Копия);
Сообщить(Аннотация.ИнформацияДляПриложения.Количество() = 2);
Сообщить(Копия.Контейнер = Аннотация);
Схема.ОбновитьЭлементDOM();
Сообщить(Копия.ЭлементDOM.ПолучитьАтрибут("source") = "urn:guide:training:copy");
Сообщить(Информация.Источник = "urn:guide:training");
Если Не Набор.Проверить() Тогда
    ВызватьИсключение "Собственная схема с копией appinfo не прошла проверку";
КонецЕсли;
Аннотация.Состав.Удалить(Копия);
Сообщить(Аннотация.ИнформацияДляПриложения.Количество() = 1);
Сообщить(Аннотация.Документация.Количество() = 1);
Сообщить(Информация.Источник = "urn:guide:training");

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

  1. Копия проверена на точный тип до записи Источник.

  2. Само клонирование не присоединяет компонент к аннотации. Содержит оригинала не подтверждает принадлежность копии.

  3. Состав — изменяемая коллекция всей аннотации. Добавить в неё увеличивает список appinfo, но не documentation.

  4. DOM обновляется через собственную схему после присоединения; новая метка проверяется по атрибуту source.

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

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

  1. Восемь сообщений Истина.

  2. Количество appinfo меняется 1→2→1, количество documentation остаётся 1.

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

Полный жизненный цикл собственной копии не повреждает оригинальную аннотацию.

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

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

  2. Служебная информация не доказывает корректность XML-экземпляра товара.

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

Прочитать и изменить source у собственного appinfo

Служебная информация приложения живёт в аннотации XSD. Изменяем её метку источника и проверяем реальный атрибут DOM.

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

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

Подготовка

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

  2. source=urn:guide:training — метка собственного ресурса, не http URL. Текст g:lesson — учебная информация приложения, не требование XML-валидации.

  3. Работа ведётся только со своей моделью и DOM. Проверка набора проверяет схему, а не документ с данными товара.

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:appinfo source=""urn:guide:training""><g:lesson>Учебный код товара</g:lesson></xs:appinfo></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 Тогда
    ВызватьИсключение "Ожидался один собственный appinfo";
КонецЕсли;
Информация = Аннотация.ИнформацияДляПриложения.Получить(0);
Если ТипЗнч(Информация) <> Тип("ИнформацияДляПриложенияXS") Тогда
    ВызватьИсключение "Ожидалось описание информации приложения";
КонецЕсли;
Сообщить(Информация.Источник = "urn:guide:training");
Сообщить(Информация.Контейнер = Аннотация);
Сообщить(Информация.КорневойКонтейнер <> Неопределено);
Сообщить(Информация.Схема.ПространствоИмен = "urn:guide:product");
Сообщить(Информация.Аннотация = Неопределено);
Сообщить("Тип компонента: " + Строка(Информация.ТипКомпоненты));
Сообщить("Компонентов XS внутри appinfo: " + Строка(Информация.Компоненты.Количество()));
Информация.Источник = "urn:guide:training:revised";
Информация.ОбновитьЭлементDOM();
Сообщить(Информация.ЭлементDOM.ПолучитьАтрибут("source") = "urn:guide:training:revised");
Сообщить(Аннотация.Документация.Количество() = 1);

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

  1. Аннотация проверяется на отсутствие до чтения списка appinfo. Количество проверено до Получить(0).

  2. Контейнер appinfo — Аннотация, Схема указывает на собственный urn:guide:product.

  3. Свойство Аннотация самого appinfo отдельно от его владельца; в исходном фрагменте оно отсутствует.

  4. Источник здесь простой URN. Присваивание метки не является загрузкой данных по этой метке.

  5. ОбновитьЭлементDOM переносит новую метку в XML-атрибут source. Соседнее documentation остаётся одним компонентом.

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

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

  2. source изменён на собственную метку revised; описание документации не удалено.

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

Служебная метка связана с DOM без выдачи appinfo за правило валидации.

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

  1. ИнформацияДляПриложения не заменяет объявления элементов и фасеты типов.

  2. Число Компоненты XS не является количеством произвольных DOM-тегов g:lesson.

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

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

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

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

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