XSLT

Язык для преобразования XML-документов
XSLT
ПарадигмаДекларативный
РазработчикКонсорциум Всемирной паутины (W3C)
Впервые появился1998
Стабильный релиз
3.0 / 8 июня 2017 г. ; 7 лет назад ( 2017-06-08 )
Расширения имени файла.xslt
Веб-сайтwww.w3.org/TR/xslt-30/
Основные внедрения
libxslt , саксонский , ксаланский
Под влиянием
DSSSL
XSLT
Расширение имени файла
.xslt
Тип интернет-СМИ
приложение/xslt+xml
Единый идентификатор типа (UTI)org.w3.xsl

XSLT ( Extensible Stylesheet Language Transformations ) — язык, изначально разработанный для преобразования XML- документов в другие XML-документы [1] или другие форматы, такие как HTML для веб-страниц , простой текст или объекты форматирования XSL . Эти форматы впоследствии можно преобразовать в такие форматы, как PDF , PostScript и PNG . [2] Поддержка преобразования JSON и простого текста была добавлена ​​в более поздних обновлениях спецификации XSLT 1.0.

По состоянию на август 2022 года [обновлять]последней стабильной версией языка является XSLT 3.0, получившая статус рекомендации в июне 2017 года.

Реализации XSLT 3.0 поддерживают Java, .NET, C/C++, Python, PHP и NodeJS. Библиотека XSLT 3.0 JavaScript также может быть размещена в веб-браузере. Современные веб-браузеры также включают встроенную поддержку XSLT 1.0. [3]

Преобразование документа XSLT определяет, как преобразовать XML-документ в новый документ (обычно XML, но поддерживаются и другие форматы, такие как простой текст). [4] Обычно входные документы представляют собой XML-файлы, но можно использовать все, из чего процессор может построить XQuery и модель данных XPath , например, таблицы реляционных баз данных или географические информационные системы . [1]

Хотя XSLT изначально был разработан как специализированный язык для преобразования XML, этот язык является полным по Тьюрингу , что делает его теоретически способным выполнять произвольные вычисления. [5]

История

XSLT находится под влиянием функциональных языков [6] и текстовых языков сопоставления шаблонов, таких как SNOBOL и AWK . Его самым непосредственным предшественником является DSSSL , который сделал для SGML то, что XSLT делает для XML. [7]

  • XSLT 1.0: XSLT был частью усилий по разработке eXtensible Stylesheet Language (XSL) Консорциума Всемирной паутины (W3C) в 1998–1999 годах, проекта, который также создал XSL-FO и XPath . Некоторые члены комитета по стандартам, который разработал XSLT, включая Джеймса Кларка , редактора, ранее работали над DSSSL. XSLT 1.0 был опубликован в качестве рекомендации W3C в ноябре 1999 года. [8] Несмотря на свой возраст, XSLT 1.0 [9] по-прежнему широко используется (по состоянию на 2018 год ), поскольку более поздние версии изначально не поддерживаются в веб-браузерах или для таких сред, как LAMP .[обновлять]
  • XSLT 2.0: после неудачной попытки создать версию 1.1 в 2001 году [10] рабочая группа XSL объединила усилия с рабочей группой XQuery для создания XPath 2.0 [ 11] с более богатой моделью данных и системой типов на основе XML Schema . На этом основан XSLT 2.0 [12], разработанный под редакцией Майкла Кея и получивший статус рекомендации в январе 2007 года. [13] Наиболее важные нововведения в XSLT 2.0 включают в себя:
    • Манипулирование строками с использованием регулярных выражений
    • Функции и операторы для управления датами, временем и длительностью
    • Несколько выходных документов
    • Группировка (создание иерархической структуры из плоских входных последовательностей)
    • Более богатая система типов и более строгая проверка типов
  • XSLT 3.0: стал рекомендацией W3C 8 июня 2017 года. Основные новые функции: [14]
    • Потоковые преобразования : в предыдущих версиях весь входной документ должен был быть считан в память, прежде чем он мог быть обработан, [15] а вывод не мог быть записан до завершения обработки. XSLT 3.0 допускает потоковую передачу XML , которая полезна для обработки документов, слишком больших для размещения в памяти, или когда преобразования связаны в XML Pipelines .
    • Пакеты для улучшения модульности больших таблиц стилей.
    • Улучшена обработка динамических ошибок, например, с помощью инструкции xsl:try.
    • Поддержка карт и массивов, позволяющая XSLT обрабатывать JSON и XML.
    • Функции теперь могут быть аргументами других функций (более высокого порядка).

