XSLT
__БЕЗКН__
-{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 

-{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.-{}- 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::*[1]}- 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.

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

U ovom primeru, -{text/xsl}- je tehnički netačno, sudeći po -{W3C}- specifikacijama-{}- (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

Dodatna literatura 
 -{XSLT}- od -{Doug Tidwell}-, objavio -{O’Reilly}- -978-0-596-00053-0-
 -{XSLT Cookbook}- od -{Sal Mangano}-, objavio -{O’Reilly}- -978-0-596-00974-8-
 -{XSLT 2.0 Programmer's Reference}- od -{Michael Kay }-
 -{XSLT 2.0 and XPath 2.0 Programmer's Referenca}- od -{Michael Kay }-
 -{XSLT 2.0 Web Development}- od -{Dmitry Kirsanov }-
 -{XSL Companion}-, Druga edicija od -{Neil Bradley}-, objavio -{Addison-Wesley }-
 -{XSLT and XPath on the Edge (Unlimited Edition)}- od -{Jeni Tennison}-, objavio -{Hungry Minds Inc, U.S. }-
 -{XSLT & XPath, A Guide to XML Transformations}- od -{John Robert Gardner}- i -{Zarella Rendon}-, objavio -{Prentice-Hall }-
 -{XSL-FO}- od -{Dave Pawson}-, objavio -{O'Reilly }-

Spoljašnje veze 
-{
}-
 Dokumentacija
 -{XSLT 1.0 W3C Recommendation
 XSLT 2.0 W3C Recommendation
 XSLT 3.0 W3C Working Draft
 XSLT - MDC Docs , Mozilla Developer Network
 XSLT Reference (MSDN)
 XSLT Elements (Saxon)
 XSLT introduction and reference}-

 -{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.

Језици за означавање
W3C Standardi
Функционални програмски језици
Скраћенице
Софтвер 1998.