Тип: Строка. Имя узла DOM. Имя узла присутствует не у каждого типа узла DOM. Узел Имя узла Атрибут - Attribute.name; СекцияCDATA - "#cdata-section"; Комментарий - "#comment"; Документ - "#document"; ФрагментДокумента - "#document-fragment"; ОпределениеТипаДокумента - DocumentType.name; Элемент - Element.tagName; Сущность - имя сущности; СсылкаНаСущность - имя ссылки на сущность; Нотация - имя нотации; ИнструкцияОбработки - ProcessingInstruction.target; Текст - "#text".
Полное описание, параметры и ограничения
СущностьDOM.ИмяУзла (DOMEntity.NodeName)
СущностьDOM (DOMEntity)
ИмяУзла (NodeName)
Доступен, начиная с версии 8.1.
Использование:
Только чтение.
Описание:
Тип: Строка.
Имя узла DOM. Имя узла присутствует не у каждого типа узла DOM.
Узел Имя узла
Атрибут - Attribute.name;
СекцияCDATA - "#cdata-section";
Комментарий - "#comment";
Документ - "#document";
ФрагментДокумента - "#document-fragment";
ОпределениеТипаДокумента - DocumentType.name;
Элемент - Element.tagName;
Сущность - имя сущности;
СсылкаНаСущность - имя ссылки на сущность;
Нотация - имя нотации;
ИнструкцияОбработки - ProcessingInstruction.target;
Текст - "#text".
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.
Использование в версии:
Доступен, начиная с версии 8.1.
Методическая информация
Практические примеры
Не спутать имена DTD с пространствами имён элементов
У корневого элемента объявлен префикс g. Объявления guideIcon/guideMark не превращаются в g:элементы из-за владения тем же документом.
Где и как запускать
Полный серверный общий модуль своей учебной базы. Внутренний DTD только известной собственной строки, не вход произвольного API.
Подготовка
Только отдельная учебная база. Создайте серверный общий модуль УчебныеЗадачи с процедурой ВыполнитьПример() Экспорт. Полный модуль каждого урока вставьте целиком, включая уже показанную процедуру.
XML содержит только собственный внутренний DTD. Внешнего подмножества DOCTYPE нет, SYSTEM/PUBLIC в двух объявлениях — учебные URN, не пути и не HTTP-адреса.
guideIcon — неразбираемая сущность NDATA; она объявлена, но не используется как &guideIcon; в тексте. Её ресурс не загружается. Нотация описывает формат, не изображение.
Параметры и построитель создаются заново для этой известной строки. Никогда не переносите разрешение DTD на произвольный XML из интернета или API.
Вызовите УчебныеЗадачи.ВыполнитьПример() из серверной учебной команды. Нет записи базы, файлов или сетевых соединений; поведение DOM 1С ещё требует контрольного запуска в учебной базе.
Процедура ВыполнитьПример() Экспорт
Параметры = Новый ПараметрыЧтенияXML(, , , , , Ложь);
Чтение = Новый ЧтениеXML;
Чтение.УстановитьСтроку("<?xml version=""1.0""?>
|<!DOCTYPE products [
|<!NOTATION guideMark PUBLIC ""guide-marker"" ""urn:guide:marker-format"">
|<!ENTITY guideIcon SYSTEM ""urn:guide:marker-payload"" NDATA guideMark>
|]>
|<products xmlns:g=""urn:guide:dtd""><product>Книга</product></products>", Параметры);
Построитель = Новый ПостроительDOM;
Настройки = Построитель.КонфигурацияDOM;
Если НЕ Настройки.ВозможноУстановитьПараметр("disallow-doctype", Ложь) Тогда
Чтение.Закрыть();
ВызватьИсключение "Построитель не разрешает собственный внутренний DTD";
КонецЕсли;
Настройки.УстановитьПараметр("disallow-doctype", Ложь);
Попытка
Документ = Построитель.Прочитать(Чтение);
Исключение
Чтение.Закрыть();
ВызватьИсключение;
КонецПопытки;
Чтение.Закрыть();
ОписаниеТипа = Документ.ОпределениеТипаДокумента;
Если ОписаниеТипа = Неопределено Тогда
ВызватьИсключение "Включите чтение типа документа, не подменяйте его пустым новым DOCTYPE";
КонецЕсли;
Сущность = ОписаниеТипа.Сущности.ПолучитьИменованныйЭлемент("guideIcon");
Нотация = ОписаниеТипа.Нотации.ПолучитьИменованныйЭлемент("guideMark");
Если ТипЗнч(Сущность) <> Тип("СущностьDOM") ИЛИ ТипЗнч(Нотация) <> Тип("НотацияDOM") Тогда
ВызватьИсключение "Построитель не сохранил ожидаемые собственные объявления DTD";
КонецЕсли;
Узлы = Новый Массив;
Узлы.Добавить(Сущность);
Узлы.Добавить(Нотация);
Корень = Документ.ЭлементДокумента;
Сообщить(Корень.НайтиURIПространстваИмен("g") = "urn:guide:dtd");
Для Каждого Узел Из Узлы Цикл
Сообщить("Имя DTD: " + Узел.ИмяУзла);
Сообщить("Локальное имя: " + Строка(Узел.ЛокальноеИмя));
Сообщить("Префикс: " + Строка(Узел.Префикс));
Сообщить("URI узла: " + Строка(Узел.URIПространстваИмен));
Сообщить("Поиск g от этого узла: " + Строка(Узел.НайтиURIПространстваИмен("g")));
Сообщить("Поиск префикса URI: " + Строка(Узел.НайтиПрефикс("urn:guide:dtd")));
Сообщить("Этот URI по умолчанию: " + Строка(Узел.ПространствоИменПоУмолчанию("urn:guide:dtd")));
КонецЦикла;
Сообщить(Корень.ТекстовоеСодержимое = "Книга");
КонецПроцедурыРазбор по шагам
Объявление xmlns:g находится на корневом элементе products. Положительная проверка поиска URI выполняется именно от него.
ЛокальноеИмя, Префикс и URIПространстваИмен узлов DTD диагностируются отдельно от ИмяУзла.
НайтиURIПространстваИмен и НайтиПрефикс начинают поиск от конкретного узла. Владение документом само по себе не делает корень родителем объявления DTD.
Результаты трёх поисков от сущности/нотации выводятся фактически; не обещается наследование g только из-за общего документа. Ничего не переименовывается.
Как проверить результат
Два контрольных Истина, между ними диагностические результаты двух узлов.
guideIcon и guideMark сохранили свои имена, текст корня остался Книга.
Ожидаемый результат
Пространства имён элементов отделены от имён объявлений DTD.
На что обратить внимание
Не присваивайте Префикс узлу DTD, чтобы якобы связать его с xmlns:g.
Возвращённый URI — не команда загрузки схемы или файла.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Прочитать реальные объявления сущности и нотации из собственного DTD
Сущность NDATA ссылается на нотацию формата. Эти два узла не являются тегами product или ссылкой на рабочую картинку.
Где и как запускать
Полный серверный общий модуль своей учебной базы. Внутренний DTD только известной собственной строки, не вход произвольного API.
Подготовка
Только отдельная учебная база. Создайте серверный общий модуль УчебныеЗадачи с процедурой ВыполнитьПример() Экспорт. Полный модуль каждого урока вставьте целиком, включая уже показанную процедуру.
XML содержит только собственный внутренний DTD. Внешнего подмножества DOCTYPE нет, SYSTEM/PUBLIC в двух объявлениях — учебные URN, не пути и не HTTP-адреса.
guideIcon — неразбираемая сущность NDATA; она объявлена, но не используется как &guideIcon; в тексте. Её ресурс не загружается. Нотация описывает формат, не изображение.
Параметры и построитель создаются заново для этой известной строки. Никогда не переносите разрешение DTD на произвольный XML из интернета или API.
Вызовите УчебныеЗадачи.ВыполнитьПример() из серверной учебной команды. Нет записи базы, файлов или сетевых соединений; поведение DOM 1С ещё требует контрольного запуска в учебной базе.
Процедура ВыполнитьПример() Экспорт
Параметры = Новый ПараметрыЧтенияXML(, , , , , Ложь);
Чтение = Новый ЧтениеXML;
Чтение.УстановитьСтроку("<?xml version=""1.0""?>
|<!DOCTYPE products [
|<!NOTATION guideMark PUBLIC ""guide-marker"" ""urn:guide:marker-format"">
|<!ENTITY guideIcon SYSTEM ""urn:guide:marker-payload"" NDATA guideMark>
|]>
|<products xmlns:g=""urn:guide:dtd""><product>Книга</product></products>", Параметры);
Построитель = Новый ПостроительDOM;
Настройки = Построитель.КонфигурацияDOM;
Если НЕ Настройки.ВозможноУстановитьПараметр("disallow-doctype", Ложь) Тогда
Чтение.Закрыть();
ВызватьИсключение "Построитель не разрешает собственный внутренний DTD";
КонецЕсли;
Настройки.УстановитьПараметр("disallow-doctype", Ложь);
Попытка
Документ = Построитель.Прочитать(Чтение);
Исключение
Чтение.Закрыть();
ВызватьИсключение;
КонецПопытки;
Чтение.Закрыть();
ОписаниеТипа = Документ.ОпределениеТипаДокумента;
Если ОписаниеТипа = Неопределено Тогда
ВызватьИсключение "Включите чтение типа документа, не подменяйте его пустым новым DOCTYPE";
КонецЕсли;
Сущность = ОписаниеТипа.Сущности.ПолучитьИменованныйЭлемент("guideIcon");
Нотация = ОписаниеТипа.Нотации.ПолучитьИменованныйЭлемент("guideMark");
Если ТипЗнч(Сущность) <> Тип("СущностьDOM") ИЛИ ТипЗнч(Нотация) <> Тип("НотацияDOM") Тогда
ВызватьИсключение "Построитель не сохранил ожидаемые собственные объявления DTD";
КонецЕсли;
Узлы = Новый Массив;
Узлы.Добавить(Сущность);
Узлы.Добавить(Нотация);
Сообщить(Сущность.ИмяУзла = "guideIcon");
Сообщить(Сущность.ИмяНотации = "guideMark");
Сообщить(Сущность.СистемныйИдентификатор = "urn:guide:marker-payload");
Сообщить(Нотация.ПубличныйИдентификатор = "guide-marker");
Сообщить(Нотация.СистемныйИдентификатор = "urn:guide:marker-format");
Сообщить("PUBLIC сущности: " + Строка(Сущность.ПубличныйИдентификатор));
Сообщить("Версия внешней сущности: " + Строка(Сущность.ВерсияXML));
Сообщить("Кодировка XML сущности: " + Строка(Сущность.КодировкаXML));
Сообщить("Кодировка источника сущности: " + Строка(Сущность.КодировкаИсточника));
Для Каждого Узел Из Узлы Цикл
Сообщить("Тип узла: " + Строка(Узел.ТипУзла));
Сообщить("Имя: " + Узел.ИмяУзла);
Сообщить("База URI: " + Строка(Узел.БазовыйURI));
Сообщить(Узел.ДокументВладелец = Документ);
Сообщить(Узел.ЗначениеУзла = Неопределено);
Сообщить("Текстовое содержимое: " + Строка(Узел.ТекстовоеСодержимое));
Сообщить("Тип атрибутов: " + Строка(ТипЗнч(Узел.Атрибуты)));
Сообщить(НЕ Узел.ЕстьАтрибуты());
Сообщить(НЕ Узел.ЕстьДочерниеУзлы());
Сообщить(Узел.ДочерниеУзлы.Количество() = 0);
Сообщить(Узел.ПервыйДочерний = Неопределено);
Сообщить(Узел.ПоследнийДочерний = Неопределено);
Сообщить(Узел.ПредыдущийСоседний = Неопределено);
Сообщить(Узел.СледующийСоседний = Неопределено);
Сообщить(Узел.РодительскийУзел = Неопределено);
КонецЦикла;
Сообщить(Документ.ЭлементДокумента.ТекстовоеСодержимое = "Книга");
КонецПроцедурыРазбор по шагам
Шестой аргумент ПараметрыЧтенияXML — ИгнорироватьТипДокумента. Ложь сохраняет DTD; readonly-свойства параметров не присваиваются после создания.
ЧтениеXML закрывается при успехе и при ошибке. Собственный ПостроительDOM допускает ровно этот внутренний DTD; отсутствие объявления останавливает пример.
ПолучитьИменованныйЭлемент ищет именно объявленные имена, а типы проверяются до специальных свойств сущности/нотации.
Сущность содержит SYSTEM ресурса и ИмяНотации. Нотация имеет другой SYSTEM и PUBLIC описания формата. URN не разыменовываются.
Неразбираемая сущность и нотация — листья, не дочерние теги корня. ДокументВладелец не является РодительскимУзлом.
Версия и кодировки внешнего разбираемого ресурса здесь не прочитаны: значения только диагностируются и не выдаются за UTF-8 скачанного файла.
Как проверить результат
Пять первых Истина, затем по десять Истина для каждого из двух узлов и последнее Истина для текста Книга.
Текст product получен из собственного XML; содержимое marker-payload не загружалось.
Ожидаемый результат
Получены настоящие два узла DTD с понятной картой свойств.
На что обратить внимание
Не объявляйте наличие SYSTEM доказательством загрузки ресурса.
Если построитель не сохранил DTD, урок остановится, а не заменит реальные узлы фиктивными структурами.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.