Открыть сервис

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 из-за его простоты, стабильности и огромного количества готовых решений и документации.

Источники

  1. W3C Recommendation. "XSL Transformations (XSLT) Version 1.0". 16 November 1999.
  2. W3C Recommendation. "XML Path Language (XPath) Version 1.0". 16 November 1999.
  3. Kay, Michael. "XSLT 2.0 and XPath 2.0 Programmer's Reference". Wiley Publishing, 2004.
  4. Tidwell, Doug. "XSLT". O'Reilly Media, 2001.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →