6 Nisan 2008 Pazar

XML ve XSLT

XML, data change ve veri sakalamak için kullanabilecegimiz platform bagımsız oldukca elverisli bir teknoloji. Cok yaygın kullanımından dolayı bu yapıyı iyi anlamak gerekiyor. Çünkü yeri geldiğinde çok farklı cihazlar arasında veri alış-verişi yapılıyor ve bu veri alış-verişinin bir standart kullanılarak yapılması ilerde başka şahıslar tarafından bu işlemin geliştirilmesini sağlayabilir.

XML olmadığını düşünelim, Şöyle ki bir elektronik cihazdan bilgisayara veri okuyacaksınız. Elektronik cihaza bir kod embed ettiniz, bu kodda 5 tane arac bilgisi var diyelim ve bunları su sekilde cihaza kaydediyoruz:

Nesne1||Otobus||Plaka||34 OO 9899||Kapasite||200||Marka||Mercedes
Nesne2||Otobus||Plaka||34 aa 1121||Kapasite||400||Marka||Mercedes
Nesne3||Araba||Plaka||34 PP 3311||Kapasite||5||Marka||AUDI

Görüldüğü gibi bu kodda veya kod demeyelim, bu fileda araclara ait bilgiler var. Bilgiler karmasık bir düzende kaydedilmiş. Bunu okumak gercekten zor. Hadi biz bunu pcde kendi yazdıgımız bir prog.la okuduk diyelim bilgisayar tarafından, fakat başka birisi yine bunu okuyamayacak, aynı programın onda da olması gerekiyor. Bu yüzden bu işin bir standartlaştırmaya kavuşması gerekiyor. Belli kurallar dahilinde dataların saklanması gerekiyor ki bu işlem evrensel olsun, milyonlarca insan tarafından kullanılabilsin. O yüzden XML geliştirilmiş bu işin standartlaştırılması sağlanmıştır.

<?xml version="1.0"?>
<nesneler>
<nesne id="1">
<tip>Otobus</tip>
<plaka>34 00 9899</plaka>
<kapasite>200</kapasite>
<marka>Mercedes</marka>
</nesne>
<nesne id="2">
<tip>Otobus</tip>
<plaka>34 aa 1121</plaka>
<kapasite>400</kapasite>
<marka>Mercedes</marka>
</nesne>
<nesne id="3">
<tip>Araba</tip>
<plaka>34 PP 3311</plaka>
<kapasite>5</kapasite>
<marka>AUDI</marka>
</nesne>
</nesneler>


Yukarıdaki file'ı araclar.xml olarka kaydedip, çift tıkladığımızda ağaç yapısına benzer bir yapıyı göreceğiz. Çünkü şu ana kadar HTML'den yararlanmadık. Şimdi bu XML dosyasını HTML içinde XSLT ile görüntülemeye çalışalım.

İlk olarak XML File'ımızın 2.satırına yani <?xml version.. ile başlayan satırın bir altına şu satırı ekliyoruz :

<?xml-stylesheet type="text/xsl" href="araclar.xsl"?>

araclar.xsl dosyası araclar.xml dosyasıyla aynı klasörde bulunmakta ve araclar.xml dosyasının çift tıklanıp açıldığında anlamlı bir şekilde yani html gibi görüntülenmesini sağlayacak.

Peki araclar.xsl dosyasını nasıl oluşturuyoruz.

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">

Yukarıdaki ifadelerden ilk ikisini tanıyoruz. 3. satırdaki ise XPath olayını belirtiyor. XPath ne? XPath aynı directory yapısı gibi çalışıyor. XML deki node'lara ulaşmamız için bir path tanımlıyoruz. Buradaki onu belirtiyor. Aşağıdaki satırlarda olayı daha iyi anlayacağız.


<html>
<body>
<h2> Vehicles </h2>
<table border="1">
<tr>
<th>Tip</th>
<th>Plaka</th>
<th>Kapasite</th>
<th>Marka</th>
</tr>

tablomuzu oluşturduk ve başlıklarını ekledik şimdi sıra geldi tablonun rowlarını doldurmaya :

<xsl:for-each select="nesneler/nesne">


directory'e ulaşır gibi xml de nodedan nodea atlıyoruz. nesneler nodundan nesne noduna atlıyoruz.

<xsl:sort select="kapasite" />


bilgilerin kapasite degerlerine gore sıralanmasını istedik. burada ascending sıralama gerceklesiyor. dilenirse order="" attribute ile bu deger degistirilebilir

<xsl:choose>

choose deyimi switch yapısına benziyor. when keywordleri switch yapısındaki case'lere, otherwise ise default kısmına denk düşüyor.

<xsl:when test="kapasite<100">
<tr>
<td bgcolor="red"><xsl:value-of select="tip" /></td>
<td><xsl:value-of select="plaka" /></td>
<td><xsl:value-of select="kapasite" /></td>
<td><xsl:value-of select="marka" /></td>
</tr>
</xsl:when>
<xsl:otherwise>
<tr>
<td bgcolor="yellow"><xsl:value-of select="tip" /></td>
<td><xsl:value-of select="plaka" /></td>
<td><xsl:value-of select="kapasite" /></td>
<td><xsl:value-of select="marka" /></td>
</tr>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

burada yaptığımız eğer xml deki dataların yani aracların kapasiteleri 100 den kucuk ise tiplerinin arka planı "red" olarak yani kırmızı olarak, 100 den buyukse tiplerinin arka planı sarı olacak sekilde tablolarımızı doldurmus oluyoruz.

KOMPLE KOD:

araclar.xsl

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2> Vehicles </h2>
<table border="1">
<tr>
<th>Tip</th>
<th>Plaka</th>
<th>Kapasite</th>
<th>Marka</th>
</tr>
<xsl:for-each select="nesneler/nesne">
<xsl:sort select="kapasite" />
<xsl:choose>
<xsl:when test="kapasite<100">
<tr>
<td bgcolor="red"><xsl:value-of select="tip" /></td>
<td><xsl:value-of select="plaka" /></td>
<td><xsl:value-of select="kapasite" /></td>
<td><xsl:value-of select="marka" /></td>
</tr>
</xsl:when>
<xsl:otherwise>
<tr>
<td bgcolor="yellow"><xsl:value-of select="tip" /></td>
<td><xsl:value-of select="plaka" /></td>
<td><xsl:value-of select="kapasite" /></td>
<td><xsl:value-of select="marka" /></td>
</tr>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>



Hiç yorum yok:

Yorum Gönder