Формат xsl что это такое

XSLT первый шаг

1. Введение

Важные ссылки по теме, первоисточники:

Переводы на русский язык:

Для лучшего понимания всего происходящего я рекомендую читать спецификации в следующем порядке:

Особо пытливые могут также уделить внимание расширенному языку стилей XSL.

2. Валидный XHTML

Что такое валидный XHTML? В первую очередь, это XML-документ, который должен соответствовать спецификации XML. Во-вторую, почти обычная HTML-страница, к которой все привыкли.

Почему нужен именно XHTML? Исключительно из соображений совместимости и кросс-браузерности. Страница в XHTML будет с большей вероятностью отображаться корректно в популярных браузерах, чем обычный HTML.

Для рядового клепателя страниц словосочетание XML-документ должно означать следующее:

Также сам XHTML обязывает выполнять следующие условия:

Пример простого документа XHTML1.0:

И так обо всём по порядку.

Объявление XML-документа, в котором указывается его версия и кодировка.

Для большей безопасности кодировку нужно всегда выставлять, иначе могут возникнуть проблемы с невалидными (по отношению к дефолтной кодировке) символами.

Объявление типа документа и его схемы.

Объявление пространства имён и используемого языка.

Очень важно указывать ссылку именно в таком регистре и никак иначе. Это связано с тем, что в XML имена элементов и содержимое их атрибутов регистрозависимы.

Три версии XHTML1.0 предназначены для лучшей обратной совместимости:

Помимо XHTML1.0 на данный момент доступен XHTML1.1:

XHTML1.1 по сути является тем же XHTML1.0 Strict и призван вытеснить другие версии XHTML1.0. Однако, по сравнению с XHTML1.0 Strict, у него есть ряд отличий:

Итак, если вам нужна наибольшая кросс-браузерность и совместимость с рекомендациями W3C, то XHTML1.1 самое оно!

Из этих соображений результатом моих преобразований будет именно XHTML1.1.

3. XSLT-преобразования

Что такое XSLT? Это язык преобразований XML-документа, который был разработан как часть расширенного языка стилей (XSL).

Зачем нужен XSLT? Он позволяет реализовать схему, при которой данные хранятся отдельно, а их представление отдельно. То есть, один XML-документ преобразуется с помощью другого XML-документа (XSL, в котором находятся XSLT-шаблоны) в конечный документ. Результатом может быть XML, HTML или текстовый документ любого формата.

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

Валидным XSL-документом является XML-документ, у которого задано пространство имён xsl и присутствует корневой элемент stylesheet. В самом простом случае стиль может выглядеть, например, так:

Этот стиль не содержит каких-либо явных определений шаблонов или других элементов XSL. Однако, его уже можно использовать. Чтобы посмотреть результат, достаточно сформировать произвольный XML-документ и подключить к нему этот стиль:

За подключение стиля отвечает строка:

Если файлы text.xml и test.xsl созданы и находятся в одной папке, то с помощью любого XSLT-парсера можно преобразовать исходный test.xml в результирующий документ. В качестве парсера могут выступать все популярные браузеры (IE5+, FF2+, Opera9+ и другие), а также модули в языках программирования, например, в PHP. Если вы используете браузер, то достаточно открыть test.xml, и он сразу отобразит примерно такой результат:

При этом кодировка результата будет UTF-8, несмотря на то, что исходный документ был сформирован в windows-1251. К сожалению, браузеры обычно не позволяют просмотреть код результирующего документа, но модуль XSLT в PHP5 даёт возможность передать результирующий код в переменную, которую можно сохранить в файл. Поэтому, используя PHP, я приведу исходный код результирующего документа:

Этот код не является валидным XML-документом и тем более XHTML1.1. Для того, чтобы сформировать нужный код, я усложню исходный XSL-стиль и добавлю туда необходимые шаблоны и преобразования. При этом исходный XML-документ останется без изменений.

