stringtranslate.com

XSLT

XSLT ( преобразования расширяемого языка таблиц стилей ) — это язык, изначально разработанный для преобразования 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. Библиотеку Javascript XSLT 3.0 также можно разместить в веб-браузере. Современные веб-браузеры также включают встроенную поддержку XSLT 1.0. [3]

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

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

История

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

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

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

Процессор 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, так и с XPath 3.1. В случае версий 1.0 и 2.0 спецификации XSLT и XPath были опубликованы в один и тот же день. Однако в версии 3.0 они больше не синхронизировались; XPath 3.0 стал рекомендацией в апреле 2014 г., а в феврале 2017 г. последовал XPath 3.1; 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 W3C рекомендовал в 2007 году регистрацию медиа-типа MIME application/xslt+xml[21] , и позже он был зарегистрирован в Управлении по присвоению номеров в Интернете . [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> </person> <person username= " МИ1" > <имя> Морка < /имя> <фамилия> Исминциус < / фамилия> </person> </persons>          

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

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

<?xml version="1.0"coding="UTF-8"?> <xsl:stylesheet xmlns:xsl= "http://www.w3.org/1999/XSL/Transform" version= "1.0" > <xsl :output Method= "xml" indent= "да" />      <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"coding="UTF-8"?> <root> <name username= "JS1" > Джон </name> <name username= "MI1" > Морка </name> </root>    

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

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

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

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

<?xml version="1.0"coding="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 году.

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

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

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

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

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

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

Рекомендации

  1. ^ аб «Трансформация». 19 сентября 2012 г.
  2. ^ «Метод вывода XML». 19 сентября 2012 г.
  3. ^ «Для чего используется XSLT?». 07.02.2018.
  4. ^ «Введение». XSL-преобразования (XSLT), версия 1.0, рекомендации W3C . W3C. 16 ноября 1999 года . Проверено 7 ноября 2012 г.
  5. ^ XSLT версии 2.0 является полным по Тьюрингу: доказательство, основанное исключительно на преобразовании
  6. ^ Майкл Кей. «Что это за язык XSLT?». ИБМ . Проверено 8 июля 2016 г.
  7. ^ «Предложение по XSL». W3C . Проверено 7 ноября 2012 г.
  8. ^ «Хронология стандартов XML и семантической сети W3C» (PDF) . Архивировано из оригинала (PDF) 24 апреля 2013 г. Проверено 4 февраля 2012 г.
  9. ^ «Преобразования XSL (XSLT)» . W3.org. 16 ноября 1999 г. Проверено 12 июля 2014 г.
  10. ^ «Преобразования XSL (XSLT) Версия 1.1» . W3.org. 24 августа 2001 г. Проверено 12 июля 2014 г.
  11. ^ «Язык XML Path (XPath) 2.0 (второе издание)» . W3.org. 14 декабря 2010 г. Проверено 12 июля 2014 г.
  12. ^ «Преобразования XSL (XSLT) Версия 2.0» . W3.org. 23 января 2007 г. Проверено 12 июля 2014 г.
  13. ^ «Хронология стандартов XML и семантической сети W3C» (PDF) . 04 февраля 2012 г. Архивировано из оригинала (PDF) 24 апреля 2013 г. Проверено 4 февраля 2012 г.
  14. ^ «Что нового в XSLT 3.0?». w3 . Проверено 6 января 2014 г.
  15. ^ Кей, Майкл. «Потоковый XSLT-процессор». Балисаж: Материалы конференции по разметке 2010 г. Проверено 15 февраля 2012 г.
  16. ^ Флатт, Амели; Лангнер, Арне; Лепс, Олоф (2022), «Фаза III: Генерация артефактов из модели», Разработка профилей приложений Akoma Ntoso на основе модели , Cham: Springer International Publishing, стр. 31–37, номер документа : 10.1007/978-3-031- 14132-4_5, ISBN 978-3-031-14131-7, получено 7 января 2023 г.
  17. ^ «Преобразования XSL (XSLT) Версия 2.0 (второе издание)» . www.w3.org . Проверено 7 февраля 2023 г. Пример: несколько документов результатов
  18. ^ «Откройте для себя чудеса XSLT: особенности XSLT» . Архивировано из оригинала 9 июля 2011 г. Проверено 11 февраля 2011 г. XSLT — очень специализированный язык с ярко выраженным декларативным характером.
  19. ^ Кей, Майкл. «Что это за язык XSLT?». ИБМ . Проверено 13 ноября 2013 г.
  20. ^ «Саксоника: XSLT и XQuery». www.saxonica.com . Проверено 29 июня 2022 г.
  21. ^ «Преобразования XSL (XSLT) Версия 2.0» . W3C . Проверено 19 октября 2012 г.
  22. ^ «Типы носителей приложений». ИАНА . Проверено 19 октября 2012 г.
  23. ^ «Требования XSLT для просмотра XML в браузере» . Майкрософт . Проверено 19 октября 2012 г.
  24. ^ Кей, Майкл (2008). Справочник программиста XSLT 2.0 и XPath 2.0 . Уайли. п. 100. ИСБН 978-0-470-19274-0.
  25. ^ ab «Преобразования XSL (XSLT) Версия 1.0: Рекомендация W3C — внедрение таблиц стилей». W3C. 16 ноября 1999 года . Проверено 20 сентября 2016 г.
  26. ^ «Библиотека XSLT C для GNOME: libxslt» . Проверено 23 ноября 2012 г.
  27. ^ «Библиотека XSLT C для GNOME: инструмент xsltproc» . Проверено 23 ноября 2012 г.
  28. ^ "Справочная страница xsltproc" . Проверено 23 ноября 2012 г.
  29. ^ «Новый пакет: libxslt» . Проверено 23 ноября 2012 г.
  30. ^ «Проект с открытым исходным кодом WebKit — XSLT» . Проверено 25 октября 2009 г.
  31. ^ «Парсер XML C и набор инструментов Gnome: Python и привязки» . Проверено 23 ноября 2012 г.
  32. ^ «XML::LibXSLT — интерфейс к библиотеке GNOME libxslt». КПАН . Проверено 23 ноября 2012 г.
  33. ^ "libxslt-рубин" . Проверено 23 ноября 2012 г.
  34. ^ "libxml" . Проверено 23 ноября 2012 г.
  35. ^ «cl-libxml2 Высокоуровневая оболочка вокруг библиотек libxml2 и libxslt» .
  36. ^ "TclXML" . Проверено 21 мая 2013 г.
  37. ^ "libxml++". sourceforge.net . Проверено 23 ноября 2012 г.
  38. ^ «Утилита преобразования командной строки (msxsl.exe)» . Майкрософт . Проверено 22 октября 2012 г.
  39. ^ "Саксон-JS". Саксоника . Проверено 6 сентября 2018 г.
  40. ^ «Проблема 58151: не удалось загрузить XML-файл в локальную файловую систему с помощью XMLHttpRequest».
  41. ^ Saxon: Анатомия процессора XSLT — статья, описывающая детали реализации и оптимизации популярного процессора XSLT.
  42. ^ Ламли, Джон; Кей, Майкл (июнь 2015 г.). «Улучшение производительности сопоставления шаблонов в XSLT». XML Лондон 2015 : 9–25. doi : 10.14337/XMLLondon15.Lumley01 . ISBN 978-0-9926471-2-4.
  43. ^ Кей, Майкл; Локетт, Дебби (июнь 2014 г.). «Сравнительный анализ производительности XSLT». XML Лондон 2014 : 10–23. doi : 10.14337/XMLLondon14.Kay01 . ISBN 978-0-9926471-1-7.

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

Внешние ссылки

Документация
Библиотеки кода XSLT