XSLT (Extensible Stylesheet Language Transformations) је језик за трансформисање XML докумената[1] који касније могу бити конвертовани и у остале формате као што су PDF, PostScript и PNG.[2] XSLT 1.0 је подржан у свим данашњим претраживачима.

Улазни документи су XML фајлови, али се може користити било шта од чега се може креирати XQuery и XPath модел података, као што су релационе базе података.[1]

Према XSL трансформацијама се односимо као према програмском језику, јер је систем упита који се може описати Тјуринговом машином, тј. XSLT је Туринг-потпун.[3]

Историја уреди

Функционални језици су имали огроман утицај на XSLT.[4] Највећи утицај је имао DSSSL, који је форматирао SGML као што и XSLT форматира XML.[5]

  • XSLT 1.0: XSLT је био део World Wide Web Consortiumовог (W3C) Extensible Stylesheet Language (XSL) 1998–1999 пројекта у коме су такође настали XSL-FO и XPath. Неки чланови који су креирали XSLT, укључујући James Clark-a, уредника, претходно су радили на креирању DSSSL. XSLT 1.0 објављен у новембру 1999.[6]
  • XSLT 2.0: након неуспешног покушаја да се направи варзија 1.1 2001. године,[7] радна група XSL је удружила снаге са XQueryјевом радном групом и направили су XPath 2.0,[8] са богатијим моделом података и системом заснованим на XML Schema. Најновија верзија је XSLT 2.0,[9] развијена је од стране Michael Kaya. Од 2010, XSLT 1.0[10] се и даље широко употребљава, али 2.0 верзије није подржан од стране веб прегледача или у окружењима попут LAMPа.
  • Од октобра 2014. године карактерсистике XSLT 3.0 обухватају:[11]
    • Streaming трансформација: у претходним верзијама потпуни унос докумената је морао бити учитан у меморију пре обраде,[12] а испис није могао бити приказан док процесуирање није било завршено. Радна верзија XML streaminga ће бити коришћена за процесирање докумената који су исувише велики да стану у меморију, или када су трансформације писане у XML Pipelines.
    • Побољшања у модуларност великих stylesheet-ова.
    • Побољшано управљање динамичким грешакама, на пример xsl:try инструкција.
    • Функције сада могу бити аргументи другим функцијама.

Дизајн и моделирање процеса уреди

 
Дијаграм тока процеса и основних елемената XСЛТа.

XSLT користи један или више XML изворних докумената и један или више XSLT stylesheetова и процесуира их да би направио излазни документ. У поређењу са широко употребљаваним императивним програмирањем, коме, на пример, припада и језик C, XSLT је декларативни језик.[13] Основа процесне парадигме је повезивање образаца.[14] Уместо набрајања императивног низа наредби које се изводуле у окружењу, треба дефинисати само како руковати са повезивањем чворова одређеног XPath образца, а ако се деси да процесор наиђе на неки, садржај образаца ефикасно обрађује функционалне изразе који директно представљају свој добијени формулар - резултујуће дрво, које је основа за процесорев излаз.

Процесор прати фиксиран алгоритам.[15] На почетку, уз претпоставку да је stylesheet учитан и припремљен, процесор гради изворно дрво од улазног XML документа. Затим се обрађује коријенски чвор изворног дрвета, налази се одговарајући шаблон за тај чвор у stylesheet-у, и проверава се садржај шаблона. Инструкције у сваком шаблону углавном усмеравају процесор или да ствара чворове у резултујућем дрвету, или да обради више чворова у изворном дрвета на исти начин као и коренски чвор. Излаз представља резултатирајуће дрво.

Имплементација порцесора уреди

  • -Алтова RaptorXML Сервер: cross-платформа која подржава XSLT 1.0 и 2.0, већину XPath 3.0, и неке делове из XSLT 3.0 радног нацрта; такође и XQuery. Дозвољава операције командне линије и интерфејса COM, Java и .NET[16] и такође укључује уграђен HTTP сервер.
  • Exselt:[17] XSLT 3.0 процесор који ради на .NET frameworku написаном у F#. Потпуно подржава XSLT 3.0 нацрт, XPath 3.0 препоруку и XDM 3.0 препоручене стандарде.
  • libxslt је бесплатна библиотека реализована под МИТ лиценцом која се може поново користити у комерцијалним апликацијама. Базирана је на libxml и имплементирана на C- у због брзине и портабилности. Подржава XSLT 1.0 и EXSLT екстензије.[18]
  • MSXML и .NET. MSXML укључују XSLT 1.0 процесор. Од MSXML 4.0 укључена је алатка командне линије msxsl.exe.[30]
  • Saxon: XSLT (2.0 и делом 3.0) и XQuery 3.0 процесор са отвореним кодом и власничким софтвером за самосталне операције и за Java, JavaScript[31] и .NET.
  • QuiXSLT: XSLT 3.0 процесор који ради стреаминг имплементиран у Javi од стране Innovimaxa и INRIA.[32]
  • Xalan: XSLT 1.0 процесор отвореног кода од Apache Software Foundation доступан самостално али и за Javu и C++.
  • Веб прегледачи: Safari, Chrome, Firefox, Opera и Internet Explorer подржавају XSLT 1.0. Ни један изворно не подржава XSLT 2.0, иако производи треће стране као што су Saxon-CE[33] и Frameless[34] могу обезбедити ову функционалност.[35][36] Веб прегледачи могу обављати трансформације над XML датотекама у ходу и приказати резултат обраде у прозору прегледача. Ово се обавља уграђивањем XSL у XML документ или се упућује на фајл који садржи XSL инструкције из XML документа. Овај други метод не може да ради са Chromом због безбедносног модела.[37]
  • XMLStarlet је "листа алатки командне линије које могу бити кориштене да трансформишу, изаберу, тестирају и уреде XML документа". Може "применити XSLT stylesheet-ове на XML документа" и не захтева Javu. Користи libxslt и подржава XSLT 1.0.
  • Xuriella[38] i Plexippus-xpath[39] су XSLT 1.0 процесори писани у Common Lispu.

Перформансе уреди

Већина ранијих XSLT процесора су преводиоци. У скорије време, код све учесталије користи преносиве средње језике (као што су Java bytecode или .NET Common Intermediate Language) као циљ. Међутим, чак и интерпретативни производи углавном нуде засебне анализе и фазе извршавања, омогућавајући да се оптимално изразно дрво креира у меморији и поново користити за обављање разних трансформација.

Ово омогућава значајне предности перформанси у онлајн издавачким програмима, где је иста трансформација примењена много пута у секунди над различитим изворним документима.[40] Ово раздвајање се огледа у дизајну XSLT-а који процесуира API-је (као што је Java API за XML процесирање JAXPа).

Ранији XSLT процесорс имали су врло мало оптимизације. Stylesheet документа су учитавана у Document Object Modelе а процесор делује на њих директно. XPath алати такође нису били оптимизовани. Међутим, све већем упоребом, XSLT процесори почињу користити оптимизационе технике функционалних језика и релационих упитних језика, као што су статичка преписивања дрвећа (нпр. изместити рачунанања изван петљи) и лење проточне процене да би се смањио меморијски отисак произведен међурезултатима (и дозволио "рани излазак" када процесор може оценити израз као што је following-sibling::*[1] без потпуног рачунања подизраза). Многи процесори користе репрезентацију дрвета која је значајно ефикаснија (и у времену и у порстору)[41] него имплементација опште намене.

У јуну 2014, Debbie Lockett и Michael Kay представили су бенцхмаркинг оквир отвореног кода за XSLT процесоре назван XT-Speedo.[42]

XSLT типови медиа уреди

<output> елемент може прихватити тип media-type, који допушта да се постави тип медиа (или MIME type) за резултирајући излаз. На пример: <xsl:output output="xml" media-type="application/xml"/>. XSLT 1.0 препоручује општије типове атрибута text/xml и application/xml јер дуго времена није било регистрованог типа медија за XSLT. Тада је text/xsl постао de facto стандард. У XSLT 1.0 није било прецизирано како media-type вредности треба користити.

