XSLT

от Уикипедия, свободната енциклопедия
XSLT
Информация
Файлово разширение.xsl, .xslt
Тип MIMEapplication/xslt+xml[1]
СобственикWorld Wide Web Consortium
Тип на форматаСтилизиращ език
XSLT в Общомедия

XSLT (Extensible Stylesheet Language Transformations) е декларативен, XML-базиран език използван за преобразуване на XML документи. Оригиналният документ не се променя; Вместо това се създава нов документ на базата на съществуващия.[2] Новият документ може да бъде сериализиран (подаден на изхода) от процесора като стандартен XML или друг формат, като например HTML или прост текст.[3] XSLT най-често се използва за преобразуване на данни между различни XML схеми или за преобразуване на XML данни в уеб страници или PDF документи.

Приложение[редактиране | редактиране на кода]

Компютърни програми често използват XSLT за преобразуване на XML данни в HTML или XHTML документи, които да бъдат показани на уеб страница. Преобразуването може да се изпълни динамично от клиента или сървъра, или като част от процесът на публикация. Използва се и за създаване на визуализации за печат или директна видео визуализация, най-често чрез преобразуване на оригиналния XML в XSL-FO което след това може да се преобразува до различни формати, включително PDF, PostScript и PNG. XSLT може да превежда и XML документи между различни XML схеми или да прави промени в рамките на една схема, като например премахване на ненужни данни.

История[редактиране | редактиране на кода]

XSLT е разработен от World Wide Web Consortium (W3C). Последната версия е XSLT 2.0,[4] която достигна статус W3C препоръка на 23 януари 2007. Поне до 2011 обаче, XSLT 1.0[5] все още е широко използван, тъй като няма продукти, които да поддържат XSLT 2.0 в браузър, както и в някои често използвани среди като LAMP.

Първоначално, XSLT е бил част от Extensible Stylesheet Language (XSL) разработката на W3C през 1998 – 1999, проект, който също така е издал и XSL Formatting Objects, както и „XML Path Language“ (XPath). Редакторът на първата версия е Джеймс Кларк. XSLT 1.0 е публикувана като „Препоръка“ от W3C на 16 ноември 1999. След неуспешен опит за създаване на версия 1.1 през 2001,[6] XSL групата се присъединява към XQuery групата, за да създадат XPath 2.0,[7] с по-богат модел на данните и типизирана система, базирана на XML Schema. XSLT 2.0, разработен под ръководството на Майкъл Кей, бил построен на тази основа през 2002 – 2006.

Като език, XSLT е повлиян от функционални езици,[8] и от текстово базирани шаблонни езици от порядъка на SNOBOL и awk. Прекият му предшественик е ISO DSSSL, език осъществяващ същата функционалност за SGML която XSLT предлага за XML[9] (Някои от членовете на групата разработила XSLT, включително Джеймс Кларк, преди това разработвали DSSSL.) За разлика от DSSSL, XSLT използва синтаксиса на крайния си продукт – XML – поради което може да се разглежда като Тюрингово-завършен[10][11][12][13] шаблонен процесор.

По-голямата част от тази статия се отнася и за двете XSLT версии; Всякакви разлики между версиите ще бъдат изрично посочвани в самия текст.

Концепция[редактиране | редактиране на кода]

Обща постановка[редактиране | редактиране на кода]

Диаграма на основни елементи и протичането на XSLT преобразувания.

XSLT моделът включва:

  • един или повече входни XML документи;
  • един или повече XSLT стилизиращи модули;
  • XSLT шаблонен процесор (или просто процесора) и
  • един или повече изходни документи.

Обикновено XSLT процесорът взема два входящи документа[14] – XML входен документ, и XSLT стилизиращ документ – и на изхода се произвежда един изходен документ. XSLT документът съдържа шаблонни правила: инструкции и други указания, които насочват процесора при създаването на изходния документ.

Правила за обработка на шаблони[редактиране | редактиране на кода]

Езикът XSLT е декларативен:[15] Вместо да се посочва списък от действия, които да се извършват в рамките на динамична среда, всеки шаблон определя как да се обработи възел от XML документа, отговарящ на XPath-подобен образец, в случай, че такъв бъде намерен, а съдържанието на всеки шаблон на практика съдържа функционални изрази които представляват тяхната изпълнена форма: резултатното дърво, което е в основата на изхода от XSLT процесора.

Процесорът следва фиксиран алгоритъм:[16] Когато стиловият документ е прочетен и обработен, процесорът построява дърво източник от входящия XML документ. След това се започва обработка от кореновия възел на дървото, търсейки най-подходящият шаблон от стиловия документ за този възел, при което се изпълнява съдържанието на шаблона. Инструкциите във всеки шаблон обикновено насочват процесора или да създаде възли в резултатното дърво, или да обработи повече възли от входящото дърво, подобно на кореновия възел. Изходът се определя от резултатното дърво.

Реализации[редактиране | редактиране на кода]

Реализации на XSLT се делят на две основни категории: клиентски and сървърни.

Клиентски XSLT реализации бавно навлизат в масова употреба, поради разпространението на стари (или алтернативни) браузъри, които не поддържат XSLT. Поради подобни причини, разпространението на XSLT 2.0 в такива среди е ограничено. (Виж Comparison of layout engines (XML)#XSL technologies).

Въпреки това, едни от първите реализации са в Microsoft Internet Explorer 6 (през 2001) и Netscape 7 (през 2002). Преди това, Internet Explorer 5 поддържа „чернова“ версия на XSLT спецификацията от 1999 или по-ранна, която обаче не е съвместима с финалната спецификация на W3C. Netscape 6 включва частична поддръжка през 2000.[17]

Сървърни XSLT процесори (подвеждащ термин, тъй като не изискват сървър, за да работят; името се използва като контраст на „клиентски“) съществуват като самостоятелни продукти и като компоненти на друг софтуер. Това включва уеб браузъри, сървъри, framework-ове (като Java и .NET) и дори операционни системи. Например библиотеката MSXML3 в Windows XP включва XSLT 1.0 процесор. Десктоп средата GNOME (от версия 2.0) включва libxslt, реализация с отворен код с пълна XSLT 1.0 поддръжка.[18][19] libxslt библиотеката се използва и от друг софтуер, като например WebKit.[20] Други примери са Apache Xalan[21] и Saxon (който поддържа и XSLT 2.0).

Производителност[редактиране | редактиране на кода]

Производителността на XSLT процесорите се покачва постепенно с развитието на технологията, въпреки че първият XSLT процесор – xt (на Джеймс Кларкне била победена през първите няколко години.[22]

Най-ранните XSLT процесори били интерпретатори. По-късно, генерирането на код до портативни езици от „средно“ ниво (като Java bytecode или .NET Common Intermediate Language) като цел става все по-разпространено. Въпреки това, дори и интерпретаторите обикновено имат отделни фази за анализ и изпълнение, позволявайки създаването на оптимизирано дърво в паметта, което да се използва в множество трансформации. Това изключително подобрява производителността на онлайн приложения, където една и съща трансформация се прилага много пъти в секунда върху различни входни документи.[23] Това разделение се отразява и в дизайнът на XSLT API-та (като например JAXP).

Първите XSLT процесори правели много малко оптимизации. Стиловите документи били прочитани в DOM дървета и процесора действал директно върху тях. XPath реализациите също не били оптимизирани. Все повече, XSLT процесорите използват оптимизационни техники от функционалното програмиране и езици за заявки към бази данни. Такива техники са например статично пренаписване на дърво на изразите (например с цел извеждане на изчисления извън цикли), и късно изпълнение на навързани стъпки с цел намаляване на използваната памет при временни резултати (което позволява „ранен изход“ когато процесора може да оцени израз като following-sibling::*[1] без пълна оценка на всички под-изрази). Много процесори също използват дървета, които са по-ефективни (и като памет и като изпълнение) от стандартни DOM дървета.

XSLT и потоци[редактиране | редактиране на кода]

XSLT 1.0 и XSLT 2.0 са проектирани да позволяват предаване на изходът от преобразуването като поток. Това означава, че целият вход трябва да бъде в паметта преди да се започне XML обработката. Това поведение осигурява „стабилност“ на документа.

Бъдещи версии на XSLT ще позволяват и на входа да бъде прочитан като поток. Това ще позволи на реализациите да имат ниско съотношение между входът и изходът записан в паметта. Това е особено важно когато множество преобразувания са свързани в XML поточни линии, като например XProc.

XSLT и XPath[редактиране | редактиране на кода]

XSLT разчита на XPath за намиране на части от дървото на входния документ, както и за извършването на изчисления. XPath съдържа също и множество функции, към което XSLT добавя и свои. Това добавя особена сила и гъвкавост на XSLT.

XSLT 1.0 използва XPath 1.0. Аналогично, XSLT 2.0 използва XPath 2.0; Двете спецификации са публикувани заедно.

Източници[редактиране | редактиране на кода]

  1. XSL Transformations (XSLT) Version 2.0
  2. XSL Transformations (XSLT)
  3. Примери за посочване на алтернативни изходни формати
  4. www.w3.org
  5. www.w3.org
  6. www.w3.org
  7. www.w3.org
  8. Димитре Новачев. Higher-Order Functional Programming with XSLT 2.0 and FXSL // ExtremeMarkupLanguages. Архивиран от оригинала на 2011-10-26. Посетен на 8 август 2009.
  9. www.w3.org
  10. Кепсер, Стефан. (2004).
  11. A Simple Proof for the Turing-Completeness of XSLT and XQuery Архив на оригинала от 2007-09-27 в Wayback Machine.. International Digital Enterprise Alliance.
  12. Universal Turing Machine in XSLT
  13. www.refal.net
  14. Обикновено документите са XML файлове, но спецификациите избягват забраната на други представяния, като например DOM дървета в паметта и други съвместими входящи потоци.
  15. Discover the Wonders of XSLT: XSLT Quirks // Архивиран от оригинала на 2011-07-09. Посетен на 2011-11-11. XSLT is a very specialized language with a distinct declarative flavor.
  16. XSLT Definitions // XSLT declarations define a set of rules and guidelines that are applied during processing according to a predefined algorithm.
  17. Mozilla Developer Center. XSLT in Gecko / Browser Differences // 21 януари 2007. Архивиран от оригинала на 2012-03-24. Посетен на 25 октомври 2009.
  18. The GNOME Project. GNOME 2.0 Release Notes – XML // 26 юни 2002. Посетен на 25 октомври 2009.
  19. The XSLT C library for GNOME – libxslt // Посетен на 25 октомври 2009.
  20. The WebKit Open Source Project – XSLT // Посетен на 25 октомври 2009.
  21. The Apache Xalan Project // Посетен на 25 октомври 2009.
  22. XML.com: XSLT Processor Benchmarks
  23. Saxon: Anatomy of an XSLT processor – Article describing implementation & optimization details of a popular XSLT processor.

Литература[редактиране | редактиране на кода]

  • XSLT от Дъг Тидуел, издателство O’Reilly (ISBN 0-596-00053-7)
  • XSLT Cookbook от Сал Мангано, издателство O’Reilly (ISBN 0-596-00974-7)
  • XSLT 2.0 Programmer's Reference от Майкъл Кей (ISBN 0-7645-6909-0)
  • XSLT 2.0 and XPath 2.0 Programmer's Reference от Майкъл Кей (ISBN 978-0-470-19274-0)
  • XSLT 2.0 Web Development от Дмитри Кирсанов (ISBN 0-13-140635-3)
  • XSL Companion, 2nd Edition от Нийл Брадли, издателство Addison-Wesley (ISBN 0-201-77083-0)
  • XSLT and XPath on the Edge (Unlimited Edition) от Джени Тенисън, издателство Hungry Minds Inc, САЩ. (ISBN 0-7645-4776-3)
  • XSLT & XPath, A Guide to XML Transformations от Джон Робърт Гарднър и Зарела Рендън, издателство Prentice-Hall (ISBN 0-13-040446-2)
  • XSL-FO от Дейв Паулсън, издателство O'Reilly (ISBN 978-0-596-00355-5)