XSLT

**XSLT** (**Extensible Stylesheet Language Transformations**) je jazyk určený na transformovanie XML dokumentov na iné XML dokumenty, alebo iné formáty ako napríklad  HTML pre web pages, obyčajný text alebo do XSL Formatting Objects, ktoré môžu byť prekonvertované do iných formátov, ako napríklad PDF, PostScript a PNG.

Originálny dokument nie je zmenený, namiesto toho sa vytvorí nový dokument na základe už existujúceho. Vstupné dokumenty sú zväčša typu XML, ale môže byt použité čokoľvek, z čoho procesor dokáže zostaviť XQuery a XPath Data Model. Príkladom sú tabuľky relačnej databázy, alebo geografické informačne systémy.

XSLT je jazyk Turingovo úplný, t.j. dokáže špecifikovať akýkoľvek výpočet, ktorý môže byt vykonaný počítačom.

## Dejiny
XSLT je ovplyvnené funkcionálnymi jazykmi, a textovo založenými pattern matching jazykmi ako SNOBOL a awk. Jeho najpriamejší predchodca je DSSSL, ktorý spravil pre SGML to, čo XSLT robí pre XML.
* XSLT 1.0: XSLT bol časťou snahy World Wide Web Konzorcia (W3C), ktorý robil vývoj Extensible Stylesheet Language (XSL) v rokoch  1998–1999. Tento projekt taktiež priniesol XSL-FO a XPath. Niektorí členovia štandardizačnej komisie, ktorí vyvíjali XSLT, zahŕňajúc editora Jamesa Clarka, predtým pracovali na vývoji DSSSL. XSLT 1.0 bolo publikované ako W3C odporúčanie v novembri 1999.
* XSLT 2.0: po prerušenom pokuse vytvoriť verziu 1.1 v roku 2001, XSL pracovná skupina spojila svoje sily s XQuery pracovnou skupinou a vytvorili XPath 2.0, s bohatším data modelom a typovým systémom založenom na XML schéme. Posledná verzia je XSLT 2.0, ktorej redakciu vedie Michael Kay. Dosiahlo to status odporúčania v januári 2007. 
* XSLT 3.0: malo poslednú výzvu pracovného návrhu v októbri 2014. Hlavne novinky sú:
** Streamované transformácie: v predchádzajúcich verziách musel byť celý vstupný dokument prečítaný do pamäte predtým ako mohol byť spracovaný, a výstupný nemohol byť zapísaný skôr než spracovávanie skončilo (i keď Saxon nemá streaming príponu). Pracovný návrh dovoľuje XML streaming ktorý bude použitý pre spracovávanie príliš veľkých dokumentov, ktoré sa nezmestia do pamäte, alebo ak sú transformácie spojené v XML Pipeline.
** Vylepšenia modularity veľkých stylesheetov.
** Vylepšené riešenie dynamických chýb, napríklad s xsl:try inštrukciou.
** Funkcie môžu byť teraz argumenty pre iné funkcie vyššieho radu.

## Dizajn a spracovanie modelu
náhľad|Diagram základných elementov a vývoj procesov XSLT.
XSLT processor zoberie jeden alebo viac XML zdrojových dokumentov, plus jeden alebo viac XSLT stylesheetov a spracuje ich tak, aby vyprodukovali výstupný dokument. V kontraste s široko implementovanými imperatívnymi programovacími jazykmi ako napríklad C, XSLT je deklaratívne. Toto robí daný XSLT program viac odolný na zmeny na vstupe&#x5B;*<span title="This claim needs references to reliable sources. (November 2015)">citation needed</span>*&#x5D; a viac užitočný v jazyku, ktorý je použitý na aplikácie, ktoré spracovávajú informácie. Základná spracovávacia paradigma je pattern matching. Skôr než vymenovávanie imperatívnych postupnosti akcii, ktoré sa majú vykonať v stavovom prostredí, šablónové pravidla iba definujú ako spracovať node matching konkrétneho XPath podobného vzoru (pattern), v prípade ak processor na nejaký narazí a obsah šablóny účinne zahrnie funkcionálne výrazy ktoré priamo reprezentujú ich ohodnotenú formu: výsledný strom, ktorý je základom výstupu.

Processor postupuje podľa fixného algoritmu. Najprv predpokladajúc, zem stylesheet bol už prečítaný a pripravený, processor zostaví zdrojový strom zo vstupného XML dokumentu. Potom spracováva koreňový vrchol zdrojového stromu, nájde šablónu, ktorá má najlepšiu zhodu pre vrchol v stylesheete a vyhodnotí obsah šablóny. Inštrukcie v každej šablóne processoru rozhodujú, či ma vo výslednom strome vytvoriť nový vrchol alebo spracovať viac vrcholov v zdrojovom strome rovnakým spôsobom ako koreňový vrchol. Výstup je odvodený z výsledného stromu.

