1. XML to XML -
преобразования
http://ProductivityBlog.com.ua
2. О чем пойдет речь
▪ Начинаем с простого
▪ Копаем глубже
▪ Другие функции
▪ Визуальное XML to XML преобразование
с MapForce
▪ Практика
3. Файлы и инструменты
Файлы практических работ в файле
XSLT_2.zip в папке Practice
XMLSpy, MapForce из пакета
ALTOVA MissionKit
4. Начинаем с простого
▪ <xsl:stylesheet>
▪ <xsl:output>
▪ Практика
▪ <xsl:template>
▪ <xsl:copy-of>
▪ Практика
▪ Промежуточные итоги
5. <xsl:stylesheet>
▪ Таблицы стилей XSLT – это тоже XML-файлы
<?xml version="1.0" encoding="UTF-8"?>
▪ Корневой элемент
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
▪<xsl:функция атрибут=“значение”>
6. <xsl:output>
▪ Непосредственно вложен в корневой элемент
▪ Задает формат для выходного файла
▪ method – тип файла
▪ xml, html, text
▪ encoding – кодировка
▪ indent – отступы тегов для лучшей читабельности
▪ <xsl:output method=“xml” version=“1.0” encoding=“UTF-8”
indent=“yes”/>
7. Практика –
создание XSLT-файла
▪Создать новый файл в XMLSpy
▪выбрать XSLT 1.0
▪выбрать Generic XSL/XSLT Transformation
▪Сохранить файл под именем
xml2xml1.xslt
Готовый файл можно найти в папке Chapter2transformations
8. <xsl:template>
▪ Определяет какие данные войдут в
результирующий файл
▪ Чтобы взять все данные из исходного файла:
<xsl:template match=“/”>
</xsl:template>
9. <xsl:copy-of>
▪ Копирование данных и структуры их исходного
файла
▪ Xpath-функция node() копирует текущий
элемент
▪в нашем случае – корневой (предыдущий слайд)
<xsl:copy-of select=“node()”/>
10. Практика –
редактирование XSLT-файла
▪В файл xml2xml1.xslt добавить теги
xsl:template и xsl:copy-of
Готовый файл можно найти в папке Chapter2transformations
11. Практика –
преобразование из XML
▪ Открыть в XMLSpy файл reading_list.xml
▪ В меню XSL/XQuery выбрать Assign XSL
▪ Выбрать xml2xml1.xslt
▪ Отметить опцию “Make a path relative…”
▪ Запустить трансформацию (F10, меню, тулбар)
▪ Сохранить файл как Output1.xml
▪ Валидировать файл (F8, тулбар)
Готовый файл можно найти в папке Chapter2transformations
12. Практика –
преобразование из XSLT
▪ Перейти во вкладку с файлом xml2xml1.xslt
▪Project and Entry Helpers
▪ Кликнуть на иконке XML
▪Выбрать reading_list.xml
▪ Запустить трансформацию (F10, меню, тулбар)
Готовый файл можно найти в папке Chapter2transformations
13. Промежуточные итоги
▪ Мы изучили структуру
XSLT-файлов
▪ Научились создавать их
▪ <xsl:copy-of> позволяет просто
скопировать содержимое файла
▪ Преобразование можно запустить
из XML или XSLT
14. Копаем глубже
▪ Файл схемы
▪ <xsl-for-each>
▪ Cтруктура элементов
▪ <xsl:attribute>
▪ <xsl:value-of>
▪ Практика
15. Файл схемы
▪ XML-файлы структурируются в соответствии со
схемой
▪ Пример
▪ Библиотека: каждая книга имеет название (плюс год
и язык) и автора
▪Мы хотим взять данные из reading_list.xml и
преобразовать в форму, соответствующую схеме
библиотеки
17. <xsl:for-each>
▪ Отбирает набор элементов и позволяет
перебрать и обработать их один за другим
▪ Пример:
<xsl:for-each select=“/reading_list/book”>
<xsl:copy-of select=“author”>
</xsl:for-each>
Скорее всего, полученный файл не будет валидным XML-файлом.
Как думаете, почему?
18. Структура элементов
▪ Чтобы создать структуру в выходном файле,
нужно
▪добавить имена элементов – теги
▪добавить атрибуты – xsl:attribute
▪чуть позже
21. Замечания к примерам
▪ Структура будет правильной, но пока без
атрибутов
▪ select внутри xsl:for-each использует имя
элемента из ИСХОДНОГО файла
▪ ОСТАЛЬНЫЕ теги соответствуют
результирующей схеме
26. <xsl:value-of>
▪ Помещает в результирующий файл данные из
исходного
▪XPath-выражение в атрибуте select
▪названия – из ИСХОДНОГО файла
<xsl:value-of select=“/reading_list/book[2]/title”/>
28. Замечания к примеру
▪ В примере – простое копирование значений
▪ Встроенные функции позволяют менять
значения на лету
▪ Сравните
<xsl:value-of select=“author”/>
и
<xsl:value-of select=“concat (‘Mr. ‘,author)”/>
29. Практика –
изменение структуры данных
▪ Сохранить xml2xml1.xslt под именем xml2xml2.xslt
▪ Добавить все преобразования, рассмотренные в этом
уроке
▪ подсказка: <xsl:for-each select="//book">
▪ Запустить преобразование
▪ Сохранить результат как Output2.xml
▪ Валидировать файл
Готовый файл можно найти в папке Chapter2transformations
30. Преобразование результатов
преобразования
▪ Вместо одного сложного XSLT-файла можно
выполнить цепочку простых преобразований
▪ Например, преобразовать Output2.xml в
соответствии со схемой library_schema2.xsd
▪ почти то же самое
▪ имя автора разбито на два элемента – имя и
фамилия
▪ функции substring-before() и substring-after()
▪ для случая когда имя не содержит пробелов и отделено
пробелом от фамилии
31. Практика –
извлечение частичных данных
▪ Сохранить xml2xml2.xslt под именем xml2xml2А.xslt
▪ Поменять имя схемы на library_schema2.xsd
▪ Поменять теги внутри цикла для извлечения имени и фамилии
автора
▪ Установить Output2.xml в качестве исходного файла
▪ Запустить преобразование
▪ Сохранить результат под именем Output2A.xml
Готовый файл можно найти в папке Chapter2transformations
33. Другие функции
▪ <xsl:sort>
▪ сортировка результатов
▪ <xsl:if>
▪ проверка условий
▪ <xsl:choose>
▪ <xsl:apply-templates>
34. <xsl:sort>
▪ Сортировка набора элементов. часто – внутри
цикла <xsl:for-each>
▪select – по какому ключу сортировать
▪ может быть несколько
▪order – порядок сортировки
▪data-type – название говорит за себя
▪ number или text (по умолчанию)
36. ▪ Добавить в файл xml2xml2.xslt:
▪сортировку по автору в порядке убывания
▪сортировку по году издания
▪ Запустить трансформацию
▪ Сохранить файл под именем xml2xml3.xslt
▪ Сохранить результат под именем Output3.xml
Практика –
сортировка результатов
37. <xsl:if>
▪ Изменение результирующих значений в
зависимости от истинности условия
▪по сути, упрощенный условный оператор
▪ нет ветви else
▪test – условие (TRUE или FALSE)
39. ▪ Сохранить xml2xml3.xslt как xml2xml4.xslt
▪ Изменить атрибут language тега title
<xsl:attribute name=“language”>
<xsl:if test=“title/@lang=‘en’”>English</xsl:if>
<xsl:if test=“title/@lang=‘fr’”>French</xsl:if>
</xsl:attribute>
▪ Запустить трансформацію
▪ Сохранить результат как Output4.xml
Практика –
проверка условий
40. <xsl:choose>
▪ Проверка нескольких условий – аналог
оператора варіанта
▪xsl:when с атрибутом test
▪xsl:otherwise
▪ необязательно, но это хорошая практика
42. ▪ Удалить из файла xml2xml4.xslt элементы xsl:if
▪ Использовать xsl:choose для атрибута language
тега title
▪ Сохранить файл как xml2xml5.xslt
▪ Запустить трансформацію
▪ Сохранить результат как Output5.xml
Практика –
проверка нескольких условий
44. ▪ Подключить к XSLT файл winter_reading_list.xml
▪ Запустить преобразование
▪ Результат демонстрирует возможность
повторного использования XSLT с другими
файлами данных
▪схема данных должна быть одинаковой!
Практика –
повторное использование
45. ▪ Переименовать файл xml2xml5.xslt в
xml2xml6.xslt
▪ В теге library подключить другую схему –
library_schema2.xsd
▪ В тег writer включить теги из xml2xml2А.xslt
▪ Запустить трансформацию
▪ Сохранить результат под именем Output6.xml
Практика –
сводим все воедино
47. <xsl:apply-templates>
Применяет шаблон к текущему элементу или его дочернему элементу
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="cd">
<p>
<xsl:apply-templates select="title"/>
<xsl:apply-templates select="artist"/>
</p>
</xsl:template>
48. Визуальное XML to XML
преобразование с MapForce
▪ Создание XSLT в MapForce
▪ Более сложные преобразования. Фильтрация
49. Создание XSLT в MapForce
▪ Визуальный инструмент для работы с XSLT
▪ Будем использовать «старые» примеры
▪xml2xml6.xslt
▪library_schema2.xsd
▪reading_list.xml
50.
51. ▪ Запустить MapForce
▪ Открыть reading_list.xml
▪ Открыть library_schema2.xsd
▪ Сопоставить элементы данных и схемы
▪ Подсказка – кнопка Auto Connect Children
▪ Переключиться на вкладку Output для просмотра
результата
Практика –
открытие файлов и элементов
52. ▪ Выделить тег author
▪ Во вкладке Libraries выбрать функцию substring-before
▪ Соединить линиями author и Fname – чере функцию
▪ Правым кликом на функции добавить константу (пробел),
соединить с полем substr
▪ Повторить то же для функции substring-after
▪ Переключиться на вкладку Output для просмотра
результата
Практика –
извлечение частичных данных
53. ▪ Удалить связь между lang и
language
▪ Добавить карту значений (Insert
Value-Map)
▪ Соединить атрибуты через этот
новый блок
▪ Правым щелчком открыть свойства
блока и ввести пары значений (en-
English и т.д.)
▪ Просмотреть результат и
сохранить его как Output7.xml
▪ Правым щелчком на блоке
reading_list.xml вызвать свойства
и сменить файл данных на
winter_reading_list.xml
▪ Просмотреть результат и
сохранить его как Output8.xml
▪ Сохранить рабочий файл
▪ Сгенерировать код в XSLT 1.0
Практика –
преобразование атрибутов
54. ▪ Открыть в XMLSpy для ознакомления такие файлы:
▪ furniture.xml
▪ color_room.xml
▪ furniture2.xsd
▪ Подсказка – используйте режим таблицы (вкладка Grid)
Практика –
знакомимся с примером
MapForce умеет работать не только с XML, но и c CSV, БД, файлами Excel,
может сгенерить XSLT 1.0/2.0, XQuery, Java, C#, C++
55. ▪ Открыть MapForce
▪ Открыть файлы furniture.xml и furniture2.xsd
▪ Связать product и product, retail_price и price
▪ profit_margin=(retail_price-cost)/cost*100
▪ добавить функции substract, divide и multiply
▪ реализовать формулу и соединить с нужными элементами
▪ Просмотреть результат и сохранить как Output9.xml
▪ Объединить все элементы формулы в один блок – пользовательскую функцию
Profit_margin
▪ Cохранить все как xml2xml9.mfd
Практика –
связь XML и XSLT
56. ▪ Добавить файл
color_room.xml
▪ Связать color и color, room
и room
▪ Добавить фильтр
▪ Добавить функцію equal
▪ part_number и index
▪ result и bool
▪ product и node/row
▪ on-true и product (из схемы)
▪ Правым щелчком повысить
приоритет функции equal
▪ Сохранить результат как
Output10.xml
▪ Сохранить все как
xml2xml10.mfd
Практика –
добавляем еще данные
57. ▪ C помощью функций equal и logical-and отфильтровать продукты
▪ Product_line = Boston
▪ Просмотреть результат
▪ С помощью функций less, greater и logical-and отфильтровать продукты
▪ (retail_price > 300) AND (retail_price < 400)
▪ Просмотреть результат и сохранить в файл Output11.xml
▪ Cохранить все в xml2xml11.mfd
▪ Cгенерировать XSLT 1.0 в файле MappingMapTofurniture22.xslt
Практика –
фильтрация данных
58. Подводим итоги
▪ Мы узнали как выполнить
XML to XML-преобразование
▪ Познакомились с XMLSpy
▪ Изучили функции, позволяющие
манипулировать данными
▪ Научились задавать преобразования
визуально в MapForce
The correct way to declare an XSL style sheet according to the W3C XSLT Recommendation is:
<xsl:stylesheet version="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
or:
<xsl:transform version="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
В результирующем файле не будет данных из исходного, но это будет валидный XML
Результат содержит имена, фамилии, названия языков и сортировку
Результат содержит имена, фамилии, названия языков и сортировку