Extensible Stylesheet Language Transformations

A Wikipédiából, a szabad enciklopédiából
(XSLT szócikkből átirányítva)
Az XSLT folyamat diagramja

Az Extensible Stylesheet Language Transformations (röviden XSLT) XML-alapú fájlformátum illetve a hozzá tartozó feldolgozó rendszer. Az XSLT feldolgozót XML dokumentumok más, ember által könnyebben értelmezhető formátumra alakításához használják. A konverzió során az eredeti file megmarad, s annak tartalma alapján létrejön a célformátumban egy új fájl.[1]

A keletkező dokumentum formátuma lehet többek között XML, HTML, XHTML, PDF vagy normál szöveg.[2] Az XSLT-t gyakran használják különböző sémájú XML dokumentumok közötti konverzióra, dinamikus weboldalak létrehozására és PDF dokumentumok generálására.

Az XSLT közvetlen elődje a DSSSL, amely azt a funkciót látta el az SGML esetében, amit XSLT lát el az XML esetében.

Az XSLT nyelv Turing-teljes.[3]

Történet[szerkesztés]

Az XSLT-t a World Wide Web Consortium (W3C) fejleszti. Az XSLT 2.0 verzió 2007. január 23-án lépett W3C ajánlás státuszba.

Eredetileg az XSLT a W3C Extensible Stylesheet Language (XSL) projektjének a része volt 1998 és 1999 között. Az XSL projektből született még az XSL-FO és az XPath.

James Clark alkotta meg az XSLT 1.0 verziót, ami 1999. november 16-án lépett W3C ajánlás státuszba.

Az XSL munkacsoport megpróbálta 2001-ben kifejleszteni az 1.1 verziót, de nem sikerült nekik, majd összefogtak az XQuery munkacsoporttal, akikkel megalkották az XPath 2.0-t gazdagított adatmodellel és XML sémára alapú típusrendszerrel. A Michael Kay-féle XSLT 2.0 verzió 2002 és 2006 között fejlődött ki.

Áttekintés[szerkesztés]

Az XSLT feldolgozási modell részei a következők:

  • egy vagy több XML forrásdokumentum
  • egy vagy több XSLT stíluslap modul
  • az XSLT sablonfeldolgozó szoftver
  • egy vagy több céldokumentum

Az XSLT feldolgozó tipikus esetben két inputfájlt olvas be, nevezetesen egy forrásfájlt és egy XSLT stíluslapot, majd egy outputfájlt hoz létre. Az XSLT stíluslap tartalmazza a konverziós szabályokat a feldolgozó számára. A forrásfájl jellemzően XML formátumú, de a specifikáció nem zár ki más formátumokat sem, például a RAM-ban tárolt DOM modellt sem. Az XSLT stíluslap formátuma XML-alapú.

A konverziós szabályok feldolgozása[szerkesztés]

Az XSLT nyelv deklaratív, ilyen tekintetben hasonlít a funkcionális programnyelvekre. A konverziós szabályok azt írják le, hogy a feldolgozónak hogyan kell kezelnie az XML-fa adott XPath kifejezésre illeszkedő csomópontjait.

A feldolgozó a következő algoritmus szerint működik: Beolvassa a stíluslap szabályait és létrehoz a forrásdokumentumból egy fa adatszerkezetet, egy úgynevezett forrásfát. A forrásfát a gyökerénél kezdi el feldolgozni, s minden csomópontra végrehajtja a rá illeszkedő XPath kifejezésekhez tartozó utasításokat. Az utasítások jellemzően vagy csomópontokat hoznak létre a célfában, vagy tovább olvasnak a forrásfában. A feldolgozó végül a célfából előállítja a kimenetet.

Implementációk[szerkesztés]

XSLT feldolgozó jellemzően szerveroldalon fut. Az XSLT feldolgozó lehet különálló alkalmazás is, de szoftverkomponens is alkalmazásszervereken vagy operációs rendszerekben vagy akár kliensoldalon a böngészőben is. Javás XSLT implementáció a FOP. A Windows XP operációs rendszerhez létezik egy MSXML3 nevű programkönyvtár, amely tartalmaz XSLT feldolgozót is.

Az XSLT és az XPath[szerkesztés]

XSLT támaszkodik a szintén W3C által kiadott XPath nyelvre a forrás(dokumentum)fa csúcsainak azonosításánál.

Az XSLT 2.0 specifikáció támaszkodik az XPath 2.0 specifikációra, azonos dátummal publikálták őket. Hasonlóképpen, az XSLT 1.0 specifikáció az XPath 1.0 specifikációra támaszkodik.

Példák[szerkesztés]

Legyen az XML forrásfájl például a következő:

<?xml version="1.0" ?>
<persons>
  <person username="EN">
    <name>Ernő</name>
    <family-name>Nemecsek</family-name>
  </person>
  <person username="BNy">
    <name>Bobó</name>
    <family-name>Nyomasek</family-name>
  </person>
</persons>

1. példa (XML-XML transzformáció)[szerkesztés]

A következő XSLT stíluslap hatására a feldolgozó kigyűjti a <name>…</name> tagpárok közötti értékeket:

<?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">
       <root> <xsl:apply-templates select="person"/> </root>
</xsl:template>

<xsl:template match="person">
	<name username="{@username}">
		<xsl:value-of select="name" />
	</name>
</xsl:template>

</xsl:stylesheet>

A keletkező output XML a következő:

<?xml version="1.0" encoding="UTF-8"?>
<root>
      <name username="EN">Ernő</name>
      <name username="BNy">Bobó</name>
</root>

2. példa (XML-XHTML transzformáció)[szerkesztés]

Ebben az esetben a következőképpen néz ki az XSLT stíluslap:

<?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="html"/>

<xsl:template match="/persons">
	<html>
	<head> <title>Testing XML Example</title> </head>
	<body>
		<h1>Persons</h1>
		<ul>
		<xsl:apply-templates select="person">
			<xsl:sort select="family-name" />
		</xsl:apply-templates>
		</ul>
	</body>
	</html>
</xsl:template>

<xsl:template match="person">
	<li>
		<xsl:value-of select="family-name"/><xsl:text>, </xsl:text>
		<xsl:value-of select="name"/>
	</li>
</xsl:template>

</xsl:stylesheet>

ami a következő XHTML kimenetet generálja:

<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head> <title>Testing XML Example</title> </head>
<body>
	<h1>Persons</h1>
	<ul>
	   <li>Nemecsek, Ernő</li>
	   <li>Nyomasek, Bobó</li>
	</ul>
</body>
</html>

Hivatkozások[szerkesztés]

  1. XSL Transformations (XSLT)
  2. specifying alternate output methods
  3. Kepser, Stephan: A Simple Proof for the Turing-Completeness of XSLT and XQuery. International Digital Enterprise Alliance, 2004. [2007. szeptember 27-i dátummal az eredetiből archiválva]. (Hozzáférés: 2008. május 8.)
Dokumentáció
Levelezési listák
Könyvek
XSLT programkönyvtárak
További példák