## Processorová implementácia
* Altova RaptorXML Server: cross-platformový engine, ktorý podporuje XSLT 1.0 a 2.0, veľkú časť XPath 3.0, a niektoré doplnky z XSLT 3.0 pracovného návrhu; taktiež aj XQuery. Umožňuje operácie príkazového riadku a rozhrania na COM, Java, a .NET a taktiež zahŕňa vstavaný HTTP server.
* Exselt: Streamovaný XSLT 3.0 processor, ktorý beží na .NET frameworku napísanom v F#. Plne podporuje XSLT 3.0 Draft, XPath 3.0 Recommendation a XDM 3.0 Recommendation standards.
* libxslt je voľne dostupná knižnica vydaná pod MIT License, ktoré sa môže znova použiť v komerčných aplikáciách. Je to založené na libxml a implementované v C pre rýchlosť a prenosnosť. Podporuje XSLT 1.0 a EXSLT rozšírenia.
** Môže to byť použité v príkazovom riadku cez xsltproc, ktorý je obsiahnutý v OS X a viacerých Linuxových distribúciách, a môže byť použitý na Windows cez Cygwin
** WebKit a Blink layout enginy, ktoré sú napríklad použité vo webových prehliadačoch Safari a Chrome, používajú libxslt knižnicu na vykonanie XSL transformácií.
** Bindings existuje pre Python, Perl, Ruby, PHP, Common Lisp, Tcl, a C++.
* MSXML a .NET. MSXML  obsahuje XSLT 1.0 processor. Od verzie MSXML 4.0 tiež obsahuje funkčnosť príkazového riadku`msxsl.exe`.
* Saxon: XSLT (2.0 a čiastočne 3.0) a XQuery 3.0 processor s open-source a proprietárnymi verziami pre samostatné operácie a pre Java, JavaScript  a .NET.
* QuiXSLT: XSLT 3.0 processor robí streaming implementovaný v jazyku Java spoločnosťami Innovimax and INRIA 
* Xalan: Open sourceový  XSLT 1.0 processor od spoločnosti Apache Software Foundation dostupný samostatne pre jazyky Java and C++.
* Webové prehliadače: Safari, Chrome, Firefox, Opera a Internet Explorer všetky podporujú XSLT 1.0. Žiaden z nich nepodporuje  XSLT 2.0 natívne, i keď existujú produkty tretích strán ako napríklad Saxon-CE alebo Frameless, ktoré môžu poskytnúť túto funkcionalitu. Prehliadače môžu vykonať transformácie XML súboru za pochodu a zobraziť výstup transformácie v okne prehliadača. Toto sa deje buď vkladaním XSL do XML dokumentu alebo odkazovaním súboru, ktorý obsahuje XSL inštrukcie z XML dokumentu. Posledné spomenuté nemusí správne fungovať v prehliadači Chrome kvôli jeho bezpečnostnému modelu.
* XMLStarlet je "súhrn funkčností (nástrojov) príkazového riadku, ktoré môžu byť použité na zmenu, vyhodnotenie, validovanie a úpravu XML dokumentov". Môže "aplikovať XSLT stylesheety na XML dokumenty" a nevyžaduje Javu. Využíva libxslt a podporuje XSLT 1.0.
* Xuriella a Plexippus-xpath sú XSLT 1.0 processory napísané v Common Lisp.

### Výkon
Prvé XSLT processory boli interprétre. V poslednej dobe je stále bežnejšie generovanie kódu, kde sa používajú prenosne prechodné jazyky (ako napríklad Java bytecode alebo .NET Common Intermediate Language) ako cieľ. Napriek tomu interpretačné výsledky vo všeobecnosti častejšie oddeľujú analyzačnú a vykonávaciu fázu, čim dovoľujú aby bol v pamäti vytvorený optimalizovaný výrazový strom a znova použitý na vykonanie viacerých transformácii. Toto poskytuje významne výkonnostné zlepšenia v online publikovaných aplikáciách, kde je rovnaká transformácia aplikovaná mnoho krát za sekundu na rôzne zdrojové dokumenty. Táto separácia je vidieť v dizajne mnohých API, ktoré sú pomocou XSLT spracovávané (ako napríklad JAXP).

Skoré XSLT processory mali veľmi málo optimalizácií. Stylesheetové dokumenty boli prečítané do Document Object Models a processor pôsobil priamo na ne. XPathové enginy tiež neboli optimalizované. Ale stále viac XSLT processorov používa optimalizačné techniky prevzaté z funkcionálnych programovacích jazykov a databázových výrazových jazykov, ako napríklad statické prepisovanie výrazového stromu (napríklad na presunutie výpočtu mimo cyklu) a lazy pipelined evaluation na zníženie pamäťovej stopy medzivýsledkov (čim sa umožní „early exit“, keď processor môže vyhodnotiť výrazy ako  `following-sibling::*[1]` bez celkového vyhodnotenia všetkých podvýrazov). Mnoho processorov taktiež používa stromové reprezentácie, ktoré sú oveľa efektívnejšie (v priestore a zároveň aj v čase)  ako DOM implementácie so všeobecným účelom.

V júni 2014, Debbie Lockett a Michael Kay predstavili open-source benchmarking framework pre XSLT processory s názvom XT-Speedo.

## XSLT a XPath
XSLT používa XPath na identifikovanie podmnožín zdrojového vstupného stromu a vykonávanie výpočtov. XPath taktiež poskytuje množstvo funkcií, ktoré XSLT ďalej vylepšuje.

XSLT 1.0 používa XPath 1.0. XSLT 2.0 používa XPath 2.0. A XSLT 3.0 používa XPath 3.0. V prípade verzií 1.0 a 2.0 boli špecifikácie publikované naraz. Ale s príchodom verzie 3.0 už neboli ďalej synchronizované; XPath 3.0 sa stal Odporúčaním v  Apríli roku 2014, zatiaľ čo XSLT 3.0 bol stále v rozpracovanom stave.

## XSLT a XQuery porovnanie
XSLT funkcionality sa prekrývajú s tými od XQuery, ktorý bol pôvodne zamýšľaný ako vyhľadávací jazyk pre veľké zbierky XML dokumentov.

XSLT 2.0 a XQuery 1.0 štandardy boli vyvíjané rôznymi pracovnými skupinami v W3C, ktoré pracovali spolu, aby zaistili spoločný prístup tam, kde to je vhodné. Zdieľajú rovnaký data model, typový systém, funkčnú knižnicu a obe obsahujú XPath 2.0 ako podjazyk.

Oba jazyky sú ale zakorenené v rôznych tradíciách a slúžia potrebám rôznych komunít. XSLT bolo primárne plánované ako stylesheet jazyk, ktorého hlavný cieľ bolo poskytnúť XML pre ľudského čitateľa na obrazovke, na webe (ako webový šablónový jazyk), alebo na papieri. XQuery bolo primárne zamýšľané ako  databázový vyhľadávací jazyk v tradíciíSQL.

Kvôli rôznemu pôvodu oboch jazykov, XSLT je silnejšie v zvládaní naratívnych dokumentov s viac pružnou štruktúrou, zatiaľ čo XQuery je silnejšie vo svojom spracovávaní dát, napríklad, keď vytvára vzťahové spojenia.&#x5B;*<span title="This claim needs references to reliable sources. (July 2009)">citation needed</span>*&#x5D;

## XSLT media typy
Element `&#x3C;output&#x3E;` môže voliteľne zobrať atribút `media-type`, ktorý umožňuje nastavenie media typu (alebo MIME typu) pre výsledný výstup, napríklad: `<xsl:output output="xml" media-type="application/xml"/>`. XSLT 1.0 odporúčanie odporúča viac všeobecný atribútový typ `text/xml` a `application/xml`, keďže dlho nebol žiaden registrovaný media typ pre XSLT. Počas tohto obdobia sa  `text/xsl` stal de facto štandardom. V XSLT 1.0 nebolo špecifikované ako by `media-type` hodnoty mali byť používané.

S vydaním XSLT 2.0, W3C odporučilo registráciu MIME media typu `application/xslt+xml` a to bolo neskôr registrované s Internet Assigned Numbers Authority

Pracovné návrhy, ktoré boli pred verziou 1.0 XSLT používali `text/xsl` v ich vložených príkladoch a tento typ bol implementovaný a pokračuje jeho propagácia Microsoftom vo webovom prehliadači Internet Explorer. a MSXML. Taktiež je široko používaný v  `xml-stylesheet` spracovávacej inštrukcii. V praxi teda používatelia, ktorí chcú ovládať transformáciu vo webovom prehliadači cez túto spracovávaciu inštrukciu musia používať tento neregistrovaný media typ.

## XSLT príklady
Pre grouping problémy, pozri XSLT/Muenchian grouping. Nižšie je úryvok z prichádzajúceho XML dokumentu.
```xml
<?xml version="1.0" ?>
<persons>
  <person username="JS1">
    <name>John</name>
    <family-name>Smith</family-name>
  </person>
  <person username="MI1">
    <name>Morka</name>
    <family-name>Ismincius</family-name>
  </person>
</persons>
```


### Príklad 1 (transformovanie XML na XML)
Tento XSLT stylesheet poskytuje šablónu na transformovanie XML dokumentu:
```xml
<?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="/persons">
    <root>
      <xsl:apply-templates select="person"/>
    </root>
  </xsl:template>

  <xsl:template match="person">
    <name username="{@username}">
      <xsl:value-of select="name" />
    </name>
  </xsl:template>

</xsl:stylesheet>
```
Jeho vyhodnotenie vyústi do nového XML dokumentu, ktorý má inú štruktúru:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<root>
  <name username="JS1">John</name>
  <name username="MI1">Morka</name>
