26

Re: XML

Атрибуты простых типов:
<xsd:element name="phone">
<xsd:complexType>
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="mobile"
type="xsd:string"
use="optional"/>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:element>

Поделиться

27

Re: XML

Группы элементов:
<xs:group name="acct">
<xs:sequence>
<xs:element name="descript" type="xs:string"/>
<xs:element name="number" type="xs:string"/>
<xs:element name="balance" type="xs:decimal"/>
</xs:sequence>
</xs:group>
<xs:complexType name="checkingAcct">
<xs:sequence>
<xs:group ref="acct" />
</xs:sequence>
<xs:attribute name="status" type="xs:string"/>
</xs:complexType>

Поделиться

28

Re: XML

Расширения типов:
<xsd:complexType name="acct">
<xsd:sequence>
<xsd:element name="description" type="xsd:string"/>
<xsd:element name="number" type="xsd:string"/>
<xsd:element name="type" type="acctTypeCode"/>
<xsd:element name="balance" type="xsd:decimal"/>
</xsd:sequence>
<xsd:attribute name="status" type="xsd:string"/>
</xsd:complexType>
<xsd:complexType name="savingsAcct">
<xsd:complexContent>
<xsd:extension base="acct">
<xsd:sequence>
<xsd:element name="minimumBalance"
type="xsd:decimal" />
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>

Поделиться

29

Re: XML

Расширения простых типов:
<xsd:simpleType name="loginType">
<xsd:restriction base="xsd:string">
<xsd:minLength value="3" />
<xsd:maxLength value="12" />
</xsd:restriction>
</xsd:simpleType>

Поделиться

30

Re: XML

Лабораторная работа 3.2
Модификация XML-схемы своего XML-документа
Упражнение 1: Создание XML-схемы
• Откройте папку с лабораторными работами
• Откройте файл lab-2.xml и сохраните его с именем lab-3-2.xml
• Создайте текстовый файл с именем lab-3-2.xsd
• Создайте XML-схему для документа с Вашим расписанием занятий
• Подключите созданную схему к документу lab-3-2.xml и проверьте его на валидность
• Сохраните результат Вашей работы

Поделиться

31

Re: XML

Выводы:
DTD описания имеют некоторые
серьезные ограничения
 XML схемы могут описывать сложные типы
данных и структуру документов
 XML схемы являются промышленным
способом описания и проверки XML
документов
 Существуют специализированные
графические редакторы XML схем

Поделиться

32

Re: XML

XSLT

XSLT как средство преобразований XML
 Создание XSL документа
 Программные средства преобразований
XSLT
 Шаблоны и шаблонные правила
 Язык XPath
 Оси выборки
 Предикаты
 Типы данных и функции XPath

Поделиться

33

Re: XML

Средства преобразований XML
В браузере
 <?xml-stylesheet type="text/xsl"
href="style.xsl"?>
 В командной строке
 с:\> msxsl books.xml books.xsl –o
result.txt
 Программные средства

Поделиться

34

Re: XML

XSL - XML-документ
 Все элементы принадлежат пространству имён:
.w3.org/1999/XSL/Transform
 В XSL-документе могут использоваться любые пространства имён
<xsl:stylesheet version="1.0"
xmlns:xsl="http://_.w3.org/1999/XSL/Transform">

</xsl:stylesheet>

Поделиться

35

Re: XML

Шаблоны и шаблонные правила:

Шаблон (шаблонное правило) – правило
обработки части XML документа
<xsl:template match="Xpath_выражение">
тело шаблона
</xsl:template>
 Вывод значения
<xsl:template match="Xpath_выражение">
<xsl:value-of select="Xpath_выражение">
</xsl:template>

Поделиться

36

Re: XML

Лабораторная работа 4.1
Использование простого XSL-преобразования
Упражнение 1: Создание XSL-файла
• Откройте папку с лабораторными работами
• Создайте текстовый файл с именем lab-4-1.xsl
• Откройте этот файл с помощью Notepad++ и установите кодировку UTF-8
• Впишите в файл следующий текст и используйте его в качестве шаблона для других
файлов XSL:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://_.w3.org/1999/XSL/Transform">
<!-- Шаблон корневого элемента -->
<xsl:template match="/">
</xsl:template>
</xsl:stylesheet>
• Напишите простую таблицу преобразования, выводящую фразу «Привет, МИР!»
Упражнение 2: XSL-преобразование XML-документа
• Откройте файл lab-1.xml и сохраните его с именем lab-4-1.xml
• Подключите к нему таблицу lab-4-1.xsl и убедитесь в работоспособности
преобразования:
◦ Для этого можно открыть файл lab-4-1.xml с помощью браузера…
◦ Или в редакторе Notepad++ выбрать следующую возможность:
[ Дополнения -> XML Tools -> XSL Transformation ]
• Сохраните результат Вашей работы

Поделиться

37

Re: XML

XPath выражения
XPath выражения похожи на пути к файлам
<xsl:template match="job/title">
/ - абсолютный путь
<xsl:template match="/emploee/job/title">
// - поиск элементов на любой глубине
<xsl:template match="/emploee//name">
* - любой элемент
<xsl:template match="*">

Выборки по осям:
Выборка узла по имени
Имя узла
Все узлы
Имя и пространство
Все узлы в пространстве
Выборка узлов по типу
axis::node-type-function()

Предикаты:
Выражение может иметь предикаты
axis::node-test[predicate]…
Фильтрация
Положение узла: product[last()]
Содержание узла: product[@code="123"]
Присутствие узла: product[@code]
Несколько предикатов
product[3][@discount]

Операции в Xpath:
Логические операции
A and B, A or B
Арифметические операции
A + B, A - B, A * B, A div B,
A mod B, - A
Операции сравнения
A = B, A != B, A > B, A < B,
A >= B, A <= B

Типы данных и функции в Xpath:
Булевские функции
boolean(object)
not(boolean)
true()
false()

Числовые функции
number(object)
sum(node-set)
floor(number)
ceiling(number)
round(number)

Строковые функции
string(object)
concat(string, string, string*)
starts-with(string, string)
contains(string, string)
substring-before(string, string)
substring-after(string, string)
substring(string, number, number?)
string-length(string?)
normalize-space(string?)
translate(string, string, string)

Функции множеств узлов
last()
position()
count(node-set)
local-name(node-set?)
namespace-uri(node-set?)
name(node-set?)

Лабораторная работа 4.2
XPath и XSLT
Упражнение 1: Использование XPath для преобразования
• Откройте папку с лабораторными работами
• Откройте файл lab-1.xml и сохраните его с именем lab-4-2.xml
• Откройте файл lab-4-1.xsl и сохраните его с именем lab-4-2.xsl
• Подключите к файлу lab-4-2.xml таблицу lab-4-2.xsl и убедитесь в работоспособности
преобразования
• Напишите в корневом шаблоне файла lab-4-2.xsl оператор, выводящий на экран
общее число занятий в документе lab-4-2.xml
• Напишите в корневом шаблоне файла lab-4-2.xsl оператор, выводящий на экран
первое занятие в документе lab-4-2.xml
• Напишите в корневом шаблоне файла lab-4-2.xsl оператор, выводящий на экран
время начала второго занятия в документе lab-4-2.xml
• Проверьте свою работу
• Сохраните результат Вашей работы

Поделиться

38

Re: XML

Выводы:
XSLT – мощное средство преобразования
XML данных практически к любому виду
 XSL файл – это набор шаблонных правил
 XPath – язык выборки узлов в дереве
 Оси выборки XPath – это адресация к
другим элементам из текущего контекста
 XPath обладает рядом функций

Поделиться

39

Re: XML

XSLT
Использование шаблонов
<xsl:template
name="name"
match="pattern"
mode="mode"
priority="number">
<!--
Content:(<xsl:param>*,template)
-->
</xsl:template>

Выборка узлов и применение шаблонов:
<xsl:apply-templates select="expression" mode="name">
<!--
Content:(xsl:sort|xsl:with-param)*
-->
</xsl:apply-templates>

Именнованые шаблоны
<xsl:template name="tmpName"
<!--
Content:(<xsl:param>*,template)
-->
</xsl:template>
<xsl:call-template name="tmpName">
<!-- Content:xsl:with-param* -->
</xsl:call-template>

 Создание узлов-элементов
<xsl:element
name="name"
namespace="URI"
use-attribute-sets="namelist">
<!-- Content:template -->
</xsl:element>

 Создание узлов-атрибутов
<xsl:attribute
name="name"
namespace="URI">
<!-- Content:template -->
</xsl:attribute>

Создание наборов атрибутов:
<xsl:attribute-set
name="name">
<!-- Content:xsl:attribute* -->
</xsl:attribute-set>

 Создание текстовых узлов
 Создание комментариев и инструкций обработки
<xsl:comment>
<!-- Content:template -->
</xsl:comment>
<xsl:processing-instruction
name="process-name">
<!-- Content:template -->
</xsl:processing-instruction>


 Копирование узлов
<xsl:copy-of select="expression"/>
<xsl:copy
use-attribute-sets="name-list">
<!-- Content:template -->
</xsl:copy>

 Управляющие конструкции
Условная обработка
<xsl:if test="expression">
<!-- Content: template -->
</xsl:if>

 Оператор выбора
<xsl:choose>
<xsl:when test="boolean-expression">
<!-- Content: template -->
</xsl:when>
<xsl:when test="boolean-expression">
<!-- Content: template -->
</xsl:when>
<xsl:otherwise>
<!-- Content:template -->
</xsl:otherwise>
</xsl:choose>

 Циклическая обработка
<xsl:for-each select="expression">
<!-- Content:(xsl:sort*,template) -->
</xsl:for-each>

 Рекурсивные правила
<xsl:template match="myElement"
...
<xsl:apply-templates
select="myElement" />
...
</xsl:template>

 Сортировка значений
<xsl:sort
select="expression"
lang="language-code"
data-type="text|number|qname"
order="ascending|descending"
case-order="upper-first|lower-first"/>

Лабораторная работа 5.1
Использование операторов XSLT создания узлов
Упражнение 1: Cоздание XML-документа
• Откройте папку с лабораторными работами
• Создайте пустой текстовый файл с именем lab-5-1.xml
• Откройте файл lab-5-1.xml с помощью Notepad++
• Установите кодировку документа UTF-8
• Наберите следующий текст:
<?xml version="1.0" encoding="UTF-8"?>
<lab5_1>
<element name="computer" value="Intel Core Duo" />
<element name="monitor" value="19 in." />
<element name="printer" value="LBP2900" />
</lab5_1>
• Проверьте XML на правильность синтаксиса
Упражнение 2: Cоздание XSL-документа
• Создайте пустой текстовый файл с именем lab-5-1.xsl
• Откройте файл lab-5-1.xsl с помощью Notepad++
• Установите кодировку документа UTF-8
• Наберите следующий текст:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://_.w3.org/1999/XSL/Transform">
<xsl:output
method="xml"
encoding="UTF-8" />
<xsl:template match="/">
</xsl:template>
</xsl:stylesheet>
• Проверьте XML на правильность синтаксиса


Лабораторная работа 5.2
XSLT преобразование с управляющими конструкциями
Упражнение 1: Cоздание XML-документа
• Откройте папку с лабораторными работами
• Создайте пустой текстовый файл с именем lab-5-2.xml
• Откройте файл lab-5-2.xml с помощью Notepad++
• Установите кодировку документа UTF-8
• Наберите следующий текст:
<?xml version="1.0" encoding="UTF-8"?>
<lab5_2>
<element name="computer" value="Intel Core Duo" />
<element name="monitor" value="19 in." />
<element name="printer" value="LBP2900" />
<element name="keyboard" value="104 keys" />
<element name="mouse" value="optical" />
</lab5_2>
• Проверьте XML на правильность синтаксиса
Упражнение 2: Cоздание XSL-документа
• Создайте пустой текстовый файл с именем lab-5-2.xsl
• Откройте файл lab-5-2.xsl с помощью Notepad++
• Установите кодировку документа UTF-8
• Наберите следующий текст:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://_.w3.org/1999/XSL/Transform">
<xsl:output
method="html"
encoding="UTF-8" />
<xsl:template match="/">
</xsl:template>
</xsl:stylesheet>
• Проверьте XML на правильность синтаксиса

Поделиться

40

Re: XML

Упражнение 3: Преобразование с использованием операторов создания узлов
• Допишите XSL-файл так, чтобы получить из XML-документа lab-5-1.xml XML-документ
следующего вида:
<?xml version="1.0" encoding="UTF-8" ?>
<labResult>
<!-- Всего 3 элемента -->
<computer>Intel Core Duo</computer>
<monitor>19 in.</monitor>
<printer>LBP2900</printer>
</labResult>

