XML to XML -
преобразования
http://ProductivityBlog.com.ua
О чем пойдет речь
▪ Начинаем с простого
▪ Копаем глубже
▪ Другие функции
▪ Визуальное XML to XML преобразование
с MapForce
▪ Практика
Файлы и инструменты
Файлы практических работ в файле
XSLT_2.zip в папке Practice
XMLSpy, MapForce из пакета
ALTOVA MissionKit
Начинаем с простого
▪ <xsl:stylesheet>
▪ <xsl:output>
▪ Практика
▪ <xsl:template>
▪ <xsl:copy-of>
▪ Практика
▪ Промежуточные итоги
<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:функция атрибут=“значение”>
<xsl:output>
▪ Непосредственно вложен в корневой элемент
▪ Задает формат для выходного файла
▪ method – тип файла
▪ xml, html, text
▪ encoding – кодировка
▪ indent – отступы тегов для лучшей читабельности
▪ <xsl:output method=“xml” version=“1.0” encoding=“UTF-8”
indent=“yes”/>
Практика –
создание XSLT-файла
▪Создать новый файл в XMLSpy
▪выбрать XSLT 1.0
▪выбрать Generic XSL/XSLT Transformation
▪Сохранить файл под именем
xml2xml1.xslt
Готовый файл можно найти в папке Chapter2transformations
<xsl:template>
▪ Определяет какие данные войдут в
результирующий файл
▪ Чтобы взять все данные из исходного файла:
<xsl:template match=“/”>
</xsl:template>
<xsl:copy-of>
▪ Копирование данных и структуры их исходного
файла
▪ Xpath-функция node() копирует текущий
элемент
▪в нашем случае – корневой (предыдущий слайд)
<xsl:copy-of select=“node()”/>
Практика –
редактирование XSLT-файла
▪В файл xml2xml1.xslt добавить теги
xsl:template и xsl:copy-of
Готовый файл можно найти в папке Chapter2transformations
Практика –
преобразование из XML
▪ Открыть в XMLSpy файл reading_list.xml
▪ В меню XSL/XQuery выбрать Assign XSL
▪ Выбрать xml2xml1.xslt
▪ Отметить опцию “Make a path relative…”
▪ Запустить трансформацию (F10, меню, тулбар)
▪ Сохранить файл как Output1.xml
▪ Валидировать файл (F8, тулбар)
Готовый файл можно найти в папке Chapter2transformations
Практика –
преобразование из XSLT
▪ Перейти во вкладку с файлом xml2xml1.xslt
▪Project and Entry Helpers
▪ Кликнуть на иконке XML
▪Выбрать reading_list.xml
▪ Запустить трансформацию (F10, меню, тулбар)
Готовый файл можно найти в папке Chapter2transformations
Промежуточные итоги
▪ Мы изучили структуру
XSLT-файлов
▪ Научились создавать их
▪ <xsl:copy-of> позволяет просто
скопировать содержимое файла
▪ Преобразование можно запустить
из XML или XSLT
Копаем глубже
▪ Файл схемы
▪ <xsl-for-each>
▪ Cтруктура элементов
▪ <xsl:attribute>
▪ <xsl:value-of>
▪ Практика
Файл схемы
▪ XML-файлы структурируются в соответствии со
схемой
▪ Пример
▪ Библиотека: каждая книга имеет название (плюс год
и язык) и автора
▪Мы хотим взять данные из reading_list.xml и
преобразовать в форму, соответствующую схеме
библиотеки
Файл схемы
<xsl:for-each>
▪ Отбирает набор элементов и позволяет
перебрать и обработать их один за другим
▪ Пример:
<xsl:for-each select=“/reading_list/book”>
<xsl:copy-of select=“author”>
</xsl:for-each>
Скорее всего, полученный файл не будет валидным XML-файлом.
Как думаете, почему?
Структура элементов
▪ Чтобы создать структуру в выходном файле,
нужно
▪добавить имена элементов – теги
▪добавить атрибуты – xsl:attribute
▪чуть позже 
Пример для
reading_list_schema.xsd
<reading_list>
<xsl:for-each select=“/reading_list/book”>
<book>
<title/>
<author/>
<year/>
</book>
</xsl:for-each>
</reading_list>
Пример для library_schema.xsd
<library>
<xsl:for-each select=“/reading_list/book”>
<book>
<writer/>
<title/>
</book>
</xsl:for-each>
</library>
Замечания к примерам
▪ Структура будет правильной, но пока без
атрибутов
▪ select внутри xsl:for-each использует имя
элемента из ИСХОДНОГО файла
▪ ОСТАЛЬНЫЕ теги соответствуют
результирующей схеме
<xsl:attribute>
<title>
<xsl:attribute name=“first_edition”>
2011
</xsl:attribute>
<xsl:attribute name=“language”>
en
</xsl:attribute>
Name of book
</title>
В продолжение примера
<library
xsi:noNamespaceSchemaLocation=
"library_schema.xsd” xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance">
</library>
Вариант 2
<library>
<xsl:attribute
name=“xsi:noNamespaceSchemaLocation”
namespace=
"http://www.w3.org/2001/XMLSchema-instance">
library_schema.xsd”
</xsl:attribute>
</library>
<xsl:attribute> - продолжение
<library
xsi:noNamespaceSchemaLocation=
"library_schema.xsd”
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance">
<xsl:for-each select=“/reading_list/book”>
<book>
<writer>
Name of author
</writer>
<title first_edition=“2011” language=“en”>
Name of book
</title>
</book>
</xsl:for-each>
</library>
<xsl:value-of>
▪ Помещает в результирующий файл данные из
исходного
▪XPath-выражение в атрибуте select
▪названия – из ИСХОДНОГО файла
<xsl:value-of select=“/reading_list/book[2]/title”/>
<xsl:value-of> - пример
<book>
<writer>
<xsl:value-of select=“author”/>
</writer>
<title>
<xsl:attribute name=“first_edition”>
<xsl:value-of select=“year”/>
</xsl:attribute>
<xsl:attribute name=“language”>
<xsl:value-of select=“title/@lang”/>
</xsl:attribute>
<xsl:value-of select=“title”/>
</title>
</book>
Замечания к примеру
▪ В примере – простое копирование значений
▪ Встроенные функции позволяют менять
значения на лету
▪ Сравните
<xsl:value-of select=“author”/>
и
<xsl:value-of select=“concat (‘Mr. ‘,author)”/>
Практика –
изменение структуры данных
▪ Сохранить xml2xml1.xslt под именем xml2xml2.xslt
▪ Добавить все преобразования, рассмотренные в этом
уроке
▪ подсказка: <xsl:for-each select="//book">
▪ Запустить преобразование
▪ Сохранить результат как Output2.xml
▪ Валидировать файл
Готовый файл можно найти в папке Chapter2transformations
Преобразование результатов
преобразования
▪ Вместо одного сложного XSLT-файла можно
выполнить цепочку простых преобразований
▪ Например, преобразовать Output2.xml в
соответствии со схемой library_schema2.xsd
▪ почти то же самое
▪ имя автора разбито на два элемента – имя и
фамилия
▪ функции substring-before() и substring-after()
▪ для случая когда имя не содержит пробелов и отделено
пробелом от фамилии
Практика –
извлечение частичных данных
▪ Сохранить xml2xml2.xslt под именем xml2xml2А.xslt
▪ Поменять имя схемы на library_schema2.xsd
▪ Поменять теги внутри цикла для извлечения имени и фамилии
автора
▪ Установить Output2.xml в качестве исходного файла
▪ Запустить преобразование
▪ Сохранить результат под именем Output2A.xml
Готовый файл можно найти в папке Chapter2transformations
<xsl:for-each select="//book">
<book>
<writer>
<Fname>
<xsl:value-of select="substring-before(writer, ' ')" />
</Fname>
<Lname>
<xsl:value-of select="substring-after(writer, ' ')" />
</Lname>
</writer>
<xsl:copy-of select="title" />
</book>
Практика –
извлечение частичных данных
Другие функции
▪ <xsl:sort>
▪ сортировка результатов
▪ <xsl:if>
▪ проверка условий
▪ <xsl:choose>
▪ <xsl:apply-templates>
<xsl:sort>
▪ Сортировка набора элементов. часто – внутри
цикла <xsl:for-each>
▪select – по какому ключу сортировать
▪ может быть несколько
▪order – порядок сортировки
▪data-type – название говорит за себя
▪ number или text (по умолчанию)
<xsl:sort> - пример
<xsl:for-each select=“//book”>
<xsl:sort select=“author” order=“descending”/>
<xsl:sort select=“year” data-type=“number”/>
</xsl:for-each>
▪ Добавить в файл xml2xml2.xslt:
▪сортировку по автору в порядке убывания
▪сортировку по году издания
▪ Запустить трансформацию
▪ Сохранить файл под именем xml2xml3.xslt
▪ Сохранить результат под именем Output3.xml
Практика –
сортировка результатов
<xsl:if>
▪ Изменение результирующих значений в
зависимости от истинности условия
▪по сути, упрощенный условный оператор
▪ нет ветви else
▪test – условие (TRUE или FALSE)
<xsl:if> - пример
<writer>
<xsl:if test=“sex=‘M’”>Mr.</xsl:if>
<xsl:if test=“sex=‘F’”>Ms.</xsl:if>
<xsl:value-of select=“author”/>
</writer>
▪ Сохранить 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
Практика –
проверка условий
<xsl:choose>
▪ Проверка нескольких условий – аналог
оператора варіанта
▪xsl:when с атрибутом test
▪xsl:otherwise
▪ необязательно, но это хорошая практика
<xsl:choose> - пример
<xsl:choose>
<xsl:when test=“sex=‘M’”>Male</xsl:when>
<xsl:when test=“sex=‘F’”>Female</xsl:when>
<xsl:otherwise>Unknown</xsl:otherwise>
<xsl:choose>
▪ Удалить из файла xml2xml4.xslt элементы xsl:if
▪ Использовать xsl:choose для атрибута language
тега title
▪ Сохранить файл как xml2xml5.xslt
▪ Запустить трансформацію
▪ Сохранить результат как Output5.xml
Практика –
проверка нескольких условий
<xsl:attribute name="language">
<xsl:choose>
<xsl:when test="title/@lang='en'">English</xsl:when>
<xsl:when test="title/@lang='fr'">French</xsl:when>
<xsl:when test="title/@lang='es'">Spanish</xsl:when>
<xsl:otherwise>Unknown Language</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
Практика –
проверка нескольких условий
▪ Подключить к XSLT файл winter_reading_list.xml
▪ Запустить преобразование
▪ Результат демонстрирует возможность
повторного использования XSLT с другими
файлами данных
▪схема данных должна быть одинаковой!
Практика –
повторное использование
▪ Переименовать файл xml2xml5.xslt в
xml2xml6.xslt
▪ В теге library подключить другую схему –
library_schema2.xsd
▪ В тег writer включить теги из xml2xml2А.xslt
▪ Запустить трансформацию
▪ Сохранить результат под именем Output6.xml
Практика –
сводим все воедино
<writer>
<Fname>
<xsl:value-of select="substring-before(author, ' ')"/>
</Fname>
<Lname>
<xsl:value-of select="substring-after(author, ' ')"/>
</Lname>
</writer>
Практика –
сводим все воедино
<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>
Визуальное XML to XML
преобразование с MapForce
▪ Создание XSLT в MapForce
▪ Более сложные преобразования. Фильтрация
Создание XSLT в MapForce
▪ Визуальный инструмент для работы с XSLT
▪ Будем использовать «старые» примеры
▪xml2xml6.xslt
▪library_schema2.xsd
▪reading_list.xml
XSLT -2
▪ Запустить MapForce
▪ Открыть reading_list.xml
▪ Открыть library_schema2.xsd
▪ Сопоставить элементы данных и схемы
▪ Подсказка – кнопка Auto Connect Children
▪ Переключиться на вкладку Output для просмотра
результата
Практика –
открытие файлов и элементов
▪ Выделить тег author
▪ Во вкладке Libraries выбрать функцию substring-before
▪ Соединить линиями author и Fname – чере функцию
▪ Правым кликом на функции добавить константу (пробел),
соединить с полем substr
▪ Повторить то же для функции substring-after
▪ Переключиться на вкладку Output для просмотра
результата
Практика –
извлечение частичных данных
▪ Удалить связь между lang и
language
▪ Добавить карту значений (Insert
Value-Map)
▪ Соединить атрибуты через этот
новый блок
▪ Правым щелчком открыть свойства
блока и ввести пары значений (en-
English и т.д.)
▪ Просмотреть результат и
сохранить его как Output7.xml
▪ Правым щелчком на блоке
reading_list.xml вызвать свойства
и сменить файл данных на
winter_reading_list.xml
▪ Просмотреть результат и
сохранить его как Output8.xml
▪ Сохранить рабочий файл
▪ Сгенерировать код в XSLT 1.0
Практика –
преобразование атрибутов
▪ Открыть в XMLSpy для ознакомления такие файлы:
▪ furniture.xml
▪ color_room.xml
▪ furniture2.xsd
▪ Подсказка – используйте режим таблицы (вкладка Grid)
Практика –
знакомимся с примером
MapForce умеет работать не только с XML, но и c CSV, БД, файлами Excel,
может сгенерить XSLT 1.0/2.0, XQuery, Java, C#, C++
▪ Открыть 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
▪ Добавить файл
color_room.xml
▪ Связать color и color, room
и room
▪ Добавить фильтр
▪ Добавить функцію equal
▪ part_number и index
▪ result и bool
▪ product и node/row
▪ on-true и product (из схемы)
▪ Правым щелчком повысить
приоритет функции equal
▪ Сохранить результат как
Output10.xml
▪ Сохранить все как
xml2xml10.mfd
Практика –
добавляем еще данные
▪ 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
Практика –
фильтрация данных
Подводим итоги
▪ Мы узнали как выполнить
XML to XML-преобразование
▪ Познакомились с XMLSpy
▪ Изучили функции, позволяющие
манипулировать данными
▪ Научились задавать преобразования
визуально в MapForce
Вопросы
и ответы

More Related Content

PPTX
PDF
Сергей Пузанков — XSLT
PPTX
"AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior So...
PDF
Укрощение XML
PDF
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
PDF
View in wpf
PDF
Basis.js – «под капотом»
PDF
XSLT dla każdego
Сергей Пузанков — XSLT
"AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior So...
Укрощение XML
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
View in wpf
Basis.js – «под капотом»
XSLT dla każdego

More from Alexander Babich (20)

PDF
Актуальні курси з мого арсеналу (Бабич О.В.)
PDF
M365: Word, Excel, PowerPoint...
PDF
M365: Інші сервіси та застосунки
PDF
M365: OneDrive
PDF
M365: Завершення
PDF
M365: SharePoint
PDF
M365: рекомендації
PDF
M365: Огляд платформи Microsoft365
PDF
M365: Вступ
PDF
M365: Роздаткові матеріали
PPTX
Meet&Code - VR, метавсесвіт та криптовалюти (1).pptx
PDF
Ви обрали професію програміста
PDF
Змішане навчання в ППФК
PDF
Формування професійних інтересів студентів
PDF
День відкритих дверей' 2021
PDF
Спробуйте Python
PPTX
06. Обучение и сертификация по Azure
PPTX
05.Внедрение Azure
PPTX
04.Службы Azure - подробнее
PPTX
03.Сколько стоит облако
Актуальні курси з мого арсеналу (Бабич О.В.)
M365: Word, Excel, PowerPoint...
M365: Інші сервіси та застосунки
M365: OneDrive
M365: Завершення
M365: SharePoint
M365: рекомендації
M365: Огляд платформи Microsoft365
M365: Вступ
M365: Роздаткові матеріали
Meet&Code - VR, метавсесвіт та криптовалюти (1).pptx
Ви обрали професію програміста
Змішане навчання в ППФК
Формування професійних інтересів студентів
День відкритих дверей' 2021
Спробуйте Python
06. Обучение и сертификация по Azure
05.Внедрение Azure
04.Службы Azure - подробнее
03.Сколько стоит облако
Ad

