XSLT ( e X tensible Stylesheet Language Transformations ) este un limbaj pentru transformarea documentelor XML . Specificația XSLT face parte din XSL și este o recomandare W3C .
Aplicarea unei foi de stil XSLT , constând dintr-un set de șabloane , la un document XML ( arborele sursă ) produce un arbore rezultat care poate fi serializat ca document XML, document XHTML (numai XSLT 2.0), document HTML sau fișier text simplu . Regulile pentru selectarea (și, în parte, transformarea) datelor din arborele sursă sunt scrise în limbajul de interogare XPath .
XSLT are multe utilizări diferite, în principal în domeniile programării web și raportării. Una dintre sarcinile rezolvate de limbajul XSLT este separarea datelor de prezentarea lor, ca parte a paradigmei generale MVC ( Model-view-controller ) . O altă sarcină comună este convertirea documentelor XML dintr-o schemă XML în alta.
XSLT a fost dezvoltat de grupul de lucru XSL al World Wide Web Consortium .
Versiunea 1.0 a fost aprobată ca recomandare pe 16 noiembrie 1999 . După lansarea primei versiuni, au început lucrările la versiunea 1.1, dar în 2001 a fost întreruptă și grupul de lucru XSL s-a alăturat grupului de lucru XQuery pentru a colabora la XPath 2.0 . Ulterior, XPath 2.0 a servit drept bază pentru dezvoltarea versiunii XSLT 2.0.
Versiunea 2.0 a fost aprobată ca recomandare pe 24 ianuarie 2007 .
Versiunea 3.0 a fost aprobată pe 8 iunie 2017.
În procesul de realizare a transformărilor XSLT sunt implicate următoarele:
În cel mai simplu caz, un procesor XSLT preia două documente ca intrare, un document XML de intrare și o foaie de stil XSLT și creează un document de ieșire pe baza acestora.
XSLT folosește limbajul XPath pentru a accesa părți individuale ale unui document XML de intrare și pentru a organiza calculele.
XSLT 1.0 utilizează XPath 1.0, iar XSLT 2.0 utilizează XPath 2.0.
Document XML sursă :
<?xml version="1.0"?> <persons> <person username= "MP123456" > <name> Ivan </name> <surname> Ivanov </surname> </person> <person username= "PK123456" > < nume> Petru </name> <surname> Petrov </surname> </persoană> </persoane>Foaie de stil XSLT (transformări):
<?xml version="1.0"?> <xsl:stylesheet xmlns:xsl= "http://www.w3.org/1999/XSL/Transform" version= "1.0" > <xsl:output method= "xml" indent= "da" /> <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= "nume" /> <xsl:template match= "surname" mode= "fullname" > <xsl:text> </xsl:text> <xsl:apply-templates/> </xsl:template> </xsl:stylesheet>Document XML rezultat:
<?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>Document XML de intrare:
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="my-style.xsl"?> <domenii> <sun.com ownedBy= "Sun Microsystems Inc." > <gazdă> www <utilizare> site-ul World Wide Web </utilizare> </gazdă> <gazdă> java <use> Informații Java </use> </host> </sun.com> <w3.org ownedBy= „Consorțiul World Wide Web” > <gazdă> www <utilizare> site-ul World Wide Web </utilizare> </gazdă> <gazdă> validator <use> dezvoltatori web care doresc să o facă corect </use> </host> </w3.org> </domains>Stil pentru transformarea 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" /> <!--XHTML document outline--> <xsl:template match= "/" > <html xmlns= "http://www.w3.org/1999/xhtml" xml:lang= "ro" lang= "ro " > <head> <meta http-equiv= "Content-Type" content= "text/html; charset=UTF-8" /> <title> test1 </title> <style type= "text/css" > h1 { umplutură: 10px; lățime umplutură: 100% culoare de fundal: argintiu } td, th { lățime: 40%; chenar: 1px argint masiv; umplutură: 10px td:primul copil, th:primul copil { lățime: 20% } tabel {lățime: 650px} </style> </head> <body> <xsl:apply-templates/> </body> </html> </xsl:template> <!--Anteturi de tabel și schiță--> <xsl:template match= "domains/*" > <h1><xsl:value-of select= "@ownedBy" /></h1> <p> Următoarea gazdă numele sunt utilizate în prezent la <strong><xsl:value-of select= "local-name(.)" /></strong> </p> <table> <tr><th> Host name </th> <th> Adresa URL </th><th> Folosită de </th></tr> <xsl:apply-templates/> </table> </xsl:template> <!--Rând tabel și primele două coloane--> <xsl:template match= "gazdă" > <!--Creați variabilă pentru „url”, deoarece este folosită de două ori--> <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> <!--Coloana „Utilizat de”--> <xsl:template match= "use" > <td><xsl:value-of select= "." /></td> </xsl:template> </xsl:stylesheet>XHTML-ul pe care îl obținem ca rezultat (au fost adăugate spații pentru claritate):
<?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= "ro" xml:lang= "ro" > <head> <meta content= "text/html;charset=UTF-8" http-equiv= "Content-Type" /> <title> test1 </title> <style type= "text/css" > h1 { umplutură: 10px; lățime umplutură: 100% culoare de fundal: argintiu } td, th { lățime: 40%; chenar: 1px argint masiv; umplutură: 10px td:primul copil, th:primul copil { lățime: 20% } tabel {lățime: 650px} </style> </head> <body> <h1> Sun Microsystems Inc. </h1> <p> Următoarele nume de gazdă sunt în prezent utilizate la <strong> sun.com </strong></p> <table> <tr> <th> Nume gazdă </th> <th> URL < /th> <th> Folosit de </th> </tr> <tr> <td> www </td> <td><a href="http://www.sun.com" > http :// www.sun.com </a></td> <td> Site-ul World Wide Web </td> </tr> <tr> <td> java </td> <td><a href= "http:/ /java.sun.com" > http://java.sun.com </a></td> <td> Informații Java </td> </tr> </table> <h1> Consorțiul World Wide Web </h1> <p> Următoarele nume de gazdă sunt în prezent utilizate la <strong> w3.org </strong></p> <table> <tr> <th> Nume de gazdă < /th> <th> URL </th> <th> Folosit de </th> </tr> <tr> <td> www </td> <td><a href= "http://www.w3 .org" > http://www.w3.org </a></td> <td> Site World Wide Web </td> </tr> <tr> <td> validator </td> <td> <a href="http://validator.w3.org" > http://validator.w3.org </a> </td> <td> dezvoltatori web care doresc să o rezolve corect </td> </ tr> </table> </body> </html>Ieșirea nu este neapărat XHTML corectă. XSLT 2.0 a remediat acest lucru prin adăugarea metodei de ieșire „XHTML”, împreună cu „HTML” care exista deja în XSLT 1.0.
Limbajul XSLT este declarativ, nu procedural. În loc să definească o secvență de instrucțiuni executabile, acest limbaj definește regulile care vor fi aplicate în timpul conversiei. Transformarea în sine este efectuată conform unui algoritm fix.
În primul rând, procesorul XSLT analizează fișierul de transformare și construiește un arbore XML al fișierului de intrare. Apoi caută șablonul care se potrivește cel mai bine cu nodul rădăcină și evaluează conținutul șablonului găsit. Instrucțiunile din fiecare șablon pot fie să spună direct procesorului XSLT „creați această etichetă aici”, fie să spună „procesați alte noduri în același mod ca nodul rădăcină”.
Acest algoritm, care este oarecum netrivial, este descris mai detaliat mai jos, deși multe dintre detaliile sale exotice sunt omise.
Fiecare procesor XSLT trebuie să parcurgă următorii pași pentru a se pregăti pentru transformare.
Procesorul parcurge apoi următorii pași pentru a obține și a serializa arborele rezultat.
La procesarea unui nod, sunt efectuate următoarele acțiuni.
Instrucțiunea xsl:apply-templates, atunci când este procesată, face ca un nou set de noduri să fie preluat și procesat. Nodurile sunt identificate folosind o expresie XPath. Toate nodurile sunt procesate în ordinea în care sunt conținute în documentul sursă.
XSLT extinde biblioteca de funcții XPath și vă permite să definiți variabile XPath. Aceste variabile au un domeniu de aplicare diferit în foaia de stil, în funcție de locul în care sunt definite, iar valorile lor pot fi setate în afara foii de stil. Valorile variabilelor nu pot fi modificate în timpul procesării.
Deși această procedură poate părea complicată, face ca caracteristicile XSLT să fie similare cu alte limbi de șabloane web. Dacă foaia de stil constă dintr-o singură regulă pentru a procesa nodul rădăcină, întregul conținut al șablonului este pur și simplu copiat în rezultat, iar instrucțiunile XSLT ( xsl:…elementele ' ') sunt înlocuite cu conținutul calculat. XSLT oferă chiar și un format special („element de rezultat literal ca foaie de stil”) pentru astfel de transformări simple, cu un singur șablon. Cu toate acestea, capacitatea de a defini șabloane și reguli individuale crește foarte mult flexibilitatea și eficiența XSLT, mai ales atunci când se generează un rezultat care seamănă foarte mult cu documentul original.
XSL | |
---|---|
Consorțiul World Wide Web (W3C) | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Produse și standarde |
| ||||||||||||||
Organizații |
| ||||||||||||||
PE |
| ||||||||||||||
Conferințe |
|