XSLT ( e X tensible S tylesheet Sprogtransformationer ) er et sprog til transformation af XML - dokumenter. XSLT-specifikationen er en del af XSL og er en W3C- anbefaling .
Anvendelse af et XSLT -typografiark , der består af et sæt skabeloner , på et XML-dokument ( kildetræ ) producerer et resulterende træ , der kan serialiseres som et XML-dokument, XHTML - dokument (kun XSLT 2.0), HTML - dokument eller almindelig tekstfil . Reglerne for at vælge (og delvist transformere) data fra kildetræet er skrevet i XPath -forespørgselssproget .
XSLT har mange forskellige anvendelser, primært inden for webprogrammering og rapportering. En af opgaverne, som XSLT-sproget løser, er adskillelse af data fra deres præsentation, som en del af det generelle MVC ( Model-view-controller ) paradigme . En anden almindelig opgave er at konvertere XML-dokumenter fra et XML-skema til et andet.
XSLT er udviklet af XSL Working Group fra World Wide Web Consortium .
Version 1.0 blev godkendt som anbefaling den 16. november 1999 . Efter udgivelsen af den første version begyndte arbejdet med version 1.1, men i 2001 blev det afbrudt, og XSL -arbejdsgruppen sluttede sig til XQuery -arbejdsgruppen for at samarbejde om XPath 2.0 . Efterfølgende fungerede XPath 2.0 som grundlag for udviklingen af XSLT version 2.0.
Version 2.0 blev godkendt som anbefaling den 24. januar 2007 .
Version 3.0 blev godkendt den 8. juni 2017.
I processen med at udføre XSLT-transformationer er følgende involveret:
I det enkleste tilfælde tager en XSLT-processor to dokumenter som input, et input - XML -dokument og et XSLT-typografiark og opretter et outputdokument baseret på dem.
XSLT bruger XPath -sproget til at få adgang til individuelle dele af et input-XML-dokument og til at organisere beregninger.
XSLT 1.0 bruger XPath 1.0 og XSLT 2.0 bruger XPath 2.0.
Kilde XML- dokument:
<?xml version="1.0"?> <persons> <person username= "MP123456" > <name> Ivan </name> <surname> Ivanov </surname> </person> <person username= "PK123456" > < navn> Peter </navn> <efternavn> Petrov </efternavn> </person> </persons>XSLT-stilark (transformationer):
<?xml version="1.0"?> <xsl:stylesheet xmlns:xsl= "http://www.w3.org/1999/XSL/Transform" version= "1.0" > <xsl:outputmetode = "xml" indent= "ja" /> <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= "@brugernavn" > <brugernavn> <xsl:value-of select= "." /> </brugernavn> </xsl:skabelon> <xsl:template match= "name" > <fullname> <xsl:apply-templates/> <xsl:apply-templates select= "following-sibling::surname" mode= "fuldnavn" /> </fullname> </ xsl:skabelon> <xsl:template match= "efternavn" /> <xsl:template match= "surname" mode= "fullname" > <xsl:text> </xsl:text> <xsl:apply-templates/> </xsl:template> </xsl:stylesheet>Resulterende XML-dokument:
<?xml version="1.0" encoding="UTF-8"?> <transform> <record> <brugernavn> MP123456 </username> <fuldt navn> Ivan Ivanov </ fuldt navn> </record> <record> <brugernavn> PK123456 </brugernavn> <fuldt navn> Petr Petrov </ fuldt navn> </record> </transform>Indtast XML-dokument:
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="my-style.xsl"?> <domæner> <sun.com ownedBy= "Sun Microsystems Inc." > <vært> www <brug> World Wide Web-sted </use> </host> <host> java <brug> Java info </use> </host> </sun.com> <w3.org ownedBy= "The World Wide Web Consortium" > <host> www <brug> World Wide Web-sted </use> </host> <host> validator <use> webudviklere, der ønsker at gøre det rigtigt </use> </host> </w3.org> </domains>Stil til XSLT-transformation:
<?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 :outputmetode = "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= "da" lang= "da " > <head> <meta http-equiv= "Content-Type" content= "text/html; charset=UTF-8" /> <title> test1 </title> <style type= "text/css" > h1 { polstring: 10px; polstringsbredde: 100 % baggrundsfarve: sølv } td, th {bredde: 40%; kant: 1px massivt sølv; polstring: 10px td:first-child, th:first-child { width: 20% } tabel {bredde: 650px} </style> </head> <body> <xsl:apply-templates/> </body> </html> </xsl:template> <!--Tabeloverskrifter og disposition--> <xsl:template match= "domains/*" > <h1><xsl:value-of select= "@ownedBy" /></h1> <p> Følgende vært navne er i øjeblikket i brug på <strong><xsl:value-of select= "local-name(.)" /></strong> </p> <tabel> <tr><th> Værtsnavn </th> <th> URL </th><th> Brugt af </th></tr> <xsl:apply-templates/> </table> </xsl:template> <!--Tabelrække og to første kolonner--> <xsl:skabelon match= "host" > <!--Opret variabel for 'url', da den bruges to gange--> <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= "brug" /> </tr> </xsl:skabelon> <!--'Used by' column--> <xsl:template match= "use" > <td><xsl:value-of select= "." /></td> </xsl:skabelon> </xsl:stylesheet>XHTML'en, vi får som output (mellemrum er tilføjet for klarhedens skyld):
<?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= "da" xml:lang= "da" > <head> <meta content= "text/html;charset=UTF-8" http-equiv= "Content-Type" /> <title> test1 </title> <style type= "text/css" > h1 { polstring: 10px; polstringsbredde: 100 % baggrundsfarve: sølv } td, th {bredde: 40%; kant: 1px massivt sølv; polstring: 10px td:first-child, th:first-child { width: 20% } tabel {bredde: 650px} </style> </head> <body> <h1> Sun Microsystems Inc. </h1> <p> Følgende værtsnavne er i øjeblikket i brug på <strong> sun.com </strong></p> <table> <tr> <th> Værtsnavn </th> <th> URL < /th> <th> Brugt af </th> </tr> <tr> <td> www </td> <td><a href="http://www.sun.com" > http :// www.sun.com </a></td> <td> World Wide Web-sted </td> </tr> <tr> <td> java </td> <td><a href= "http:/ /java.sun.com" > http://java.sun.com </a></td> <td> Java info </td> </tr> </table> <h1> World Wide Web Consortium </h1> <p> Følgende værtsnavne er i øjeblikket i brug på <strong> w3.org </strong></p> <table> <tr> <th> Værtsnavn < /th> <th> URL </th> <th> Brugt af </th> </tr> <tr> <td> www </td> <td><a href= "http://www.w3 .org" > http://www.w3.org </a></td> <td> World Wide Web-sted </td> </tr> <tr> <td> validator </td> <td> <a href="http://validator.w3.org" > http://validator.w3.org </a> </td> <td> webudviklere, der ønsker at få det rigtigt </td> </ tr> </table> </body> </html>Outputtet er ikke nødvendigvis korrekt XHTML. XSLT 2.0 løste dette ved at tilføje 'XHTML'-outputmetoden sammen med den 'HTML', der allerede eksisterede i XSLT 1.0.
XSLT-sproget er deklarativt, ikke proceduremæssigt. I stedet for at definere en sekvens af eksekverbare sætninger, definerer dette sprog de regler, der vil blive anvendt under konverteringen. Selve transformationen udføres efter en fast algoritme.
Først og fremmest analyserer XSLT-processoren transformationsfilen og bygger et XML-træ af inputfilen. Den leder derefter efter den skabelon, der bedst matcher rodnoden, og evaluerer indholdet af den fundne skabelon. Instruktionerne i hver skabelon kan enten direkte fortælle XSLT-processoren "opret dette tag her" eller sige "behandle andre noder med den samme regel som rodnoden".
Denne algoritme, som er noget ikke-triviel, er beskrevet mere detaljeret nedenfor, selvom mange af dens eksotiske detaljer er udeladt.
Hver XSLT-processor skal udføre følgende trin for at forberede transformationen.
Processoren gennemgår derefter følgende trin for at opnå og serialisere resultattræet.
Når du behandler en node, udføres følgende handlinger.
Instruktionen xsl:apply-templatesforårsager, når den behandles, et nyt sæt noder, der hentes og behandles. Noder identificeres ved hjælp af et XPath-udtryk. Alle noder behandles i den rækkefølge, de er indeholdt i kildedokumentet.
XSLT udvider XPath-funktionsbiblioteket og giver dig mulighed for at definere XPath-variabler. Disse variabler har forskelligt omfang i typografiarket afhængigt af hvor de er defineret, og deres værdier kan indstilles uden for typografiarket. Variable værdier kan ikke ændres under behandlingen.
Selvom denne procedure kan virke kompliceret, gør den XSLT i funktioner, der ligner andre webskabelonsprog. Hvis typografiarket består af en enkelt regel til at behandle rodnoden, kopieres hele indholdet af skabelonen blot til resultatet, og XSLT-instruktionerne (' xsl:…'-elementerne) erstattes med det beregnede indhold. XSLT tilbyder endda et specielt format ("bogstaveligt resultatelement som stilark") til sådanne enkle transformationer med én skabelon. Men muligheden for at definere individuelle skabeloner og regler øger i høj grad fleksibiliteten og effektiviteten af XSLT, især når der genereres et resultat, der ligner det originale dokument.
XSL | |
---|---|
World Wide Web Consortium (W3C) | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Produkter og standarder |
| ||||||||||||||
Organisationer |
| ||||||||||||||
PÅ |
| ||||||||||||||
Konferencer |
|