XSLT 1.0
XSLT 1.0 — это язык преобразования XML-документов, являющийся рекомендацией Консорциума Всемирной паутины (W3C) с 16 ноября 1999 года. Полное название — eXtensible Stylesheet Language Transformations. XSLT 1.0 предназначен для преобразования исходного XML-документа в другой XML-документ, HTML, XHTML, простой текст или любой другой текстовый формат. Это первый и наиболее широко распространённый стандарт в семействе XSL, наряду с XSL-FO (язык форматирования объектов) и XPath (язык путей к узлам XML-документа).
История и предпосылки создания
Разработка XSLT началась в 1997 году в рамках деятельности рабочей группы W3C по XSL. Изначально предполагалось, что XSL будет единым языком, включающим как преобразования, так и форматирование. Однако в процессе работы стало ясно, что удобнее разделить эти функции. Первая версия стандарта (XSLT 1.0) была опубликована 16 ноября 1999 года одновременно с XPath 1.0, который стал неотъемлемой частью XSLT для навигации по XML-деревьям.
Основной причиной создания XSLT стала необходимость отделения содержимого документа от его представления. XML хранит данные в структурированном виде, но не определяет, как эти данные должны отображаться. XSLT позволил разработчикам создавать правила преобразования, которые могли быть применены к любому XML-документу, соответствующему определённой схеме.
Архитектура и принцип работы
Модель обработки
XSLT 1.0 работает в рамках модели дерева узлов. Исходный XML-документ сначала разбирается (парсится) процессором XSLT в древовидную структуру, состоящую из узлов семи типов: корневой узел, узлы элементов, узлы атрибутов, текстовые узлы, узлы комментариев, узлы инструкций по обработке и узлы пространств имён. Затем процессор применяет к этому дереву шаблоны, заданные в XSLT-документе, и формирует результирующее дерево. Результат сериализуется в выходной формат.
Основные компоненты XSLT-документа
XSLT-документ сам по себе является корректным XML-документом с корневым элементом <xsl:stylesheet> (или <xsl:transform>). Он содержит следующие ключевые элементы:
<xsl:template>— базовый строительный блок. Определяет правило преобразования для определённого узла или набора узлов. Атрибутmatchзадаёт XPath-выражение, указывающее, к каким узлам применяется шаблон.<xsl:value-of>— извлекает текстовое содержимое указанного узла или значение XPath-выражения и вставляет его в выходной документ.<xsl:for-each>— организует цикл по набору узлов, отобранных XPath-выражением, применяя к каждому из них вложенные инструкции.<xsl:if>— условная конструкция без веткиelse. Выполняет вложенные инструкции, если XPath-выражение в атрибутеtestистинно.<xsl:choose>,<xsl:when>,<xsl:otherwise>— условная конструкция с несколькими ветвями, аналогичнаяswitch-caseв других языках программирования.<xsl:apply-templates>— ключевой механизм рекурсивной обработки. Указывает процессору найти и применить подходящий шаблон для дочерних узлов текущего узла. Именно этот элемент делает XSLT декларативным языком, где порядок обработки определяется структурой документа, а не последовательностью инструкций.<xsl:sort>— сортировка набора узлов перед обработкой. Используется внутри<xsl:apply-templates>или<xsl:for-each>.<xsl:output>— задаёт параметры выходного документа: метод сериализации (xml,html,text), кодировку, наличие XML-декларации и т.д.
XPath 1.0 как язык адресации
XSLT 1.0 неразрывно связан с XPath 1.0. XPath используется в атрибутах match, select, test и других для навигации по дереву документа. Основные конструкции XPath включают:
- Оси навигации:
child,parent,ancestor,descendant,following-sibling,preceding-sibling,attribute,selfи другие. - Предикаты: фильтры в квадратных скобках, например
book[price>30]илиauthor[1]. - Функции: строковые (
concat,substring,contains), числовые (sum,count,round), логические (not,true,false), функции работы с узлами (name,position,last).
Ограничения XSLT 1.0
Несмотря на широкое распространение, XSLT 1.0 имеет ряд существенных ограничений, которые были устранены в последующих версиях (XSLT 2.0 и 3.0):
- Ограниченная работа со строками: отсутствие регулярных выражений, функций для разбиения строк (
tokenize) или замены подстрок (replace). Разработчикам приходилось использовать рекурсивные шаблоны для эмуляции этих операций. - Слабая типизация: XPath 1.0 оперирует только четырьмя типами данных: строки, числа, логические значения и наборы узлов. Нет поддержки дат, времени, последовательностей (sequences) или атомарных значений, не являющихся узлами.
- Отсутствие группировки: для группировки данных (например, сгруппировать книги по авторам) приходилось использовать сложный и неэффективный приём — метод Мюнха (Muenchian grouping), основанный на использовании ключей (
<xsl:key>) и функцииgenerate-id(). - Ограниченная обработка XML-схем: XSLT 1.0 не понимает типы данных, определённые в XML Schema (XSD), и работает исключительно с синтаксической структурой документа.
- Однофазная обработка: преобразование выполняется за один проход. Нельзя легко создать многофазные преобразования в рамках одного стиля без использования промежуточных файлов или расширений процессора.
Применение
XSLT 1.0 получил широкое распространение в различных областях:
- Веб-публикация: преобразование XML-данных в HTML для отображения в браузере. До появления AJAX и одностраничных приложений XSLT был одним из основных инструментов серверной генерации веб-страниц.
- Интеграция данных: преобразование XML-документов из одного формата в другой (например, из формата одной CRM-системы в формат другой).
- Генерация отчётов: создание текстовых или HTML-отчётов на основе XML-данных.
- Документооборот: преобразование XML-версий документов в форматы для печати или архивирования.
- Серверная обработка: многие веб-серверы (например, Apache Cocoon) и серверы приложений (Java EE) поддерживали XSLT для предварительной обработки XML-контента.
Процессоры XSLT 1.0
Существует множество реализаций процессоров XSLT 1.0. Наиболее известные из них:
- Saxon 6.x (Майкл Кей): одна из самых полных и быстрых реализаций для Java. Более поздние версии Saxon (9.x) реализуют XSLT 2.0 и 3.0.
- Xalan (Apache Software Foundation): реализация для Java и C++.
- MSXML (Microsoft): встроенный процессор в Internet Explorer и Windows. Использовался в классическом ASP.
- libxslt (GNOME): реализация на языке C для Unix-подобных систем, используемая в Python (модуль
lxml), PHP (расширениеxslt) и Perl. - xsltproc: консольная утилита из состава libxslt.
Влияние и наследие
XSLT 1.0 стал важным этапом в развитии XML-технологий. Он продемонстрировал эффективность декларативного подхода к преобразованию данных. Несмотря на появление более мощных версий, XSLT 1.0 остаётся широко используемым стандартом, особенно в унаследованных (legacy) системах и в средах, где нет возможности установить современные процессоры. Многие разработчики продолжают использовать XSLT 1.0 из-за его простоты, стабильности и огромного количества готовых решений и документации.
Источники
- W3C Recommendation. "XSL Transformations (XSLT) Version 1.0". 16 November 1999.
- W3C Recommendation. "XML Path Language (XPath) Version 1.0". 16 November 1999.
- Kay, Michael. "XSLT 2.0 and XPath 2.0 Programmer's Reference". Wiley Publishing, 2004.
- Tidwell, Doug. "XSLT". O'Reilly Media, 2001.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →