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

XSLT 3.0

XSLT 3.0 — это версия языка преобразования XML-документов (XSL Transformations), принятая в качестве рекомендации Консорциума Всемирной паутины (W3C) 8 июня 2017 года. XSLT 3.0 является развитием XSLT 2.0 и XSLT 1.0 и предназначен для преобразования XML-документов в другие форматы (XML, HTML, обычный текст) или в другие XML-документы с иной структурой. Ключевыми нововведениями версии 3.0 стали поддержка потоковой обработки (streaming), встроенные возможности для работы с JSON, расширенная поддержка сопоставления с образцом и введение элементов высшего порядка.

История и развитие

Первая версия XSLT (1.0) была опубликована W3C в 1999 году и заложила основы для преобразования XML с помощью шаблонов. XSLT 2.0, вышедшая в 2007 году, добавила поддержку схем XML, регулярных выражений, группировки и множественных выходных документов. Разработка XSLT 3.0 началась в 2009 году и была обусловлена необходимостью обработки больших XML-документов без загрузки их целиком в память (потоковая обработка), а также интеграции с форматами данных, отличными от XML, в первую очередь с JSON. Рабочая группа W3C по XSLT выпустила несколько черновиков, и финальная версия рекомендации была утверждена 8 июня 2017 года.

Ключевые возможности и нововведения

Потоковая обработка (Streaming)

Главное нововведение XSLT 3.0 — поддержка потоковой обработки. В предыдущих версиях процессор XSLT должен был загрузить весь XML-документ в оперативную память в виде объектной модели документа (DOM), что накладывало ограничения на размер обрабатываемых файлов. XSLT 3.0 позволяет обрабатывать документы по мере их чтения из источника (потока), не сохраняя всё дерево целиком. Для этого введены:

  • Режим потоковой обработки (streamable mode) — задаётся атрибутом streamable="yes" у элементов <xsl:mode> или <xsl:template>.
  • Ограничения на шаблоны и выражения — для обеспечения потоковой обработки доступ к узлам возможен только в определённых паттернах (например, нельзя обращаться к родительским или соседним узлам, если они ещё не прочитаны).
  • Элемент <xsl:iterate> — позволяет итеративно обрабатывать последовательность узлов, что особенно полезно при потоковой обработке.

Работа с JSON

XSLT 3.0 вводит встроенные функции для преобразования данных в формат JSON и из него. Это позволяет использовать XSLT не только для XML-документов, но и для обработки JSON-данных. Основные функции:

  • json-to-xml() — преобразует JSON-строку в XML-документ определённой структуры (по схеме W3C).
  • xml-to-json() — выполняет обратное преобразование: из XML в JSON.
  • parse-json() — возвращает карту (map) или массив (array) из JSON-строки, что позволяет работать с JSON напрямую в выражениях XPath.

Расширенное сопоставление с образцом

В XSLT 3.0 расширены возможности шаблонов (match patterns). Теперь можно использовать:

  • Сопоставление с использованием логических операторов — например, match="a | b" (объединение) и match="a[. gt 5]" (фильтрация).
  • Сопоставление с использованием функций — например, match="*[matches(name(), '^foo')]".
  • Сопоставление с использованием переменных — в шаблонах можно ссылаться на глобальные переменные.
  • Сопоставление с использованием типов — например, match="schema-element(MyType)".

Элементы высшего порядка

XSLT 3.0 вводит элементы, которые позволяют манипулировать самим преобразованием во время его выполнения. К ним относятся:

  • <xsl:function> — позволяет определять пользовательские функции (было и в XSLT 2.0, но в 3.0 улучшено).
  • <xsl:accumulator> — позволяет накапливать данные при обходе дерева (полезно для потоковой обработки).
  • <xsl:context-item> — задаёт контекстный элемент для шаблона.
  • <xsl:override> — позволяет переопределять шаблоны из импортированных модулей.

Другие улучшения

  • Поддержка XPath 3.1 — XSLT 3.0 базируется на XPath 3.1, что добавляет новые типы данных (карты, массивы), функции (например, sort(), filter(), fold-left()) и операторы (? для доступа к картам).
  • Улучшенная работа с текстом — функции analyze-string() и replace() теперь поддерживают более сложные регулярные выражения.
  • Группировка и сортировка — улучшены элементы <xsl:for-each-group> и <xsl:sort>.
  • Множественные выходные документы — элемент <xsl:result-document> теперь может использоваться в потоковом режиме.

Архитектура и принципы работы

Процессор XSLT 3.0 получает на вход:

  1. Исходный XML-документ (или JSON, или другой источник данных).
  2. Таблицу стилей (stylesheet) — XML-документ, содержащий правила преобразования.
  3. Параметры (опционально) — внешние переменные, передаваемые в преобразование.

Процессор выполняет преобразование, обходя дерево исходного документа (или поток) и применяя шаблоны, определённые в таблице стилей. Результатом может быть XML, HTML, текст или JSON.

Применение

XSLT 3.0 используется в следующих областях:

  • Веб-разработка — преобразование XML-данных в HTML для отображения на веб-страницах.
  • Интеграция данных — преобразование данных из одного XML-формата в другой (например, из формата одной системы в формат другой).
  • Публикация — создание документов в различных форматах (PDF, EPUB, HTML) из единого XML-источника.
  • Обработка больших данных — потоковая обработка XML-файлов большого размера (например, логов, архивов).
  • Работа с JSON — преобразование JSON-данных в XML и обратно для использования в XML-ориентированных системах.

Примеры использования

Простой пример преобразования XML в HTML

``xml <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">; <xsl:output method="html" indent="yes"/> <xsl:template match="/"> <html> <body> <h1>Книги</h1> <xsl:for-each select="//book"> <p><xsl:value-of select="title"/></p> </xsl:for-each> </body> </html> </xsl:template> </xsl:stylesheet> ``

Пример потоковой обработки

``xml <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">; <xsl:mode streamable="yes"/> <xsl:template match="/"> <xsl:iterate select="//item"> <xsl:if test="price > 100"> <expensive-item> <xsl:value-of select="name"/> </expensive-item> </xsl:if> </xsl:iterate> </xsl:template> </xsl:stylesheet> ``

Пример работы с JSON

``xml <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">; <xsl:output method="xml" indent="yes"/> <xsl:template match="/"> <data> <xsl:sequence select="json-to-xml(unparsed-text('data.json'))"/> </data> </xsl:template> </xsl:stylesheet> ``

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

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

  • Сложность — язык остаётся сложным для изучения, особенно для новичков, из-за декларативной природы и большого количества новых конструкций.
  • Производительность — потоковая обработка может быть менее эффективной для некоторых типов запросов, чем загрузка всего документа в память.
  • Поддержка — не все процессоры XSLT полностью реализуют спецификацию XSLT 3.0, особенно в части потоковой обработки. Наиболее полная поддержка обеспечивается процессорами Saxon (версии 9.8 и выше) и AltovaXML.
  • Ограничения потоковой обработки — не все шаблоны могут быть потоковыми; разработчику приходится учитывать ограничения на доступ к узлам.

Реализации

Основные процессоры, поддерживающие XSLT 3.0:

  • Saxon (Saxonica) — коммерческая и открытая версии (HE, PE, EE). Saxon EE поддерживает потоковую обработку.
  • AltovaXML (Altova) — коммерческий процессор, входит в состав Altova XMLSpy.
  • RaptorXML (Progress) — коммерческий процессор, поддерживает потоковую обработку.
  • BaseX — открытая реализация, поддерживает XSLT 3.0 частично.
  • Libxslt (GNOME) — открытая реализация, поддерживает XSLT 1.0 и частично 2.0; поддержка 3.0 ограничена.

Связь с другими технологиями

XSLT 3.0 тесно связан с:

  • XPath 3.1язык запросов, используемый в выражениях XSLT.
  • XQuery 3.1 — язык запросов к XML-данным, разделяющий с XSLT многие функции и типы данных.
  • XML Schema — XSLT 3.0 может использовать информацию из схем для проверки типов и сопоставления с образцом.
  • XSL-FO (XSL Formatting Objects) — язык форматирования, часто используемый вместе с XSLT для создания PDF-документов.

Источники

  • W3C Recommendation: XSL Transformations (XSLT) Version 3.0 (8 June 2017)
  • Michael Kay. XSLT 3.0: A Comprehensive Guide. Saxonica, 2017.
  • Priscilla Walmsley. XSLT 3.0 and XPath 3.1: A Practical Guide. O'Reilly Media, 2020.
  • Документация Saxon — Saxonica: XSLT and XQuery Processor.

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

На главную BFOmetr →