XSLT ( e X tensible S tylesheet L anguage Transformations ) je jazyk pro transformaci dokumentů XML . Specifikace XSLT je součástí XSL a je doporučením W3C .
Použití šablony stylů XSLT sestávající ze sady šablon na dokument XML ( zdrojový strom ) vytvoří výsledný strom , který lze serializovat jako dokument XML, dokument XHTML (pouze XSLT 2.0), dokument HTML nebo soubor s prostým textem . Pravidla pro výběr (a částečně i transformaci) dat ze zdrojového stromu jsou napsána v dotazovacím jazyce XPath .
XSLT má mnoho různých použití, především v oblasti programování webu a vytváření sestav. Jedním z úkolů, které jazyk XSLT řeší, je oddělení dat od jejich prezentace, jako součást obecného paradigmatu MVC ( Model-view-controller ) . Dalším běžným úkolem je převádět dokumenty XML z jednoho schématu XML do jiného.
XSLT byl vyvinut pracovní skupinou XSL konsorcia World Wide Web Consortium .
Verze 1.0 byla schválena jako doporučení 16. listopadu 1999 . Po vydání první verze se začalo pracovat na verzi 1.1, ale v roce 2001 byla ukončena a pracovní skupina XSL se připojila k pracovní skupině XQuery , aby spolupracovala na XPath 2.0 . Následně XPath 2.0 posloužil jako základ pro vývoj XSLT verze 2.0.
Verze 2.0 byla schválena jako doporučení dne 24. ledna 2007 .
Verze 3.0 byla schválena 8. června 2017.
Proces provádění transformací XSLT zahrnuje následující:
V nejjednodušším případě procesor XSLT vezme dva dokumenty jako vstup, vstupní dokument XML a šablonu stylů XSLT, a na jejich základě vytvoří výstupní dokument.
XSLT používá jazyk XPath pro přístup k jednotlivým částem vstupního XML dokumentu a pro organizaci výpočtů.
XSLT 1.0 používá XPath 1.0 a XSLT 2.0 používá XPath 2.0.
Zdrojový dokument XML :
<?xml version="1.0"?> <persons> <person username= "MP123456" > <name> Ivan </name> <surname> Ivanov </surname> </person> <person username= "PK123456" > < jméno> Peter </name> <příjmení> Petrov </surname> </person> </persons>XSLT styly (transformace):
<?xml version="1.0"?> <xsl:stylesheet xmlns:xsl= "http://www.w3.org/1999/XSL/Transform" version= "1.0" > <xsl:output method= "xml" indent= "yes" /> <xsl:template match= "persons" > <transform> <xsl:apply-templates/> </transform> </xsl:template> <xsl:template match= "person" > <record> <xsl:apply-templates select= "@*|*" /> </record> </xsl:template> <xsl:template match= "@username" > <username> <xsl:value-of select= "." /> </username> </xsl:template> <xsl:template match= "name" > <fullname> <xsl:apply-templates/> <xsl:apply-templates select= "following-sibling::surname" mode= "fullname" /> </fullname> </ xsl:template> <xsl:template match= "příjmení" /> <xsl:template match= "surname" mode= "fullname" > <xsl:text> </xsl:text> <xsl:apply-templates/> </xsl:template> </xsl:stylesheet>Výsledný dokument XML:
<?xml version="1.0" encoding="UTF-8"?> <transform> <record> <username> MP123456 </username> <fullname> Ivan Ivanov </fullname> </record> <record> <username> PK123456 </username> <fullname> Petr Petrov </fullname> </record> </transform>Vstup XML dokumentu:
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="my-style.xsl"?> <domény> < sun.com ownedBy= "Sun Microsystems Inc." > <hostitel> www <use> World Wide Web </use> </host> <host> Jáva <use> Java informace </use> </host> </sun.com> <w3.org ownedBy= "The World Wide Web Consortium" > <hostitel> www <use> World Wide Web </use> </host> <host> validátor <use> weboví vývojáři, kteří to chtějí udělat správně </use> </host> </w3.org> </domains>Styl pro transformaci XSLT:
<?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" doctype-public= "-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system= "http://www.w3.org/TR/xhtml1/ DTD/xhtml1-strict.dtd" /> <!--Nástin dokumentu XHTML--> <xsl:template match= "/" > <html xmlns= "http://www.w3.org/1999/xhtml" xml:lang= "en" lang= "cs " > <head> <meta http-equiv= "Content-Type" content= "text/html; charset=UTF-8" /> <title> test1 </title> <style type= "text/css" > h1 { padding: 10px; šířka výplně: 100% barva pozadí: stříbrná } td, th { šířka: 40 %; ohraničení: 1px masivní stříbro; výplň: 10px td:first-child, th:first-child { šířka: 20 % } tabulka {width: 650px} </style> </head> <body> <xsl:apply-templates/> </body> </html> </xsl:template> <!--Záhlaví a osnova tabulek--> <xsl:template match= "domains/*" > <h1><xsl:value-of select= "@ownedBy" /></h1> <p> Následující hostitel názvy se aktuálně používají na <strong><xsl:value-of select= "local-name(.)" /></strong> </p> <table> <tr><th> Název hostitele </th> <th> URL </th><th> Používá </th></tr> <xsl:apply-templates/> </table> </xsl:template> <!--Řádek tabulky a první dva sloupce--> <xsl:template match= "host" > <!--Vytvořte proměnnou pro 'url', protože je použita dvakrát--> <xsl:variable name= "url" select= "normalize-space(concat('http://', normalize-space(node()), '.', local-name(..)))" /> <tr> <td>< xsl: value-of select= "node()" /></td> <td><a href= "{$url}" ><xsl:value-of select= "$url" /></a> </ td> <xsl:apply-templates select= "use" /> </tr> </xsl:template> Sloupec <!--'Used by'--> <xsl:template match= "use" > <td><xsl:value-of select= "." /></td> </xsl:template> </xsl:stylesheet>XHTML, které dostáváme jako výstup (pro přehlednost byly přidány mezery):
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/ xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns= "http://www.w3.org/1999/xhtml" lang= "cs" xml:lang= "cs" > <head> <meta content= "text/html;charset=UTF-8" http-equiv= "Content-Type" /> <title> test1 </title> <style type= "text/css" > h1 { padding: 10px; šířka výplně: 100% barva pozadí: stříbrná } td, th { šířka: 40 %; ohraničení: 1px masivní stříbro; výplň: 10px td:first-child, th:first-child { šířka: 20 % } tabulka {width: 650px} </style> </head> <body> <h1> Sun Microsystems Inc. </h1> <p> Následující názvy hostitelů se aktuálně používají na <strong> sun.com </strong></p> <table> <tr> <th> Název hostitele </th> <th> URL < /th> <th> Používá </th> </tr> <tr> <td> www </td> <td><a href="http://www.sun.com" > http :// www.sun.com </a></td> <td> World Wide Web </td> </tr> <tr> <td> java </td> <td><a href= "http:/ /java.sun.com" > http://java.sun.com </a></td> <td> Informace o jazyce Java </td> </tr> </table> <h1> The World Wide Web Consortium </h1> <p> Následující názvy hostitelů jsou aktuálně používány na <strong> w3.org </strong></p> <table> <tr> <th> Název hostitele < /th> <th> URL </th> <th> Používá </th> </tr> <tr> <td> www </td> <td><a href= "http://www.w3 .org" > http://www.w3.org </a></td> <td> World Wide Web </td> </tr> <tr> <td> validátor </td> <td> <a href="http://validator.w3.org" > http://validator.w3.org </a> </td> <td> weboví vývojáři, kteří to chtějí mít správně </td> </ tr> </table> </body> </html>Výstup nemusí být nutně správný XHTML. XSLT 2.0 to opravil přidáním výstupní metody 'XHTML' spolu s 'HTML', která již existovala v XSLT 1.0.
Jazyk XSLT je deklarativní, nikoli procedurální. Namísto definování posloupnosti spustitelných příkazů tento jazyk definuje pravidla, která budou použita při převodu. Samotná transformace se provádí podle pevně daného algoritmu.
Nejprve XSLT procesor analyzuje transformační soubor a sestaví XML strom vstupního souboru. Poté vyhledá šablonu, která nejlépe odpovídá kořenovému uzlu, a vyhodnotí obsah nalezené šablony. Instrukce v každé šabloně mohou buď přímo říct procesoru XSLT „vytvoř tuto značku zde“ nebo „zpracovat další uzly se stejným pravidlem jako kořenový uzel“.
Tento algoritmus, který je poněkud netriviální, je podrobněji popsán níže, ačkoli mnoho z jeho exotických detailů je vynecháno.
Každý procesor XSLT musí provést následující kroky, aby se připravil na transformaci.
Procesor poté projde následujícími kroky, aby získal a serializoval výsledný strom.
Při zpracování uzlu se provádějí následující akce.
Instrukce xsl:apply-templatespři zpracování způsobí načtení a zpracování nové sady uzlů. Uzly jsou identifikovány pomocí výrazu XPath. Všechny uzly jsou zpracovány v pořadí, v jakém jsou obsaženy ve zdrojovém dokumentu.
XSLT rozšiřuje knihovnu funkcí XPath a umožňuje definovat proměnné XPath. Tyto proměnné mají v šabloně stylů různý rozsah v závislosti na tom, kde jsou definovány, a jejich hodnoty lze nastavit mimo šablonu stylů. Hodnoty proměnných nelze během zpracování měnit.
Ačkoli se tento postup může zdát komplikovaný, XSLT se svými funkcemi podobá jiným jazykům webových šablon. Pokud se šablona stylů skládá z jediného pravidla pro zpracování kořenového uzlu, celý obsah šablony se jednoduše zkopíruje do výsledku a instrukce XSLT ( xsl:…prvky ' ) se nahradí vypočítaným obsahem. XSLT dokonce nabízí speciální formát ("literal result element as stylesheet") pro takové jednoduché transformace s jednou šablonou. Možnost definovat jednotlivé šablony a pravidla však značně zvyšuje flexibilitu a efektivitu XSLT, zejména při generování výsledku, který se velmi podobá původnímu dokumentu.
XSL | |
---|---|
World Wide Web Consortium (W3C) | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Produkty a normy |
| ||||||||||||||
Organizace |
| ||||||||||||||
NA |
| ||||||||||||||
Konference |
|