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

XSLT 2.0

XSLT 2.0 — это язык преобразования XML-документов, вторая версия спецификации XSLT (eXtensible Stylesheet Language Transformations), разработанная консорциумом W3C и рекомендованная к использованию с 23 января 2007 года. XSLT 2.0 является частью семейства языков XSL, наряду с XSL-FO и XPath 2.0, и представляет собой функциональный язык программирования, предназначенный для преобразования XML-документов в другие форматы, включая XML, HTML, XHTML, plain text и другие. Основное отличие от версии 1.0 заключается в расширенных возможностях работы с типами данных, поддержке регулярных выражений, улучшенной обработке последовательностей и более строгой типизации, что делает его более мощным и гибким инструментом для сложных задач обработки данных.

История

Разработка XSLT 2.0 началась в 1999 году, вскоре после выхода первой версии спецификации XSLT 1.0 (1999 год). Основной целью было устранение ограничений, выявленных при практическом использовании XSLT 1.0, таких как отсутствие поддержки типов данных, ограниченные возможности работы с числами и строками, а также необходимость в более эффективных механизмах группировки и сортировки данных. Работа велась в рамках рабочей группы XSL W3C, которая также занималась развитием XPath 2.0 и XSL-FO 2.0. В 2005 году была опубликована первая черновая версия (Candidate Recommendation), а 23 января 2007 года спецификация XSLT 2.0 получила статус официальной рекомендации W3C (W3C Recommendation). В 2010 году вышло второе издание (Second Edition), исправлявшее ряд неточностей и ошибок. В 2012 году была опубликована версия XSLT 3.0, которая расширила возможности 2.0, но XSLT 2.0 остаётся широко используемой версией, особенно в корпоративных системах и приложениях, где требуется высокая надёжность и обратная совместимость.

Ключевые особенности и отличия от XSLT 1.0

XSLT 2.0 вводит ряд существенных изменений по сравнению с предыдущей версией, которые делают его более мощным языком для обработки данных.

Типизация и XPath 2.0

XSLT 2.0 базируется на XPath 2.0, который, в отличие от XPath 1.0, поддерживает строгую типизацию данных. В XPath 2.0 введены следующие типы: xs:string, xs:integer, xs:decimal, xs:date, xs:time, xs:dateTime, xs:boolean, xs:QName и другие. Это позволяет выполнять арифметические операции, сравнения и преобразования типов непосредственно в выражениях XPath, без необходимости вручную конвертировать строки в числа. Например, в XSLT 1.0 для сложения чисел из атрибутов требовалось явное преобразование: number(@price) + number(@tax). В XSLT 2.0 это можно записать как @price + @tax, при условии, что атрибуты объявлены как числовые типы.

Последовательности (sequences)

В XSLT 1.0 результатом выражения XPath был набор узлов (node-set), который не мог содержать смешанные типы данных (например, узлы и строки). XSLT 2.0 вводит понятие последовательности (sequence), которая может содержать любые комбинации узлов, атомарных значений (строки, числа, даты) и пустых значений. Последовательности упорядочены, что позволяет выполнять операции, такие как конкатенация, фильтрация и извлечение элементов по индексу. Например, выражение (1, 2, 3, "a", "b") является допустимой последовательностью, содержащей как числа, так и строки.

Регулярные выражения

XSLT 2.0 включает встроенную поддержку регулярных выражений, что значительно упрощает обработку строк. Для этого используются функции matches(), replace(), tokenize() и analyze-string(). Функция matches() проверяет, соответствует ли строка заданному шаблону; replace() выполняет замену подстрок, соответствующих регулярному выражению; tokenize() разбивает строку на последовательность подстрок по разделителю, заданному регулярным выражением; analyze-string() позволяет разбирать строку на части, соответствующие и не соответствующие шаблону, и обрабатывать их отдельно.

Группировка

В XSLT 1.0 группировка данных (например, группировка элементов по значению атрибута) была возможна только с помощью сложных и неэффективных методов, таких как использование ключей (xsl:key) и рекурсии. XSLT 2.0 вводит инструкцию <xsl:for-each-group>, которая позволяет группировать элементы по заданному критерию. Критерием может быть значение атрибута, дочернего элемента, результат выражения XPath или даже функция. Инструкция поддерживает несколько режимов группировки: group-by (группировка по значению), group-adjacent (группировка смежных элементов с одинаковым значением), group-starting-with (начало новой группы при совпадении с шаблоном) и group-ending-with (конец группы при совпадении с шаблоном).

Функции и шаблоны

XSLT 2.0 расширяет возможности пользовательских функций. В XSLT 1.0 функции можно было создавать только с помощью именованных шаблонов (xsl:call-template). В XSLT 2.0 появилась возможность объявлять функции с помощью элемента <xsl:function>, которые могут возвращать значения любого типа, включая последовательности. Функции могут быть рекурсивными, что позволяет реализовывать сложные алгоритмы. Кроме того, в XSLT 2.0 введены анонимные функции (лямбда-выражения), которые можно передавать в качестве аргументов другим функциям.

Обработка ошибок

XSLT 2.0 вводит механизм обработки ошибок с помощью инструкции <xsl:try> и <xsl:catch>. Это позволяет перехватывать ошибки времени выполнения (например, деление на ноль, неверный тип данных) и выполнять альтернативные действия, не прерывая преобразование. В XSLT 1.0 ошибки обычно приводили к аварийному завершению обработки.

Множественные выходные документы

XSLT 2.0 поддерживает создание нескольких выходных документов в рамках одного преобразования с помощью инструкции <xsl:result-document>. Это позволяет, например, разбить один большой XML-файл на несколько HTML-страниц или создать отдельные файлы для каждой группы данных. В XSLT 1.0 для этого требовались расширения или внешние инструменты.

Структура и синтаксис

XSLT 2.0-преобразование представляет собой XML-документ, который начинается с корневого элемента <xsl:stylesheet> (или <xsl:transform>). В этом элементе указываются пространства имён, версия XSLT (version="2.0") и другие атрибуты. Основные элементы:

  • <xsl:template> — определяет шаблон, который применяется к узлам входного документа.
  • <xsl:apply-templates> — запускает обработку дочерних узлов.
  • <xsl:value-of> — вставляет значение выражения в выходной документ.
  • <xsl:for-each> — итерация по последовательности узлов или значений.
  • <xsl:for-each-group> — группировка элементов.
  • <xsl:if> — условное выполнение.
  • <xsl:choose> — множественное ветвление (аналог switch-case).
  • <xsl:function> — объявление пользовательской функции.
  • <xsl:result-document> — создание отдельного выходного документа.
  • <xsl:try> — блок обработки ошибок.

Пример простого XSLT 2.0-преобразования, которое выбирает все элементы <book> из входного документа и выводит их заголовки:

``xml <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">; <xsl:output method="xml" indent="yes"/> <xsl:template match="/"> <books> <xsl:for-each select="//book"> <title><xsl:value-of select="title"/></title> </xsl:for-each> </books> </xsl:template> </xsl:stylesheet> ``

Применение

XSLT 2.0 широко используется в различных областях, связанных с обработкой данных:

  • Преобразование XML-данных: конвертация XML-документов из одного формата в другой (например, из формата A в формат B).
  • Генерация веб-страниц: создание HTML-страниц из XML-данных, часто в сочетании с CSS и JavaScript.
  • Интеграция данных: объединение данных из нескольких XML-источников, их фильтрация, сортировка и группировка.
  • Обработка документов: преобразование документов в форматах ODF, DOCX, XHTML и других, основанных на XML.
  • Публикация контента: создание печатных версий документов, PDF-файлов через XSL-FO, а также электронных книг.
  • Тестирование и валидация: проверка XML-данных на соответствие определённым правилам и шаблонам.

Инструменты и реализации

Для выполнения XSLT 2.0-преобразований существует несколько реализаций:

  • Saxon (Saxonica) — наиболее популярная и мощная реализация XSLT 2.0/3.0, доступная в версиях HE (Home Edition, бесплатная), PE (Professional Edition) и EE (Enterprise Edition). Поддерживает все возможности XSLT 2.0, включая расширения.
  • AltovaXML — коммерческая реализация от компании Altova, встроенная в продукты XMLSpy и MapForce.
  • RaptorXML (Altova) — высокопроизводительный процессор XSLT 2.0, оптимизированный для обработки больших объёмов данных.
  • XMLPrime — коммерческая реализация для .NET.
  • XSLT2 (LibXSLT) — экспериментальная реализация с открытым исходным кодом, но с ограниченной поддержкой.

Критика и ограничения

Несмотря на значительные улучшения, XSLT 2.0 имеет ряд недостатков:

  • Сложность: язык остаётся сложным для изучения, особенно для разработчиков, не знакомых с функциональным программированием.
  • Производительность: некоторые реализации XSLT 2.0 могут быть медленнее, чем XSLT 1.0, особенно при обработке больших документов с использованием сложных выражений.
  • Ограниченная поддержка в браузерах: в отличие от XSLT 1.0, который встроен в большинство современных браузеров, XSLT 2.0 не поддерживается браузерами напрямую. Для выполнения преобразований на стороне клиента требуется серверный процессор.
  • Обратная совместимость: не все XSLT 1.0-преобразования могут быть автоматически перенесены на XSLT 2.0 из-за изменений в правилах типизации и обработки последовательностей.

Интересные факты

  • XSLT 2.0 является первым языком преобразований, который получил статус международного стандарта ISO/IEC 19757-2 (часть стандарта Document Schema Definition Languages).
  • В спецификации XSLT 2.0 впервые появилась поддержка функции current-dateTime(), которая возвращает текущую дату и время, что было невозможно в XSLT 1.0 без использования расширений.
  • XSLT 2.0 используется в некоторых системах управления контентом (CMS), таких как Drupal и Joomla, для обработки XML-данных.

Источники

  • W3C Recommendation: XSL Transformations (XSLT) Version 2.0 (23 January 2007)
  • W3C Recommendation: XML Path Language (XPath) 2.0 (23 January 2007)
  • Kay, Michael. XSLT 2.0 and XPath 2.0 Programmer's Reference. — Wrox, 2008. — ISBN 978-0-470-19274-0.
  • Tennison, Jeni. Beginning XSLT 2.0: From Novice to Professional. — Apress, 2005. — ISBN 978-1-59059-324-0.
  • Спецификация XSLT 2.0 на сайте W3C (https://www.w3.org/TR/xslt20/)

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

На главную BFOmetr →