XSLT

от Уикипедия, свободната енциклопедия
Направо към навигацията Направо към търсенето
XSLT
XSLT.svg
Информация
Разширение на файла .xsl, .xslt
Тип MIME application/xslt+xml[1]
Собственик World Wide Web Consortium
Тип на формата Стилизиращ език
Разширение от XML
Стандарт 1.0 (Recommendation),
2.0 (Recommendation)
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. Посетен на 8 август 2009.
  9. www.w3.org
  10. Кепсер, Стефан. (2004).
  11. A Simple Proof for the Turing-Completeness of XSLT and XQuery. International Digital Enterprise Alliance.
  12. Universal Turing Machine in XSLT
  13. www.refal.net/~korlukov/tm/
  14. Обикновено документите са XML файлове, но спецификациите избягват забраната на други представяния, като например DOM дървета в паметта и други съвместими входящи потоци.
  15. Discover the Wonders of XSLT: XSLT Quirks. // 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. Посетен на 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-764-56909-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)