Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

KIS_Krotov_R_E (1) / л4 / кис-4 Кротов ист-21

.docx
Скачиваний:
54
Добавлен:
20.01.2016
Размер:
129 Кб
Скачать

ФЕДЕРАЛЬНОЕ АГЕНТСТВО СВЯЗИ

Федеральное государственное образовательное бюджетное учреждение высшего профессионального образования

«Санкт-Петербургский государственный университет телекоммуникаций им. проф. М. А. Бонч-Бруевича»

Кафедра информационных управляющих систем

Дисциплина: Корпоративные информационные системы

Лабораторная работа №4

«Продвинутое использование XSLT. Повторение и сортировка. Условная обработка. Численные вычисления. Строковые функции»

Выполнил: студент группы ИСТ-21

Кротов Р.Е.

Проверил: Шеховцов О.И.

(преподаватель по дисциплине)

Санкт-Петербург

2015

Цели лабораторной работы

Целью работы является подробное ознакомление с возможностями XSLT, выполнение более сложных преобразований, а также создание документа XML со структурой, отличной от структуры исходного документа.

Задание для самостоятельной работы по преобразованию XML в HTML

  1. Выполните задание 2а предыдущей лабораторной работы, на этот раз используя инструкцию xsl:for-each и применив сортировку по году выпуска для DVD и по названию для Blue-ray.

Преобразование XSLT

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

<xsl:stylesheet version = '1.0'

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

<xsl:template match="/">

<p></p>

<table border="1">

<caption align="left"><strong>DVD</strong></caption>

<p></p>

<tr bgcolor="#CCCCCC">

<td align="center"><strong>Название</strong></td>

<td align="center"><strong>Режиссер</strong></td>

<td align="center"><strong>Страна</strong></td>

<td align="center"><strong>Жанр</strong></td>

<td align="center"><strong>Год</strong></td>

</tr>

<xsl:for-each select="collection/DVD/film" >

<xsl:sort order="ascending" select="год"/>

<tr bgcolor="#F5F5F5">

<td><xsl:value-of select="название"/></td>

<td><xsl:value-of select="режиссер"/></td>

<td><xsl:value-of select="страна"/></td>

<td><xsl:value-of select="жанр"/></td>

<td><xsl:value-of select="год"/></td>

</tr>

</xsl:for-each>

</table>

<p></p>

<table border="1">

<caption align="left"><strong>Blue-ray</strong></caption>

<p></p>

<tr bgcolor="#CCCCCC">

<td align="center"><strong>Название</strong></td>

<td align="center"><strong>Режиссер</strong></td>

<td align="center"><strong>Страна</strong></td>

<td align="center"><strong>Жанр</strong></td>

<td align="center"><strong>Год</strong></td>

</tr>

<xsl:for-each select="collection/BD/film">

<xsl:sort order="ascending" select="год"/>

<tr bgcolor="#F5F5F5">

<td><xsl:value-of select="название"/></td>

<td><xsl:value-of select="режиссер"/></td>

<td><xsl:value-of select="страна"/></td>

<td><xsl:value-of select="жанр"/></td>

<td><xsl:value-of select="год"/></td>

</tr>

</xsl:for-each>

</table>

</xsl:template>

</xsl:stylesheet>

Результат

  1. Дополните исходный документ XML информацией о продолжительности каждого фильма.

  1. Сведите информацию о продолжительности фильмов в следующую таблицу:

Тип носителя/Количество/Общая продолжительность/Средняя продолжительность

Преобразование XSLT

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

<xsl:stylesheet version = '1.0'

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

<xsl:template match="/">

<table border="1">

<tr bgcolor="#CC2EFA">

<td align="center"><strong>Тип носителя</strong></td>

<td align="center"><strong>Количество</strong></td>

<td align="center"><strong>Общая продолжительность</strong></td>

<td align="center"><strong>Средняя продолжительность</strong></td>

</tr>

<tr bgcolor="#F5F5F5">

<td>DVD</td>

<td><xsl:value-of select="count(collection/DVD/film)"/></td>

<td><xsl:value-of select="sum(collection/DVD/film/продолжительность)"/></td>

<td><xsl:value-of select="round((sum(collection/DVD/film/продолжительность) div count

(collection/DVD/film))*100) div 100"/></td>

</tr>

<tr bgcolor="#F5F5F5">

<td>BD</td>

<td><xsl:value-of select="count(collection/BD/film)"/></td>

<td><xsl:value-of select="sum(collection/BD/film/продолжительность)"/></td>

<td><xsl:value-of select="round((sum(collection/BD/film/продолжительность) div count

(collection/BD/film))*100) div 100"/></td>

</tr>

<tr bgcolor="#04B404">

<td>Все носители</td>

<td><xsl:value-of select="count(collection/BD/film)+count(collection/DVD/film)"/></td>

<td><xsl:value-of select="sum(collection/DVD/film/продолжительность)+sum

(collection/BD/film/продолжительность)"/></td>

<td><xsl:value-of select="(round((sum(collection/DVD/film/продолжительность) div count

(collection/DVD/film))*100) div 100+round((sum(collection/BD/film/продолжительность) div

count(collection/BD/film))*100) div 100) div 2"/></td>

</tr>

</table>

</xsl:template>

</xsl:stylesheet>

Результат

  1. Выведите названия фильмов, удовлетворяющие поочерёдно следующим условиям:

  • в создании фильма участвовали США (или страна на Ваш выбор)

  • в создании фильма участвовали несколько стран

  • продолжительность фильма менее двух часов

  • фильм выпущен после 2000 года

Преобразование XSLT

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

<xsl:stylesheet version = '1.0'

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

<xsl:template match="/">

<strong>В создании этих фильмов участвовали США:</strong>

<xsl:for-each select="collection/DVD/film[страна='США']">

<p></p>

<xsl:value-of select="название"/>

</xsl:for-each>

<xsl:for-each select="collection/BD/film[страна='США']">

<p></p>

<xsl:value-of select="название"/>

</xsl:for-each>

<p></p>

<strong>В создании этих фильмов участвовало несколько стран:</strong>

<xsl:for-each select="collection/DVD/film[страна=contains(.,',')]">

<p></p>

<xsl:value-of select="название"/>

</xsl:for-each>

<xsl:for-each select="collection/BD/film[страна=contains(.,',')]">

<p></p>

<xsl:value-of select="название"/>

</xsl:for-each>

<p></p>

<strong>Продолжительность этих фильмов менее двух часов:</strong>

<xsl:for-each select="collection/DVD/film[продолжитльность<2]">

<p></p>

<xsl:value-of select="название"/>

</xsl:for-each>

<xsl:for-each select="collection/BD/film[продолжительность<2]">

<p></p>

<xsl:value-of select="название"/>

</xsl:for-each>

<p></p>

<strong>Эти фильмы выпущены после 2000 года:</strong>

<xsl:for-each select="collection/DVD/film[год>2000]">

<p></p>

<xsl:value-of select="название"/>

</xsl:for-each>

<xsl:for-each select="collection/BD/film[год>2000]">

<p></p>

<xsl:value-of select="название"/>

</xsl:for-each>

</xsl:template>

</xsl:stylesheet>

Результат

Задание для самостоятельной работы по преобразованию структуры XML

Создайте такой шаблон XSL, который бы менял структуру исходного документа xml. Пускай теперь вложенные в корневой элемент теги должны иметь одинаковые названия, при этом тип носителя будет храниться в атрибуте:

<фильм носитель = “DVD”>

Страна-создатель теперь нам не важна. Год выпуска должен быть заключён в содержимом тега, а не быть атрибутом:

<год>2000</год>

А тег «продолжительность» напротив теперь является пустым с единственным атрибутом:

<продолжительность мин = “171” />

Преобразование XSLT

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

<xsl:stylesheet version = '1.0'

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

<xsl:template match="/">

<фильмы>

<xsl:for-each select="collection/DVD/film">

<фильм носитель = "DVD">

<название><xsl:value-of select="название"/></название>

<режиссер><xsl:value-of select="режиссер"/></режиссер>

<год><xsl:value-of select="год"/></год>

<продолжительность час = "{продолжительность}" />

</фильм>

</xsl:for-each>

<xsl:for-each select="collection/BD/film">

<фильм носитель = "BD">

<название><xsl:value-of select="название"/></название>

<режиссер><xsl:value-of select="режиссер"/></режиссер>

<год><xsl:value-of select="год"/></год>

<продолжительность час = "{продолжительность}" />

</фильм>

</xsl:for-each>

</фильмы>

</xsl:template>

</xsl:stylesheet>

Результат

Вывод:

В ходе данной работы мы подробно ознакомились с возможностями xslt, выполнили более сложные преобразования и создали xml-документ, отличный от исходного.

Соседние файлы в папке л4