В качестве примера я приведу XSL-стиль, который при помощи XSLT будет выводить список атрибутов исходного XML-документа с их значениями, при этом будет формироваться валидный XHTML1.1. Итак, стиль:

Чтобы понять, как он работает, я распишу каждое действие отдельно:

Документ сформирован в кодировке windows-1251, о чём сообщается в атрибуте encoding. Версию XML-документа желательно всегда указывать, это рекомендация W3C.

Затем идёт объявление корневого элемента, стиля:

Следующим шагом в корневом элементе stylesheet объявляется, каким образом нужно формировать результирующий документ:

Объявление основного шаблона:

Именно этот XSLT-шаблон соответствует корню исходного дерева и будет вызван первым для преобразования. Атрибут match принимает значения, которые должны соответствовать языку поиска элементов XPath.

Остальные шаблоны, если таковые имеются, должны подключаться из этого шаблона при помощи средств XSLT.

Атрибут xmlns= «http://www.w3.org/1999/xhtml» указывает на пространство имён xhtml, которое будет применено по умолчанию к этому элементу и всем дочерним элементам, у которых оно не задано явно.

Атрибут xml:lang= «ru» указывает на язык, в котором сформирована страница (будущая).

Эта часть стиля была нужна для формирования атрибутики валидного XHTML1.1 кода.

Теперь что касается XSLT-преобразований:

Вставка простого текста:

Текст «Мой список:» будет подставлен в тег

Организация цикла по выборке:

Атрибут select принимает выражение XPath, на основе которого делает выборку. Если выборка вернула список узлов, то начинает работать цикл по каждому элементу.

В данном случае выборка вернёт список атрибутов для этого (корневого) и всех дочерних элементов.

В данном случае проверяется на чётность позиция элемента в списке выборки. Если тест возвращает true (порядковый номер элемента чётный), то срабатывает содержимое этого элемента.

Управление атрибутами вышестоящего элемента:

Вывод значений элемента:

Этот код подставит в вышестоящий элемент строку, собранную из имени текущего элемента и его значения. Содержимое атрибута select соответствует XPath.

Вывод ссылки на разработчика парсера XSLT:

Этот небольшой код XSLT формирует ссылку на разработчика парсера XSLT. Во многих случаях она будет разная и содержать разные значения.

Результатом обработки этого стиля ( test.xsl ) станет такой код:

Этот код соответствует стандарту XHTML1.1 и был сформирован на основе исходного XML-документа. Для проверки можно воспользоваться валидатором от W3C, который расположен по адресу http://validator.w3.org/.

В браузере этот код выглядит примерно так:

IE 6FireFox 3Opera 9.02
Формат xsl что это такое. Смотреть фото Формат xsl что это такое. Смотреть картинку Формат xsl что это такое. Картинка про Формат xsl что это такое. Фото Формат xsl что это такоеФормат xsl что это такое. Смотреть фото Формат xsl что это такое. Смотреть картинку Формат xsl что это такое. Картинка про Формат xsl что это такое. Фото Формат xsl что это такоеФормат xsl что это такое. Смотреть фото Формат xsl что это такое. Смотреть картинку Формат xsl что это такое. Картинка про Формат xsl что это такое. Фото Формат xsl что это такое

4. Приложение

Ссылки на исходный код

Постоянный адрес статьи //anton-pribora.ru/articles/xml/xslt-first-step/. /Автор: Прибора Антон Николаевич, 2009 год/

Использование PHP5 для обработки XSLT

Для получения результирующего документа при помощи PHP5 я использовал такой код:

Дополнительную информацию по использованию XSLT в PHP5 можно найти по адресу http://ru2.php.net/manual/ru/book.xslt.php.

Мысли вслух

«Товарищи, мы стоим на краю огромной пропасти! И я предлагаю сделать большой, решительный шаг вперёд!»