</root>
```


### Príklad 2 (transformovanie XML do XHTML)
Spracovanie nasledujúceho XSLT súboru
```xml
<?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="/persons">
    <html>
      <head> <title>Testing XML Example</title> </head>
      <body>
        <h1>Persons</h1>
        <ul>
          <xsl:apply-templates select="person">
            <xsl:sort select="family-name" />
          </xsl:apply-templates>
        </ul>
      </body>
    </html>
  </xsl:template>

  <xsl:template match="person">
    <li>
      <xsl:value-of select="family-name"/><xsl:text>, </xsl:text><xsl:value-of select="name"/>
    </li>
  </xsl:template>

</xsl:stylesheet>
```
s XML vstupným súborom ukazuje horné výsledky v nasledujúcom  XHTML (pre zrejmosť, whitespace znak tu bol upravený):
```xml
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml">
  <head> <title>Testing XML Example</title> </head>
  <body>
    <h1>Persons</h1>
      <ul>
        <li>Ismincius, Morka</li>
        <li>Smith, John</li>
      </ul>
  </body>
</html>
```
Toto XHTML vygeneruje nasledujúci výsledok, keď je zobrazené v prehliadači.
centre|thumb|Zobrazené XHTML generované z XML vstupného súboru a XSLT transformácie.
Na to, aby webový prehliadač mohol automaticky aplikovať XSL transformáciu na XML dokument na displeji, XML stylesheet spracovávacia inštrukcia môže byť vsunutá do XML. Takže, napríklad, ak stylesheet v Príklade 2 by bol dostupný ako "example2.xsl", nasledujúca inštrukcia by mohla byť pridaná do originálneho prichádzajúceho XML dokumentu:
```xml
<?xml-stylesheet href="example2.xsl" type="text/xsl" ?>
```
V tomto príklade `text/xsl` je technicky nesprávne podľa W3C špecifikácií, ale je to iba media typ ktorý je široko podporovaný naprieč prehliadačmi.

## Pozri aj
* XSLT elementy – zoznam niektorých všeobecne používaných XSLT štruktúr.
* Muenchian grouping – diferenciálny dialekt medzi XSLT1 a XSLT2+.
* Extensible Stylesheet Language (XSL) – rodina jazykov, ktorých členom je aj XSLT
* XQuery a XSLT porovnanie
* XSL formatting objects alebo *XSL-FO* – jazyk pre dokumenty založený na XML, zvyčajne generovaný transformáciou zdrojového dokumentu s XSLT, pozostáva z objektov použitých na vytvorenie formátovaného výstupu.
* Identity transform
* Apache Cocoon
* Omnimark
* Xs3p

## Referencie

## Ďalšie čítanie
* *XSLT* by Doug Tidwell, published by O’Reilly (ISBN 0-596-00053-7)
* *XSLT Cookbook* by Sal Mangano, published by O’Reilly (ISBN 0-596-00974-7)
* *XSLT 2.0 Programmer's Reference* by Michael Kay (ISBN 0-764-56909-0)
* *XSLT 2.0 and XPath 2.0 Programmer's Reference* by Michael Kay (ISBN 978-0-470-19274-0)
* *XSLT 2.0 Web Development* by Dmitry Kirsanov (ISBN 0-13-140635-3)
* *XSL Companion, 2nd Edition* by Neil Bradley, published by Addison-Wesley (ISBN 0-201-77083-0)
* *XSLT and XPath on the Edge (Unlimited Edition)* by Jeni Tennison, published by Hungry Minds Inc, U.S. (ISBN 0-7645-4776-3)
* *XSLT & XPath, A Guide to XML Transformations* by John Robert Gardner and Zarella Rendon, published by Prentice-Hall (ISBN 0-13-040446-2)
* *XSL-FO* by Dave Pawson, published by O'Reilly (ISBN 978-0-596-00355-5)

## Externé odkazy
; Dokumentácie
* XSLT 1.0 W3C Recommendation
* XSLT 2.0 W3C Recommendation
* XSLT 3.0 W3C Working Draft
* XSLT - MDC Docs  by Mozilla Developer Network
* XSLT Reference (MSDN)
* XSLT Elements (Saxon)
* XSLT introduction and reference
; XSLT code libraries
* EXSLT 
* FXSL 
* The XSLT Standard Library 
* Kernow 
* xslt.js&nbsp;– Transform XML with XSLT

Kategória:Deklaratívne programovacie jazyky
Kategória:Funkcionálne jazyky
Kategória:Značkovacie jazyky
Kategória:W3C štandardy
Kategória:Štandardy založené na XML