- •Оглавление введение 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
- •Вопросы для тестирования
- •Список литературы
Лабораторная работа №13
Создайте первую XSL-таблицу стилей с использованием XSL-элемента “for-each” для отображения XML-документа из лабораторной работы №1.
Вставьте в данный XML-документ инструкцию по обработке, использующую указанную XSL-таблицу стилей.
Сохраните оба файла в папке под своей фамилией.
Создайте вторую XSL-таблицу стилей с использованием нескольких шаблонов для отображения XML-документа из лабораторной работы №1.
Вставьте в данный XML-документ инструкцию по обработке, использующую указанную XSL-таблицу стилей.
Сохраните оба файла в папке под своей фамилией.
Откройте поочерёдно оба XML-документа для просмотра в браузере Internet Explorer.
При появлении сообщений об ошибках, постарайтесь их найти и устранить.
Сдайте работы преподавателю.
8.5. Фильтрация и сортировка данных xml
Значение, которое присваивается атрибутам match или select, представляет собой образец, соответствующий одному или нескольким элементам в XML-документе. (Атрибут match используется для элемента template, а атрибут select - для элементов value-of, for-each и apply-templates.) Образцы, с которыми имели дело до сих пор, содержали только оператор пути, который задавал имя элемента и, возможно, одного или нескольких вложенных элементов. Можно ограничить количество элементов, отвечающих шаблону, введя фильтр - выражение, заключенное в квадратные скобки ([]) и следующее непосредственно за оператором пути. Например, образец, присвоенный следующему атрибуту match, указывает, что соответствующий элемент должен носить имя BOOK и, кроме того (это определяется фильтром), должен иметь дочерний элемент BINDING, который содержит текст “Мягкая обложка”:
Если в фильтр включено только имя элемента, то соответствующий элемент должен иметь дочерний элемент с указанным именем. Например, следующий образец отвечает любому элементу ITEM, имеющему дочерний элемент с именем CD, независимо от содержимого элемента CD:
match="ITEM[CD]"
Следующий образец отвечает любому элементу SHIRT, имеющему дочерний элемент COLOR, содержащий текст “красный”:
match="SHIRT[COLOR='красный']"
А следующий образец, наоборот, отвечает любому элементу SHIRT, имеющему дочерний элемент COLOR, который не содержит текст “красный”:
select="SHIRT[COLOR='красный']"
Если элемент имеет более одного дочернего элемента с именем, указанным в условии фильтрации, оператор сравнения применяется только к первому дочернему элементу. Например, если элемент SHIRT имеет два дочерних элемента COLOR, образец "SHIRT[COLOR='красный']" будет отвечать элементу, только если первый элемент COLOR содержит слово “красный”.
Итак, элементы for-each и apply-templates можно использовать для обработки повторяющихся элементов. Можно использовать атрибут order-by для этих элементов, чтобы управлять порядком, в котором браузер обрабатывает элементы, тем самым осуществляя сортировку данных XML.
Атрибуту order-by можно назначить один или несколько образцов, разделяя их точкой с запятой. Браузер будет сортировать элементы с использованием образцов в том порядке, в котором они перечислены. Для указания направления сортировки (по возрастанию или по убыванию) следует предварить образец префиксом + или -.
Например, атрибут order-by, установленный для следующего элемента for-each, предписывает браузеру сортировать элементы BOOK по фамилиям авторов в порядке возрастания, а также осуществлять сортировку для одинаковых фамилий по именам, также по возрастанию:
<xsl:for-each select="INVENTORY/BOOK"
order-by="+AUTHOR/LASTNAME;+AUTHOR/FIRSTNAME">
В другом примере следующая установка order-by осуществляет сортировку элементов BOOK по названиям книг по убыванию:
<xsl:apply-templates select="INVENTORY/BOOK" order-by="-TITLE">
Оператор пути, который присваивается атрибуту order-by, действует относительно образца, назначенного атрибуту select. Так, в данном примере установка order-by="-TITLE" указывает на элемент TITLE внутри элемента BOOK, вложенного в элемент INVENTORY.
Ниже приведено два примера XSL-таблиц стилей, представленных в Листингах 1.40 и 1.41. Каждый из них осуществляет фильтрацию и сортировку элементов BOOK, подлежащих отображению.
<?xml version="1.0"?>
<!-- Имя файла: xslDemo05.xsl -->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<H2>Описание книги</H2>
<xsl:for-each select="INVENTORY/BOOK[BINDING='Мягкая обложка']" order-by="+AUTHOR/LASTNAME; +AUTHOR/FIRSTNAME">
<SPAN STYLE="font-style:italic">Автор: </SPAN>
<xsl:value-of select="/AUTHOR"/><BR/>
<SPAN STYLE="font-style:italic">Заголовок: </SPAN>
<xsl:value-of select="TITLE"/><BR/>
<SPAN STYLE="font-style:italic">Цена: </SPAN>
<xsl:value-of select="PRICE"/><BR/>
<SPAN STYLE="font-style:italic">Тип обложки: </SPAN>
<xsl:value-of select="BINDING"/><BR/>
<SPAN STYLE="font-style:italic">Количество страниц: </SPAN>
<xsl:value-of select="/PAGES"/><P />
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Листинг 1.40
<?xml version="1.0"?>
<!-- Имя файла: xslDemo06.xsl -->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<H2>Описание книги</H2>
<xsl:applay-templates select="INVENTORY/BOOK" order-by="+AUTHOR/LASTNAME; +AUTHOR/FIRSTNAME"/></xsl:template>
<xsl:template match="BOOK[BINDING='Мягкая обложка']">
<SPAN STYLE="font-style:italic">Автор: </SPAN>
<xsl:value-of select="AUTHOR"/><BR/>
<SPAN STYLE="font-style:italic">Заголовок: </SPAN>
<xsl:value-of select="TITLE"/><BR/>
<SPAN STYLE="font-style:italic">Цена: </SPAN>
<xsl:value-of select="PRICE"/><BR/>
<SPAN STYLE="font-style:italic">Тип обложки: </SPAN>
<xsl:value-of select="BINDING"/><BR/>
<SPAN STYLE="font-style:italic">Количество страниц: </SPAN>
<xsl:value-of select="PAGES"/><P />
</xsl:template>
</xsl:stylesheet>
Листинг 1.41
Обе таблицы стилей разработаны для связывания с XML-документом из Листинга 1.38. В них использован следующий фильтр, предписывающий браузеру отображать только книги, имеющие мягкую обложку:
[BINDING='Мягкая обложка']
В обоих примерах используется следующая установка order-by, задающая сортировку элементов BOOK по возрастанию по фамилиям авторов, а затем по именам авторов:
order-by="+AUTHOR/LASTNAME;+AUTHOR/FIRSTNAME"
На рисунке 60 показано как выглядит выводимая информация, которая является одинаковой для обеих таблиц стилей.
Рисунок 60. Отображение содержимого всех элементов “BOOK”
Таблица стилей из Листинга 1.40 использует элемент for-each для отображения множества элементов BOOK. В приведенной ниже таблице стилей для элемента for-each установлены и фильтр, и атрибут order-by:
<xsl:for-each select="INVENTORY/BOOK[BINDING='trade paperback']"
order-by="+AUTHOR/LASTNAME;+AUTHOR/FIRSTNAME">
<!-- отображение текущего элемента BOOK -->
</xsl:for-each>
Таблица стилей из Листинга 1.41 использует для отображения множества элементов BOOK элемент apply-templates вместе с отдельными шаблонами, отвечающими элементам «BOOK». В этой таблице стилей фильтр добавлен к шаблону, соответствующему элементам BOOK:
<xsl:template match="BOOK[BINDING='Мягкая обложка']">
Добавление фильтра к элементу apply-templates будет иметь тот же эффект. Атрибут order-by может быть добавлен к элементу apply-templates следующим образом:
<xsl:apply-templates setect="INVENTORY/BOOK" order-by="+AUTHOR/LASTNAME; +AUTHOR/FIRSTNAME"/>
Атрибут order-by следует добавить к элементу apply-templates, поскольку элемент template не распознает этот атрибут. (Можно использовать атрибут order-by только для элемента, который указывает браузеру осуществить просмотр среди множества элементов - а именно, for-each и apply -templates.)