Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LabKompl1_XML.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
13.8 Mб
Скачать

Лабораторная работа №3 Встроенные шаблонные правила

Цель работы:

Изучить встроенные шаблонные правила языка XSLT

Ход работы:

В XML-документе существует семь видов узлов: корневой узел, узлы элементов, узлы атрибутов, текстовые узлы, узлы комментариев, узлы инструкций обработки и узлы пространств имен. Для каждого из семи типов XSLT предоставляет встроенные шаблонные правила, указывающие, что делать с этим узлами, если автор таблицы стилей не дал более конкретных инструкций.

  • Шаблонное правило по умолчанию для текстовых узлов и узлов атрибутов

Самое основное из встроенных шаблонных правил копирует значение

текстовых узлов и узлов атрибутов в выходной документ. Это выглядит следующим образом:

<xsl:template match="text()|@*">

<xsl:value-of select="."/>

</xsl:template>

Функция text() – это выражение XPath, соответствующее всем текстовым узлам, first_name. @* – выражение XPath, соответствующее всем узлам атрибутов. Вертикальная черта объединяет эти два выражения, выбирая и текстовые узлы и узлы атрибутов. Содержимое этого шаблона говорит о том, что при обнаружении текстового узла или узла атрибута процессор должен вывести значение этого узла, т. е. непосредственно текст или значение атрибута соответственно.

Примените к Литину 3.7 таблицу стилей для его трансформирования, используя шаблон по умолчанию для текста и атрибутов, для этого сделайте следующие:

  1. Создайте документ для таблицы стилей под названием ShabTextAtr.xsl:

<?xml version="1.0"?>

<xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="text" encoding="CP866" />

<xsl:template match="people">

<html>

<head><title>Знаменитые ученые</title></head>

<body>

<dl>

<xsl:apply-templates/>

</dl>

</body>

</html>

</xsl:template>

<xsl:template match="person">

<dt><xsl:apply-templates select="name"/></dt>

<dd><ul>

<li>Родился: <xsl:apply-templates select="@born"/></li>

<li>Умер: <xsl:apply-templates select="@died"/></li>

</ul></dd>

</xsl:template>

</xsl:stylesheet>

  1. Примените эту таблицу стилей к документу из листинга 3.7, для этого добавьте после <?xml version="1.0" encoding="windows-1251"?> инструкцию обработки со ссылкой на таблицу стилей:

<?xml-stylesheet type="text/xsl" href=" ShabTextAtr.xsl "?> и сохраните под именем apply-templates.xml

  1. Откройте ShabTextAtr.xml в браузере, у вас должно получится то, что на рисунке

4.4:

Рисунок 4.4

Упражнения для самостоятельной работы

  1. Создайте документ xml и создайте для него шаблон по умолчанию для текста и атрибутов

  2. Отобразите в бразуре

  • Шаблонное правило по умолчанию для узлов элементов и корневого узла

Правило выглядит следующим образом:

<xsl:template match="*|/">

<xsl:apply-templates/>

</xsl:template>

Символ «звездочка» (*) является подстановочным выражением XPath, соответствующим всем узлам элементов, независимо от имени и пространства имен, к которому они относятся. Косая черта (/) – это выражение XPath, соответствующее корневому узлу.

  • Шаблон по умолчанию для узлов комментариев и узлов инструкций обработки

Встроенное шаблонное правило для комментариев и инструкций обработки выглядит следующим образом:

<xsl:template match="processing-instruction()|comment()"/>

Упражнения для самостоятельной работы

  1. На основе выше приведенного примера работы с шаблоном по умолчанию для текстовых узлов и узлов атрибутов, создайте и примените для Листинга 3.7 таблицу стилей с данным шаблоном по умолчанию для комментариев (текст Знаменитые ученые примите за комментарии) и для корневого элемента и др. 2 элементов.

  2. Отобразите в бразуре

Режимы

Иногда одно и то же содержимое из входного документа должно появиться в выходном документе несколько раз, каждый раз отформатированное в соответствии с разными шаблонами. Например, заголовки глав книги могут форматироваться в одном стиле в самих главах и в другом – в оглавлении книги. Оба элемента – xsl:apply-templates и xsl:template – могут иметь необязательный атрибут mode, ставящий разные шаблоны в соответствие разным применениям. Атрибут mode элемента xsl:template указывает, в каком режиме следует активизировать этот шаблон. Элемент xsl:apply-templates с атрибутом mode активизирует только шаблоны с соответствующими атрибутами mode.

Создайте таблицу стилей использующею режимы, для этого сделайте следующее:

  1. Создайте документ для таблицы стилей под названием Reg.xsl:

<?xml version="1.0" encoding="windows-1251"?>

<xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="html" encoding="CP866" />

<xsl:template match="people">

<html>

<head><title>Знаменитые ученые</title></head>

<body>

<ul><xsl:apply-templates select="person" mode="toc"/></ul>

<xsl:apply-templates select="person"/>

</body>

</html>

</xsl:template>

<!-- Шаблоны режима оглавления -->

<xsl:template match="person" mode="toc">

<xsl:apply-templates select="name" mode="toc"/>

</xsl:template>

<xsl:template match="name" mode="toc">

<li><xsl:value-of select="last_name"/>,

<xsl:value-of select="first_name"/></li>

</xsl:template>

<!--Шаблоны обычного режима -->

<xsl:template match="person">

<p><xsl:apply-templates/></p>

</xsl:template>

</xsl:stylesheet>

Заметьте как выглядит элемент <xsl:output method="html" encoding="CP866" />,значение выходного элемента =html,это значит что на выходе мы получаем html документ,что видно на рисунке 3.6

Документ демонстрирует такое использование шаблонов в таблице стилей, начинающей выходной документ со списка имен. Это действие

совершается в режиме toc. Затем отдельный шаблон и отдельный элемент xsl:apply-templates в режиме по умолчанию (то есть без атрибута mode) выводят полное содержимое всех элементов person.

  1. Примените эту таблицу стилей к документу из листинга 3.7, для этого добавьте после <?xml version="1.0" encoding="windows-1251"?> инструкцию обработки со ссылкой на таблицу стилей:

<?xml-stylesheet type="text/xsl" href=" Reg.xsl "?> и сохраните под именем Reg.xml

  1. Откройте ShabTextAtr.xml в браузере, у вас должно получится то, что на рисунке

4.5:

Рисунок 4.5