Xslt преобразование. XSLT первый шаг. Допустимые документы XML
Возможно, также, преобразование не в расширение XML, а в любой другой структурированный формат, к примеру, в (стандарты HTML и XHTML сильно похожи, но только внешне) или же просто в произвольное текстовое представление.
Слово stylesheet в названии стандарта заставляет многих проводить аналогию с другим инструментом форматирования языков разметки - (Cascading Style Sheets ) – каскадными таблицами стилей. Оба эти стандарты имеют из общего, скорее всего только это самое слово в названии. С использованием XSL можно добиться эффекта применения CSS, но CSS ни разу не аналог XSL. Вот их принципиальные отличия:
- CSS оказывает влияние только на стиль представления данных , в то время, как XSL может легко изменить само их содержание.
- CSS применяется на стороне клиента интернет браузером, а , так и на стороне сервера.
- XSL является расширением XML, а CSS – отдельный формальный язык.
Стандарт XSL, в контексте преобразований XML в HTML, ближе по своему назначению к – скриптовому языку , применяемому на стороне сервера. И PHP и XSL могут существенно сократить объемы страниц интернет ресурсов, позволяя хранить только их содержимое (в базе данных или в XML файлах): без параметров стилей форматирования, самой HTML разметки, ссылок и метатегов. Более того, они могут использоваться совместно: на первом этапе средствами PHP формируется XML документ, соответствующий структуре запрашиваемой пользователем интернет страницы, а на втором этапе . На завершающем этапе все это дело форматирует и “раскрашивает” браузер уже на стороне клиента по правилам, указанным в CSS. Таким образом, экономится не только место на сервере, но и объем трафика, поскольку передаются данные в оптимальном для каждого конкретного случая XML формате.
Применением XSL весьма широкое. К примеру, XSL трансформация используется для в контексте работы в удобный для восприятия, печати и дальнейшей обработки вид. Далее вашему вниманию будет представлен обзор основных конструкций XSL, инструмент для отладки схем трансформации и пример преобразования XML отчета в HTML.
Основные элементы или синтаксис XSL
Для составления XSL преобразований необходимы знания следующих стандартов:
- Синтаксис или XML схема языка преобразований XSL.
- Язык запросов к элементам XML документа .
- Формат целевого документа (чаще всего HTML).
С HTML многие знакомы, про XPath можно узнать, перейдя по соответствующей ссылке, а список основных элементов XSL будет представлен ниже.
Заголовок схемы XSL трансформации
Определение заголовка схемы трансформации XSL является корневым элементом соответствующего XML документа. Файлам со схемами трансформации чаще всего дают расширения.xsl. Помимо определения пространства имен xsl, заголовок схемы трансформации может содержать параметры выведения (output) результата трансформации: xml, html или text. Если элемент output не указан явно, то его параметры определяются интерпретатором по ходу разбора схемы трансформации. Параметры вывода – различные атрибуты элемента output могут влиять на форматирование конечного результата: появление дополнительных пробелом, символов перевода каретки и т.п. Я обычно не уделяю особого внимания этому элементу, поскольку в случае преобразования в XML дополнительное форматирование или его отсутствие мне не мешает, а в случае HTML его обработка - проблемы интернет браузера. С обычным текстовым форматом вывода я не сталкивался.
Шаблон XSL
Шаблон XSL используется для применения группы преобразований к определенному фрагменту XML документа. Группа преобразований помещается внутри определения шаблона, а целевой фрагмент документа отбирается посредством XPath запроса, указанного в атрибуте match. Самый распространенный вариант запроса – имя дочерних по отношению к контексту разбора элементов. Контекстом разбора до начала преобразований является сам документ и постепенно, по мере применения XSL шаблонов, контекст перемещается по структуре документа в соответствии с результатами XPath запросов. Пример шаблона ниже.
Как видно из примера, шаблон применяется к XML элементам DataSet. В результате преобразования формируется HTML заголовок с текстом, соответствующим атрибуту Caption трансформируемого элемента, создается HTML таблица и по очереди применяются к дочерним по отношению к DataSet элементам два шаблона: с запросами элементов Columns и Records. Шаблоны для обработки элементов Columns и Records должны быть определены в схеме трансформации отдельно.
Условные операторы XSL и вызов параметризованного шаблона
При должном владении XSL с его помощью можно даже писать небольшие программы. Я имею в виду не программное управление обработкой данных, а решение задач, которые вообще не связанны с их обработкой. Такие случаи, безусловно, экзотика, но в процессе обработки сложно структурированных данных без проверки условий и циклов иногда не обойтись. Спецификация XSL поддерживает условные операторы, вызовы шаблонов с передачей параметров, изменение значения параметров в соответствии с математическими выражениями и т.д. Пример шаблона с оператором выбора и условным оператором приведен ниже:
-
В процессе обработки элементов Column анализируется значение атрибута Name и в зависимости от его значения вызывается определенный шаблон. Шаблоны могут иметь имя, и для их вызова используется конструкция call-template. Сами шаблоны Name и AnyColumn определены в документе отдельно. Шаблон AnyColumn к тому же является параметризованным – принимает параметры выравнивания текста в ячейке таблицы. Каждый элемент when соответствует варианту выбора, а элемент otherwise – всем остальным вариантам. Полное описание примера трансформации будет приведено в следующем разделе.
В конце тела шаблона присутствует условный оператор, с помощью которого определяется вид пустой ячейки: если значение атрибута Caption – пустая строка, то выводим символ “-”. Обратите внимание, что шаблон, помимо условия выбора элементов Column содержит атрибут mode со значением Row. Атрибут mode можно использовать для различных шаблонов с одинаковым значением атрибута match. В ходе трансформации именно значение атрибута mode в конструкциях применения шаблона apply-template будет определять выбор шаблона. Вот пример.
…
Таким образом, если у шаблона не указано имя, то возможность его применения обусловлена контекстом трансформации в соответствии со значениями атрибута match и, дополнительно, атрибута mode. Место применения шаблона по контексту определяется конструкцией apply-template. Если шаблон имеет имя, то его можно принудительно применить к текущему контексту с использованием конструкции call-template без изменения самого контекста.
Цикл и сортировка в XSL
Язык XSL не только позволяет гибко настраивать трансформацию данных, но и проводить их предварительную сортировку. Сортировка доступна только в контексте перебора элементов, организованного циклом for-each. Какие элементы перебирать определяет атрибут select элемента for-each, а по каким данным их сортировать определяет уже атрибут select элемента sort. Значениями обоих этих атрибутов должно быть XPath выражение.
Определение параметризованного шаблона XSL и присвоение значений атрибутов
Следующий пример показывает, как можно определить шаблон с параметрами и как эти параметры можно использовать в теле шаблона. Сам вызов представленного в качестве примера шаблона был рассмотрен в разделе об условных операторах чуть выше.
Обратите внимание, каким образом выходному элементу p присваивается значение атрибута align – c помощью отдельной конструкции attribute и конструкции value-of, которая обращается к значению входного параметра.
Отладчик XSL схем
Ну и в заключение представляю вашему вниманию отладчик XSL схем, который можно использовать в качестве обучающей программы по теме преобразования XML документов.
22. DOM XML. Преобразование XML документов
Модель XML DOM. SAX: достоинства и недостатки. Спецификация XSL. XSLT и XPath. XSL-FO. XQuery.
Для программной обработки XML документов используется модель XML DOM, которая определяет объекты и свойства всех XML элементов и методы (интерфейс) для доступа к ним. Иначе говоря, XML DOM описывает каким образом необходимо получать, изменять, добавлять и удалять XML элементы.
Согласно DOM:
все, что содержится внутри XML документа, является узлом;
весь документ представляется узлом документа ;
каждый XML элемент – узел элемента ;
текст внутри XML элементов - текстовый узел ;
каждый атрибут - узел атрибута ;
комментарии - узлы комментариев .
XML документ в соответствии с моделью XML DOM представляется как дерево из узлов, при этом:
Все узлы дерева находятся в определенных отношениях друг с другом.
Все узлы доступны через дерево. Их содержимое может быть изменено, удалено; новые элементы могут быть добавлены в дерево.
Дерево начинается с корневого узла и разветвляется вниз вплоть до текстовых узлов на самом низшем уровне дерева.
Все узлы находятся в иерархических отношениях между собой.
Эти отношения описываются с помощью понятий родитель, дочерний и потомок (все дочерние на одном уровне).
Альтернативным интерфейсом для обработки XML документов является SAX .
SAX (Simple API for XML ) - прикладной программный интерфейс для парсера с последовательным доступом к XML. Этот интерфейс предоставляет механизм чтения данных из XML документа.
SAX парсер является поточным и управляемым событиями . Задачей пользователя SAX API заключается в описании методов, вызываемых событиями, возникающими при анализе документа.
Такими событиями могут быть следующие:
текстовый узел;
узел элемента XML;
инструкция обработки XML;
комментарий XML.
События вызываются появлением как открывающего тэга, так и закрывающего тэга любого из этих элементов документа. Атрибут XML также рассматривается как событие.
Анализ документа является однонаправленным (т.е. без возвратов по дереву).
В отличие от DOM формальной спецификации для SAX не существует. В качестве нормативной рассматривается Java реализация SAX.
Следует отметить следующие достоинства и недостатки SAX.
Достоинства :
Затраты памяти существенно меньше (зависит от максимальной глубины дерева документа и количества атрибутов в узле элемента), чем в случае DOM (требуется хранить в памяти все дерево документа).
Скорость работы выше за счет сокращения затрат времени на выделение памяти для элементов дерева в случае DOM.
Потоковое чтение данных с диска в случае DOM невозможно. Если для размещения всего документа в памяти недостаточно места, то использование SAX является безальтернативным.
Недостатки :
Процедура проверки правильности предполагает доступ ко всему документу одновременно.
Это также требуется и в случае XSLT преобразования.
Если загрузить "чистый" XML документ в веб-браузер, то можно будет увидеть древовидную структуру этого документа:
В этом как раз и заключается главное отличие между XML и HTML, а именно разделение структуры документа и его представления в браузере. Конкретный вид XML документа описывается отдельно с помощью CSS или XSL.
CSS и XSL - принципиально разные технологии, имеющие лишь частичное пресечение областей применения. CSS-форматирование применяется к HTML-документу браузером на клиентской стороне , а XSL-преобразование выполняется, как правило, на сервере , после чего результат отправляется браузеру клиента. XSL базируется на XML, благодаря чему XSL более гибок и универсален . У разработчиков имеется возможность использовать средства контроля за корректностью составления стилевых списков (используя схемы XML).
С помощью XSL можно преобразовать XML-документ в формат HTML , WML , RTF , PDF , SQL , SWF , а так же в другой XML и XSL документ. XSL указывает как будет оформлен документ, где и каким образом должны размещаться данные.
Cпецификация XSL состоит из трех частей:
XSLT (XSL Transformations), язык для преобразования XML;
XPath - язык путей и выражений, используемый в XSLT для доступа к отдельным частям XML-документа;
XSL-FO (XSL Formatting Objects), язык для верстки XML.
Наиболее распространенным механизмом XSLT преобразований для систем работающих на платформе Microsoft Windows является MSXML ; для систем на основе GNU - xsltproc .
Для того, чтобы обработать XML документ c помощью XSL, необходимо в XML документе написать следующую инструкцию:
< !-- ... -- >
Возвращаясь к рассмотренному ранее примеру, добавив в XML файл ссылку на XSL файл, получим следующий код разметки:
После загрузки данного документа в веб-браузере его вид кардинально изменится:
Содержимое XSL файла mailbox.xsl приводится ниже:
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">Почтовый
ящик
From: | To: | | Subject: | CC | Notify | XSLT и XPathВ результате применения таблицы стилей XSLT, состоящей из набора шаблонов, к XML-документу (исходное дерево) образуется конечное дерево, которое может быть другой XML-структурой , HTML-документом или обычным текстом . Правила выбора данных из исходного дерева записываются на языке запросов XPath . XSLT применяется в основном в веб-программировании и для генерации отчетов. Благодаря XSLT реализуется отделение данных от их представления в рамках парадигмы MVC (Model-view-controller ). XPath (XML Path Language) - язык запросов к элементам XML-документа. XPath был разработан для организации доступа к частям документа XML в файлах трансформации XSLT и является стандартом консорциума W3C. В языке XPath используется компактный синтаксис, отличный от принятого в XML. Начиная с версии 2.0, XPath является составной частью языка XQuery . XPath призван помочь обходить всевозможные деревья, получать необходимые элементы из другой ветви относительно точки обхода, распознавать предков, потомков, атрибуты элементов. Это полноценный язык навигации по дереву. Для нахождения элемента(ов) в дереве документа используются пути адресации. Каждый шаг адресации состоит из трех частей: оси, например child:: ; условия проверки узлов, например имена элементов документа body, html; предиката, например attribute::class . Дополнением к ядру языка является набор функций, которые делятся на 5 групп: системные функции, функции с множествами , строковые функции, логические функции, числовые функции. XSL-FOXSL-FO (eXtensible Markup Language Formatting Objects) - рекомендованный W3C язык разметки предпечатных материалов. По-сути, XSL-FO - это унифицированный язык представления. Он не имеет семантической разметки (как в HTML) и сохраняет все данные документа внутри себя (в отличие от CSS, который модифицирует представление по умолчанию для внешнего HTML или XML-документа) . В результате применения XSLT-преобразования к исходному XML документу получается его описание на языке XSL-FO . FO-процессор конвертирует XSL-FO-документ в какой-либо читаемый и/или печатаемый формат. Наиболее часто используется преобразование в PDF либо PS; некоторые FO-процессоры могут давать на выходе RTF-файлы либо просто показывать документ в окне. XQueryXQuery - язык запросов, разработанный для обработки данных в формате XML. В настoящее время рабочими группами консорциума W3C ведутся работы по развитию этого стандарта данного языка, с добавлением выражений для свободного поиска по тексту и для внесения изменений в XML документы и базы данных, а также для процедурных операций. В рамках стандарта SQL:2006 разработаны механизмы для встраивания XQuery -запросов непосредственно в SQL-запросы. Аннотация: Рассматривается генерация кода преобразованиями XSLT. Изучается синтаксис XSLT, особенности применения преобразований, а также выполнение таких операций, как фильтрация, сортировка, выборка по условию в шаблонах. Выполнение трансформации программным путем в C#. Преимущества и недостатки технологии. Язык преобразований XSLTВо второй лекции мы уже рассматривали пример с использованием XSLT . В этой лекции мы рассмотрим эту технологию более подробно. XSL (eXtensible Stylesheet Language) переводится как Расширяемый Язык Стилей, и представляет собой язык для создания стилей XML документов. XSLT(XSL Transformations) - это язык преобразований XSL и является его частью. Стиль XSLT предназначен для преобразования иерархической структуры и формата документа XML . Результатами преобразования могут стать XML - файл , текстовый файл , программный код, HTML - файл , файл в формате PDF , и так далее. Этот язык предоставляет мощные возможности для манипуляции данными, информацией, текстом в иерархическом виде. А это как раз то, что нужно для генерации кода. Применение XSLT может существенно помочь в генерации кода. Кроме того, он предоставляет удобную альтернативу технологии шаблонов Т4. XSLT был разработан консорциумом W3C (World Wide Web Consortium) . Первая версия языка XSLT 1.0 стала рекомендацией 16 ноября 1999 года, а версия XSLT 2.0 стала рекомендацией 23 января 2007 года. Обе версии используются достаточно активно, и в этой лекции мы рассмотрим ту базовую функциональность, которая является для них общей. А это значит, что рассматривать будем в основном первую версию. Также упомянем некоторые команды из второй версии. Как работает XSLTМодель XSLT включает в себя такие части как:
Документы XML являются входными данными, которые нужно преобразовать в другие документы. Документ стиля XSLT является корректным (well formed) документом XML и содержит набор правил для выполнения преобразования. Иными словами, документ стиля является шаблоном. Процессор XSLT является приложением, которое принимает в качестве входных данных документы XML и стили XSLT . Он выполняет трансформацию, то есть применение набора правил в стилях XSLT к документам XML . Результатом этой работы являются выходные документы . Процессоры XSLT имеют множество реализаций и встроены во многие браузеры вроде Internet Explorer, Firefox, Mozilla, Opera и другие. В Internet Explorer используется инструмент MSXML, разработанный Microsoft. XSLT - процессор встроен в Internet Explorer, начиная с версии 4.5. Сгенерированный результат примеров данной лекции можно просматривать путем открытия XML -файлов в одном из браузеров. В конце лекции мы рассмотрим возможности запуска трансформации программным путем, используя соответствующие классы языка программирования. XPathДругой частью технологии XSL является язык XPath , предназначенный для доступа к узлам документа XML путем задания путей и выражений. Язык Xpath используется в файлах стилей для навигации внутри XML -документов, определения частей исходного XML -документа, которые совпадают с одним или более заранее заданными шаблонами. При нахождении совпадения процессор XSLT применит к нему соответствующие правила из файла стиля и преобразует его в часть результирующего документа. В файлах стилей XSLT выражения XPath используются весьма интенсивно. Применение XSLTЯзык XSLT состоит из множества инструкций, записанных в виде тегов. Имя каждой инструкции обычно начинается с символов xsl . Для выполнения трансформации документ стиля XSLT должен являться корректным документом XML . Для преобразования документа XML необходимо добавить в начало документа инструкцию, подобную следующей: XSL - файл стилей обычно содержит множество элементов, самым главным из которых является элемент xsl :stylesheet . Именно он указывает, что данный XML - файл является файлом стилей. Кроме него могут содержаться другие элементы, например xsl :template , xsl :value-of . Документ XML и файл стиля передается в XSLT - процессор , который обрабатывает данные файлы, выполняет преобразование и выводит результат трансформации. Ниже представлен документ XML , содержащий список языков программирования.
Необходимо вывести этот список в формате HTML . Для этой цели используем инструкцию xsl :for-each , которая будет применять часть шаблона к секциям документа, наименование которых указано в атрибуте select . В нашем случае укажем select="languages/language" . Файл стилей будет применяться следующий: Шаблон внутри xsl :for-each выводит содержимое каждого элемента language из languages . Для этой цели используется инструкция xsl :value-of и задаваемый атрибут select="." . Это означает, что процессор должен выбирать текст содержимого текущего элемента в документе. Кроме отражения содержимого можно задавать имена конкретных тегов, а также атрибутов для выборки значений, хранящихся в них. Примеры будут рассмотрены далее. Откроем XML файл через Internet Explorer или другой браузер . Будет выведен такой текст: Мои любимые языки:
Одним из самых главных элементов в стиле является xsl :template . Служит для определения повторно используемого шаблона и содержит правила, по которым будет преобразован документ XML . В атрибуте match содержится выражение для отбора узлов, к которым будет применен шаблон . Также может присутствовать атрибут name . В этом случае есть возможность вызывать шаблон по имени инструкцией xsl :apply-templates . Для повторения вывода шаблона для каждого элемента документа применяется инструкция xsl :for-each . Шаблон выполняется для каждого элемента, соответствующего условию, указанному в атрибуте select . Инструкция xsl :value-of служит для вычисления выражения, записанного в атрибуте select с последующим выводом результата в том месте, где расположен сам элемент. ФильтрацияМы рассмотрели случай, когда считываются значения каждого узла. Однако часто возникает необходимость выбирать только часть данных, то есть их надо фильтровать. Шаблоны XSLT поддерживают два способа фильтрации. Один из них - это применение атрибута select инструкции xsl :for-each , а второй - применение атрибута match элемента xsl :template . Применение match мы рассмотрим позже, а сейчас рассмотрим select . Изменим немного файл с данными: добавим атрибут high , обозначающий, является ли язык из нашего списка языком высокого уровня. Также расширим сам список языков.
Заметим, что значение false для атрибута high стоит только для значения "Assembler" . Изменим немного файл таблицы стилей: В секции [@ high ="true"] мы указываем, что выбирать следует только те узлы документа, у которых атрибут high имеет значение "true" . Знак @ является символом, указывающим на то, что после него стоит имя атрибута. Посмотрим на результат: Языки высокого уровня:
Как видим, значение "Assembler" не отображается в списке языков, то есть процессор XSLT отфильтровал данные согласно заданным условиям. СортировкаКроме фильтрации другой часто применяемой операцией при генерации кода является сортировка . Атрибут order-by инструкции xsl :for-each служит для сортировки результата, для обозначения порядка прохода узлов документа при выполнении трансформации. Сортируемые поля перечисляются через точку с запятой, а также имеют перед своим названием знаки "+" или "-" , означающие сортировку по возрастанию или убыванию. Рассмотрим немного измененный вариант документа - вместо атрибута high будем использовать элемент level , принимающий значения high или low . А имя языка запишем в элемент name .
В следующей таблице стилей для инструкции xsl :for-each применим атрибут order-by со значением +name , где знак плюса означает, что надо отсортировать по возрастанию. В атрибуте select мы фильтруем по значению элемента level . Также в атрибуте select инструкции XSLT-преобразования XSLT обладает большими возможностями для оперирования данными в документах XML. Например, при помощи таблицы стилей (stylesheet) XSLT я мог бы отформатировать данные из planets.xml в таблицу HTML. Таблицы стилей содержат правила, установленные для преобразования XML-документа, и большая часть книги посвящена созданию таблиц стилей и объяснению того, как они работают. Вот как выглядит таблица стилей XSLT planets.xsl (листинг 1.2), преобразующая данные из planets.xml в таблицу HTML (мы проанализируем ее в главе 2). Листинг 1.2. planets.xsl xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> The Planets Table The Planets Table Как видите, эта таблица стилей XSLT выглядит как XML-документ - и для этого есть основания, потому что она им и является. Все таблицы стилей XSLT являются также и документами XML, а раз так, то они должны быть хорошо форматированными документами XML С этими двумя документами - planets.xml (листингом 1.1) и связанной с ним таблицей стилей, planets.xsl (листинг 1.2) - мы будем работать на протяжении всей книги, рассматривая различные возможные преобразования XSLT. Как вы свяжете эту таблицу стилей с XML-документом planets.xml ? Как мы увидим в следующей главе, одним из способов это сделать является инструкция обработки XML , использующая два атрибута. Первый атрибут - type , который следует установить в «text/xml», чтобы указать, что используется таблица стилей XSLT. (Чтобы использовать таблицы стилей другого типа - каскадирующие таблицы стилей (CSS, cascading stylesheets), обычно использующиеся с HTML - следует задать «text/css».) Второй атрибут - href , которому следует присвоить значение URI (вспомните, что XML использует не адреса URL, а идентификаторы URI, Uniform Resource Identifier) таблицы стилей:
Теперь при помощи процессора
(processor) XSLT можно применить таблицу planets.xsl к planets.xml и создать новый документ, planets.html . Процессор XSLT создает новый файл planets.html , который вы можете увидеть на рис. 1.2. Рис. 1.2.
HTML-документ, созданный процессором XSLT Как можно видеть на рис. 1.2, процессор XSLT считывает данные из planets.xml , применяет к ним правила из planets.xsl и создает HTML-таблицу в planets.html. Это наш первый пример XSLT-преобразования. Что здесь на самом деле происходит? У нас были XML-документ, planets.xml , и таблица стилей XSLT, planets.xsl . Но каким образом они объединились для создания planets.html ? XSL = XSLT + XSL-FO
Сам XSLT в действительности является частью более крупной спецификации - расширенного языка таблиц стилей, Extensible Stylesheet Language, или XSL. XSL предназначен для задания точного, до миллиметра, формата документов. Форматирующая часть XSL, представляющая гораздо более Преобразования XSLT-XSL
XSLT позволяет работать непосредственно с содержимым документов XML. Например, у вас может быть огромный документ XML, содержащий всю бейсбольную статистику за последний сезон, однако вас может интересовать только статистика для питчеров. Чтобы извлечь Версии XSLT
Спецификации XSLT разрабатывались значительно активнее, чем спецификации для всего XSL. Рекомендация XSLT 1.0 была окончательно принята 16 ноября 1999 г., и эта версия является сегодня основной версией XSLT.Затем появился рабочий проект XSLT 1.1 и, хотя первоначально он Что нужно для XSLT-преобразования
Для осуществления XSLT-преобразования, такого как преобразование planets.xml в planets.html, необходим XSLT-процессор. Для преобразований документов XML можно использовать XSLT тремя способами: используя отдельные программы, называемые процессорами XSLT. XSLT-преобразования на web-серверах
Можно осуществлять XSLT-преобразования на web-сервере - так чтобы XML-документ был преобразован до того, как web-сервер отправит его браузеру. Здесь самое распространенное преобразование - это преобразование документа XML в HTML, но Ресурсы XSLT
В Интернете можно найти огромное количество нужных нам сведений. Имейте в виду, что все приведенные далее адреса URL легко могут измениться; списки будут актуальны столь долго, сколько этого будут хотеть люди, занимающиеся поддержкой перечисленных Утилиты XSLT
В Интернете существует также много утилит XSLT - в следующем списке перечислены наиболее известные: Microsoft XSL API Extension, http://msdn.microsoft.com/downloads/webtechnology/xml/xslisapi.asp. Упрощает задачу выполнения XSLT-преобразований на стороне сервера; Microsoft XSL-to-XSLT Converter, Инструкции XSLT
В теле шаблона может присутствовать ряд элементов XSLT, называемых инструкциями: Расширяемость XSLT
Несмотря на кажущуюся сложность XSLT, он во многих отношениях ограничен по сравнению с языками программирования, и в процессорах XSLT сразу же начали появляться расширения XSLT. Например, Saxon представил элемент Отличия XSLT 1.1 от XSLT 1.0
Отсутствие result tree fragment
Главное и наиболее существенное отличие XSLT 1.1 от XSLT 1.0 состоит в том, что тип данных, известный в XSLT 1.0 как result tree fragment (результирующий фрагмент дерева) в XSLT 1.1. отсутствует. Вместо него в версии 1.1 используется множество узлов, Отличия XSLT 2.0 от XSLT 1.1
Прежде чем приступить к описанию отличий второй версии XSLT от версии 1.1 (и, соответственно, 1.0), следует сделать одно существенное замечание. Лицензионные соглашения Консорциума W3 не позволяют раскрывать широкой общественности внутренние материалы Не прошло и трёх лет с тех пор, как у меня зародилась мысль о том, что пора изучать XSLT -))). Мысль зародилась, а везде ещё стоял PHP 4 и зверствовал Salbotron , который, мягко говоря, не отличался высокой производительностью. Да и редко какой браузер мог похвастаться поддержкой этого самого XSLT. По этим соображениям изучение столь перспективного направления я отложил до лучших времён. На данный момент можно смело заявить, что эти времена настали, поскольку вышел PHP 5 с поддержкой XSLT и сносной объектной моделью, а все топовые браузеры уже сами уверенно держат преобразования, только подавай XML. :) Переводы на русский язык: Для лучшего понимания всего происходящего я рекомендую читать спецификации в следующем порядке: Особо пытливые могут также уделить внимание расширенному языку стилей XSL
. Что такое валидный XHTML? В первую очередь, это XML-документ, который должен соответствовать спецификации XML. Во-вторую, почти обычная HTML-страница, к которой все привыкли. Почему нужен именно XHTML? Исключительно из соображений совместимости и кросс-браузерности. Страница в XHTML будет с большей вероятностью отображаться корректно в популярных браузерах, чем обычный HTML. Для рядового клепателя страниц словосочетание XML-документ должно означать следующее: Также сам XHTML обязывает выполнять следующие условия: Пример простого документа XHTML1.0: И так обо всём по порядку. Объявление XML-документа, в котором указывается его версия и кодировка. Объявление пространства имён и используемого языка. Три версии XHTML1.0 предназначены для лучшей обратной совместимости: XHTML1.1 по сути является тем же XHTML1.0 Strict и призван вытеснить другие версии XHTML1.0. Однако, по сравнению с XHTML1.0 Strict, у него есть ряд отличий : Итак, если вам нужна наибольшая кросс-браузерность и совместимость с рекомендациями W3C, то XHTML1.1 самое оно! Из этих соображений результатом моих преобразований будет именно XHTML1.1. Что такое XSLT? Это язык преобразований XML-документа, который был разработан как часть расширенного языка стилей (XSL). Зачем нужен XSLT? Он позволяет реализовать схему, при которой данные хранятся отдельно, а их представление отдельно. То есть, один XML-документ преобразуется с помощью другого XML-документа (XSL, в котором находятся XSLT-шаблоны) в конечный документ. Результатом может быть XML, HTML или текстовый документ любого формата. Для того, чтобы воспользоваться XSLT-преобразованиями, в первую очередь нужно сформировать правильный стиль XSL и подключить его к XML-файлу. Валидным XSL-документом является XML-документ, у которого задано пространство имён xsl и присутствует корневой элемент stylesheet. В самом простом случае стиль может выглядеть, например, так: Этот стиль не содержит каких-либо явных определений шаблонов или других элементов XSL. Однако, его уже можно использовать. Чтобы посмотреть результат, достаточно сформировать произвольный XML-документ и подключить к нему этот стиль: За подключение стиля отвечает строка: При этом кодировка результата будет UTF-8, несмотря на то, что исходный документ был сформирован в windows-1251. К сожалению, браузеры обычно не позволяют просмотреть код результирующего документа, но модуль XSLT в PHP5 даёт возможность передать результирующий код в переменную, которую можно сохранить в файл. Поэтому, используя PHP, я приведу исходный код результирующего документа: Этот код не является валидным XML-документом и тем более XHTML1.1. Для того, чтобы сформировать нужный код, я усложню исходный XSL-стиль и добавлю туда необходимые шаблоны и преобразования. При этом исходный XML-документ останется без изменений. В качестве примера я приведу XSL-стиль, который при помощи XSLT будет выводить список атрибутов исходного XML-документа с их значениями, при этом будет формироваться валидный XHTML1.1. Итак, стиль: Чтобы понять, как он работает, я распишу каждое действие отдельно: Объявление XML-документа: Обязательным атрибутом является определение пространства имён xsl через атрибут xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
. Следующим шагом в корневом элементе stylesheet объявляется, каким образом нужно формировать результирующий документ: Основные атрибуты: Если метод вывода объявлен html, то значения атрибутов encoding
и media-type
будут подставлены в заголовок страницы ( Объявление основного шаблона: Атрибут xmlns="http://www.w3.org/1999/xhtml"
указывает на пространство имён xhtml, которое будет применено по умолчанию к этому элементу и всем дочерним элементам, у которых оно не задано явно. Атрибут xml:lang="ru"
указывает на язык, в котором сформирована страница (будущая). Эта часть стиля была нужна для формирования атрибутики валидного XHTML1.1 кода. Теперь что касается XSLT-преобразований: Вставка простого текста: Атрибут select
принимает выражение XPath, на основе которого делает выборку. Если выборка вернула список узлов, то начинает работать цикл по каждому элементу. В данном случае выборка вернёт список атрибутов для этого (корневого) и всех дочерних элементов. Проверка условия: В данном случае, если позиция элемента чётная (определяется вышестоящим if), то в стиль элемента Вывод значений элемента: Этот код подставит в вышестоящий элемент строку, собранную из имени текущего элемента и его значения. Содержимое атрибута select
соответствует XPath. Результатом обработки этого стиля (test.xsl) станет такой код: Этот код соответствует стандарту XHTML1.1 и был сформирован на основе исходного XML-документа. Для проверки можно воспользоваться валидатором от W3C, который расположен по адресу http://validator.w3.org/ . В браузере этот код выглядит примерно так: Дополнительную информацию по использованию XSLT в PHP5 можно найти по адресу http://ru2.php.net/manual/ru/book.xslt.php . «Товарищи, мы стоим на краю огромной пропасти! И я предлагаю сделать большой, решительный шаг вперёд!» 2019 Антон Прибора. При копировании материалов с сайта, пожалуйста, указывайте ссылку на источник. |