Модель проектирования и обработки

Схема основных элементов и последовательности процессов преобразований расширяемого языка таблиц стилей.

Процессор XSLT берет один или несколько исходных документов XML, а также одну или несколько таблиц стилей XSLT и обрабатывает их для создания одного или нескольких выходных документов. [16] [17] В отличие от широко распространенных императивных языков программирования, таких как C , XSLT является декларативным . [18] Базовой парадигмой обработки является сопоставление с образцом. [19] Вместо того, чтобы перечислять императивную последовательность действий для выполнения в среде с сохранением состояния, правила шаблонов определяют только то, как обрабатывать узел, соответствующий определенному шаблону, подобному XPath, если процессор должен столкнуться с ним, а содержимое шаблонов фактически включает функциональные выражения , которые напрямую представляют их оценочную форму: результирующее дерево, которое является основой вывода процессора.

Типичный процессор ведет себя следующим образом. Сначала, предполагая, что таблица стилей уже прочитана и подготовлена, процессор строит исходное дерево из входного XML-документа. Затем он обрабатывает корневой узел исходного дерева, находит наиболее подходящий шаблон для этого узла в таблице стилей и оценивает содержимое шаблона. Инструкции в каждом шаблоне обычно предписывают процессору либо создать узлы в результирующем дереве, либо обработать больше узлов в исходном дереве таким же образом, как и корневой узел. Наконец, результирующее дерево сериализуется как XML или HTML-текст.

XPath

XSLT использует XPath для идентификации подмножеств исходного дерева документа и выполнения вычислений. XPath также предоставляет ряд функций , которые сам XSLT дополнительно расширяет.

XSLT 1.0 использует XPath 1.0, тогда как XSLT 2.0 использует XPath 2.0. XSLT 3.0 будет работать как с XPath 3.0, так и с 3.1. В случае 1.0 и 2.0 спецификации XSLT и XPath были опубликованы в один и тот же день. Однако с 3.0 они больше не были синхронизированы; XPath 3.0 стал Рекомендацией в апреле 2014 года, за ним последовал XPath 3.1 в феврале 2017 года; XSLT 3.0 последовал в июне 2017 года.

Сравнение XQuery

Функциональные возможности XSLT пересекаются с функциональными возможностями XQuery , который изначально задумывался как язык запросов для больших коллекций XML-документов.

Стандарты XSLT 2.0 и XQuery 1.0 были разработаны отдельными рабочими группами в W3C , которые работали вместе, чтобы обеспечить общий подход там, где это уместно. Они используют одну и ту же модель данных, систему типов и библиотеку функций, и оба включают XPath 2.0 в качестве подъязыка.

Однако эти два языка укоренены в разных традициях и служат нуждам разных сообществ. XSLT изначально задумывался как язык таблиц стилей, чьей главной целью было отображение XML для человека на экране, в Интернете (как язык веб-шаблонов ) или на бумаге. XQuery изначально задумывался как язык запросов к базе данных в традициях SQL .

Поскольку эти два языка возникли в разных сообществах, XSLT лучше справляется с обработкой повествовательных документов с более гибкой структурой, в то время как XQuery лучше справляется с обработкой данных, например, при выполнении реляционных объединений. [20]

Типы носителей

Элемент <output>может опционально принимать атрибут media-type, который позволяет задать тип носителя (или тип MIME) для результирующего вывода, например: <xsl:output output="xml" media-type="application/xml"/>. Рекомендация XSLT 1.0 рекомендует более общие типы атрибутов text/xmlи application/xmlпоскольку долгое время не было зарегистрированного типа носителя для XSLT. В это время text/xslстал фактическим стандартом. В XSLT 1.0 не было указано, как media-typeследует использовать значения.

С выпуском XSLT 2.0 в 2007 году W3C рекомендовал зарегистрировать тип носителя MIME application/xslt+xml[21] , и позднее он был зарегистрирован в Internet Assigned Numbers Authority . [22]

Рабочие проекты XSLT до версии 1.0 использовались text/xslв примерах внедрения, и этот тип был реализован и продолжал продвигаться Microsoft в Internet Explorer [23] и MSXML около 2012 года. Он также широко признан в xml-stylesheetинструкции по обработке другими браузерами. Поэтому на практике пользователи, желающие управлять преобразованием в браузере с помощью этой инструкции по обработке, были вынуждены использовать этот незарегистрированный тип носителя. [24]

Примеры

В этих примерах используется следующий входящий XML-документ:

<?xml version="1.0" ?> <persons> <person username= "JS1" > <name> Джон </name> <family-name> Смит </family-name> </person> <person username= "MI1" > <name> Морка </name> <family-name> Исминций </family-name> </person> </persons>          

Пример 1 (преобразование XML в XML)

Эта таблица стилей XSLT предоставляет шаблоны для преобразования XML-документа:

<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl= "http://www.w3.org/1999/XSL/Transform" version= "1.0" > <xsl:output method= "xml" indent= "yes" />      <xsl:template match= "/persons" > <root> <xsl:apply-templates select= "person" /> </root> </xsl:template>       <xsl:template match= "person" > <name username= "{@username}" > <xsl:value-of select= "name" /> </name> </xsl:template>        </xsl:таблица стилей>

Результатом его оценки является новый XML-документ, имеющий другую структуру:

<?xml version="1.0" encoding="UTF-8"?> <root> <name username= "JS1" > Джон </name> <name username= "MI1" > Морка </name> </root>    

Пример 2 (преобразование XML в XHTML)

Обработка следующего примера файла XSLT

<?xml версия="1.0" кодировка="UTF-8"?> <xsl:stylesheet версия= "1.0" xmlns:xsl= "http://www.w3.org/1999/XSL/Transform" xmlns= "http://www.w3.org/1999/xhtml" >    <xsl:output method= "xml" indent= "yes" encoding= "UTF-8" />    <xsl:template match= "/persons" > <html> <head> <title> Пример тестирования XML </title> </head> <body> <h1> Лица </h1> <ul> <xsl:apply-templates select= "person" > <xsl:sort select= "family-name" /> </xsl:apply-templates> </ul> </body> </html> </xsl:template>                     <xsl:template match= "человек" > <li> <xsl:value-of select= "фамилия-имя" /><xsl:text> , </xsl:text><xsl:value-of select= "имя" /> </li> </xsl:template>        </xsl:таблица стилей>

с входным файлом XML, показанным выше, получается следующий XHTML ( пробелы здесь были скорректированы для ясности):

<?xml version="1.0" encoding="UTF-8"?> <html xmlns= "http://www.w3.org/1999/xhtml" > <head> <title> Пример тестирования XML </title> </head> <body> <h1> Лица </h1> <ul> <li> Исминий, Морка </li> <li> Смит, Джон </li> </ul> </body> </html>               

При отображении в веб-браузере этот XHTML-код генерирует следующий вывод.

Визуализированный XHTML, сгенерированный из входного XML-файла и преобразования XSLT.

Для того, чтобы веб-браузер мог применить преобразование XSL к отображаемому XML-документу, в XML можно вставить инструкцию обработки таблицы стилей XML. Так, например, если таблица стилей в примере 2 выше была доступна как "example2.xsl", к исходному входящему XML можно было бы добавить следующую инструкцию: [25]

<?xml-stylesheet href="example2.xsl" type="text/xsl" ?>

В этом примере text/xslтехнически некорректен согласно спецификациям W3C [25] (в которых говорится, что тип должен быть application/xslt+xml), но это единственный тип носителя, который широко поддерживается браузерами по состоянию на 2009 год, и ситуация не изменилась в 2021 году.

Реализации процессора

  • RaptorXML от Altova — это процессор XSLT 3.0, доступный в наборе инструментов разработки XMLSpy, а также в виде автономной серверной реализации, вызываемой с использованием интерфейса REST.
  • IBM предлагает обработку XSLT, встроенную в специализированное аппаратное устройство под брендом Datapower .
  • libxslt — это бесплатная библиотека , выпущенная под лицензией MIT , которую можно повторно использовать в коммерческих приложениях. Она основана на libxml и реализована на языке C для скорости и переносимости. Она поддерживает расширения XSLT 1.0 и EXSLT . [26]
    • Его можно использовать в командной строке через xsltproc [27] , который включен в macOS [28] и многие дистрибутивы Linux , а также можно использовать в Windows через Cygwin . [29]
    • Движки макетов WebKit и Blink , используемые, например, в веб-браузерах Safari и Chrome соответственно, используют библиотеку libxslt для выполнения преобразований XSL. [30]
    • Существуют привязки для Python , [31] Perl , [32] Ruby , [33] PHP , [34] Common Lisp , [35] Tcl , [36] и C++ . [37]
  • Microsoft предоставляет два процессора XSLT (оба только XSLT 1.0). Более ранний процессор MSXML предоставляет интерфейсы COM; начиная с MSXML 4.0 он также включает утилиту командной строки msxsl.exe. [38] Среда выполнения .NET включает в свою библиотеку отдельный встроенный процессор XSLT System.Xml.Xsl.
  • Saxon — это процессор XSLT 3.0 и XQuery 3.1 с открытым исходным кодом и проприетарными версиями для автономной работы и для Java , JavaScript и .NET. Отдельный продукт Saxon-JS [39] предлагает обработку XSLT 3.0 на Node.js и в браузере.
  • xjslt — компилятор XSLT 2.0 с открытым исходным кодом для JavaScript, поддерживающий Node.js и браузер.
  • Xalan — это процессор XSLT 1.0 с открытым исходным кодом от Apache Software Foundation, доступный для Java и C++. Вариант процессора Xalan включен в качестве процессора XSLT по умолчанию в стандартный дистрибутив Java от Oracle.
  • Веб-браузеры: Safari, Chrome, Firefox, Opera и Internet Explorer поддерживают XSLT 1.0 (только). [40] Браузеры могут выполнять преобразования XML-файлов «на лету» и отображать вывод преобразования в окне браузера. Это делается либо путем встраивания XSL в XML-документ, либо путем ссылки на файл, содержащий инструкции XSL из XML-документа. Последнее может не работать с Chrome для файлов из локальной файловой системы из-за его модели безопасности. [41]
  • Adobe AXSLE engine, фирменная библиотека

Производительность

Большинство ранних процессоров XSLT были интерпретаторами. В последнее время все более распространенной становится генерация кода с использованием переносимых промежуточных языков (таких как байт-код Java или .NET Common Intermediate Language ) в качестве цели. Однако даже интерпретирующие продукты обычно предлагают отдельные фазы анализа и выполнения, позволяя создавать оптимизированное дерево выражений в памяти и повторно использовать его для выполнения нескольких преобразований. Это дает существенные преимущества в производительности в приложениях онлайн-публикаций, где одно и то же преобразование применяется много раз в секунду к разным исходным документам. [42] Это разделение отражено в дизайне API обработки XSLT (таких как JAXP ).

Ранние процессоры XSLT имели очень мало оптимизаций. Документы таблиц стилей считывались в объектные модели документов , и процессор действовал с ними напрямую. Движки XPath также не были оптимизированы. Однако все чаще процессоры XSLT используют методы оптимизации, найденные в функциональных языках программирования и языках запросов к базам данных, такие как статическая перезапись дерева выражений (например, для перемещения вычислений из циклов) и ленивая конвейерная оценка для уменьшения объема памяти, занимаемого промежуточными результатами (и допускают «ранний выход», когда процессор может оценить выражение, например, following-sibling::*[1]без полной оценки всех подвыражений). Многие процессоры также используют древовидные представления, которые значительно более эффективны (как в пространстве, так и во времени) [43], чем реализации DOM общего назначения.

В июне 2014 года Дебби Локетт и Майкл Кей представили среду для сравнительного анализа производительности с открытым исходным кодом для процессоров XSLT под названием XT-Speedo. [44]

Смотрите также

Ссылки

  1. ^ ab "Трансформация". 2012-09-19.
  2. ^ "Метод вывода XML". 2012-09-19.
  3. ^ «Для чего используется XSLT?». 2018-02-07.
  4. ^ "Введение". XSL-преобразования (XSLT) версии 1.0 Рекомендация W3C . W3C. 16 ноября 1999 г. Получено 7 ноября 2012 г.
  5. ^ XSLT версии 2.0 является полным по Тьюрингу: доказательство, основанное исключительно на преобразованиях
  6. ^ Майкл Кей. «Какой язык — XSLT?». IBM . Получено 8 июля 2016 г.
  7. ^ "Предложение по XSL". W3C . Получено 7 ноября 2012 г.
  8. ^ "XML и семантическая паутина W3C Standards Timeline" (PDF) . Архивировано из оригинала (PDF) 2013-04-24 . Получено 2012-02-04 .
  9. ^ "XSL-преобразования (XSLT)". W3.org. 1999-11-16 . Получено 2014-07-12 .
  10. ^ "XSL Transformations (XSLT) Version 1.1". W3.org. 2001-08-24 . Получено 2014-07-12 .
  11. ^ "XML Path Language (XPath) 2.0 (Второе издание)". W3.org. 2010-12-14 . Получено 2014-07-12 .
  12. ^ "XSL Transformations (XSLT) Version 2.0". W3.org. 2007-01-23 . Получено 2014-07-12 .
  13. ^ "XML и семантическая паутина W3C Standards Timeline" (PDF) . 2012-02-04. Архивировано из оригинала (PDF) 2013-04-24 . Получено 2012-02-04 .
  14. ^ "Что нового в XSLT 3.0?". w3 . Получено 6 января 2014 г. .
  15. ^ Кей, Майкл. "Потоковый процессор XSLT". Balisage: The Markup Conference 2010 Proceedings . Получено 15 февраля 2012 г.
  16. ^ Флэтт, Амели; Лангнер, Арне; Лепс, Олоф (2022), «Фаза III: Генерация артефактов из модели», Разработка профилей приложений Akoma Ntoso на основе моделей , Cham: Springer International Publishing, стр.  31–37 , doi :10.1007/978-3-031-14132-4_5, ISBN 978-3-031-14131-7, получено 2023-01-07
  17. ^ "XSL Transformations (XSLT) Version 2.0 (Second Edition)". www.w3.org . Получено 2023-02-07 . Пример: Документы с несколькими результатами
  18. ^ "Откройте для себя чудеса XSLT: особенности XSLT". Архивировано из оригинала 2011-07-09 . Получено 2011-02-11 . XSLT — очень специализированный язык с ярко выраженным декларативным оттенком.
  19. ^ Кей, Майкл. «Какой язык — XSLT?». IBM . Получено 13 ноября 2013 г.
  20. ^ "Saxonica: XSLT и XQuery". www.saxonica.com . Получено 29.06.2022 .
  21. ^ "XSL Transformations (XSLT) Version 2.0". W3C . Получено 19 октября 2012 г. .
  22. ^ "Типы носителей приложений". IANA . Получено 19 октября 2012 г.
  23. ^ "Требования XSLT для просмотра XML в браузере". Microsoft . Получено 19 октября 2012 г. .
  24. ^ Кей, Майкл (2008). Справочник программиста XSLT 2.0 и XPath 2.0 . Wiley. стр. 100. ISBN 978-0-470-19274-0.
  25. ^ ab "XSL Transformations (XSLT) Version 1.0: W3C Recommendation – Embedding Stylesheets". W3C. 16 ноября 1999 г. Получено 20 сентября 2016 г.
  26. ^ "Библиотека XSLT C для GNOME: libxslt" . Получено 23 ноября 2012 г. .
  27. ^ "Библиотека XSLT C для GNOME: инструмент xsltproc" . Получено 23 ноября 2012 г. .
  28. ^ "xsltproc man page" . Получено 23 ноября 2012 г. .
  29. ^ "Новый пакет: libxslt" . Получено 23 ноября 2012 г. .
  30. ^ "Проект WebKit с открытым исходным кодом – XSLT" . Получено 2009-10-25 .
  31. ^ "XML C-парсер и набор инструментов Gnome: Python и привязки" . Получено 23 ноября 2012 г.
  32. ^ "XML::LibXSLT – Интерфейс к библиотеке GNOME libxslt". CPAN . Получено 23 ноября 2012 г. .
  33. ^ "libxslt-ruby" . Получено 23 ноября 2012 г. .
  34. ^ "libxml" . Получено 23 ноября 2012 г. .
  35. ^ "cl-libxml2 Высокоуровневая оболочка для библиотек libxml2 и libxslt".
  36. ^ "TclXML" . Получено 21 мая 2013 г.
  37. ^ "libxml++". sourceforge.net . Получено 23 ноября 2012 г. .
  38. ^ "Утилита преобразования командной строки (msxsl.exe)". Microsoft . Получено 22 октября 2012 г. .
  39. ^ "Саксон-JS". Саксоника . Проверено 6 сентября 2018 г.
  40. ^ "Распространенные ошибки XSLT". MDN Web Docs . Mozilla. 10 июля 2023 г. . Получено 16 сентября 2024 г. .
  41. ^ «Проблема 58151: Не удаётся загрузить XML-файл в локальную файловую систему с помощью XMLHttpRequest».
  42. ^ Saxon: Анатомия XSLT-процессора – Статья, описывающая детали реализации и оптимизации популярного XSLT-процессора.
  43. ^ Ламли, Джон; Кей, Майкл (июнь 2015 г.). «Улучшение производительности сопоставления шаблонов в XSLT». XML London 2015 : 9– 25. doi : 10.14337/XMLLondon15.Lumley01 (неактивен 1 ноября 2024 г.). ISBN 978-0-9926471-2-4.{{cite journal}}: CS1 maint: DOI неактивен по состоянию на ноябрь 2024 г. ( ссылка )
  44. ^ Кей, Майкл; Локетт, Дебби (июнь 2014 г.). «Сравнительный анализ производительности XSLT». XML London 2014 : 10– 23. doi : 10.14337/XMLLondon14.Kay01 (неактивен 1 ноября 2024 г.). ISBN 978-0-9926471-1-7.{{cite journal}}: CS1 maint: DOI неактивен по состоянию на ноябрь 2024 г. ( ссылка )

Дальнейшее чтение

  • XSLT Дуга Тидвелла, опубликовано O'Reilly ( ISBN 0-596-00053-7 ) 
  • XSLT Cookbook Сала Мангано, изданная O'Reilly ( ISBN 0-596-00974-7 ) 
  • Справочник программиста XSLT 2.0 Майкла Кея ( ISBN 0-764-56909-0 ) 
  • Справочник программиста XSLT 2.0 и XPath 2.0 Майкла Кея ( ISBN 978-0-470-19274-0 ) 
  • XSLT 2.0 Веб-разработка Дмитрия Кирсанова ( ISBN 0-13-140635-3 ) 
  • XSL Companion, 2-е издание Нила Брэдли, издательство Addison-Wesley ( ISBN 0-201-77083-0 ) 
  • XSLT и XPath на грани (неограниченное издание) Джени Теннисон , изданная Hungry Minds Inc, США ( ISBN 0-7645-4776-3 ) 
  • XSLT и XPath, руководство по преобразованиям XML Джона Роберта Гарднера и Зареллы Рендон, опубликовано Prentice-Hall ( ISBN 0-13-040446-2 ) 
  • XSL-FO Дэйва Поусона, опубликовано O'Reilly ( ISBN 978-0-596-00355-5 ) 
Документация
  • Рекомендация W3C XSLT 1.0
  • Рекомендация W3C XSLT 2.0
  • Рекомендация W3C XSLT 3.0
  • XSLT – Документы MDC, архив 2011-12-26 на Wayback Machine от Mozilla Developer Network
  • Справочник XSLT (MSDN)
  • Элементы XSLT (саксонский)
  • Введение и справочник XSLT
Библиотеки XSLT-кода
  • EXSLT — это широко распространенная инициатива сообщества по предоставлению расширений XSLT.
  • FXSL — это библиотека, реализующая поддержку функций высшего порядка в XSLT. FXSL написана на самом XSLT.
  • Стандартная библиотека XSLT xsltsl предоставляет разработчику XSLT набор шаблонов XSLT для часто используемых функций. Они реализованы исключительно в XSLT, то есть не используют никаких расширений. xsltsl — проект SourceForge.
  • Kernow Графический пользовательский интерфейс для Saxon, предоставляющий интерфейс «укажи и щелкни» для запуска преобразований.
  • xslt.js – библиотека JavaScript для преобразования XML с помощью XSLT, которая преобразует XML с помощью XSLT в браузере.
Взято с "https://en.wikipedia.org/w/index.php?title=XSLT&oldid=1268755811"