© 2021 Антон Прибора. При копировании материалов с сайта, пожалуйста, указывайте ссылку на источник.

Источник

Формат xsl что это такое

Для того, чтобы работать с данным документом, вам необходимо располагать как минимум браузером Internet Explorer версии 5.0 и выше. При этом будут работать некоторые из приведенных в тексте примеров.

А теперь перейдем к основной части нашего документа.

Введение

Рассмотрим простой пример XML-файла (ex01.xml).

tutorial >
title > «Заметки об XSL» title >
author > Леонов Игорь Васильевич author >
tutorial >

Перепишем наш XML-файл в следующем виде (ex01-1.xml).

tutorial >
title > «Заметки об XSL» title >
author > Леонов Игорь Васильевич author >
tutorial >

И создадим XSL-файл ex01-1.xsl. Текст файла приведен ниже.

xsl:stylesheet version =» 1.0 » xmlns:xsl =» http://www.w3.org/TR/WD-xsl «>
xsl:template match =» / «>
p > strong > xsl:value-of select =» //title «/> strong > p >
p > xsl:value-of select =» //author «/> p >
xsl:template >
xsl:stylesheet >

«Заметки об XSL»

Леонов Игорь Васильевич

Перепишем XML-файл. Информационную часть изменять не будем, а шаблон укажем другой ex01-2.xml.

tutorial >
title > «Заметки об XSL» title >
author > Леонов Игорь Васильевич author >
tutorial >

Создадим XSL-файл ex01-2.xsl. Текст файла приведен ниже.

xsl:stylesheet version =» 1.0 » xmlns:xsl =» http://www.w3.org/TR/WD-xsl «>
xsl:template match =» / «>
p > strong > xsl:value-of select =» //author «/> strong > p >
p > xsl:value-of select =» //title «/> p >
xsl:template >
xsl:stylesheet >

Если мы теперь откроем файл ex01-2.xsl в браузере Internet Explorer, то результат будет другим.

Леонов Игорь Васильевич

«Заметки об XSL»

Первые шаги

Разберем теперь более подробно первый пример. Напомним его текст.

tutorial >
title > «Заметки об XSL» title >
author > Леонов Игорь Васильевич author >
tutorial >

Элементы могут иметь атрибуты, значения которых тоже могут обрабатываться в соответствии с шаблоном.

На верхнем уровне XML-файла всегда находится один элемент. То есть файл вида

tutorial >
title > «Заметки об XSL» title >
author > Леонов Игорь Васильевич author >
tutorial >
tutorial >
title > «Введение в CSP» title >
author > Леонов Игорь Васильевич author >
tutorial >

не будет обрабатываться браузером. Для преобразования в корректный XML-файл нужно добавить теги элемента верхнего уровня, например

knowledgeDatabase >
tutorial >
title > «Заметки об XSL» title >
author > Леонов Игорь Васильевич author >
tutorial >
tutorial >
title > «Введение в CSP» title >
author > Леонов Игорь Васильевич author >
tutorial >
/knowledgeDatabase >

Для того, чтобы браузер выполнил необходимое преобразование, нужно в XML-файле указать ссылку на XSL-файл

Рассмотрим теперь текст XSL-файла

xsl:stylesheet version =» 1.0 » xmlns:xsl =» http://www.w3.org/TR/WD-xsl «>
xsl:template match =» / «>
p > strong > xsl:value-of select =» //title» «/> strong > p >
p > xsl:value-of select =» //author «/> p >
xsl:template >
xsl:stylesheet >

В настоящем документе мы не будем подробно пояснять, что означает каждый элемент XSL-файла. Мы будем приводить различные примеры и показывать результат в каждом примере. Читатель сможет самостоятельно сопоставить различные элементы XSL-файла и инициируемые этими элементами преобразования исходного XML-файла с пользовательской информацией.

