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 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
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]
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.
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]
Ovaj XHTML generiše prikazani izlaz kada je pokrenut u veb pregledaču.
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]
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.
EXSLTАрхивирано на сајту Wayback Machine (19. јул 2006) 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Архивирано на сајту Wayback Machine (4. јул 2008) GUI za Saxon koji obezbeđuje „i klik interfejs za pokretanje transformacija.
Овај чланак је започет или проширен кроз пројекат семинарских радова. Потребно је проверити превод, правопис и вики-синтаксу. Када завршите са провером, допишете да након |проверено=.