Az XSLT ( e X tensible S tylesheet L Anguage Transformations ) egy XML dokumentumok átalakítására szolgáló nyelv. Az XSLT specifikáció az XSL része, és a W3C ajánlása .
Ha egy sablonkészletből álló XSLT-stíluslapot XML -dokumentumra ( forrásfára ) alkalmaz, akkor egy olyan fa jön létre , amely XML-dokumentumként, XHTML - dokumentumként (csak XSLT 2.0), HTML -dokumentumként vagy egyszerű szövegfájlként szerializálható . Az adatok forrásfából való kiválasztásának (és részben átalakításának) szabályai az XPath lekérdezési nyelven vannak megírva .
Az XSLT-nek sokféle felhasználása van, főként a webes programozás és jelentéskészítés területén. Az XSLT nyelv által megoldott egyik feladat az adatok elkülönítése a megjelenítésüktől, az általános MVC ( Model-view-controller ) paradigma részeként . Egy másik gyakori feladat az XML dokumentumok konvertálása egyik XML sémából a másikba.
Az XSLT-t a World Wide Web Consortium XSL-munkacsoportja fejlesztette ki .
Az 1.0-s verziót ajánlásként hagyták jóvá 1999. november 16- án . Az első verzió megjelenése után megkezdődött a munka az 1.1-es verzión, de 2001- ben leállt, és az XSL munkacsoport csatlakozott az XQuery munkacsoporthoz, hogy együttműködjön az XPath 2.0 -n . Ezt követően az XPath 2.0 szolgált alapul az XSLT 2.0-s verziójának fejlesztéséhez.
A 2.0-s verziót 2007. január 24- én ajánlásként hagyták jóvá .
A 3.0-s verziót 2017. június 8-án hagyták jóvá.
Az XSLT-transzformációk végrehajtása során a következők vesznek részt:
A legegyszerűbb esetben egy XSLT processzor két dokumentumot vesz bemenetként, egy bemeneti XML dokumentumot és egy XSLT stíluslapot, és ezek alapján készít egy kimeneti dokumentumot.
Az XSLT az XPath nyelvet használja a bemeneti XML-dokumentum egyes részeinek eléréséhez és a számítások rendszerezéséhez.
Az XSLT 1.0 XPath 1.0-t, az XSLT 2.0 pedig az XPath 2.0-t használja.
Forrás XML dokumentum:
<?xml version="1.0"?> <persons> <person username= "MP123456" > <name> Ivan </name> <surname> Ivanov </surname> </person> <person username= "PK123456" > < név> Péter </név> <vezetéknév> Petrov </családnév> </person> </persons>XSLT stíluslap (transzformációk):
<?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= "@felhasználónév" > <felhasználónév> <xsl:value-of select= "." /> </felhasználónév> </xsl:template> <xsl:template match= "name" > <fullname> <xsl:apply-templates/> <xsl:apply-templates select= "following-sibling::surname" mode= "teljes név" /> </fullname> </ xsl:sablon> <xsl:template match= "vezetéknév" /> <xsl:template match= "surname" mode= "fullname" > <xsl:text> </xsl:text> <xsl:apply-templates/> </xsl:template> </xsl:stylesheet>Az eredményül kapott XML dokumentum:
<?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>XML dokumentum bevitele:
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="my-style.xsl"?> <domains> < sun.com ownedBy= "Sun Microsystems Inc." > <gazda> www <use> Világméretű webhely </use> </host> <host> Jáva <use> Java információ </use> </host> </sun.com> <w3.org ownedBy= "The World Wide Web Consortium" > <host> www <use> Világméretű webhely </use> </host> <host> érvényesítő <use> webfejlesztők, akik szeretnének rendet tenni </use> </host> </w3.org> </domains>Az XSLT átalakítás stílusa:
<?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= "en " > <head> <meta http-equiv= "Content-Type" content= "text/html; charset=UTF-8" /> <title> teszt1 </title> <style type= "text/css" > h1 { padding: 10px; párnázási szélesség: 100% háttérszín: ezüst } td, th { szélesség: 40%; szegély: 1px tömör ezüst; padding: 10px td:first-child, th:first-child { szélesség: 20% } táblázat {szélesség: 650 képpont} </style> </head> <body> <xsl:apply-templates/> </body> </html> </xsl:template> <!--Table headers and outline--> <xsl:template match= "domains/*" > <h1><xsl:value-of select= "@ownedBy" /></h1> <p> A következő gazdagép a nevek jelenleg használatban vannak a következő helyen: <strong><xsl:value-of select= "local-name(.)" /></strong> </p> <table> <tr><th> Gazdanév </th> <th> URL </th><th> Használja: </th></tr> <xsl:apply-templates/> </table> </xsl:template> <!--Táblázat sora és első két oszlopa--> <xsl:template match= "host" > <!--Változó létrehozása az 'url' számára, mivel kétszer használják --> <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> <!--'Használja' oszlop--> <xsl:template match= "use" > <td><xsl:value-of select= "." /></td> </xsl:template> </xsl:stylesheet>A kimenetként kapott XHTML (szóközök az egyértelműség kedvéért):
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html NYILVÁNOS "-//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> teszt1 </title> <style type= "text/css" > h1 { padding: 10px; párnázási szélesség: 100% háttérszín: ezüst } td, th { szélesség: 40%; szegély: 1px tömör ezüst; padding: 10px td:first-child, th:first-child { szélesség: 20% } táblázat {szélesség: 650 képpont} </style> </head> <body> <h1> Sun Microsystems Inc. </h1> <p> Jelenleg a következő gazdagépnevek vannak használatban a <strong> sun.com </strong></p> <table> <tr> <th> Gazdanév </th> <th> URL < címen /th> <th> Használja: </th> </tr> <tr> <td> www </td> <td><a href="http://www.sun.com" > http :// www.sun.com </a></td> <td> Világméretű webhely </td> </tr> <tr> <td> java </td> <td><a href= "http:/ /java.sun.com" > http://java.sun.com </a></td> <td> Java információ </td> </tr> </table> <h1> A World Wide Web Consortium </h1> <p> Jelenleg a következő gazdagépnevek vannak használatban a <strong> w3.org </strong></p> <table> <tr> <th> Host name < /th> <th> URL </th> <th> Használja: </th> </tr> <tr> <td> www </td> <td><a href= "http://www.w3 .org" > http://www.w3.org </a></td> <td> Világháló </td> </tr> <tr> <td> érvényesítő </td> <td> <a href="http://validator.w3.org" > http://validator.w3.org </a> </td> <td> webfejlesztők, akik szeretnék rendbe tenni </td> </ t> tr> </table> </body> </html>A kimenet nem feltétlenül helyes XHTML. Az XSLT 2.0 javította ezt az „XHTML” kimeneti metódus hozzáadásával, az XSLT 1.0-ban már létező „HTML”-mel együtt.
Az XSLT nyelv deklaratív, nem procedurális. A végrehajtható utasítások sorozatának meghatározása helyett ez a nyelv határozza meg az átalakítás során alkalmazandó szabályokat. Maga a transzformáció egy rögzített algoritmus szerint történik.
Először is, az XSLT processzor elemzi a transzformációs fájlt, és elkészíti a bemeneti fájl XML-fáját. Ezután megkeresi a gyökércsomóponthoz legjobban illeszkedő sablont, és kiértékeli a talált sablon tartalmát. Az egyes sablonokban található utasítások vagy közvetlenül azt mondják az XSLT processzornak, hogy "hozza létre ezt a címkét itt", vagy azt mondják, hogy "dolgozzon fel más csomópontokat ugyanazzal a szabállyal, mint a gyökércsomópont".
Ezt az algoritmust, amely kissé nem triviális, az alábbiakban részletesebben ismertetjük, bár sok egzotikus részletét kihagyjuk.
Minden XSLT processzornak végre kell hajtania a következő lépéseket az átalakításra való felkészüléshez.
A processzor ezután a következő lépéseken megy keresztül az eredményfa megszerzéséhez és sorozatosításához.
Egy csomópont feldolgozása során a következő műveleteket hajtják végre.
Az utasítás xsl:apply-templatesfeldolgozása esetén új csomópontkészletet kér le és dolgoz fel. A csomópontok azonosítása XPath kifejezéssel történik. Az összes csomópont feldolgozása a forrásdokumentumban szereplő sorrendben történik.
Az XSLT kiterjeszti az XPath függvénykönyvtárat, és lehetővé teszi XPath változók meghatározását. Ezek a változók eltérő hatókörrel rendelkeznek a stíluslapon attól függően, hogy hol vannak meghatározva, és értékeik a stíluslapon kívül is beállíthatók. A változó értékek a feldolgozás során nem módosíthatók.
Bár ez az eljárás bonyolultnak tűnhet, funkcióiban az XSLT-t hasonlóvá teszi más websablonnyelvekhez. Ha a stíluslap egyetlen szabályból áll a gyökércsomópont feldolgozására, akkor a sablon teljes tartalma egyszerűen átmásolódik az eredményhez, és az XSLT utasításokat (a " xsl:…" elemeket) lecseréli a számított tartalomra. Az XSLT még egy speciális formátumot is kínál ("literal result element as stylesheet") az ilyen egyszerű, egysablonos átalakításokhoz. Az egyedi sablonok és szabályok meghatározásának lehetősége azonban nagymértékben növeli az XSLT rugalmasságát és hatékonyságát, különösen akkor, ha az eredeti dokumentumra nagyon hasonlító eredményt generál.
XSL | |
---|---|
World Wide Web Consortium (W3C) | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Termékek és szabványok |
| ||||||||||||||
Szervezetek |
| ||||||||||||||
TOVÁBB |
| ||||||||||||||
Konferenciák |
|