В первом примере мы посмотрели, как с помощью элемента xsl:value-of можно вывести в HTML-формате содержание элемента (текст, заключенный между тегами). Теперь мы посмотрим, как при помощи того же самого элемента можно вывести значение атрибута элемента.

Рассмотрим следующий XML-файл ex02-1.xml

В этом файле информация хранится не в содержании элементов, а в виде значений атрибутов. Файл ex02-1.xsl имеет вид

Результат имеет следующий вид:

Собака: Шарик. 18 кг, рыжий с черными подпалинами.

Результат будет тем же самым.

Собака: Шарик. 18 кг, рыжий с черными подпалинами.

Вывод результатов запроса

До тех пор, пока мы работаем с несколькими реквизитами одного и того же объекта, разницы между XML и HTML практически нет. Однако стоит нам перейти к информации, содержащей несколько строк, как выгоды XML становятся очевидны. Но прежде чем перейти к выгодам, научимся выводить на экран простую таблицу.

Предположим, что это результат запроса к базе данных и выведем на экран соответствующую таблицу.

Простая таблица

В этот файл добавлен шаблон преобразования ex03-1.xsl.

Рассмотрим этот шаблон подробнее. Вот его текст.

КличкаВесЦвет
КличкаВесЦвет
Шарик18 кгрыжий с черными подпалинами
Тузик10 кгбелый с черными пятнами
Бобик2 кгбело-серый
Трезор25 кгчерный

Сортировка

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

КличкаВесЦвет
Бобик2 кгбело-серый
Трезор25 кгчерный
Тузик10 кгбелый с черными пятнами
Шарик18 кгрыжий с черными подпалинами
КличкаВесЦвет
Тузик10 кгбелый с черными пятнами
Шарик18 кгрыжий с черными подпалинами
Бобик2 кгбело-серый
Трезор25 кгчерный
КличкаВесЦвет
Бобик2 кгбело-серый
Тузик10 кгбелый с черными пятнами
Шарик18 кгрыжий с черными подпалинами
Трезор25 кгчерный
КличкаВесЦвет
Трезор10 кгчерный
Тузик10 кгбелый с черными пятнами
Бобик18 кгбело-серый
Шарик18 кгрыжий с черными подпалинами

При использовании нового синтаксиса используется ссылка на другое пространство имен

Это очень важный момент, и его никогда нельзя упускать из виду.

Кроме того, мы убрали атрибут order-by в элементе xsl:for-each и добавили другой элемент

Таблица результатов приведена ниже.

КличкаВесЦвет
Бобик2 кгбело-серый
Трезор25 кгчерный
Тузик10 кгбелый с черными пятнами
Шарик18 кгрыжий с черными подпалинами

С использованием нового синтаксиса легко сменить сортировку по возрастанию на сортировку по убыванию (ex03-8.xml, ex03-8.xsl). Этот пример работает только под управлением XML-парсера версии 3.

Разница заключается в одной строке

Таблица результатов приведена ниже.

КличкаВесЦвет
Шарик18 кгрыжий с черными подпалинами
Тузик10 кгбелый с черными пятнами
Трезор25 кгчерный
Бобик2 кгбело-серый

Покажем теперь сортировку по нескольким полям (ex03-9.xml, ex03-9.xsl). Этот пример работает только под управлением XML-парсера версии 3.

КличкаВесЦвет
Волчонок3 кгтемно-серый
Трезор10 кгчерный
Тузик10 кгбелый с черными пятнами
Бобик18 кгбело-серый
Шарик18 кгрыжий с черными подпалинами
КличкаВесЦвет
Волчонок3 кгтемно-серый
Тузик10 кгбелый с черными пятнами
Трезор10 кгчерный
Шарик18 кгрыжий с черными подпалинами
Бобик18 кгбело-серый

Рассмотрим теперь способы фильтрации строк таблицы. Первый пример использует старый синтаксис. В нем условие фильтрации указывается непосредственно в атрибуте select (ex04-1.xml, ex04-1.xsl).

