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.

Dizajn a spracovanie modelu

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

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.

XSLT media typy

Element <output> 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 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 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 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 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 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.
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-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.