XSLT ( e X tensible S tylesheet L anguage Transformations ) är ett språk för att transformera XML- dokument. XSLT-specifikationen är en del av XSL och är en W3C- rekommendation .
Genom att tillämpa en XSLT -formatmall , som består av en uppsättning mallar , på ett XML-dokument ( källträd ) skapas ett resulterande träd som kan serialiseras som ett XML-dokument, XHTML- dokument (endast XSLT 2.0), HTML - dokument eller vanlig textfil . Reglerna för att välja (och delvis transformera) data från källträdet är skrivna i frågespråket XPath .
XSLT har många olika användningsområden, främst inom områdena webbprogrammering och rapportering. En av uppgifterna som löses av XSLT-språket är att separera data från deras presentation, som en del av det allmänna MVC-paradigmet ( Model-view-controller ) . En annan vanlig uppgift är att konvertera XML-dokument från ett XML-schema till ett annat.
XSLT utvecklades av XSL Working Group i World Wide Web Consortium .
Version 1.0 godkändes som en rekommendation den 16 november 1999 . Efter lanseringen av den första versionen började arbetet med version 1.1, men 2001 avbröts den och XSL- arbetsgruppen gick med i XQuery- arbetsgruppen för att samarbeta om XPath 2.0 . Därefter fungerade XPath 2.0 som grunden för utvecklingen av XSLT version 2.0.
Version 2.0 godkändes som rekommendation den 24 januari 2007 .
Version 3.0 godkändes den 8 juni 2017.
I processen att utföra XSLT-transformationer är följande involverade:
I det enklaste fallet tar en XSLT-processor två dokument som indata, ett XML -inmatningsdokument och ett XSLT-formatmall, och skapar ett utdatadokument baserat på dem.
XSLT använder XPath- språket för att komma åt enskilda delar av ett XML-indatadokument och för att organisera beräkningar.
XSLT 1.0 använder XPath 1.0 och XSLT 2.0 använder XPath 2.0.
XML- källdokument :
<?xml version="1.0"?> <persons> <person username= "MP123456" > <name> Ivan </name> <surname> Ivanov </surname> </person> <person username= "PK123456" > < namn> Peter </namn> <efternamn> Petrov </efternamn> </person> </persons>XSLT-formatmall (transformationer):
<?xml version="1.0"?> <xsl:stylesheet xmlns:xsl= "http://www.w3.org/1999/XSL/Transform" version= "1.0" > <xsl:output method= "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= "@username" > <användarnamn> <xsl:value-of select= "." /> </användarnamn> </xsl:mall> <xsl:template match= "name" > <fullname> <xsl:apply-templates/> <xsl:apply-templates select= "following-sibling::surname" mode= "fullname" /> </fullname> </ xsl:mall> <xsl:template match= "efternamn" /> <xsl:template match= "surname" mode= "fullname" > <xsl:text> </xsl:text> <xsl:apply-templates/> </xsl:template> </xsl:stylesheet>Resulterande XML-dokument:
<?xml version="1.0" encoding="UTF-8"?> <transform> <record> <användarnamn> MP123456 </username> <fullname> Ivan Ivanov </fullname> </record> <record> <användarnamn> PK123456 </username> <fullname> Petr Petrov </fullname> </record> </transform>Mata in 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ärd> www <use> World Wide Web site </use> </host> <host> java <use> Java info </use> </host> </sun.com> <w3.org ownedBy= "The World Wide Web Consortium" > <host> www <use> World Wide Web site </use> </host> <host> validator <use> webbutvecklare som vill få det rätt </use> </host> </w3.org> </domains>Stil för 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 :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= "en" lang= "sv " > <head> <meta http-equiv= "Content-Type" content= "text/html; charset=UTF-8" /> <title> test1 </title> <style type= "text/css" > h1 { utfyllnad: 10px; stoppningsbredd: 100 % bakgrundsfärg: silver } td, th { bredd: 40%; kant: 1px massivt silver; stoppning: 10px td:first-child, th:first-child { width: 20% } tabell {bredd: 650px} </style> </head> <body> <xsl:apply-templates/> </body> </html> </xsl:template> <!--Tabellrubriker och disposition--> <xsl:template match= "domains/*" > <h1><xsl:value-of select= "@ownedBy" /></h1> <p> Följande värd namn används för närvarande på <strong><xsl:value-of select= "local-name(.)" /></strong> </p> <tabell> <tr><th> Värdnamn </th> <th> URL </th><th> Används av </th></tr> <xsl:apply-templates/> </table> </xsl:template> <!--Tabellrad och första två kolumner--> <xsl:template match= "host" > <!--Skapa variabel för 'url', eftersom den används två gånger--> <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= "använd" /> </tr> </xsl:template> <!--'Används av' kolumn--> <xsl:template match= "use" > <td><xsl:value-of select= "." /></td> </xsl:mall> </xsl:stylesheet>XHTML får vi som utdata (mellanslag har lagts till för tydlighetens skull):
<?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= "en" xml:lang= "en" > <head> <meta content= "text/html;charset=UTF-8" http-equiv= "Content-Type" /> <title> test1 </title> <style type= "text/css" > h1 { utfyllnad: 10px; stoppningsbredd: 100 % bakgrundsfärg: silver } td, th { bredd: 40%; kant: 1px massivt silver; stoppning: 10px td:first-child, th:first-child { width: 20% } tabell {bredd: 650px} </style> </head> <body> <h1> Sun Microsystems Inc. </h1> <p> Följande värdnamn används för närvarande på <strong> sun.com </strong></p> <table> <tr> <th> Värdnamn </th> <th> URL < /th> <th> Används av </th> </tr> <tr> <td> www </td> <td><a href="http://www.sun.com" > http :// www.sun.com </a></td> <td> World Wide Web site </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öljande värdnamn används för närvarande på <strong> w3.org </strong></p> <tabell> <tr> <th> Värdnamn < /th> <th> URL </th> <th> Används av </th> </tr> <tr> <td> www </td> <td><a href= "http://www.w3 .org" > http://www.w3.org </a></td> <td> World Wide Web-webbplats </td> </tr> <tr> <td> validator </td> <td> <a href="http://validator.w3.org" > http://validator.w3.org </a> </td> <td> webbutvecklare som vill få det rätt </td> </ tr> </table> </body> </html>Utdata är inte nödvändigtvis korrekt XHTML. XSLT 2.0 fixade detta genom att lägga till "XHTML"-utdatametoden, tillsammans med den "HTML" som redan fanns i XSLT 1.0.
XSLT-språket är deklarativt, inte procedurmässigt. Istället för att definiera en sekvens av körbara satser, definierar detta språk reglerna som kommer att tillämpas under konverteringen. Själva transformationen utförs enligt en fast algoritm.
Först och främst analyserar XSLT-processorn transformationsfilen och bygger ett XML-träd för indatafilen. Den letar sedan efter den mall som bäst matchar rotnoden och utvärderar innehållet i den hittade mallen. Instruktionerna i varje mall kan antingen direkt säga till XSLT-processorn "skapa den här taggen här", eller säga "bearbeta andra noder på samma sätt som rotnoden".
Denna algoritm, som är något icke-trivial, beskrivs mer i detalj nedan, även om många av dess exotiska detaljer är utelämnade.
Varje XSLT-processor måste utföra följande steg för att förbereda sig för transformationen.
Processorn går sedan igenom följande steg för att erhålla och serialisera resultatträdet.
Vid bearbetning av en nod utförs följande åtgärder.
Instruktionen xsl:apply-templates, när den bearbetas, gör att en ny uppsättning noder hämtas och bearbetas. Noder identifieras med hjälp av ett XPath-uttryck. Alla noder bearbetas i den ordning de finns i källdokumentet.
XSLT utökar XPath-funktionsbiblioteket och låter dig definiera XPath-variabler. Dessa variabler har olika omfattning i stilmallen beroende på var de är definierade och deras värden kan ställas in utanför stilmallen. Variabelvärden kan inte ändras under bearbetning.
Även om denna procedur kan verka komplicerad, gör den XSLT liknande funktioner som andra webbmallspråk. Om stilmallen består av en enda regel för att bearbeta rotnoden, kopieras hela innehållet i mallen helt enkelt till resultatet, och XSLT-instruktionerna ( xsl:…elementen ' ') ersätts med det beräknade innehållet. XSLT erbjuder till och med ett speciellt format ("literal result element as stylesheet") för sådana enkla transformationer med en mall. Möjligheten att definiera individuella mallar och regler ökar dock flexibiliteten och effektiviteten hos XSLT avsevärt, särskilt när man genererar ett resultat som liknar originaldokumentet.
XSL | |
---|---|
World Wide Web Consortium (W3C) | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Produkter och standarder |
| ||||||||||||||
Organisationer |
| ||||||||||||||
PÅ |
| ||||||||||||||
Konferenser |
|