XSLT -2

  • 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 ▪чуть позже 
  • 20. Пример для library_schema.xsd <library> <xsl:for-each select=“/reading_list/book”> <book> <writer/> <title/> </book> </xsl:for-each> </library>
  • 21. Замечания к примерам ▪ Структура будет правильной, но пока без атрибутов ▪ select внутри xsl:for-each использует имя элемента из ИСХОДНОГО файла ▪ ОСТАЛЬНЫЕ теги соответствуют результирующей схеме
  • 23. В продолжение примера <library xsi:noNamespaceSchemaLocation= "library_schema.xsd” xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"> </library>
  • 25. <xsl:attribute> - продолжение <library xsi:noNamespaceSchemaLocation= "library_schema.xsd” xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"> <xsl:for-each select=“/reading_list/book”> <book> <writer> Name of author </writer> <title first_edition=“2011” language=“en”> Name of book </title> </book> </xsl:for-each> </library>
  • 26. <xsl:value-of> ▪ Помещает в результирующий файл данные из исходного ▪XPath-выражение в атрибуте select ▪названия – из ИСХОДНОГО файла <xsl:value-of select=“/reading_list/book[2]/title”/>
  • 27. <xsl:value-of> - пример <book> <writer> <xsl:value-of select=“author”/> </writer> <title> <xsl:attribute name=“first_edition”> <xsl:value-of select=“year”/> </xsl:attribute> <xsl:attribute name=“language”> <xsl:value-of select=“title/@lang”/> </xsl:attribute> <xsl:value-of select=“title”/> </title> </book>
  • 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
  • 32. <xsl:for-each select="//book"> <book> <writer> <Fname> <xsl:value-of select="substring-before(writer, ' ')" /> </Fname> <Lname> <xsl:value-of select="substring-after(writer, ' ')" /> </Lname> </writer> <xsl:copy-of select="title" /> </book> Практика – извлечение частичных данных
  • 33. Другие функции ▪ <xsl:sort> ▪ сортировка результатов ▪ <xsl:if> ▪ проверка условий ▪ <xsl:choose> ▪ <xsl:apply-templates>
  • 34. <xsl:sort> ▪ Сортировка набора элементов. часто – внутри цикла <xsl:for-each> ▪select – по какому ключу сортировать ▪ может быть несколько ▪order – порядок сортировки ▪data-type – название говорит за себя ▪ number или text (по умолчанию)
  • 35. <xsl:sort> - пример <xsl:for-each select=“//book”> <xsl:sort select=“author” order=“descending”/> <xsl:sort select=“year” data-type=“number”/> </xsl:for-each>
  • 36. ▪ Добавить в файл xml2xml2.xslt: ▪сортировку по автору в порядке убывания ▪сортировку по году издания ▪ Запустить трансформацию ▪ Сохранить файл под именем xml2xml3.xslt ▪ Сохранить результат под именем Output3.xml Практика – сортировка результатов
  • 37. <xsl:if> ▪ Изменение результирующих значений в зависимости от истинности условия ▪по сути, упрощенный условный оператор ▪ нет ветви else ▪test – условие (TRUE или FALSE)
  • 38. <xsl:if> - пример <writer> <xsl:if test=“sex=‘M’”>Mr.</xsl:if> <xsl:if test=“sex=‘F’”>Ms.</xsl:if> <xsl:value-of select=“author”/> </writer>
  • 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 ▪ необязательно, но это хорошая практика
  • 41. <xsl:choose> - пример <xsl:choose> <xsl:when test=“sex=‘M’”>Male</xsl:when> <xsl:when test=“sex=‘F’”>Female</xsl:when> <xsl:otherwise>Unknown</xsl:otherwise> <xsl:choose>
  • 42. ▪ Удалить из файла xml2xml4.xslt элементы xsl:if ▪ Использовать xsl:choose для атрибута language тега title ▪ Сохранить файл как xml2xml5.xslt ▪ Запустить трансформацію ▪ Сохранить результат как Output5.xml Практика – проверка нескольких условий
  • 43. <xsl:attribute name="language"> <xsl:choose> <xsl:when test="title/@lang='en'">English</xsl:when> <xsl:when test="title/@lang='fr'">French</xsl:when> <xsl:when test="title/@lang='es'">Spanish</xsl:when> <xsl:otherwise>Unknown Language</xsl:otherwise> </xsl:choose> </xsl:attribute> Практика – проверка нескольких условий
  • 44. ▪ Подключить к XSLT файл winter_reading_list.xml ▪ Запустить преобразование ▪ Результат демонстрирует возможность повторного использования XSLT с другими файлами данных ▪схема данных должна быть одинаковой! Практика – повторное использование
  • 45. ▪ Переименовать файл xml2xml5.xslt в xml2xml6.xslt ▪ В теге library подключить другую схему – library_schema2.xsd ▪ В тег writer включить теги из xml2xml2А.xslt ▪ Запустить трансформацию ▪ Сохранить результат под именем Output6.xml Практика – сводим все воедино
  • 46. <writer> <Fname> <xsl:value-of select="substring-before(author, ' ')"/> </Fname> <Lname> <xsl:value-of select="substring-after(author, ' ')"/> </Lname> </writer> Практика – сводим все воедино
  • 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
  • 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

Editor's Notes

  • #6: 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">
  • #26: В результирующем файле не будет данных из исходного, но это будет валидный XML
  • #46: Результат содержит имена, фамилии, названия языков и сортировку
  • #47: Результат содержит имена, фамилии, названия языков и сортировку
  • #52: Пока в результирующем файле нет значения автора