Ниже приведена строка, в которую мы внесли необходимые изменения.

xsl:for-each select=»tutorial/enimals/dogs/dog [dogWeight$gt$10] » order-by=»number(dogWeight); dogName;»>

И таблица результатов.

КличкаВесЦвет
Шарик18 кгрыжий с черными подпалинами
Трезор25 кгчерный

Вы видите, что в таблице остались только те собаки, чей вес превышает 10 кг, причем первым стоит Шарик, чей вес меньше.

Все дальнейшие примеры в этом параграфе работают только под управлением XML-парсера версии 3.

В этом примере таблица результатов полностью аналогична предыдущей.

КличкаВесЦвет
Шарик18 кгрыжий с черными подпалинами
Трезор25 кгчерный

Полностью преимущества нового синтаксиса проявляются при использовании функций.

КличкаВесЦвет
Шарик18 кгрыжий с черными подпалинами
Тузик10 кгбелый с черными пятнами

В этом элементе мы использовали переменные. Значения переменных были инициализированы ранее

Переменная varStartWith представляет собой подстроку, с которой должны начинаться требуемые нам клички. Она не меняется, поэтому инициализируется перед циклом. Переменная varDogName содержит кличку собаки, она меняется на каждом шаге цикла и, соответственно, инициализируется в теле цикла.

КличкаВесЦвет
Тузик10 кгбелый с черными пятнами
Трезор25 кгчерный

Этот пример полностью аналогичен предыдущему.

КличкаВесЦвет
Бобик2 кгбело-серый
Трезор25 кгчерный

Соответствующий фрагмент XSL-файла.

КличкаВесЦвет
Шарик18 кгрыжий с черными подпалинами

Можно добиться и эффекта оператора OR. Для этого нам нужно включить два цикла, в каждом из которых формируется своя выборка (ex04-7.xml, ex04-7.xsl).

Соответствующий фрагмент XSL-файла.

КличкаВесЦвет
Бобик2 кгбело-серый
Шарик18 кгрыжий с черными подпалинами
Трезор25 кгчерный

Фрагмент XSL-файла, который отвечает за требуемое чередование.

position() mod 2 = 0 «>
#CCCCCC

С элементом xsl:if и с функцией position() мы уже знакомы. Оператор mod дает нам остаток от деления на 2. А элемент xsl:attribute позволяет нам динамически подставлять в файл результатов различные атрибуты. Это очень мощный элемент, мы разберем еще одно применение этого элемента в следующем параграфе. А сейчас приведем для полноты картины таблицу результатов.

КличкаВесЦвет
Шарик18 кгрыжий с черными подпалинами
Тузик10 кгбелый с черными пятнами
Бобик2 кгбело-серый
Трезор25 кгчерный

Динамическое формирование атрибутов на примере параметров ссылки в теге

Мы не будем здесь строить специальный пример, ограничимся только соответствующим фрагментом XSL-файла.

И, наконец, мы ознакомились с комментариями в XSL-файлах. Это вторая строка приведенного фрагмента.

JavaScript и XML

Объединим теперь наши знания XML с возможностями, которые нам предоставляет JavaScript. Предположим, что нам нужно иметь возможность динамически изменять сортировку столбцов таблицы при щелчке на заголовке того или иного столбца. Понятно, что для этого нам нужно иметь один XML-файл, содержащий строки таблицы, несколько XSL-файлов, каждый из которых содержит требуемую сортировку и нечто, что объединит это все вместе и заставит работать.

Перейдем к реализации этой программы.

Приведем здесь текст элемента xsl:sort для каждого файла

Теперь нам осталось только объединить все это вместе. Ниже мы полностью приводим текст файла ex05-1.htm, сопроводив его необходимыми комментариями.

При загрузке страницы создадим все необходимые объекты и выведем первоначальный вариант на экран.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *