__БЕЗКН__ -{XSLT}- (-{Extensible Stylesheet Language Transformations}-) je jezik za transformisanje -{XML}- dokumenata-{}- koji kasnije mogu biti konvertovani i u ostale formate kao što su -{PDF}-, -{PostScript}- i -{PNG}-.-{}- -{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.-{}-
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.-{}-
Istorija Funkcionalni jezici su imali ogroman uticaj na -{XSLT}-.-{}- Najveći uticaj je imao -{DSSSL}-, koji je formatirao -{SGML}- kao što i -{XSLT}- formatira -{XML}-.-{}- -{XSLT 1.0}-: -{XSLT}- je bio deo -{World Wide Web Consortium}-ovog -{(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.-{}- -{XSLT 2.0}-: nakon neuspešnog pokušaja da se napravi varzija 1.1 2001. godine,-{}- radna grupa -{XSL}- je udružila snage sa -{XQuery}-jevom radnom grupom i napravili su -{XPath 2.0}-,-{}- sa bogatijim modelom podataka i sistemom zasnovanim na -{XML Schema}-. Najnovija verzija je -{XSLT 2.0}-,-{}- razvijena je od strane -{Michael Kaya}-. Od 2010, -{XSLT 1.0}--{}- se i dalje široko upotrebljava, ali 2.0 verzije nije podržan od strane veb pregledača ili u okruženjima poput -{LAMP}-a. Od oktobra 2014. godine karaktersistike -{XSLT 3.0}- obuhvataju:-{ }- -{Streaming}- transformacija: u prethodnim verzijama potpuni unos dokumenata je morao biti učitan u memoriju pre obrade,-{}- 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 stylesheet}-ova 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.-{}- Osnova procesne paradigme je povezivanje obrazaca.-{}- 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.-{}- 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}--{}- i takođe uključuje ugrađen -{HTTP}- server. -{Exselt}-:-{}- -{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.-{}- Može biti korištena u komandnoj liniji preko -{xsltproc}--{}- koji je uključen u -{OS X}--{}- i mnogim -{Linux}- distribucijama i može biti korišćena na -{Windowsu}- preko -{Cygwin}-a.-{}- -{WebKit}- i -{Blink}-, korišćeni u -{Safari}- i -{Chrome}- veb pregledačima respektivno, koriste -{libxslt}- biblioteku za obavljanje -{XSL}- transformacija.-{}- -{Bindings}- postoji za -{Python}-,-{}- -{Perl}-,-{}- -{Ruby}-,-{}- -{PHP}-,-{}- -{Common Lisp}-,-{}- -{Tcl}-,-{}- i -{C++}-.-{}- -{MSXML}- i -{.NET}-. -{MSXML}- uključuju -{XSLT 1.0}- procesor. Od -{MSXML 4.0}- uključena je alatka komandne linije -{msxsl.exe}-.-{}- -{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}--{}- i -{.NET.}- -{QuiXSLT}-: -{XSLT 3.0}- procesor koji radi streaming implementiran u -{Javi}- od strane -{Innovimaxa}- i -{INRIA}-.-{}- -{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}--{}- i -{Frameless}--{}- mogu obezbediti ovu funkcionalnost.-{}--{}- 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 -{Chrom}-om zbog bezbednosnog modela.-{}- -{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}--{ i Plexippus-xpath}- 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.-{Saxon: Anatomy of an XSLT processor - Article describing implementation & optimization details of a popular XSLT processor.}- Ovo razdvajanje se ogleda u dizajnu -{XSLT}--a koji procesuira -{API}--je (kao što je -{Java API}- za -{XML}- procesiranje -{JAXP}-a).
Raniji -{XSLT}- procesors imali su vrlo malo optimizacije. -{Stylesheet}- dokumenta su učitavana u -{Document Object Model}-e 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::*}- bez potpunog računanja podizraza). Mnogi procesori koriste reprezentaciju drveta koja je značajno efikasnija (i u vremenu i u porstoru)-{}- 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}-.-{}-
-{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}--{}- koji je kasnije bio registrovan na-{ Internet Assigned Numbers Authority (IANA)}-.-{}-
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-{}- 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.-{}-
-{XSLT}- primeri Ispod je primer dolaznog -{XML}- dokumenta.<?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>
Primer 1 (transformisanje iz -{XSLT}- u -{XML}-) Ovaj -{XSLT stylesheet}- obezbjeđuje šablon za prevođenje -{XML}- dokumenta.<?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>
Ovo dovodi do novog -{XML}- dokumenta, koji ima drugačiju strukturu:
<?xml version="1.0" encoding="UTF-8"?> <root> <ime username="PP1">Petar</ime> <ime username="MM1">Marko</ime> </root>
Primer 2 (prevođenje iz -{XML}- u -{XHTML}-) Procesovanje -{XSLT}- fajla <?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> 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.|150x150п 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:}-
<?xml-stylesheet href="primer2.xsl" type="text/xsl" ?>