Поделиться

41

Re: XML

Упражнение 3: Преобразование с использованием управляющих конструкций
• Допишите XSL-файл так, чтобы получить из XML-документа lab-5-2.xml HTML-
документ со списком элементов, при этом каждый нечетный элемент должен
выделятся серым фоном текста.

Поделиться

42

Re: XML

Выводы:
Создание узлов позволяет формировать выходной документ любой сложности
 Комментарии и инструкции по обработке полезны при выводе XML документов
 Управляющие конструкции позволяют гибко менять выходной документ
 Сортировка значений позволяет выводить данные в требуемом виде

Поделиться

43

Re: XML

Дополнительные возможности XSLT

Псевдонимы и пространства имен
<xsl:namespace-alias
stylesheet-prefix="prefix|#default"
result-prefix="prefix|"#default"/>

Перед использованием пространств имен их
следует определить:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://_.w3.org/1999/XSL/Transform"
xmlns:fb2="http://_.gribuser.ru/xml/fictionboo
k/2.0"
xmlns:lab="http://_.mysite.ru/xml/labs">
 XPath
/fb2:FictionBook/fb2:description/
fb2:title-info/fb2:author

 Ключи и выборка узлов по ключу
 Определение ключа
 <xsl:key
name="keyName"
match="pattern"
use="expression"/>
 Выборка по ключу
 key('keyName','value')

Пример выборки
<pricelist>
<book id="1">
<title>XML</title>
<author>Алекс Гомер</author>
</book>
...
</pricelist>
 <xsl:key name="ixBookTitle"
match="/pricelist/book" use="title" />
 <h2>Книги XML</h2>
<xsl:apply-templates
select="key('ixBookTitle', 'XML')" />

Составные ключи:
<xsl:key name="ixBookTitleAuthor"
match="/pricelist/book"
use="concat(title, author)" />
 <h2>Книги XML</h2>
<xsl:apply-templates
select="key('ixBookTitleAuthor',
concat( 'XML', 'Алекс Хоумер'))" />

 Управление выводом документа
 Формирование различных выходных
файлов
 Использование нескольких входных
документов
 Дополнительные функции XSLT

Лабораторная работа 6.1
Выборка узлов по ключу
Упражнение 1: Cоздание XML-документа
• Откройте папку с лабораторными работами
• Создайте пустой текстовый файл с именем lab-6-1.xml
• Откройте файл lab-6-1.xml с помощью Notepad++
• Установите кодировку документа UTF-8
• Наберите следующий текст:
<?xml version="1.0" encoding="UTF-8"?>
<lab6_1>
<course id="XML">
<title>XML и XSLT. Современные технологии обработки данных для Web и Office 2007</title>
<keywords>
<keyword>XML</keyword>
<keyword>XML Schema</keyword>
<keyword>XPath</keyword>
<keyword>XSLT</keyword>
</keywords>
<teachers>
<teacher>Борисов И.О.</teacher>
<teacher>Никитин И.Г.</teacher>
</teachers>
</course>
<course id="AJAX">
<title>AJAX. Разработка web-приложений для Web 2.0</title>
<keywords>
<keyword>AJAX</keyword>
<keyword>XML</keyword>
<keyword>XML Schema</keyword>
<keyword>JavaScript</keyword>
<keyword>XSLT</keyword>
</keywords>
<teachers>
<teacher>Борисов И.О.</teacher>
<teacher>Никитин И.Г.</teacher>
</teachers>
</course>
<course id="PHP">
<title>Профессиональное программирование на PHP 5</title>
<keywords>
<keyword>PHP</keyword>
<keyword>XML</keyword>
<keyword>XSLT</keyword>
</keywords>
<teachers>
<teacher>Борисов И.О.</teacher>
<teacher>Шуйков С.Ю.</teacher>
</teachers>
</course>
</lab6_1>
• Сохраните файл и проверьте XML на правильность синтаксиса
Упражнение 2: Cоздание XSL-документа
• Создайте пустой текстовый файл с именем lab-6-1.xsl
• Откройте файл lab-6-1.xsl с помощью Notepad++
• Установите кодировку документа UTF-8

Поделиться

44

Re: XML

Упражнение 3: XSLT преобразование в HTML для вывода списка курсов
• Создайте корневой шаблон преобразования
• Создайте шаблон для одного курса
• Создайте ключ для выбора курсов по преподавателю
• Создайте ключ для выбора курсов по ключевому слову
• Выведите все курсы, которые читает преподаватель Никитин И.Г.
(Подсказка: Сначала используем нужный ключ, а потом от результата выборки прыгаем на два этажа выше и получаем курс )
• Выведите все курсы, в которых рассматривается тема XML
(Подсказка: Смотрите подсказку для предыдущего задания )
• Выведите все курсы, которые читает преподаватель Шуйков С.Ю., и в которых есть тема XSLT. Вам захочется сделать
ключ и по ключевым словам, и по преподавателям. Но такой ключ сделать нельзя. Что делать? Подумайте.
(Подсказка: Можно сначала сделать выборку по ключу, а уже результат этой выборки отфильтровать предикатом )
• Сохраните свою работу

Поделиться

45

Re: XML

 Управление выводом документа
<xsl:output
method="xml|html|text|name"
version="string"
encoding="string"
omit-xml-declaration="yes|no"
standalone="yes|no"
doctype-public="string"
doctype-system="string"
cdata-section-elements="namelist"
indent="yes|no"
media-type="string"/>

Поделиться

46

Re: XML

Формирование различных выходных файлов
<xsl:output method="text" encoding="utf-8" />
<xsl:output method="html"
doctype-public="-//W3C//DTD HTML 4.01//EN"
doctype-system="http://_.w3.org/TR/html4/
strict.dtd"
<xsl:output method="xml"
doctype-public="-//W3C//DTD XHTML 1.0
Transitional//EN"
doctype-system="http://_.w3.org/1999/xhtml"
indent="yes"/>

Поделиться

47

Re: XML

Лабораторная работа 6.2
XSLT преобразование в различные форматы
Упражнение 1: XSLT преобразование в HTML для вывода списка курсов
• Откройте с помощью Notepad++ файл lab-6-1.xml и сохраните его с именем lab-6-
2.xml
• Создайте новый файл lab-6-2-html.xsl
• Установите кодировку документа UTF-8
• Создайте корневой шаблон преобразования
• Создайте шаблон для одного курса
• Сформируйте вывод в формат HTML 4
• Проверьте свою работу
Упражнение 2: XSLT преобразование для вывода списка курсов в текстовый
файл
• Пересохраните файл lab-6-2-html.xsl с именем lab-6-2-txt.xsl
• Выведите список курсов в текстовый файл, используя утилиту командной строки
msxsl.exe
(Эту утилиту можно бесплатно загрузить по адресу
microsoft.com/Downloads/details.aspx?FamilyID=2fb55371-c94e-4373-b0e9-
db4816552e41&displaylang=en или просто набрать в поисковой системе Google запрос: "msxsl
download" )
Упражнение 3: XSLT преобразование в XML для вывода списка курсов
• Пересохраните файл lab-6-2-html.xsl с именем lab-6-2-xml.xsl
• Напишите XSLT преобразование для вывода списка курсов в XML документ
следующего вида:
<lab62Result>
<course id="XML" teacher="Борисов И.О." />
...
</lab62Result>
• Для тестирования используйте утилиту командной строки msxsl.exe или расширение
Notepad++ XML Tools
• Если остается время — допишите вывод атрибута keywords в элемент course, так
чтобы в нем оказался список ключевых слов разделенный запятыми.

Поделиться

48

Re: XML

Использование нескольких входных документов:
include()
 import()
 document()
<xsl:copy-of
select="document('my.html')/html/body/h1"/>

Поделиться

49

Re: XML

Дополнительные функции XSLT
current()
 <xsl:template match="item">
<xsl:element
name="/root/element[@id=current()/@id]"/>

 generate-id()
 <xsl:value-of
select="generate-id(/catalog/book)/>

Поделиться

50

Re: XML

Выводы:
Пространства имен должны быть явно указаны
 Ключи и выборка узлов по ключу – очень эффективное средство выборки данных
 Управление выводом документа позволяет формировать различные выходные данные
 Использование нескольких входных документов расширяет возможности преобразования

Поделиться