Објављивањем XSLT 2.0, W3C препоручује регистрацију MIME типа медија application/xslt+xml[43] који је касније био регистрован на Internet Assigned Numbers Authority (IANA).[44]

Радни нацрт XSLT је користио text/xsl у својим примерима и овај тип је имплементирао и настављао да промовише Microsoft у Internet Explorer-у[45] и MSXML. Широко је употребљивана и xml-stylesheet процесна инструкција. Зато, у пракси, корисници који желе да контролишу трансформацију у прегледачу кориштењем процесних инструкција морају користити нерегистрован медиа тип.[46]

XSLT примери уреди

Испод је пример долазног XML документа.

<?xml version="1.0" ?>
<osobe>
  <osoba username="PP1">
    <ime>Petar</ime>
    <prezime>Petrović</prezime>
  </osoba>
  <osoba username="MM1">
    <ime>Marko</ime>
    <prezime>Marković</prezime>
  </osoba>
</osobe>

Пример 1 (трансформисање из XSLT у XML) уреди

Овај XSLT stylesheet обезбјеђује шаблон за превођење 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="/osobe">
    <root>
      <xsl:apply-templates select="osoba"/>
    </root>
  </xsl:template>

  <xsl:template match="osoba">
    <ime username="{@username}">
      <xsl:value-of select="ime" />
    </ime>
  </xsl:template>

</xsl:stylesheet>

Ово доводи до новог XML документа, који има другачију структуру:

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <ime username="PP1">Petar</ime>
  <ime username="MM1">Marko</ime>
</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="/osobe">
    <html>
      <head> <title>Testiranje XML primera</title> </head>
      <body>
        <h1>Osobe</h1>
        <ul>
          <xsl:apply-templates select="osoba">
            <xsl:sort select="prezime" />
          </xsl:apply-templates>
        </ul>
      </body>
    </html>
  </xsl:template>

  <xsl:template match="osoba">
    <li>
      <xsl:value-of select="prezime"/><xsl:text>, </xsl:text><xsl:value-of select="ime"/>
    </li>
  </xsl:template>

</xsl:stylesheet>

са XML улазном датотеком приказаном горе резултира у наредном XHTML (размак је прилагођен због читљивости):

<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml">
  <head> <title>Testiranje XML primera</title> </head>
  <body>
    <h1>Osobe</h1>
      <ul>
        <li>Markovic, Marko</li>
        <li>Petrovic, Petar</li>
      </ul>
  </body>
</html>

Овај XHTML генерише приказани излаз када је покренут у веб прегледачу.

 
Добијени XHTML генерисан од XML улазне датотеке и XSLT трансформације.

Да би веб прегледач могао аутоматски да примењују XSL трансформацију у XML документ на екрану, XML stylesheet са инструкцијама за процесирање може да се убаци у XML. Тако, на пример, ако је stylesheet у Примеру 2 изнад био доступни као "primer2.xsl", следећа упутства се могу додати на оригинални долазни XML:[47]

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

У овом примеру, text/xsl је технички нетачно, судећи по W3C спецификацијама[47] (по којима је то требало да буде text/xml), али то је једина врста медија који је широко подржан од стране браузера од 2009.

Референце уреди

  1. ^ а б „Трансформатион”. 19. 9. 2012. 
  2. ^ „XМЛ Оутпут Метход”. 19. 9. 2012. 
  3. ^ Кепсер, Степхан. „А Симпле Прооф фор тхе Туринг-Цомплетенесс оф XСЛТ анд XQуерy”. Процеедингс оф Еxтреме Маркуп Лангуагес. Архивирано из оригинала 04. 05. 2012. г. Приступљено 30. 11. 2016. 
  4. ^ Мицхаел Каy. „Wхат кинд оф лангуаге ис XСЛТ?”. 
  5. ^ „А Пропосал фор XСЛ”. W3Ц. 
  6. ^ „XМЛ анд Семантиц Wеб W3Ц Стандардс Тимелине” (ПДФ). Архивирано из оригинала (ПДФ) 24. 04. 2013. г. Приступљено 30. 11. 2016. 
  7. ^ „XСЛ Трансформатионс (XСЛТ) Версион 1.1”. W3.орг. 24. 8. 2001. Приступљено 12. 7. 2014. 
  8. ^ „XМЛ Патх Лангуаге (XПатх) 2.0 (Сецонд Едитион)”. W3.орг. 14. 12. 2010. Приступљено 12. 7. 2014. 
  9. ^ „XСЛ Трансформатионс (XСЛТ) Версион 2.0”. W3.орг. 23. 1. 2007. Приступљено 12. 7. 2014. 
  10. ^ „XСЛ Трансформатионс (XСЛТ)”. W3.орг. 16. 11. 1999. Приступљено 12. 7. 2014. 
  11. ^ „Wхат'с Неw ин XСЛТ 3.0?”. w3. Приступљено 6. 1. 2014. 
  12. ^ Каy, Мицхаел. „А Стреаминг XСЛТ Процессор”. Балисаге: Тхе Маркуп Цонференце 2010 Процеедингс. Приступљено 15. 2. 2012. 
  13. ^ „Дисцовер тхе Wондерс оф XСЛТ: XСЛТ Qуиркс”. Архивирано из оригинала 09. 07. 2011. г. Приступљено 30. 11. 2016. „XСЛТ ис а верy специализед лангуаге wитх а дистинцт децларативе флавор. 
  14. ^ Каy, Мицхаел. „Wхат кинд оф лангуаге ис XСЛТ?”. ИБМ. Приступљено 13. 11. 2013. 
  15. ^ „XСЛТ Дефинитионс”. „XСЛТ децларатионс дефине а сет оф рулес анд гуиделинес тхат аре апплиед дуринг процессинг аццординг то а предефинед алгоритхм. 
  16. ^ „РапторXМЛ”. Приступљено 21. 8. 2013. 
  17. ^ „Еxселт XСЛТ Процессор”. Еxселт. 6. 6. 2015. Архивирано из оригинала 18. 10. 2016. г. Приступљено 30. 11. 2016. 
  18. ^ „Тхе XСЛТ C либрарy фор ГНОМЕ: либxслт”. Приступљено 23. 11. 2012. 
  19. ^ „Тхе XСЛТ C либрарy фор ГНОМЕ: Тхе xслтпроц тоол”. Приступљено 23. 11. 2012. 
  20. ^ „xслтпроц ман паге”. Приступљено 23. 11. 2012. 
  21. ^ „Неw пацкаге: либxслт”. Приступљено 23. 11. 2012. 
  22. ^ „Тхе WебКит Опен Соурце Пројецт - XСЛТ”. Архивирано из оригинала 05. 09. 2015. г. Приступљено 25. 10. 2009. 
  23. ^ „Тхе XМЛ C парсер анд тоолкит оф Гноме: Пyтхон анд биндингс”. Приступљено 23. 11. 2012. 
  24. ^ „XМЛ::ЛибXСЛТ - Интерфаце то тхе ГНОМЕ либxслт либрарy”. ЦПАН. Приступљено 23. 11. 2012. 
  25. ^ „либxслт-рубy”. Приступљено 23. 11. 2012. 
  26. ^ „либxмл”. Приступљено 23. 11. 2012. 
  27. ^ „цл-либxмл2 Хигх-левел wраппер ароунд либxмл2 анд либxслт либрариес”. 
  28. ^ „ТцлXМЛ”. Приступљено 21. 5. 2013. 
  29. ^ „либxмл++”. соурцефорге.нет. Приступљено 23. 11. 2012. 
  30. ^ „Цомманд Лине Трансформатион Утилитy (мсxсл.еxе)”. Мицрософт. Приступљено 22. 10. 2012. 
  31. ^ „Саxон Цлиент Едитион 1.0”. Саxоница. Приступљено 14. 8. 2012. 
  32. ^ „QуиXСЛТ » QуиX-Тоол Суите”. Пројецт.инриа.фр. 14. 11. 2013. Приступљено 12. 7. 2014. 
  33. ^ Саxоница. „Абоут Саxон-ЦЕ”. Приступљено 16. 6. 2012. 
  34. ^ Фрамелесс. „Фрамелесс XСЛТ/XПатх 2.0 процессор”. Приступљено 9. 6. 2014. [мртва веза]
  35. ^ Делпратт, О'Неил (2013). „XМЛ он тхе wеб: ис ит стилл релевант?”. XМЛ Лондон 2013: 35—48. ИСБН 978-0-9926471-0-0. дои:10.14337/XМЛЛондон13.Делпратт01. Архивирано из оригинала 13. 03. 2017. г. Приступљено 30. 11. 2016. 
  36. ^ Броерсма, Робберт; Ван дер Колк, Yолијн (2014). „Фрамелесс фор XМЛ - Тхе Реацтиве Револутион”. XМЛ Лондон 2014: 128—132. ИСБН 978-0-9926471-1-7. дои:10.14337/XМЛЛондон14.Броерсма01. Архивирано из оригинала 03. 03. 2016. г. Приступљено 30. 11. 2016. 
  37. ^ „Цан'т реад ан XМЛ анд/ор XСЛТ ин Гоогле Цхроме”. Стацк Оверфлоw. 2014. Приступљено 12. 7. 2014. 
  38. ^ „Xуриелла XСЛТ”. 
  39. ^ „Плеxиппус XПатх”. 
  40. ^ Саxон: Анатомy оф ан XСЛТ процессор - Артицле десцрибинг имплементатион & оптимизатион детаилс оф а популар XСЛТ процессор.
  41. ^ Лумлеy, Јохн; Каy, Мицхаел (2015). „Импровинг Паттерн Матцхинг Перформанце ин XСЛТ”. XМЛ Лондон 2015: 9—25. ИСБН 978-0-9926471-2-4. дои:10.14337/XМЛЛондон15.Лумлеy01. Архивирано из оригинала 15. 04. 2016. г. Приступљено 30. 11. 2016. 
  42. ^ Каy, Мицхаел; Лоцкетт, Деббие (2014). „Бенцхмаркинг XСЛТ Перформанце”. XМЛ Лондон 2014: 10—23. ИСБН 978-0-9926471-1-7. дои:10.14337/XМЛЛондон14.Каy01. Архивирано из оригинала 04. 03. 2016. г. Приступљено 30. 11. 2016. 
  43. ^ „XСЛ Трансформатионс (XСЛТ) Версион 2.0”. W3Ц. Приступљено 19. 10. 2012. 
  44. ^ „Апплицатион Медиа Тyпес”. ИАНА. Приступљено 19. 10. 2012. 
  45. ^ „XСЛТ Реqуирементс фор Виеwинг XМЛ ин а Броwсер”. Мицрософт. Приступљено 19. 10. 2012. 
  46. ^ Каy, Мицхаел (2008). XСЛТ 2.0 анд XПатх 2.0 Программер'с Референце. Wилеy. стр. 100. ИСБН 978-0-470-19274-0. 
  47. ^ а б „XСЛ Трансформатионс (XСЛТ) Версион 1.0: W3Ц Рецоммендатион – Ембеддинг Стyлесхеетс”. W3Ц. 16. 11. 1999. 

Додатна литература уреди

Спољашње везе уреди

Документација
XSLT код библиотека
  • EXSLT Архивирано на сајту Wayback Machine (19. јул 2006) је широко распрострањена иницијатива заједница да обезбеде проширења XСЛТ.
  • FXSL је библиотека која спроводи подршку функција вишег реда у XSLT. FXSLT је написана у самом XSLT-у.
  • The XSLT Standard Library пружа XSLT дивелопер са сетом XСЛТ образаца за најчешће коришћених функција. Ово се имплементира само у XSLT, то јест не користе се никакви додаци.
  • Kernow GUI за Saxon који обезбеђује „и клик интерфејс за покретање трансформација.
  • xslt.js – Transform XML with XSLT Архивирано 2013-01-05 на сајту Archive.today JavaScript библиотека које трансформисе XML у XSLT u pregledaču.