Из Википедии, бесплатной энциклопедии
  (Перенаправлено из XSL-преобразований )
Перейти к навигации Перейти к поиску

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

Исходный документ не изменяется; скорее, новый документ создается на основе содержания существующего. [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) Консорциума World Wide Web Consortium (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 - схемы . Основываясь на этом, XSLT 2.0 [12], разработанный под редакцией Майкла Кея , достиг статуса рекомендации в январе 2007 года. [13] К наиболее важным нововведениям в XSLT 2.0 относятся:
    • Обработка строк с использованием регулярных выражений
    • Функции и операторы для управления датами, временем и продолжительностью
    • Множественные выходные документы
    • Группировка (создание иерархической структуры из плоских входных последовательностей)
    • Более богатая система типов и более строгая проверка типов
  • XSLT 3.0: стал Рекомендацией W3C 8 июня 2017 г. Основные новые функции: [14]
    • Потоковые преобразования : в предыдущих версиях весь входной документ должен был быть считан в память, прежде чем он мог быть обработан [15], а выходные данные не могли быть записаны до завершения обработки. XSLT 3.0 позволяет выполнять потоковую передачу XML, что полезно для обработки документов, слишком больших для размещения в памяти, или когда преобразования связаны в конвейерах XML .
    • Пакеты для улучшения модульности больших таблиц стилей.
    • Улучшена обработка динамических ошибок, например, с помощью инструкции xsl: try.
    • Поддержка карт и массивов, позволяющая XSLT обрабатывать JSON, а также XML.
    • Функции теперь могут быть аргументами для других функций (высшего порядка).

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

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

XSLT-процессор берет один или несколько исходных XML-документов, а также одну или несколько таблиц стилей XSLT и обрабатывает их для создания выходного документа. В отличие от широко применяемых императивных языков программирования, таких как C , XSLT декларативен . [16] Основная парадигма обработки - сопоставление с образцом. [17] Вместо того, чтобы перечислять обязательную последовательность действий для выполнения в среде с отслеживанием состояния, правила шаблонов только определяют, как обрабатывать узел, соответствующий определенному шаблону, подобному 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 года, а в феврале 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 лучше справляется с обработкой данных, например, при выполнении реляционных соединений. [ необходима цитата ]

Типы СМИ [ править ]

<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 рекомендовал регистрацию типа носителя MIME application/xslt+xml[18], а позже он был зарегистрирован в Internet Assigned Numbers Authority . [19]

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

Примеры [ править ]

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

<? xml version = "1.0"?> <persons>  <person  username = "JS1" >  <name> John </name>  <family-name> Smith </family-name>  </person>  <person  username = " MI1 " >  <name> Морка </name>  <family-name> Ismincius </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 = "/ person " >  <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: stylesheet>

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

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

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

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

<? xml version = "1.0" encoding = "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  method = "xml"  indent = "yes"  encoding = "UTF-8" /> <xsl: template  match = "/ person" >  <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: stylesheet>

с входным 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 можно было бы добавить следующую инструкцию: [22]

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

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

Реализации процессора [ править ]

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

Производительность [ править ]

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

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

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

См. Также [ править ]

  • Элементы XSLT - список некоторых часто используемых структур XSLT.
  • Мюнхийская группировка - диалектное различие между XSLT1 и XSLT2 +.
  • eXtensible Stylesheet Language - семейство языков, членом которого является XSLT.
  • Сравнение XQuery и XSLT
  • Объекты форматирования XSL или XSL-FO - язык на основе XML для документов, обычно создаваемый путем преобразования исходных документов с помощью XSLT, состоящий из объектов, используемых для создания форматированного вывода.
  • Преобразование идентичности - отправная точка для цепочек фильтров, которые добавляют или удаляют элементы данных из деревьев XML в конвейере преобразования.
  • Apache Cocoon - основанный на Java фреймворк для обработки данных с помощью XSLT и других преобразователей.

Ссылки [ править ]

  1. ^ a b «Преобразование» . 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?" . Проверено 8 июля, 2016 .
  7. ^ «Предложение по XSL» . W3C . Проверено 7 ноября 2012 года .
  8. ^ "Временная шкала стандартов XML и семантической сети W3C" (PDF) .
  9. ^ «Преобразования XSL (XSLT)» . W3.org. 1999-11-16 . Проверено 12 июля 2014 .
  10. ^ «Преобразования XSL (XSLT) Версия 1.1» . W3.org. 2001-08-24 . Проверено 12 июля 2014 .
  11. ^ «XML Path Language (XPath) 2.0 (второе издание)» . W3.org. 2010-12-14 . Проверено 12 июля 2014 .
  12. ^ «Преобразования XSL (XSLT) Версия 2.0» . W3.org. 2007-01-23 . Проверено 12 июля 2014 .
  13. ^ "Временная шкала стандартов XML и семантической сети W3C" (PDF) . 2012-02-04.
  14. ^ "Что нового в XSLT 3.0?" . w3 . Проверено 6 января 2014 .
  15. ^ Кей, Майкл. «Потоковый процессор XSLT» . Balisage: Разметка Conference 2010 Труды . Проверено 15 февраля 2012 года .
  16. ^ «Откройте для себя чудеса XSLT: особенности XSLT» . XSLT - это очень специализированный язык с отчетливым декларативным оттенком.
  17. ^ Кей, Майкл. "Что за язык XSLT?" . IBM . Проверено 13 ноября 2013 года .
  18. ^ «Преобразования XSL (XSLT) Версия 2.0» . W3C . Проверено 19 октября 2012 года .
  19. ^ «Типы носителей приложений» . IANA . Проверено 19 октября 2012 года .
  20. ^ «Требования XSLT для просмотра XML в браузере» . Microsoft . Проверено 19 октября 2012 года .
  21. ^ Кей, Майкл (2008). Справочник программиста XSLT 2.0 и XPath 2.0 . Вайли. п. 100 . ISBN 978-0-470-19274-0.
  22. ^ a b «Преобразования XSL (XSLT) Версия 1.0: Рекомендация W3C - Встраивание таблиц стилей» . W3C. 16 ноября 1999 . Проверено 20 сентября 2016 года .
  23. ^ "Библиотека XSLT C для GNOME: libxslt" . Проверено 23 ноября 2012 года .
  24. ^ «Библиотека XSLT C для GNOME: инструмент xsltproc» . Проверено 23 ноября 2012 года .
  25. ^ "Справочная страница xsltproc" . Проверено 23 ноября 2012 года .
  26. ^ "Новый пакет: libxslt" . Проверено 23 ноября 2012 года .
  27. ^ «Проект с открытым исходным кодом WebKit - XSLT» . Проверено 25 октября 2009 .
  28. ^ «Синтаксический анализатор XML C и инструментарий Gnome: Python и привязки» . Проверено 23 ноября 2012 года .
  29. ^ "XML :: LibXSLT - Интерфейс к библиотеке GNOME libxslt" . CPAN . Проверено 23 ноября 2012 года .
  30. ^ "libxslt-ruby" . Проверено 23 ноября 2012 года .
  31. ^ "libxml" . Проверено 23 ноября 2012 года .
  32. ^ "cl-libxml2 Высокоуровневая оболочка библиотек libxml2 и libxslt" .
  33. ^ "TclXML" . Проверено 21 мая 2013 года .
  34. ^ "libxml ++" . sourceforge.net . Проверено 23 ноября 2012 года .
  35. ^ «Утилита преобразования командной строки (msxsl.exe)» . Microsoft . Проверено 22 октября 2012 года .
  36. ^ "Саксон-JS" . Саксоника . Проверено 6 сентября 2018 года .
  37. ^ «Проблема 58151: не удается загрузить XML-файл в локальную файловую систему с помощью XMLHttpRequest» .
  38. ^ Saxon: Анатомия процессора XSLT - статья, описывающая детали реализации и оптимизации популярного процессора XSLT.
  39. ^ Ламли, Джон; Кей, Майкл (июнь 2015 г.). «Повышение производительности сопоставления с образцом в XSLT» . XML Лондон 2015 : 9–25. DOI : 10,14337 / XMLLondon15.Lumley01 . ISBN 978-0-9926471-2-4.
  40. ^ Кей, Майкл; Локетт, Дебби (июнь 2014 г.). «Тестирование производительности XSLT» . XML Лондон 2014 : 10–23. DOI : 10,14337 / XMLLondon14.Kay01 . ISBN 978-0-9926471-1-7.

Дальнейшее чтение [ править ]

  • XSLT Дуга Тидуэлла, опубликованный O'Reilly ( ISBN 0-596-00053-7 ) 
  • Поваренная книга XSLT Сала Мангано, опубликованная O'Reilly ( ISBN 0-596-00974-7 ) 
  • Ссылка XSLT 2.0 программиста от Michael Kay ( 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 on the Edge (неограниченное издание) от Джени Теннисон , опубликовано 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 ) 

Внешние ссылки [ править ]

Документация
  • XSLT 1.0 Рекомендация W3C
  • XSLT 2.0 Рекомендация W3C
  • XSLT 3.0 Рекомендация W3C
  • XSLT - документы MDC от сети разработчиков Mozilla
  • Справочник по XSLT (MSDN)
  • Элементы XSLT (саксонский)
  • Введение в XSLT и справочные материалы
Библиотеки кода XSLT
  • EXSLT - это широко распространенная инициатива сообщества по предоставлению расширений XSLT.
  • FXSL - это библиотека, реализующая поддержку функций высшего порядка в XSLT. FXSL написан на самом XSLT.
  • Стандартная библиотека XSLT xsltsl предоставляет разработчику XSLT набор шаблонов XSLT для часто используемых функций. Они реализованы исключительно в XSLT, то есть не используют никаких расширений. xsltsl - это проект SourceForge.
  • Kernow . Графический интерфейс для Saxon, который предоставляет интерфейс для запуска преобразований.
  • xslt.js - преобразование XML с помощью библиотеки XSLT JavaScript, которая преобразует XML с помощью XSLT в браузере.