
- •Раздел 1
- •Тема 1.1 Основные принципы технологии «клиент сервер»
- •Тема 1.2 Серверы приложений. Web-серверы.
- •1. Типы серверов
- •Типы серверов
- •Лекция 1.3 Основы Web-программирования.
- •1. Основы функционирования Интернет.
- •Основы функционирования интернета
- •Язык разметки html
- •Каскадные таблицы стилей (css)
- •Язык сценариев JavaScript
- •Объектная модель dhtml
- •Объектная модель dom
- •Основы языка xml и объектная модель xml
- •Лекция 1.4 Протоколы прикладного уровня.
- •Механизм взаимодействия клиента и ервера
- •Раздел 2. Основы Web-программирования.
- •Тема 2.1 Развитие языков разметки гипертекста
- •Структура html-документа
- •Лекция 2.2 Описание html. Теги языка, их свойства.
- •Тема 2.3 Фреймы. Формы.
- •Свойства фреймов
- •Синтаксис фреймов
- •Атрибуты и их значения
- •Планирование фрэймов и взаимодействия между фрэймами
- •Синтаксис
- •Тэги Формы
- •Меню выбора в формах
- •Отправление файлов при помощи форм
- •Тема 2.4 Каскадные таблицы стилей.
- •Структура и правила
- •Id селекторы (id Selectors):
- •Внутренние Таблицы Стилей
- •Глобальные Таблицы Стилей
- •Связанные Таблицы Стилей
- •Свойства Font
- •Свойства Text
- •Свойства Color и Background
- •Свойства Box
- •Классификация
- •Лекция 2.5 Характеристика и вохмодности xml.
- •Отображение документов xml
- •Правила создания xml- документа
- •Конструкции языка
- •Правила xsl
- •Лекция 2.6 Язык описания схемы данных xml (dtd).
- •Лекция 2.7 Объектная модель документа dom.
- •Лекция 2.8 Характеристика ис. Спецификация cgi.
- •Лекция 2.9 Расширение isapi. Серверы asp.
- •Лекция 2.10 Характеристика программного средства (рнр).
- •Лекция 2.11 Основы языка ис. Синтаксис.
- •Лекция 2.12 Элементы и выражения языка.
- •Лекция 2.13 функции ис.
- •Лекция 2.14 Характеристика программного средства (JavaScript).
- •Лекция 2.15 Синтаксис языка JavaScript. Операторы.
- •Выражения
- •Побитовые Операторы сдвига
- •Логические операторы
- •Операторы Строки
- •Лекция 2.16 Функции JavaScript.
- •Лекция 2.17 Объекты JavaScript. Методы и события.
- •Общие сведения
Лекция 2.7 Объектная модель документа dom.
1. Спецификация DOM;
2. Принципы реализации DOM в различных обозревателях.
СПЕЦИФИКАЦИЯ DOM
Объектная модель XML документов является представлением его внутренней структуры в виде совокупности определенных объектов. Для удобства эти объекты организуются в некоторую древообразную структуру данных - каждый элемент документа может быть отнесен к отдельной ветви, а все его содержимое, в виде набора вложенных элементов, комментариев, секций CDATA и т.д. представляется в этой структуре поддеревьями.
Рис.1 Дерево элементов
DOM - это спецификация универсального платформо- и программно-независимого доступа к содержимому документов и является просто своеобразным API для их обработчиков. DOM является стандартным способом построения объектной модели любого HTML или XML документа, при помощи которой можно производить поиск нужных фрагментов, создавать, удалять и модифицировать его элементы.
ПРИНЦИП РЕАЛИЗАЦИИ DOM В РАЗЛИЧНЫХ ОБОЗРЕВАТЕЛЯХ
Рассмотрим данный вопрос на примере Microsoft Internet Explorer 5.0
В настоящий момент Microsoft Internet Explorer является первым броузером, поддерживающим спецификацию DOM Level 1. Для сценариев на стороне клиента доступно множество объектов для работы с XML-документом. Рассмотрим объекты XMLDOMDocument, XMLDOMNode, XMLDOMNodeList, представляющие интерфейс для доступа ко всему документу, отдельным его узлам и поддеревьям соответственно. Также рассмотрим объект XMLDOMParseError, предоставляющий необходимую для отладки информацию о произошедших ошибках анализатора.
Объект XMLDOMNode |
|||
Объект XMLDOMNode, реализующий базовый DOM интерфейс Node, предназначен для манипулирования с отдельным узлом дерева документа. Его свойства и методы позволяют получать и изменять полную информацию о текущем узле - его тип (является ли текущий узел элементом, комментарием, текстом и т.д.), название, полное название (вместе с Namespace префиксом), его содержимое, список дочерних элементов и т.д. |
|||
Свойства |
|||
Общая информация о текущем элементе дерева |
|||
nodeName |
Возвращает полное название(вместе с Namaspace атрибутом) текущего узла в виде строки. Доступно только для чтения. |
||
baseName |
Возвращает название элемента без префикса Namespace. Только для чтения. |
||
prefix |
Возвращает Namespace префикс. Только для чтения. |
||
namespaceURI |
Возвращает URI Namespace префикса текущего элемента |
||
dataType |
Определяет тип содержимого текущего узла(описываемое схемами данных). Доступно для записи и чтения |
||
nodeType |
Возвращает тип текущего узла: NODE_ELEMENT (1) - элемент NODE_ATTRIBUTE (2) - атрибут NODE_TEXT (3) - текст NODE_CDATA_SECTION (4) - область CDATA NODE_ENTITY_REFERENCE (5) - объект ссылки на "макроподстановки" NODE_ENTITY (6) - объект ссылки на т.н. "подстановочые символы" - entity" NODE_PROCESSING_INSTRUCTION (7) - область инструкций XML процессору NODE_COMMENT (8) - комментарий NODE_DOCUMENT (9) - корневой элемент документа NODE_DOCUMENT_TYPE (10) - описание типа документа, задаваемое тэгом <!DOCTYPE> NODE_DOCUMENT_FRAGMENT (11) - фрагмент XML-документа - несвязанное поддерево NODE_NOTATION (12) - DTD нотация. Свойство доступно только для чтения. |
||
nodeTypeString |
Возвращает тип узла в виде текста. Только для чтения. |
||
attributes |
Возвращает список атрибутов текущего узла в виде коллекции XMLDOMNamedNodeMap. Если атрибутов нет, то свойство length будет содержать нулевое значение. Для тех узлов, у которых не может быть атрибутов (в XML документе они могут быть назначены лишь объектам элементов, макроподстановок и нотаций) возвращается null. Для объектов макроподстановок и нотаций содержимым коллекции будут являться атрибуты SYSTEMID, PUBLICID и NDATA. Доступно только для чтения. |
||
definition |
Возвращает DTD определение для текущего узла дерева. |
||
Содержимое текущего узла |
|||
text |
Возвращает содержимое текущего поддерева(узла и всех его дочерних элементов). Доступно для записи и чтения |
||
xml |
Возвращает XML-представление текущего поддерева. Доступно только для чтения |
||
nodeValue |
Возвращает содержимое текущего узла. Доступно для чтения и записи. |
||
Работа со списком дочерних элементов |
|||
childNodes |
Для тех узлов, которые имеют дочерние элементы возвращает их список в виде XMLDOMNodeList. В том случае, если дочерних элементов нет, значение свойства length списка равно нулю . Только для чтения. |
||
lastChild |
Возвращает последний дочерний элемент или null, если таковых не имеется. Свойство доступно только для чтения. |
||
firstChild |
Возвращает последний дочерний элемент или null. Только для чтения. |
||
nextSibling |
Возвращает следующий дочерний элемент. Только для чтения. |
||
previousSibling |
Возвращает предыдущий дочерний элемент. Доступно только для чтения. |
||
parentNode |
Содержит ссылку на родительский элемент. В том случае, когда такого элемента нет, возвращает null. Доступно только для чтения. |
||
ownerDocument |
Возвращает указатель на документ, в котором находится текущий узел. Если в процессе модификации дерева узел будет перенесен в другой документ, то значение этого свойства автоматически изменится. Только для чтения. |
||
Методы |
|||
Добавление новых элементов в объектную модель документа |
|||
appendChild(newChild) |
Добавляет текущему узлу новый дочерний элемент. Возвращает ссылку на объект этого нового элемента. То же самое можно сделать и при помощи insertBefore (newChild, null) |
||
insertBefore(newChild, refChild) |
Вставляет дочерний узел, располагая его в текущем поддереве "левее" узла, указанного параметром refChild. Если последний параметр не задан, то новый узел будет добавлен в конец списка. |
||
Модификация и удаление узлов |
|||
cloneNode (deep) |
Создание копии текущего элемента. Параметр deep определяет, будет ли эта процедура рекурсивно выполняться для всех дочерних элементов. Возвращаемое значение - ссылка на новый элемент |
||
replaceChild(newChild, oldChild) |
Замена объекта oldChild текущего списка дочерних объектов на newChild. Если newChild=null, то старый объект будет просто удален. |
||
removeChild(oldChild) |
Удаление объекта oldChild из списка дочерних элементов |
||
Поиск узлов (выделение поддеревьев) |
|||
selectNodes (patternString) |
Возвращает объект XMLDOMNodeList, содержащий поддерево, выбранное по шаблону поиска pattertnString |
||
selectSingleNode (patternString) |
Аналогичен методу selectNodes, только возвращает первый узел из найденного поддерева |
||
Обработка поддеревьев стилевыми таблицами |
|||
transformNode (stylesheet) |
Назначает стилевую таблицу для поддерева текущего узла и возвращает строку - результат обработки. В качестве параметра передается ссылка на объект DOMDocument, в котором находятся XSL инструкции. |
||
transformNodeToObject (stylesheet, outputObject) |
То же, что и transformNode, только результат - обработанное дерево передается в объект XMLDocument(другое дерево), задаваемый параметром outputObject |
Объект XMLDOMDocument |
|||||
Представляет верхний уровень объектной иерархии и содержит методы для работы с документом: его загрузки, анализа, создания в нем элементов, атрибутов, комментариев и т.д. . Многие свойства и методы этого объекта реализованы также в рассмотренном выше класса Node, т.к. документ может быть рассмотрен как корневой узел с вложенными в него поддеревьями. |
|||||
Свойства |
|||||
Получение и информации о текущем состоянии процесса загрузки и анализа документа. |
|||||
async |
Свойство, доступное для записи и чтения, идентифицирующее текущий режим обработки (синхронный или асинхронный) |
||||
parseError |
Возвращает ссылку на объект XMLDOMParseError, при помощи которого можно получить всю необходимую информацию о последней ошибке анализатора. Только для чтения. |
||||
readyState |
Содержит информацию о текущем состоянии анализатора: LOADING (1) - находится в процессе загрузки документа LOADED (2) - загрузка завершена, но объектная модель документа еще не создана INTERACTIVE (3) - объектная модель создана(все элементы документа разобраны, установлены их связи и атрибуты) но доступна пока только для чтения COMPLETED (4) - с ошибками или без, но документ разобран Для получения своевременной информации о текущем состоянии анализатора можно воспользоваться обработчиком событий onreadystatechange Только для чтения. |
||||
ondataavailable |
Свойство, доступное только для записи, которое содержит ссылку на обработчик события ondataavailable (вызывается, когда обработчик обрабатывает очередную порцию данных документа) |
||||
onreadystatechange |
Ссылка на обработчик события onreadystatechange (вызывается каждый раз, когда меняется состояние обработчика - свойство readyState) |
||||
ontransformnode |
Ссылка на обработчик события ontransformnode (вызывается перед каждой трансформацией узла стилевыми таблицами) |
||||
Изменение параметров обработчика. |
|||||
preserveWhiteSpace |
Определяет, должны ли при разборе документа игнорироваться символы разделителей. Если значение свойства ложно, то будут, если истина - то разделители будут сохранены. По умолчанию установлено в false. Доступно для чтения и записи. |
||||
resolveExternals |
Свойство определяет, будут ли в процессе анализа разбираться внешние определения (DTD-описания, макроподстановки и т.д.) - значение true или нет(false). Доступно для чтения и записи. |
||||
validateOnParse |
Включение - выключение верификации документа. Значения true или false. Доступно для чтения и записи. |
||||
Получение информации о загруженном документе |
|||||
doctype |
Возвращает тип документа, определяемый при его создании тэгом <!DOCTYPE>, включающим DTD. Если в документе нет DTD описаний, возвращается null. Только для чтения. |
||||
url |
Возвращает URL документа(в случае успешной его загрузки, в противном случае возвращает null). Доступно только для чтения. |
||||
implementation |
Возвращет объект XMLDOMImplementation для данного документа. Только для чтения. |
||||
documentElement |
Содержит ссылку на корневой элемент документа в виде объекта XMLDOMElement. Если корневого элемента нет, то возвращается null. Доступно для записи |
||||
Методы |
|||||
Загрузка и сохранение документов |
|||||
load(url) |
Загружает документ, адрес которого задан параметром url. В случае успеха возвращает логическое значение true. Необходимо иметь в виду, что вызов этого метода сразу же обнуляет содержимое текущего документа |
||||
loadXML(xmlString) |
Загружает XML - фрагмент, определенный в передаваемой строке |
||||
save(objTarget) |
Сохраняет документ в файле (objTarget - строка, содержащая URL файла) или внутри другого документа (objTarget - объект XMLDOMDoument). |
||||
abort() |
Прерывание процесса загрузки и обработки документа. Обработчик ошибок XMLDOMParseError будет содержать в коде ошибки соответствующее значение. |
||||
Создание новых объектов. Необходимо отметить, что все методы лишь создают указанные объекты и для включения их в объектную модель документа надо дополнительно использовать методы insertBefore, insertAfter или appendChild. |
|||||
createAttribute (name) |
Создает для текущего элемента новый атрибут с указанным именем. Новый атрибут добавляется в объектную модель документа только после определения его значения методом setAttribute. |
||||
createNode(Type, name, nameSpaceURI) |
Создает узел указанного типа и названия. Namespace префикс задается параметром nameSpaceURI. Возвращаемым значением будет созданный объект указанного типа. |
||||
createCDATASection(data) |
Создает область CDATA - возвращает объект XMLDOMCDATASection |
||||
createDocumentFragment() |
Создает новый пустой фрагмента документа - объект XMLDOMDocumentFragment |
||||
createComment(data) |
Создает комментарий. |
||||
createElement(tagName) |
Создает элемент документа с указанным названием. |
||||
createEntityReference(name) |
Создает ссылку на подстановочные символы |
||||
createProcessingInstruction(target, data) |
Создает новую директиву XML-процессора |
||||
createTextNode(data) |
Создает текст внутри документа |
||||
Поиск узлов дерева документа |
|||||
getElementsByTagName(tagname) |
Возвращает ссылку на коллекцию элементов документа с заданным именем (или всех элементов, если значение tagname равно "*") |
||||
nodeFromID(idString) |
Поиск элемента по идентификатору |
||||
hasChildNodes() |
Возвращает истину, если текущий узел содержит поддерево. |
Объект XMLDOMNodeList |
||
Представляет собой список узлов - поддеревья и содержит методы, при помощи которых можно организовать процедуру обхода дерева. |
||
Свойства |
||
length |
число элементов списка узлов |
|
Методы |
||
item(i) |
Выбор i-того элемента из списка. Возвращает объект XMLDOMNode |
|
nextNode() |
Выбор следующего элемента в списке. Если такого элемента нет, то возвращает null. первый вызов этого метода(после сброса итератора) возвратит ссылку на первый элемент списка. |
|
reset() |
Сброс внутреннего указателя текущего элемента |
Объект XMLDOMParserError |
|
Объект позволяет получить всю необходимую информацию об ошибке, произошедшей в ходе разбора документа. Все свойства этого объекта доступны только для чтения. |
|
Свойства |
|
errorCode |
Содержит код возникшей ошибки либо 0, если таковой не случилось. |
url |
Возвращает URL обрабатываемого документа |
filepos |
Возвращает смещение относительно начала файла фрагмента, в котором обнаружена ошибка |
line |
Содержит номер строки, содержащей ошибку |
linepos |
Позицию ошибки в строкев которой была обнаружена ошибка |
reason |
Описание ошибки |
srcText |
Содержит полный текст строки, в которой произошла ошибка |