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]
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 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.
msxsl.exe
.[30]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]
<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]
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>
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>
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.
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.
Овај чланак је започет или проширен кроз пројекат семинарских радова. Потребно је проверити превод, правопис и вики-синтаксу. Када завршите са провером, допишете да након |проверено=. |