XSLT
From Wikipedia, the free encyclopedia
Remove ads
XSLT (Extensible Stylesheet Language Transformations) е декларативен, XML-базиран език използван за преобразуване на XML документи. Оригиналният документ не се променя; Вместо това се създава нов документ на базата на съществуващия.[2] Новият документ може да бъде сериализиран (подаден на изхода) от процесора като стандартен XML или друг формат, като например HTML или прост текст.[3] XSLT най-често се използва за преобразуване на данни между различни XML схеми или за преобразуване на XML данни в уеб страници или PDF документи.
Remove ads
Приложение
Компютърни програми често използват XSLT за преобразуване на XML данни в HTML или XHTML документи, които да бъдат показани на уеб страница. Преобразуването може да се изпълни динамично от клиента или сървъра, или като част от процесът на публикация. Използва се и за създаване на визуализации за печат или директна видео визуализация, най-често чрез преобразуване на оригиналния XML в XSL-FO което след това може да се преобразува до различни формати, включително PDF, PostScript и PNG. XSLT може да превежда и XML документи между различни XML схеми или да прави промени в рамките на една схема, като например премахване на ненужни данни.
Remove ads
История
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 версии; Всякакви разлики между версиите ще бъдат изрично посочвани в самия текст.
Remove ads
Концепция
Обща постановка

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).
Remove ads
Производителност
Производителността на XSLT процесорите се покачва постепенно с развитието на технологията, въпреки че първият XSLT процесор – xt (на Джеймс Кларкне била победена през първите няколко години.[22]
Най-ранните XSLT процесори били интерпретатори. По-късно, генерирането на код до портативни езици от „средно“ ниво (като Java bytecode или .NET Common Intermediate Language) като цел става все по-разпространено. Въпреки това, дори и интерпретаторите обикновено имат отделни фази за анализ и изпълнение, позволявайки създаването на оптимизирано дърво в паметта, което да се използва в множество трансформации. Това изключително подобрява производителността на онлайн приложения, където една и съща трансформация се прилага много пъти в секунда върху различни входни документи.[23] Това разделение се отразява и в дизайнът на XSLT API-та (като например JAXP).
Първите XSLT процесори правели много малко оптимизации. Стиловите документи били прочитани в DOM дървета и процесора действал директно върху тях. XPath реализациите също не били оптимизирани. Все повече, XSLT процесорите използват оптимизационни техники от функционалното програмиране и езици за заявки към бази данни. Такива техники са например статично пренаписване на дърво на изразите (например с цел извеждане на изчисления извън цикли), и късно изпълнение на навързани стъпки с цел намаляване на използваната памет при временни резултати (което позволява „ранен изход“ когато процесора може да оцени израз като following-sibling::*[1]
без пълна оценка на всички под-изрази). Много процесори също използват дървета, които са по-ефективни (и като памет и като изпълнение) от стандартни DOM дървета.
Remove ads
XSLT и потоци
XSLT 1.0 и XSLT 2.0 са проектирани да позволяват предаване на изходът от преобразуването като поток. Това означава, че целият вход трябва да бъде в паметта преди да се започне XML обработката. Това поведение осигурява „стабилност“ на документа.
Бъдещи версии на XSLT ще позволяват и на входа да бъде прочитан като поток. Това ще позволи на реализациите да имат ниско съотношение между входът и изходът записан в паметта. Това е особено важно когато множество преобразувания са свързани в XML поточни линии, като например XProc.
Remove ads
XSLT и XPath
За повече информация относно тази тема виж XPath.
XSLT разчита на XPath за намиране на части от дървото на входния документ, както и за извършването на изчисления. XPath съдържа също и множество функции, към което XSLT добавя и свои. Това добавя особена сила и гъвкавост на XSLT.
XSLT 1.0 използва XPath 1.0. Аналогично, XSLT 2.0 използва XPath 2.0; Двете спецификации са публикувани заедно.
Източници
Литература
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads