- •Оглавление введение 4
- •Тема 1. Простой xml-документ 8
- •Тема 2. Создание корректно сформированных xml-документов 20
- •Тема 3. Создание валидных xml-документов 37
- •Тема 4. Определение и использование примитивов 72
- •Тема 5. Таблицы каскадных стилей 94
- •Тема 6. Связывание данных 169
- •Тема 7. Сценарии объектной модели документа 219
- •Тема 8. Xsl-таблицы стилей 261
- •Тема 9. Описание схемы документа на языке xsd 288
- •Список литературы 320 введение
- •Тема 1. Простой xml-документ
- •Лабораторная работа №1
- •Тема 2. Создание корректно сформированных xml-документов
- •2.1. Составные части корректно сформированного xml-документа
- •Лабораторная работа №2
- •2.2. Добавление элементов в документ
- •2.3. Анатомия элемента
- •2.4. Типы содержимого элемента
- •2.5. Пустые элементы
- •Лабораторная работа №3
- •2.6. Задание атрибутов для элементов
- •2.7. Правила для создания атрибутов
- •2.8. Правила для корректного задания значений атрибутов
- •Тема 3. Создание валидных xml-документов
- •3.1. Основной критерий для валидного документа
- •3.2. Преимущества использования валидных xml-документов
- •3.3. Добавление dtd
- •3.4. Форма записи dtd
- •3.5. Форма записи объявления типа элемента
- •3.6. Описание содержимого элемента
- •3.7. Задание содержимого элемента
- •3.8. Задание смешанного содержимого
- •Лабораторная работа №4
- •3.8. Форма записи объявления списка атрибутов
- •3.9. Тип атрибута
- •3.10. Задание атрибута маркерного типа
- •3.11. Задание атрибута нумерованного типа
- •3.12. Объявление значения по умолчанию
- •Лабораторная работа №5
- •3.13. Использование внешних подмножеств dtd
- •3.14. Использование внешних и внутренних подмножеств dtd одновременно
- •3.15. Условия игнорирования разделов внешнего подмножества dtd
- •Лабораторная работа №6
- •3.16. Преобразование корректно сформированного документа в валидный
- •Тема 4. Определение и использование примитивов
- •4.1. Определения и классификация примитивов
- •4.2. Типы примитивов
- •4.3. Объявление общего внутреннего разбираемого примитива
- •4.4. Объявление общего внешнего разбираемого примитива
- •4.5. Объявление общего внешнего не разбираемого примитива
- •4.6. Объявление нотаций
- •Лабораторная работа №7
- •4.7. Объявление параметрического внутреннего разбираемого примитива
- •4.8. Объявление параметрического внешнего разбираемого примитива
- •4.9. Вставка ссылок на примитив
- •4.10. Ссылка на примитив. Пример 1
- •4.11. Ссылка на примитив. Пример 2
- •4.12. Вставка ссылок на символы
- •4.13. Использование предварительно определённых примитивов
- •4.14. Объявление документа автономным (standalone)
- •Лабораторная работа №8
- •Тема 5. Таблицы каскадных стилей
- •5.1. Создание файла таблицы стилей
- •5.2. Нечувствительность к регистру в css
- •5.3. Наследование установок свойств
- •5.4. Использование множественных элементов и множественных правил
- •5.5. Использование контекстуальных селекторов
- •5.6. Использование атрибута style
- •5.7. Импорт других таблиц стилей
- •5.8. Задание значений url
- •5.9. Связывание таблицы стилей с xml-документом
- •5.9. Присвоение значений в таблицах каскадных стилей
- •5.10. Установка свойства display
- •5.11. Задание ключевых слов css в качестве значений
- •5.12. Установка свойства font-family
- •5.13. Установка свойства font-size
- •Задание размера шрифта относительно размера шрифта браузера
- •5.14. Установка свойства font-style
- •Ключевые слова, используемые для свойства font-style
- •5.15. Установка свойства font-weight
- •Ключевые слова, используемые для свойства font-weight
- •5.16. Установка свойства font-variant
- •Ключевые слова, используемые для свойства font-variant
- •5.17. Установка свойства color
- •5.18. Установка свойства background-color
- •5.19. Установка свойства background-image
- •5.20. Установка свойства background-repeat
- •5.21. Установка свойства background-position
- •5.22. Установка свойства letter-spacing
- •5.23. Установка свойства vertical-align
- •Ключевые слова, используемые для свойства vertical-align
- •5.24. Установка свойства text-align
- •5.25. Установка свойства text-indent
- •5.26. Установка свойства line-height
- •5.27. Установка свойства text-transform
- •Ключевые слова, используемые для свойства text-transform
- •5.28. Установка свойства text-decoration
- •Ключевые слова, используемые для свойства text- decoration
- •5.29. Установка свойств управоения полями
- •5.30. Установка свойства border-style
- •Ключевые слова, используемые для свойства border-style
- •5.31. Установка свойства border-width
- •Ключевые слова, используемые для свойства border-width
- •5.31. Установка свойства border-color
- •5.32. Установка свойств просвета между обрамлением и текстом
- •5.33. Установка свойств размеров
- •5.34. Установка свойства позиционирования float
- •Ключевые слова, используемые для свойства float
- •5.35. Установка свойства позиционирования clear
- •Ключевые слова, используемые для свойства clear
- •5.36. Вставка элементов html в xml-документы и использование пространства имён
- •Тема 6. Связывание данных
- •6.1. Основные шаги при связывании данных
- •6.1. Шаг первый: установка связи xml-документа с html-страницей
- •6.2. Как хранятся данные xml
- •6.3. Проверка на наличие ошибок
- •6.4. Шаг второй: сцепление html-элементов с xml-элементами. Использование табличного сцепления
- •6.5. Использование одной html-таблицы для отображения простого набора записей
- •6.6. Использование постраничного отображения
- •Методы перемещения по записям таблицы
- •6.7. Использование вложенных таблиц для отображения иерархической структуры записей
- •Лабораторная работа №9
- •6.8. Использование связывания данных по одной записи
- •6.9. Перемещение между записями
- •Методы объекта recordset
- •6.10. Другие способы связывания данных
- •Сцепляемын html-элементы (за исключением элемента table)
- •6.11. Связывание с другими html-элементами
- •6.12. Передача html-разметки
- •6.13. Обновление накопленных данных
- •Методы объекта recordset
- •6.14. Использование dtd при сявзывании данных
- •6.15. Связывание html-элементов с xml-атрибутами
- •Лабораторная работа №10
- •6.16. Использование сценариев для dso
- •Тема 7. Сценарии объектной модели документа
- •7.1. Связывание xml-документа с html-страницей
- •7.2. Структура dom
- •7.3. Доступ и отображение элементов xml-документа
- •Полезные свойства и методы, предоставляемые узлами Document/
- •7.4. Использование объекта NodeList
- •7.5. Извлечение символьных данных элемента
- •7.6. Отображение переменного числа xml-элементов
- •7.7. Использование других способов доступа к элементам
- •Лабораторная работа №11
- •7.8. Доступ и отображение значений атрибутов в xml-документе
- •7.9. Доступ к примитивам и нотациям xml
- •Лабораторная работа №12
- •7.10. Перемещение внутри xml-документа
- •7.11. Проверка валидности xml-документа
- •Тема 8. Xsl-таблицы стилей
- •8.1. Основы использования xsl-таблиц стилей
- •8.2. Использовании одного шаблона xsl
- •8.3. Отображение переменного числа элементов
- •8.4. Использование нескольких шаблонов
- •Лабораторная работа №13
- •8.5. Фильтрация и сортировка данных xml
- •8.6. Доступ к атрибутам xml
- •Лабораторная работа №14
- •Тема 9. Описание схемы документа на языке xsd
- •9.1. Встроенные простые типы xsd
- •9.1.1. Вещественные числа
- •9.1.2. Целые числа
- •9.1.3. Строки символов
- •9.1.4. Дата и время
- •9.1.5. Двоичные типы
- •9.1.6. Прочие встроенные простые типы
- •9.2. Определение простых типов
- •9.2.1. Сужение
- •9.2.2. Список
- •9.2.3. Объединение
- •9.3. Обявление элементов и их атрибутов
- •9.4. Определение сложных типов
- •9.4.1. Определение типа пустого элемента
- •Лабораторная работа №15
- •9.4.2. Определение типа элемента с простым телом
- •9.4.3. Определение типа вложенных элементов
- •9.5. Определение типа со сложным телом
- •9.6. Безымянные типы
- •9.7. Пространства имён языка xsd
- •9.8. Включение файлов схемы в другую схему
- •9.9. Связь документа xml со своей схемой
- •Лабораторная работа №16
- •Вопросы для тестирования
- •Список литературы
7.2. Структура dom
В DOM программные объекты, представляющие XML-документ, называются узлами. Когда Internet Explorer обрабатывает связанный XML-документ и сохраняет его в DOM, он создает узел для каждого из основных компонентов XML-документов, таких как элементы, атрибуты и инструкции по обработке.
DOM использует различные типы узлов для представления различных типов компонентов XML. Например, элемент хранится в узле Element, a атрибут - в узле Attribute. В таблице 5.20 представлены наиболее важные типы узлов.
Таблица 5.20
Основные типы узлов, используемых для представления различных компонентов XML-документа. Каждый тип узла представляет собой программный объект, который обеспечивает свойства и методы для доступа к соответствующему компоненту
Тип узла |
Компоненты XML-документа, представляемые узлом |
Имя узла (свойство nodeName объекта) |
Значение узла (свойство nodeValue объекта) |
Document |
Корневой узел иерархии документа (т. е. он представляет весь XML-документ) |
#document |
null |
Element |
Элемент |
Имя типа элемента (например, BOOK) |
null (любые символьные данные, содержащиеся в элементе, находятся в одном или нескольких дочерних узлах Text) |
Text |
Текст, принадлежащий элементу, атрибуту или примитиву, которые представлены родителем этого узла |
#text |
Текст родительского XML-компонента |
Attribute |
Атрибут (а также другие пары имя-значение, такие как имя и значение в инструкции по обработке) |
Имя атрибута (например, “Binding”) |
Значение атрибута (например, “Жёсткая обложка”) |
Processing-Instruction |
Инструкция по обработке (объявление XML или пользовательская инструкция по обработке) |
Предназначение инструкции по обработке (например, xml) |
Полное содержимое инструкции по обработке, за исключением предназначения (например, version="1.0") |
Comment |
Комментарий |
#comment |
Весь текст внутри ограничителей комментария |
CDATASection |
Раздел CDATA |
#cdata-section |
Содержимое раздела CDATA |
DocumentType |
Объявление типа документа |
Имя корневого элемента, содержащееся в объявлении DOCTYPE (например, INVENTORY) |
null |
Entity |
Объявление примитива в DTD |
Имя примитива (например, “image”) |
null (значение примитива содержится в дочернем узле Text) |
Notation |
Объявление нотации в DTD |
Имя нотации (например, “BMP”) |
null (системный литерал нотации содержится в дочернем узле Attribute с именем SYSTEM) |
Можно получить каждое из имен узлов (они приведены в третьем столбце) из свойства узла nodeName. Имена, начинающиеся с символа #, представляют компоненты XML, не поименованные в документе. (Например, комментарий в XML-документе не обладает именем. В связи с этим DOM использует стандартное имя #comment.) Другие имена узлов получаются из имен, присвоенных соответствующим компонентам в XML-документе. (Например, узел Element, представляющий элемент типа BOOK, также должен носить имя BOOK.)
Можно получить каждое из значений узла (перечисленные в последнем столбце) из свойства узла nodeValue. Если компонент XML имеет соответствующее значение (например, атрибут), это значение будет храниться в значении узла. Если компонент XML не имеет значения (например, элемент), DOM устанавливает в качестве значения узла null. Подробнее о большинстве типов узлов, перечисленных в таблице 9.1, будет рассказано далее в этой главе.
DOM организует узлы XML-документа в виде древообразной иерархической структуры, которая отражает иерархическую структуру самого документа. При этом создается единственный узел Document, который представляет весь XML-документ и служит корневым элементом в этой иерархии. Заметим, что логическая иерархическая структура элементов XML, в которой элемент Документ является корневым - это лишь одна из ветвей иерархической структуры узлов DOM, которые представляют весь документ.
Возьмем, например, XML-документ из Листинга 1.27. Этот документ состоит из объявления XML, комментария и корневого элемента, который включает дочерние элементы, а также атрибуты. На рисунке 46 показана иерархическая организация узлов, которые создает DOM для представления документа. Для каждого компонента рассматриваемого документа на рисунке указан тип узла, используемого для представления компонента (например, Document, Comment и Element), а также имя узла (оно указано в скобках - например, #document, #comment и INVENTORY).
<?xml version=”1.0”?>
<!-- Имя файла: Inventory06.xml -->
<INVENTORY>
<BOOK Binding=”Жёсткая обложка”>
<TITLE>Война и мир</TITLE>
<AUTHOR Country=”Россия”>Лев Толстой</AUTHOR>
<PAGES>510</PAGES>
<PRICE>12 000 рублей</PRICE>
</BOOK>
<BOOK Binding=”Мягкая обложка”>
<TITLE>Преступление и наказание</TITLE>
<AUTHOR Country=”Россия”>Фёдор Достоевский</AUTHOR>
<PAGES>590</PAGES>
<PRICE>14 000 рублей</PRICE>
</BOOK>
<BOOK Binding=”Мягкая обложка”>
<TITLE>Королева Марго</TITLE>
<AUTHOR Country=”Франция”>Александр Дюма</AUTHOR>
<PAGES>410</PAGES>
<PRICE>10 000 рублей</PRICE>
</BOOK>
</INVENTORY>
Листинг 1.27
Рисунок 46. Иерархическая организация узлов на примере XML-документа из листинга 1.27
Каждый узел, как программный объект, имеет свойства и методы, которые позволяют осуществлять доступ, отображать, обрабатывать и получать информацию о соответствующем компоненте XML. Например, свойства nodeName и nodeValue (см. таблицу 5.20) дают имя компонента и его значение.
Все типы узлов используют общий набор свойств и методов. Эти свойства и методы разработаны для работы с узлами вообще. В таблице 5.21 представлены некоторые наиболее полезные свойства. Более подробная информация и примеры использования этих свойств будут представлены далее в этой главе.
Таблица 5.21
Некоторые полезные свойства, поддерживаемые всеми типами узлов
Свойство |
Описание |
Пример |
attributes |
Множество NamedNode Map всех дочерних узлов-атрибутов данного узла |
AttributeNode = Element.attributes.getNamedItem("Binding"); |
childNodes |
Множество NodeList всех дочерних узлов, не являющихся атрибутами, данного узла |
FirstNode = Element.childNodes(0); |
dataType |
Тип данных этого узла (применительно только к определенным типам узлов Attribute) |
AttributeType = Attribute.dataType; |
firstChild |
Первый дочерний узел данного узла, не являющийся атрибутом |
FirstChildNode = Element.firstChild; |
lastChild |
Последний дочерний узел данного узла, не являющийся атрибутом |
LastChildNode = Element.lastChild; |
nextSibling |
Следующий узел на том же уровне данного узла |
NextElement = Element.nextSibling; |
nodeName |
Имя данного узла |
ElementName = Element.nodeName; |
nodeType |
Цифровой код, указывающий на тип данного узла |
NodeTupeCode = Node.nodeType; |
nodeType-String |
Строка, содержащая тип данного узла, строчными буквами (например, “element” или “attribute”) |
NodeTypeString = Node.nodeTypeString; |
nodeValue |
Значение данного узла (или null, если он не содержит значения) |
AttributeValue = Attribute.nodeValue; |
ownerDocu-ment |
Корневой узел Document документа, содержащего данный узел |
Document = Node.ownerDocument; |
parentNode |
Узел, для которого данный узел является дочерним (не действует для узла Attribute) |
ParentElement = Element.parentNode; |
previousSibling |
Предыдущий узел на том же уровне данного узла |
PreviousElement = Element.previousSibling; |
text |
Все текстовое содержимое данного узла и все подчиненные узлы Element |
AIICharacterData = Element.text; |
xml |
Все содержимое XML данного узла и все его подчиненные узлы |
XMLContent = Element.xml; |
Свойство будет иметь значение null, если данное свойство не применимо к определенному узлу. Например, если узел представляет XML-компонент, который не имеет атрибутов (например, узел Document или Comment), его свойство attributes будет иметь значение null. Если узел представляет XML-компонент, который не имеет типа данных (тип данных имеют только определенные атрибуты), его свойство dataType будет иметь значение null. Если узел не имеет дочернего узла, не являющегося атрибутом, его свойство firstChild будет иметь значение null. Если узел относится к типу, который не имеет значений (например, узел Document или Element), его свойство nodeValue также будет иметь значение null.
Помимо общих свойств и методов, каждому типу узла присущи дополнительные свойства и методы, разработанные для работы с определенным XML-компонентом, который представляет узел. Например, узел Document имеет свойство parseError, которое содержит информацию о любой ошибке, возникающей в процессе обработки документа. Данное свойство присуще только узлу Document. В таблице 5.22 будут представлены наиболее полезные свойства и методы для некоторых типов узлов.
Каждый узел в таблице 5.21 обладает набором свойств, которые позволяют перемещаться в иерархии узла — т. е. получать доступ к другим узлам от текущего узла. Например, рассмотрим документ из Листинга 1.27. Если переменная Document содержит корневой узел Document, следующий код приведет к отображению содержимого комментария, расположенного в начале документа (этот комментарий DOM хранит как второй дочерний узел узла Document):
alert(Document.childNodes(1).nodeValue);
Эта строка вызовет отображение сообщения, содержащего текст “Имя файла: Inventory07.xml”.
В предыдущем разделе было описано, как осуществлять доступ к корневому узлу Document через член XMLDocument DSO, который получается из фрагмента данных XML. Узел Document является шлюзом к XML-документу. Его можно использовать для доступа к другим узлам.