| XSL Dönüşümleri (XSLT) Sürüm 1.0 | ||
|---|---|---|
| Önceki | Yukarı | Sonraki | 
Bu örnekte, basit bir DTD ile uyumlu belgeleri XHTML'ye [XHTML] dönüştürmek için bir biçembent kullanımı gösterilmiştir. DTD şöyledir:
<!ELEMENT doc (title, chapter*)> <!ELEMENT chapter (title, (para|note)*, section*)> <!ELEMENT section (title, (para|note)*)> <!ELEMENT title (#PCDATA|emph)*> <!ELEMENT para (#PCDATA|emph)*> <!ELEMENT note (#PCDATA|emph)*> <!ELEMENT emph (#PCDATA|emph)*>
Biçembent böyle:
<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns="http://www.w3.org/TR/xhtml1/strict">
<xsl:strip-space elements="doc chapter section"/>
<xsl:output
   method="xml"
   indent="yes"
   encoding="iso-8859-9"
/>
<xsl:template match="doc">
 <html>
   <head>
     <title>
       <xsl:value-of select="title"/>
     </title>
   </head>
   <body>
     <xsl:apply-templates/>
   </body>
 </html>
</xsl:template>
<xsl:template match="doc/title">
  <h1>
    <xsl:apply-templates/>
  </h1>
</xsl:template>
<xsl:template match="chapter/title">
  <h2>
    <xsl:apply-templates/>
  </h2>
</xsl:template>
<xsl:template match="section/title">
  <h3>
    <xsl:apply-templates/>
  </h3>
</xsl:template>
<xsl:template match="para">
  <p>
    <xsl:apply-templates/>
  </p>
</xsl:template>
<xsl:template match="note">
  <p class="note">
    <b>BİLGİ: </b>
    <xsl:apply-templates/>
  </p>
</xsl:template>
<xsl:template match="emph">
  <em>
    <xsl:apply-templates/>
  </em>
</xsl:template>
</xsl:stylesheet>Kaynak belgemiz böyle olsaydı:
<!DOCTYPE doc SYSTEM "doc.dtd"> <doc> <title>Belge Başlığı</title> <chapter> <title>Fasıl Başlığı</title> <section> <title>Bölüm Başlığı</title> <para>Bu bir denemedir.</para> <note>Bu bir ek bilgidir.</note> </section> <section> <title>Başka Bir Bölüm Başlığı</title> <para>Bu da <emph>başka</emph> bir DNMdir.</para> <note>Bu bir ek malumattır.</note> </section> </chapter> </doc>
Üretilecek hedef belgemiz böyle olurdu:
<?xml version="1.0" encoding="iso-8859-9"?> <html xmlns="http://www.w3.org/TR/xhtml1/strict"> <head> <title>Belge Başlığı</title> </head> <body> <h1>Belge Başlığı</h1> <h2>Fasıl Başlığı</h2> <h3>Bölüm Başlığı</h3> <p>Bu bir denemedir.</p> <p class="note"> <b>BİLGİ: </b>Bu bir ek bilgidir.</p> <h3>Başka Bir Bölüm Başlığı</h3> <p>Bu da <em>başka</em> bir DNMdir.</p> <p class="note"> <b>BİLGİ: </b>Bu ilaveten diğer bir malumattır.</p> </body> </html>
Bu örnekte, bir XML belge olarak tutulan veriden üç farklı biçembent kullanarak verinin üç farklı gösterimi (HTML, SVG ve VRML) elde edilmektedir.
Veri girdimiz:
<satışlar>
        <bölge id="Kuzey">
                <gelir>10</gelir>
                <artış>9</artış>
                <ikram>7</ikram>
        </bölge>
        <bölge id="Güney">
                <gelir>4</gelir>
                <artış>3</artış>
                <ikram>4</ikram>
        </bölge>
        <bölge id="Batı">
                <gelir>6</gelir>
                <artış>-1.5</artış>
                <ikram>2</ikram>
        </bölge>
</sales>Aşağıdaki biçembent, Birebir Hedef Eleman olarak Biçembent bölümünde açıklanan basitleştirilmiş sözdizimini kullanarak veriyi HTML'ye dönüştürmek içindir:
<html xsl:version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      lang="tr">
    <head>
	<title>Bölgelere göre Satış Sonuçları</title>
    </head>
    <body>
	<table border="1">
	    <tr>
		<th>Bölge</th>
		<th>Gelir</th>
		<th>Büyüme</th>
		<th>İkramiye</th>
	    </tr>
	    <xsl:for-each select="satışlar/bölge">
		<!-- sonuçları gelire göre sırala -->
		<xsl:sort select="gelir"
			  data-type="number"
			  order="descending"/>
		<tr>
		    <td>
			<em><xsl:value-of select="@id"/></em>
		    </td>
		    <td>
			<xsl:value-of select="gelir"/>
		    </td>
		    <td>
			<!-- büyüme aslında küçülmeyse kırmızı göster -->
			<xsl:if test="artış < 0">
			     <xsl:attribute name="style">
				 <xsl:text>color:red</xsl:text>
			     </xsl:attribute>
			</xsl:if>
			<xsl:value-of select="artış"/>
		    </td>
		    <td>
			<xsl:value-of select="ikram"/>
		    </td>
		</tr>
	    </xsl:for-each>
	</table>
    </body>
</html>The HTML output is:
<html lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-9"> <title>Bölgelere göre Satış Sonuçları</title> </head> <body> <table border="1"> <tr> <th>Bölge</th><th>Gelir</th><th>Büyüme</th><th>İkramiye</th> </tr> <tr> <td><em>Kuzey</em></td><td>10</td><td>9</td><td>7</td> </tr> <tr> <td><em>Batı</em></td><td>6</td><td style="color:red">-1.5</td><td>2</td> </tr> <tr> <td><em>Güney</em></td><td>4</td><td>3</td><td>4</td> </tr> </table> </body> </html>
Bu biçembent veriyi SCG'ye dönüştürmek içinder:
<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns="http://www.w3.org/Graphics/SVG/SVG-19990812.dtd">
<xsl:output method="xml" indent="yes" media-type="image/svg"/>
<xsl:template match="/">
<svg width = "3in" height="3in">
    <g style = "stroke: #000000">
        <!-- eksenlere çiz -->
        <line x1="0" x2="150" y1="150" y2="150"/>
        <line x1="0" x2="0" y1="0" y2="150"/>
        <text x="0" y="10">Gelir</text>
        <text x="150" y="165">Bölüm</text>
        <xsl:for-each select="satışlar/bölüm">
	    <!-- bazı yararlı değişkenleri tanımlayalım -->
	    <!-- çubuğun x konumu -->
	    <xsl:variable name="pos"
	                  select="(position()*40)-30"/>
	    <!-- çubuğun yüksekliği -->
	    <xsl:variable name="height"
	                  select="gelir*10"/>
	    <!-- dikdörtgen -->
	    <rect x="{$pos}" y="{150-$height}"
                  width="20" height="{$height}"/>
	    <!-- metinsel yafta -->
	    <text x="{$pos}" y="165">
	        <xsl:value-of select="@id"/>
	    </text>
	    <!-- çubuk değeri -->
	    <text x="{$pos}" y="{145-$height}">
	        <xsl:value-of select="gelir"/>
	    </text>
        </xsl:for-each>
    </g>
</svg>
</xsl:template>
</xsl:stylesheet>SVG çıktısı:
<svg width="3in" height="3in"
     xmlns="http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
    <g style="stroke: #000000">
	<line x1="0" x2="150" y1="150" y2="150"/>
	<line x1="0" x2="0" y1="0" y2="150"/>
	<text x="0" y="10">Gelir</text>
	<text x="150" y="165">Bölüm</text>
	<rect x="10" y="50" width="20" height="100"/>
	<text x="10" y="165">Kuzey</text>
	<text x="10" y="45">10</text>
	<rect x="50" y="110" width="20" height="40"/>
	<text x="50" y="165">Güney</text>
	<text x="50" y="105">4</text>
	<rect x="90" y="90" width="20" height="60"/>
	<text x="90" y="165">Batı</text>
	<text x="90" y="85">6</text>
    </g>
</svg>Aşağıdaki biçembent veriyi VRML'ye dönüştürmek içindir:
<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- metni, öntanımlı karakter kümesini kullanarak
     model/vrmlmime türünde üretelim -->
<xsl:output method="text" encoding="UTF-8" media-type="model/vrml"/>
        <xsl:template match="/">#VRML V2.0 utf8
# tek bir bar elemanının externproto tanımı
EXTERNPROTO bar [
  field SFInt32 x
  field SFInt32 y
  field SFInt32 z
  field SFString name
  ]
  "http://www.vrml.org/WorkingGroups/dbwork/barProto.wrl"
# taşıyıcı çizge eksenlerini satıriçine alalım
Inline {
        url "http://www.vrml.org/WorkingGroups/dbwork/barAxes.wrl"
        }
                <xsl:for-each select="satışlar/bölüm">
bar {
        x <xsl:value-of select="gelir"/>
        y <xsl:value-of select="artış"/>
        z <xsl:value-of select="ikram"/>
        name "<xsl:value-of select="@id"/>"
        }
                </xsl:for-each>
        </xsl:template>
</xsl:stylesheet>VRML çıktısı:
#VRML V2.0 utf8
# tek bir bar elemanının externproto tanımı
EXTERNPROTO bar [
  field SFInt32 x
  field SFInt32 y
  field SFInt32 z
  field SFString name
  ]
  "http://www.vrml.org/WorkingGroups/dbwork/barProto.wrl"
# taşıyıcı çizge eksenlerini satıriçine alalım
Inline {
        url "http://www.vrml.org/WorkingGroups/dbwork/barAxes.wrl"
        }
bar {
        x 10
        y 9
        z 7
        name "Kuzey"
        }
bar {
        x 4
        y 3
        z 4
        name "Güney"
        }
bar {
        x 6
        y -1.5
        z 2
        name "Batı"
        }| Önceki | Yukarı | Sonraki | 
| XSLT Biçembentlerinde DTD Bölümü | Bir Linux Kitaplığı Sayfası | Teşekkür |