XSLT - это XML-подобный язык, разработанный для описания про! разований документов XML в другие форматы. Из данного определена может показаться, что в технологии XSLT не много толку, но это дав ко не так. Чаще всего XSLT используется для преобразования докуаи тов XML в документы HTML, о чем мы и поговорим в этом введении. Г
Документы XSLT - это не что иное, как специализированные д<а| менты XML, потому они должны отвечать тем же самым правила что и любые другие документы XML: они должны содержать объяви ние XML, иметь единственный корневой элемент и должны быть яц рентными (well formed) с точки зрения языка XML.
В качестве примера мы опять возьмем файл books.xml. Информапв| содержащаяся в этом файле, может быть преобразована в HTML с i мощью XSLT без необходимости строить дерево DOM вручную. Щ начала нам нужен документ XSLT (мы возьмем books, xsl), который а] чинается с объявления XML и корневого элемента:
<?xml version="1.0" encodlng="UTF-8" ?>
ft*
Корневым элементом документа XSLT является . В этом элементе указывается версия XSL и объявляется пространство имен xsl. Без этой информации не обойтись, она определяет поведение процессора XSLT, а ее отсутствие расценивается как ошибка. Префикс tsl играет очень важную роль: в первую очередь он позволяет обра¬щаться к директивам XSL, а кроме того, отделяет логику преобразова¬ния от остальной части документа.
Элемент определяет формат выходного документа. Ре¬зультатом преобразования в данном примере является код HTML с опу¬щенным объявлением XML и с выравниванием элементов. В качестве выходного формата можно указать обычный текст, XML или HTML.
Преобразование, как и любое другое приложение, должно иметь точку кода. XSLT - это язык, основанный на шаблонах, и процессор обраба¬тывает документ XML на основании шаблонных правил. В данном примере первый шаблонный элемент соответствует корневому элемен¬ту исходного документа XML. Поиск соответствия выполняется с по¬мощью директивы . Директивы сообщают процессору, пакие действия должны быть выполнены. Директива •пределяет шаблон преобразования элемента, совпадающего с шабло¬ном поиска, который задается атрибутом match:
<?xml version="1.0" encoding="UTF-8" ?>
<Ш1е>Преобразования XSL
<7html>
:/xsl:template>
Атрибут match содержит выражение XPath, посредством которого от-нефаются требуемые узлы XML. В данном случае оно определяет кор-пнаой элемент документа books, xml (выражение XPath «/» всегда соот-петствует корневому элементу документа). Внутри директивы template вы определяете элементы HTML. Эти элементы являются частью результата преобразования. Внутри элемента есть еще одна; ректива XSL. Элемент сообщает процессору, «I он должен начать разбор всех шаблонов в контексте корневого эле» та документа, и приводит в действие следующий шаблон:
<?xml version="1.0" encoding="UTF-8" ?>
<Ш1е>Преобразования XSL
..
.
" src="{$varlsbn}.png" A|
Авторы: ISBN ft
' -
Этот новый шаблон соответствует всем элементам , таким < зом, когда процессор достигает каждого из элементов в ис ном документе XML, он применяет к нему этот шаблон. Первые) рективы в этом шаблоне - - определяют перемев
Переменные в языке XSL прежде всего используются в выраже XPath или в атрибутах (где невозможно использовать элементы l рушения синтаксических правил языка XML). Директива имеет два атрибута: name и select. Как следует из их назв атрибут name определяет имя переменной, а атрибут select задает i жение XPath и записывает найденное значение в переменную. К i циализированным переменным можно обращаться по именам,:
В первую переменную, $varlsbn, записывается значение атрибута isbn «вемента . Во вторую, $varTitle, записывается значение эле-. Эти две переменные будут участвовать в сборке эле-i HTML . Имена переменных, расположенных внутри атри¬бутов и подлежащих выводу, надо взять в фигурные скобки:
Вели этого не сделать, то в выходном документе будут присутствовать просто строки символов "$varTitle" и "$varlsbn".
Переменные в атрибутах XSL-директив, таких как select, являют собой исключение из этого правила. Использование фигурных скобок в этих ти¬пах атрибутов приведет к ошибке в работе XSLT-процессора, и попытка преобразования документа потерпит неудачу.
Остальные директивы в данном примере - это элементы . [ извлекают значение переменной или узла, руководствуясь крите-: выбора в атрибуте select. Атрибут select в этой директиве ведет се¬бе точно так же, как и атрибут select директивы : он при¬пишет выражение XPath и выбирает узел или значение переменной, совпадающие с условием отбора. Первый экземпляр ■наяном шаблоне ссылается на переменную SvarTitle (обратите вни-! на отсутствие фигурных скобок), используя, таким образом, ее гение. Далее используются значения элемента , перемен-аиас Svarlsbn и элемента .
Документ XML должен содержать указание на таблицу стилей, иначе НЕВОЗМОЖНО будет выполнить его преобразование в броузере. Добавьте в nooks. xml сразу же вслед за объявлением XML такую строку:
^ <?xal-stylesheet type=."text/xsl" href="books.xsl"?>
Она сообщит процессору XML о необходимости применить таблицу «хилей books, xsl к данному документу. Открыв теперь документ XML •броузере, вы увидите уже не структуру самого XML документа, а ре¬зультат его преобразования в HTML. Однако эта директива не будет работать непосредственно из кода JavaScript. Для этого придется при-. какие-либо специализированные объекты.