XSLT

Из Википедије, слободне енциклопедије

XSLT (Extensible Stylesheet Language Transformations) je jezik za transformisanje XML dokumenata[1] koji kasnije mogu biti konvertovani i u ostale formate kao što su PDF, PostScript i PNG.[2] XSLT 1.0 je podržan u svim današnjim pretraživačima.

Ulazni dokumenti su XML fajlovi, ali se može koristiti bilo šta od čega se može kreirati XQuery i XPath model podataka, kao što su relacione baze podataka.[1]

Prema XSL transformacijama se odnosimo kao prema programskom jeziku, jer je sistem upita koji se može opisati Tjuringovom mašinom, tj. XSLT je Turing-potpun.[3]

Istorija[уреди]

Funkcionalni jezici su imali ogroman uticaj na XSLT.[4] Najveći uticaj je imao DSSSL, koji je formatirao SGML kao što i XSLT formatira XML.[5]

  • XSLT 1.0: XSLT je bio deo World Wide Web Consortiumovog (W3C) Extensible Stylesheet Language (XSL) 1998–1999 projekta u kome su takođe nastali XSL-FO i XPath. Neki članovi koji su kreirali XSLT, uključujući James Clark-a, urednika, prethodno su radili na kreiranju DSSSL. XSLT 1.0 objavljen u novembru 1999.[6]
  • XSLT 2.0: nakon neuspešnog pokušaja da se napravi varzija 1.1 2001. godine,[7] radna grupa XSL je udružila snage sa XQueryjevom radnom grupom i napravili su XPath 2.0,[8] sa bogatijim modelom podataka i sistemom zasnovanim na XML Schema. Najnovija verzija je XSLT 2.0,[9] razvijena je od strane Michael Kaya. Od 2010, XSLT 1.0[10] se i dalje široko upotrebljava, ali 2.0 verzije nije podržan od strane veb pregledača ili u okruženjima poput LAMPa.
  • Od oktobra 2014. godine karaktersistike XSLT 3.0 obuhvataju:[11]
    • Streaming transformacija: u prethodnim verzijama potpuni unos dokumenata je morao biti učitan u memoriju pre obrade,[12] a ispis nije mogao biti prikazan dok procesuiranje nije bilo završeno. Radna verzija XML streaminga će biti korišćena za procesiranje dokumenata koji su isuviše veliki da stanu u memoriju, ili kada su transformacije pisane u XML Pipelines.
    • Poboljšanja u modularnost velikih stylesheet-ova.
    • Poboljšano upravljanje dinamičkim grešakama, na primer xsl:try instrukcija.
    • Funkcije sada mogu biti argumenti drugim funkcijama.

Dizajn i modeliranje procesa[уреди]

Dijagram toka procesa i osnovnih elemenata XSLTa.

XSLT koristi jedan ili više XML izvornih dokumenata i jedan ili više XSLT stylesheetova i procesuira ih da bi napravio izlazni dokument. U poređenju sa široko upotrebljavanim imperativnim programiranjem, kome, na primer, pripada i jezik C, XSLT je deklarativni jezik.[13] Osnova procesne paradigme je povezivanje obrazaca.[14] Umesto nabrajanja imperativnog niza naredbi koje se izvodule u okruženju, treba definisati samo kako rukovati sa povezivanjem čvorova određenog XPath obrazca, a ako se desi da procesor naiđe na neki, sadržaj obrazaca efikasno obrađuje funkcionalne izraze koji direktno predstavljaju svoj dobijeni formular - rezultujuće drvo, koje je osnova za procesorev izlaz.

Procesor prati fiksiran algoritam.[15] Na početku, uz pretpostavku da je stylesheet učitan i pripremljen, procesor gradi izvorno drvo od ulaznog XML dokumenta. Zatim se obrađuje korijenski čvor izvornog drveta, nalazi se odgovarajući šablon za taj čvor u stylesheet-u, i proverava se sadržaj šablona. Instrukcije u svakom šablonu uglavnom usmeravaju procesor ili da stvara čvorove u rezultujućem drvetu, ili da obradi više čvorova u izvornom drveta na isti način kao i korenski čvor. Izlaz predstavlja rezultatirajuće drvo.

Implementacija porcesora[уреди]

  • -Altova RaptorXML Server: cross-platforma koja podržava XSLT 1.0 i 2.0, većinu XPath 3.0, i neke delove iz XSLT 3.0 radnog nacrta; takođe i XQuery. Dozvoljava operacije komandne linije i interfejsa COM, Java i .NET[16] i takođe uključuje ugrađen HTTP server.
  • Exselt:[17] XSLT 3.0 procesor koji radi na .NET frameworku napisanom u F#. Potpuno podržava XSLT 3.0 nacrt, XPath 3.0 preporuku i XDM 3.0 preporučene standarde.
  • libxslt je besplatna biblioteka realizovana pod MIT licencom koja se može ponovo koristiti u komercijalnim aplikacijama. Bazirana je na libxml i implementirana na C- u zbog brzine i portabilnosti. Podržava XSLT 1.0 i EXSLT ekstenzije.[18]
  • MSXML i .NET. MSXML uključuju XSLT 1.0 procesor. Od MSXML 4.0 uključena je alatka komandne linije msxsl.exe.[30]
  • Saxon: XSLT (2.0 i delom 3.0) i XQuery 3.0 procesor sa otvorenim kodom i vlasničkim softverom za samostalne operacije i za Java, JavaScript[31] i .NET.
  • QuiXSLT: XSLT 3.0 procesor koji radi streaming implementiran u Javi od strane Innovimaxa i INRIA.[32]
  • Xalan: XSLT 1.0 procesor otvorenog koda od Apache Software Foundation dostupan samostalno ali i za Javu i C++.
  • Veb pregledači: Safari, Chrome, Firefox, Opera i Internet Explorer podržavaju XSLT 1.0. Ni jedan izvorno ne podržava XSLT 2.0, iako proizvodi treće strane kao što su Saxon-CE[33] i Frameless[34] mogu obezbediti ovu funkcionalnost.[35][36] Veb pregledači mogu obavljati transformacije nad XML datotekama u hodu i prikazati rezultat obrade u prozoru pregledača. Ovo se obavlja ugrađivanjem XSL u XML dokument ili se upućuje na fajl koji sadrži XSL instrukcije iz XML dokumenta. Ovaj drugi metod ne može da radi sa Chromom zbog bezbednosnog modela.[37]
  • XMLStarlet je "lista alatki komandne linije koje mogu biti korištene da transformišu, izaberu, testiraju i urede XML dokumenta". Može "primeniti XSLT stylesheet-ove na XML dokumenta" i ne zahteva Javu. Koristi libxslt i podržava XSLT 1.0.
  • Xuriella[38] i Plexippus-xpath[39] su XSLT 1.0 procesori pisani u Common Lispu.

Performanse[уреди]

Većina ranijih XSLT procesora su prevodioci. U skorije vreme, kod sve učestalije koristi prenosive srednje jezike (kao što su Java bytecode ili .NET Common Intermediate Language) kao cilj. Međutim, čak i interpretativni proizvodi uglavnom nude zasebne analize i faze izvršavanja, omogućavajući da se optimalno izrazno drvo kreira u memoriji i ponovo koristiti za obavljanje raznih transformacija.

Ovo omogućava značajne prednosti performansi u onlajn izdavačkim programima, gde je ista transformacija primenjena mnogo puta u sekundi nad različitim izvornim dokumentima.[40] Ovo razdvajanje se ogleda u dizajnu XSLT-a koji procesuira API-je (kao što je Java API za XML procesiranje JAXPa).

Raniji XSLT procesors imali su vrlo malo optimizacije. Stylesheet dokumenta su učitavana u Document Object Modele a procesor deluje na njih direktno. XPath alati takođe nisu bili optimizovani. Međutim, sve većem uporebom, XSLT procesori počinju koristiti optimizacione tehnike funkcionalnih jezika i relacionih upitnih jezika, kao što su statička prepisivanja drveća (npr. izmestiti računananja izvan petlji) i lenje protočne procene da bi se smanjio memorijski otisak proizveden međurezultatima (i dozvolio "rani izlazak" kada procesor može oceniti izraz kao što je following-sibling::*[1] bez potpunog računanja podizraza). Mnogi procesori koriste reprezentaciju drveta koja je značajno efikasnija (i u vremenu i u porstoru)[41] nego implementacija opšte namene.

U junu 2014, Debbie Lockett i Michael Kay predstavili su benchmarking okvir otvorenog koda za XSLT procesore nazvan XT-Speedo.[42]

XSLT tipovi media[уреди]

<output> element može prihvatiti tip media-type, koji dopušta da se postavi tip media (ili MIME type) za rezultirajući izlaz. Na primer: <xsl:output output="xml" media-type="application/xml"/>. XSLT 1.0 preporučuje opštije tipove atributa text/xml i application/xml jer dugo vremena nije bilo registrovanog tipa medija za XSLT. Tada je text/xsl postao de facto standard. U XSLT 1.0 nije bilo precizirano kako media-type vrednosti treba koristiti.

Objavljivanjem XSLT 2.0, W3C preporučuje registraciju MIME tipa medija application/xslt+xml[43] koji je kasnije bio registrovan na Internet Assigned Numbers Authority (IANA).[44]

Radni nacrt XSLT je koristio text/xsl u svojim primerima i ovaj tip je implementirao i nastavljao da promoviše Microsoft u Internet Explorer-u[45] i MSXML. Široko je upotrebljivana i xml-stylesheet procesna instrukcija. Zato, u praksi, korisnici koji žele da kontrolišu transformaciju u pregledaču korištenjem procesnih instrukcija moraju koristiti neregistrovan media tip.[46]

XSLT primeri[уреди]

Ispod je primer dolaznog XML dokumenta.

 1 <?xml version="1.0" ?>
 2 <osobe>
 3   <osoba username="PP1">
 4     <ime>Petar</ime>
 5     <prezime>Petrović</prezime>
 6   </osoba>
 7   <osoba username="MM1">
 8     <ime>Marko</ime>
 9     <prezime>Marković</prezime>
10   </osoba>
11 </osobe>

Primer 1 (transformisanje iz XSLT u XML)[уреди]

Ovaj XSLT stylesheet obezbjeđuje šablon za prevođenje XML dokumenta.

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
 3   <xsl:output method="xml" indent="yes"/>
 4 
 5   <xsl:template match="/osobe">
 6     <root>
 7       <xsl:apply-templates select="osoba"/>
 8     </root>
 9   </xsl:template>
10 
11   <xsl:template match="osoba">
12     <ime username="{@username}">
13       <xsl:value-of select="ime" />
14     </ime>
15   </xsl:template>
16 
17 </xsl:stylesheet>

Ovo dovodi do novog XML dokumenta, koji ima drugačiju strukturu:

1 <?xml version="1.0" encoding="UTF-8"?>
2 <root>
3   <ime username="PP1">Petar</ime>
4   <ime username="MM1">Marko</ime>
5 </root>

Primer 2 (prevođenje iz XML u XHTML)[уреди]

Procesovanje XSLT fajla

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <xsl:stylesheet
 3   version="1.0"
 4   xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 5   xmlns="http://www.w3.org/1999/xhtml">
 6 
 7   <xsl:output method="xml" indent="yes" encoding="UTF-8"/>
 8 
 9   <xsl:template match="/osobe">
10     <html>
11       <head> <title>Testiranje XML primera</title> </head>
12       <body>
13         <h1>Osobe</h1>
14         <ul>
15           <xsl:apply-templates select="osoba">
16             <xsl:sort select="prezime" />
17           </xsl:apply-templates>
18         </ul>
19       </body>
20     </html>
21   </xsl:template>
22 
23   <xsl:template match="osoba">
24     <li>
25       <xsl:value-of select="prezime"/><xsl:text>, </xsl:text><xsl:value-of select="ime"/>
26     </li>
27   </xsl:template>
28 
29 </xsl:stylesheet>

sa XML ulaznom datotekom prikazanom gore rezultira u narednom XHTML (razmak je prilagođen zbog čitljivosti):

<?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>

Ovaj XHTML generiše prikazani izlaz kada je pokrenut u veb pregledaču.

Dobijeni XHTML generisan od XML ulazne datoteke i XSLT transformacije.

Da bi veb pregledač mogao automatski da primenjuju XSL transformaciju u XML dokument na ekranu, XML stylesheet sa instrukcijama za procesiranje može da se ubaci u XML. Tako, na primer, ako je stylesheet u Primeru 2 iznad bio dostupni kao "primer2.xsl", sledeća uputstva se mogu dodati na originalni dolazni XML:[47]

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

U ovom primeru, text/xsl je tehnički netačno, sudeći po W3C specifikacijama[47] (po kojima je to trebalo da bude text/xml), ali to je jedina vrsta medija koji je široko podržan od strane brauzera od 2009.

Reference[уреди]

  1. 1,0 1,1 „Transformation”. 19. 9. 2012. 
  2. „XML Output Method”. 19. 09. 2012. 
  3. Kepser, Stephan. „A Simple Proof for the Turing-Completeness of XSLT and XQuery”. Proceedings of Extreme Markup Languages. 
  4. Michael Kay. „What kind of language is XSLT?”. 
  5. „A Proposal for XSL”. W3C. 
  6. „XML and Semantic Web W3C Standards Timeline” (PDF). 
  7. „XSL Transformations (XSLT) Version 1.1”. W3.org. 24. 8. 2001. Приступљено 12. 7. 2014. 
  8. „XML Path Language (XPath) 2.0 (Second Edition)”. W3.org. 14. 12. 2010. Приступљено 12. 7. 2014. 
  9. „XSL Transformations (XSLT) Version 2.0”. W3.org. 23. 01. 2007. Приступљено 12. 7. 2014. 
  10. „XSL Transformations (XSLT)”. W3.org. 16. 11. 1999. Приступљено 12. 7. 2014. 
  11. „What's New in XSLT 3.0?”. w3. Приступљено 6. 1. 2014. 
  12. Kay, Michael. „A Streaming XSLT Processor”. Balisage: The Markup Conference 2010 Proceedings. Приступљено 15. 2. 2012. 
  13. „Discover the Wonders of XSLT: XSLT Quirks”. »XSLT is a very specialized language with a distinct declarative flavor.« 
  14. Kay, Michael. „What kind of language is XSLT?”. IBM. Приступљено 13. 11. 2013. 
  15. „XSLT Definitions”. »XSLT declarations define a set of rules and guidelines that are applied during processing according to a predefined algorithm.« 
  16. „RaptorXML”. Приступљено 21. 8. 2013. 
  17. „Exselt XSLT Processor”. Exselt. 06. 6. 2015. 
  18. „The XSLT C library for GNOME: libxslt”. Приступљено 23. 11. 2012. 
  19. „The XSLT C library for GNOME: The xsltproc tool”. Приступљено 23. 11. 2012. 
  20. „xsltproc man page”. Приступљено 23. 11. 2012. 
  21. „New package: libxslt”. Приступљено 23. 11. 2012. 
  22. „The WebKit Open Source Project - XSLT”. Приступљено 25. 10. 2009. 
  23. „The XML C parser and toolkit of Gnome: Python and bindings”. Приступљено 23. 11. 2012. 
  24. „XML::LibXSLT - Interface to the GNOME libxslt library”. CPAN. Приступљено 23. 11. 2012. 
  25. „libxslt-ruby”. Приступљено 23. 11. 2012. 
  26. „libxml”. Приступљено 23. 11. 2012. 
  27. „cl-libxml2 High-level wrapper around libxml2 and libxslt libraries”. 
  28. „TclXML”. Приступљено 21. 5. 2013. 
  29. „libxml++”. sourceforge.net. Приступљено 23. 11. 2012. 
  30. „Command Line Transformation Utility (msxsl.exe)”. Microsoft. Приступљено 22. 10. 2012. 
  31. „Saxon Client Edition 1.0”. Saxonica. Приступљено 14. 8. 2012. 
  32. „QuiXSLT » QuiX-Tool Suite”. Project.inria.fr. 14. 11. 2013. Приступљено 12. 07. 2014. 
  33. Saxonica. „About Saxon-CE”. Приступљено 16. 6. 2012. 
  34. Frameless. „Frameless XSLT/XPath 2.0 processor”. Приступљено 09. 6. 2014. 
  35. Delpratt, O'Neil (2013). „XML on the web: is it still relevant?”. XML London 2013: 35—48. ISBN 978-0-9926471-0-0. doi:10.14337/XMLLondon13.Delpratt01. 
  36. Broersma, Robbert; Van der Kolk, Yolijn (2014). „Frameless for XML - The Reactive Revolution”. XML London 2014: 128—132. ISBN 978-0-9926471-1-7. doi:10.14337/XMLLondon14.Broersma01. 
  37. „Can't read an XML and/or XSLT in Google Chrome”. Stack Overflow. 2014. Приступљено 12. 7. 2014. 
  38. „Xuriella XSLT”. 
  39. „Plexippus XPath”. 
  40. Saxon: Anatomy of an XSLT processor - Article describing implementation & optimization details of a popular XSLT processor.
  41. Lumley, John; Kay, Michael (2015). „Improving Pattern Matching Performance in XSLT”. XML London 2015: 9—25. ISBN 978-0-9926471-2-4. doi:10.14337/XMLLondon15.Lumley01. 
  42. Kay, Michael; Lockett, Debbie (2014). „Benchmarking XSLT Performance”. XML London 2014: 10—23. ISBN 978-0-9926471-1-7. doi:10.14337/XMLLondon14.Kay01. 
  43. „XSL Transformations (XSLT) Version 2.0”. W3C. Приступљено 19. 10. 2012. 
  44. „Application Media Types”. IANA. Приступљено 19. 10. 2012. 
  45. „XSLT Requirements for Viewing XML in a Browser”. Microsoft. Приступљено 19. 10. 2012. 
  46. Kay, Michael (2008). XSLT 2.0 and XPath 2.0 Programmer's Reference. Wiley. стр. 100. ISBN 978-0-470-19274-0. 
  47. 47,0 47,1 „XSL Transformations (XSLT) Version 1.0: W3C Recommendation – Embedding Stylesheets”. W3C. 16. 11. 1999. 

Dodatna literatura[уреди]

Spoljašnje veze[уреди]

Dokumentacija
XSLT kod biblioteka
  • EXSLT je široko rasprostranjena inicijativa zajednica da obezbede proširenja XSLT.
  • FXSL je biblioteka koja sprovodi podršku funkcija višeg reda u XSLT. FXSLT je napisana u samom XSLT-u.
  • The XSLT Standard Library pruža XSLT diveloper sa setom XSLT obrazaca za najčešće korišćenih funkcija. Ovo se implementira samo u XSLT, to jest ne koriste se nikakvi dodaci.
  • Kernow GUI za Saxon koji obezbeđuje „i klik interfejs za pokretanje transformacija.
  • xslt.js – Transform XML with XSLT JavaScript biblioteka koje transformise XML u XSLT u pregledaču.