XSL Dönüşümleri (XSLT) Sürüm 1.0
ÖncekiYukarıSonraki

D Örnekler (Bilgilendirici)

İçindekiler

    D.1 Belge Örneği
    D.2 Veri Örneği

D.1 Belge Örneği

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>

D.2 Veri Örneği

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ış &lt; 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ı"
        }

ÖncekiYukarıSonraki
XSLT Biçembentlerinde DTD BölümüBir Linux Kitaplığı SayfasıTeşekkür