İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır

XSL'e Kısa Bir Giriş

XSL Nedir?

XSL (Extensible Style Language) bir XML document'in başka biçimlere dönüştürmeye yarayan dildir. XML document'i başka bir XML'e, Text'e veya HTML dönüştürülebilir. XSL'in kendisi XML'de yazılmıştır. Başka bir deyişle XSL, XML formatında yazılmış element ve attribute'lerden oluşur.

XLS 'declarative' bir dildir, 'imperative' değildir. Imperative diller (örneğin Java) yazarın neler yapılacağını emir kipinde söylediği dillerdir. "Bunu yap, sonra şunu yap sonra da şunu yap" şeklinde bir yapsı vardır. Oysa declarative dillerde sadece durumu 'deklare' edilir. Sonra bu deklarasyonları değerlendirip işleyecek bir program çalıştırılır. Yani yazar sadece 'durmu budur, şudur ve odur' şeklinde durumu arzeder. İşi yapmak o deklarasyonları değerlendirecek programa kalır. XSL declarative'dir. Bunun anlamı geliştirici ne yapılacağını söyleyemez. Sadece hangi durumda ne gibi şeyler yapılacağını belirler. Aktif değil pasiftir. Örneğin sınav belirten bir XML document'ini XSL'le HTML'e çevirmeye çalışalım. XSL yazarı 'şuraya soruları koy demez. 'Soru' element'iyle karşılaşınca şunu koy, şu şablona (template'e) uygun olarak çıktı üret diyebilir. XML transformer, tek tek XMLelementleriyle karşılaştıkla XSL'de ki şablonları 'uygular' (apply eder).

XSL Template'leri

Exam document'inde 'question' adlı elementin nasıl biçimlendirileceğini belirtmek için


<xsl:template match="question">
	<h4> Soru </h4>
</xsl:template>
 

şeklinde bir ifade yazılır. Burada söylenen "'question'a rastlayınca şunları(h4 vs.) koy"dur. XML transformer ne zamana soruyla karşılarsa bu belirttiğimiz şablona göre çıktı üretir.

Bir XMLdocument'i elementlerden oluştuğuna göre template'ler, bütün document'i biçimlemek için yeterlidir. Template'lerde match attributesine elementin konumunu belirten XPath ifadesi yazılır. Burada '/exam' exam elementini belitren bir XPath ifadesidir. Eğer bir template'in match attribute'si '/' ile başlıyorsa mutlak adreslenmiş olur. 'question/text' de bir XPath ifadesidir anca mutlak değil görelidir. Yani belgenin en tepesine göre değil içinde bulunduğu elemennt'e göredtanımlanmıştır. Blegenin kendisi de element olarak düşünülebilir ve kök anlamında '/' işaretiyle belirtilir.


<xsl:template match="/exam">
	<h3>Sınav</h3>
	<xsl:apply-templates select="question"/>
</xsl:template>
<xsl:template match="question">
	<h4> Soru </h4>
</xsl:template>
 

Bütün belge ve sorular iki template'le belirtilmiş olur. Elbette 'exam' için yazılan template 'apply-templates' ile 'question' için yazılan template'i çağırmış olur.

XSL Node Değerleri

Sonuç olarak üretilen belgede XML içerisinden herhangi bir veriyi göstermek için xsl:value-of kullanılır. Bu etiket bir XML düğümünün (element, text veya attribute) içeriğini belli bir konuma yerleştirir. Örneğin


<xsl:value-of select="@number"/>

ifadesi bir attibutenin değierini koyarken


<xsl:value-of select="text"/>

ifadesi bir element'in içerisindeki metni koyar. XSL'de value-of element'ine select ifadesiyle belli bir elementin XPath ifadesi verilir. XPath relative veya mutlak olabilir. XPath'te '.' ifadesi içerisinde bulunulan element demektir.

Akış Kontrolü

XSL'de programlama dillerindekine benzer akış kontolü etiketleri vardır: for döngüsü if-else benzeri yapılar bulunur. Örnek olarak


	<xsl:for-each select="option">		
		<br/><b> <xsl:value-of select="@id"/> </b> ) <xsl:value-of select="."/>	
	</xsl:for-each>

gibi bir parça verilebilir.Bu ifade "her 'option' elementi için döngünün içindekileri koy'" demektir.

XSL Örneği

XML XSL ve sonuç olarak üretilen HTML :

ExamTest.xslİndir Göster Gizle Kopar Satır Gizle Satır Göster
  1 <?xml version="1.0" encoding="ISO-8859-9"> 
  2 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  3 <xsl:template match="/exam">
  4 	<h3><xsl:value-of select="@id"/> : <xsl:value-of select="title"/></h3>
  5 	<xsl:apply-templates select="question"/>
  6 </xsl:template>
  7 <xsl:template match="question">
  8 	<h4> Soru <xsl:value-of select="@number"/> </h4>
  9 	<i> <xsl:value-of select="text"/> </i>
 10 	<xsl:for-each select="option">		
 11 		<br/><b> <xsl:value-of select="@id"/> </b> ) <xsl:value-of select="."/>	
 12 	</xsl:for-each>
 13 </xsl:template>
 14 </xsl:stylesheet>

ExamTest.xmlİndir Göster Gizle Kopar Satır Gizle Satır Göster
  1 <?xml version="1.0" encoding="ISO-8859-9">
  2 <exam id="math-3">
  3 	<title>Matematik Dersi 2. Ara Sınavı </title>
  4 	<question number="1">
  5 		<text>İki kere iki iki kaç eder?</text>
  6 		<option id="a">22</option>
  7 		<option id="b">3</option>
  8 		<option id="c">4</option>
  9 		<option id="d">5</option>	
 10 	</question>
 11 	<question number="2">
 12 		<text>Kendimi kendimden çıkarsam kaç kalır?</text>
 13 		<option id="a">1</option>
 14 		<option id="b">2</option>
 15 		<option id="c">0</option>
 16 		<option id="d">FD</option>	
 17 	</question>
 18 </exam>

ExamTest.htmlİndir Göster Gizle Kopar Satır Gizle Satır Göster
  1 <h3>math-3 : Matematik Dersi 2. Ara SInavı</h3><h4> Soru 1</h4><i>İki kere iki iki kaç eder?</i><br/><b>a</b> ) 22<br/><b>b</b> ) 3<br/><b>c</b> ) 4<br/><b>d</b> ) 5<h4> Soru 2</h4><i>Kendimi kendimden çıkarsam kaç kalir?</i><br/><b>a</b> ) 1<br/><b>b</b> ) 2<br/><b>c</b> ) 0<br/><b>d</b> ) FD

Dosya Listesi

İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır