Uygulamalar arasında sorunsuz veri alış-verişi için kullanılabilecek en uygun teknoloji XML'dir. XML'de veriyi, verinin ne anlama geldiğini tanımlayan meta-veri olarak adlandırılan verilerle birlikte kodluyoruz. Web servisleri kurumsal uygulamaların tümleştirilmesi için en hızlı ve ucuz çözümdür. Web servisleri bunu, uygulamanın fonksiyonlarını ve verilerini, platformdan bağımsız bir şekilde paylaştırarak
sağlar. Web servisleri XML tabanlı bir dizi teknoloji üzerine kuruludur:
- Web Services Description Language: Web servisinin arayüzünün tanımlandığı, XML ve XML Schema teknolojileri kullanılarak oluşturulur. WSDL servisin tanımını iki bölüme ayırır:
a) Soyut arayüz:
Soyut arayüz, servis tarafından desteklenen işlemler ve parametreleri,
soyut veri tipleri gibi servise ilişkin genel özellikleri tanımlar. Bu tanımlamalar
ağ adresi, ağ protokolü, veri gösterimi gibi bilgisayar ağ parametrelerinden
tamamen bağımsızdır.
b)
Somut gerçekleme:
Gerçeklemeye ilişkin tanımlamalar, soyut arayüz tanımlarını gerçek ağ
adresi, ağ protokolü ve gerçek veri tipleri ile eşleştirir. Hem soyut arayüz hem de somut gerçekleme tanımları XML elemanları aracılığı
ile verilir. Sonuç olarak, WSDL dokümanı, http://schemas.xmlsoap.org/wsdl isim
uzayında tanımlı XML Schema dokümanında tanımlı elemanlar kullanılarak
oluşturulmuş bir XML dokümanıdır.
Genel olarak bir WSDL dokümanının içeriği aşağıda verilmiştir.
<definitions>
<types>
Soyut veri tipi
tanımı
</types>
<message>
Servis
giriş/çıkış parametrelerinin tanımları
</message>
<portType>
İskele (=port)
tanımı
</portType>
<binding>
Aynı iskeleye birden fazla iletişim protokolü üzerinden erişilebilinir. Bunun tanımı bu bölümde verilmektedir.
</binding>
<services>
Gerçeklemeye ilişkin tanımlar
</services>
</definitions>
- SOAP (=Simple Object Access Protocol): SOAP uygulamalar arasında yapısal ve tipli verilerin değişimi için
geliştirilmiş XML tabanlı bir protokoldür. Web servis uygulamalarında üç çeşit
aktör bulunmaktadır: servisi kullanan tüketici, servisi veren servis sağlayıcı ve
servisin yerini söyleyen bir aracı. SOAP tüm bu aktörler arasındaki
veri alış-verişine olanak sağlayan bir
standarttır. Bu standart kesinlikle uygulamanın mantığı, iletişim protokolü, programlama
modeli ya da programlama dili konusunda bir kısıt getirmez. Bunun yanında
baştan beri genellikle HTTP üzerinden taşınmaktadır. Ama bunun yanında JMS, SMTP, SFTP gibi iletişim protokolleri üzerinden de taşınabilir.
- UDDI (=Universal Description, Discovery and Integration):
UDDI servis kayıtları Web servislerini kataloglama platformunu oluşturur. Web
servis kayıt kataloğu merkezi bir Web servisi arama motorudur. Web servis
istemcileri, bu arama motoru sayesinde, kendi amaçlarına uygun ve yeterli
servis çözümlerini bulabilirler. Arama ölçütü erişim arayüzü gibi teknik bir konu
olabileceği gibi servisin ticari ünü ve coğrafi konumu gibi teknik dışı konular
da olabilir. Genel olarak UDDI kayıtlarında aşağıdaki bilgiler yer alır:
- Web servisi sunan ticari firma ve kurumlar hakkında bilgiler
- Firmaca sunulan Web
servislerinin tanımını
- Web servislerine erişim
için gerekli arayüz ile ilgili teknik bilgiler
Bunun yanında, UDDI, bu bilgilere erişim için Uygulama Yazılımı Arayüzü de sunar. Bu arayüz sayesinde Web istemcileri her zaman servis hakkında güncel
bilgilere erişebilir. UDDI olgun bir teknoloji olmasına rağmen ağır sıklet bir teknoloji olduğu için pek kullanılmamaktadır. Bu teknolojinin yerini yine XML tabanlı bir teknoloji olan WSIL (Web Service Inspection Language) almıştır. XML web servisleri kurumsal uygulamaları biribirleri ile tümleştirmek ve Servis Odaklı Mimari çözümlerinde servisleri tanımlamak ya da gerçekleştirmek amacıyla yoğun olarak kullanılmaktadır.
XSL bir XML dokümanını bir başka XML dokümanına
ya da başka bir tipte veriye (metin, xhtml, pdf, resim gibi) dönüştürmek için
kullanılan bir XML tabanlı standarttır. Bu teknoloji iki temel bileşenden
oluşmaktadır: XSLT ve XSL FO (Formatting Objects). XSLT XSL’in dönüşüm dilidir.
XSLT’nin kendisi XML olarak kodlanmış bir dokümandır. Dolayısı ile XML dokümanlarının
uyduğu tüm kurallara uyar. XML başlıklı konudan hatırlayacağınız gibi XML
dokümanı bir ağaç tanımlar. XSLT bu ağacın herhangi bir bölümünün yeni bir dokümana
nasıl dönüştürüleceğini tanımlar. Eğer çıkış bir XML dokümanı ise çıkış dokümanı bir
başka ağaç olacaktır. Aşağıdaki şekilde tipik bir XSL uygulaması verilmiştir.
Bu uygulamada giriş her zaman bir XML dokümanı olmak zorundadır. XSLT işlemcisi
giriş olarak aldığı XML dokümanını, dönüşümün nasıl olacağını tanımlayan XSLT
dokümanı yardımı ile çıkış dokümanına dönüştürür.
XSL'in diğer bileşeni ise XSL
Biçimlendirme Nesneleridir (Formatting Objects). Özet olarak XSL’in XSLT, XPath
ve XSL-FO’dan oluştuğunu söyleyebiliriz:
XSL=XSLT+XPath+XSL-FO
Aşağıdaki şekilde XSLT ve XSL-FO’nun kullanıldığı diğer bir uygulama türü
verilmiştir. Burada XML dokümanı bir PDF dokümanına dönüştürülmektedir.

XSL’in elektronik ticaret
açısından önemli bir teknolojidir. Farklı kurumlar benzer içerikler için kendi
amaçlarına uygun XML dokümanları tasarlamış olabilirler. Bu durumda aynı
içeriğin bir XML dosyadan diğerine kayıpsız ve hataya yol açmayacak şekilde
dönüştürülmesi gerekir. Benzer şekilde içeriğin farklı amaçlarla sunulması
gerekebilir. Bu durum özellikle içeriğin çok hızlı üretildiği ya da tüketildiği uygulamalarda önem kazanır. XSL elektronik ticaret uygulamaları ya da
servisler için içerik ve sunumu tam olarak biri birinden ayırabilmesine olanak
sağlar. XML
içeriği kodlamak, XSL
ise sunumu
kodlamak için kullanılır. Aşağıdaki şekilde bir elektronik ticaret
uygulaması için verilen örnekte, sipariş ile ilgili tüm bilgiler bir XML
dokümanında tutulmaktadır. Farklı türden çalışan personel, kendi amacına uygun
farklı detay seviyelerinde bilgiye ihtiyaç duyabilecektir. XSL tabanlı çözümde
farklı ihtiyaçlar için gerekli her farklı görünüm için bir XSLT dokümanı
tanımlanır. Örneğin satış elemanı siparişin durumuyla ilgilenirken, muhasebe
personeli ödeme ilgili detaylarla ilgilenecektir.

XSLT, XSL’in en önemli bileşenidir ve bir XML dokümanının diğer bir XML ya
da farklı bir düzendeki bir dokümana nasıl dönüşeceğini tanımlar. Burada giriş
dokümanı XML olarak kodlanmış olduğundan, içeriği her zaman bir ağaç veri
yapısı ile göstermek mümkündür. XSLT bu ağaçtaki her bir düğümün çıkışta nasıl
bir veri yapısına dönüştürüleceğini tanımlamamıza olanak sağlayan çeşitli
yapılar içerir. Bu dönüşümden amaç içeriği farklı bir amaçla sunmak olabilir ya
da içerik içerisinden amaca uygun bilgiler çıkarmak olabilir. Örneğin, futbol
liginde tüm sezonlar boyunca oynanan maçlara ilişkin istatistik bilgilerinin
tutulduğu bir büyük XML dokümanından, bir takıma ilişkin dış saha performansını
yıllara göre değişimini elde etmek için XSLT teknolojisinden yararlanabiliriz.
Bu açıdan, XSLT’yi İlişkisel Veritabanı Yönetim Sistemlerinde sıklıkla
kullanılan SQL’e (Structured Query Language) benzetebiliriz. Bunun yanında, XSLT’yi XSL-FO
ile birlikte, içeriği sunum amaçlı olarak PDF (Portable Document Format) ya da Microsoft Word gibi farklı formatlara
dönüştürmek amacı ile de kullanabiliriz.
Bu yazıda bu yapıları inceleyeceğiz. Daha sonra giriş ağacı üzerinde daha
rahat dolaşmamızı sağlayan XPath teknolojisini tanıyacağız. XSLT dönüşümünü
tanımlarken XPath’i kullanacağız. Böylelikle, karmaşık dönüşümleri, daha basit
bir gösterimle ifade edebilme yeteneğine kavuşmuş olacağız. Tüm bu XSL
teknolojileri W3C’nin birer standardıdır.
XSL ile kodlanmış bir dokümanın kök elemanı <xsl:stylesheet> ya da
<xsl:transform> olmalıdır. Buna göre aşağıdakiler geçerli bir
tanımlamadır:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
ya da
<xsl:transform version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Bir uygulama üzerinde XSLT’nin nasıl
çalıştığını inceleyelim. Uygulamamıza giriş olarak vermek üzere ülkelere ilişkin bilgilerin yeraldığı bir XML
dokümanı kullanacağız:
<?xml version="1.0" encoding="UTF-8"?>
<countries>
<country>
<Code>AFG</Code>
<Name>Afghanistan</Name>
<Continent>Asia</Continent>
<Region>Southern and Central Asia</Region>
<SurfaceArea>652090.00</SurfaceArea>
<IndepYear>1919</IndepYear>
<Population>22720000</Population>
<LifeExpectancy>45.9</LifeExpectancy>
<GNP>5976.00</GNP>
<GNPOld/>
<LocalName>Afganistan/Afqanestan</LocalName>
<GovernmentForm>Islamic Emirate</GovernmentForm>
<HeadOfState>Mohammad Omar</HeadOfState>
<Capital>1</Capital>
<Code2>AF</Code2>
</country>
.
.
.
</countries>
Şimdi nüfusu 50 milyonun üzerinde olan ülkelerin listesini HTML tablo olarak çıkışa aktarn bir XSL dönüşümü tanımlayalım:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html"/>
<xsl:template match="/">
<html>
<head>
<title>Nüfus Yoğun Ülkeler</title>
</head>
<body>
<table border="1">
<thead>
<tr>
<th>Ülke Adı</th>
<th>Bağımsızlık Yılı</th>
<th>Nüfusu</th>
<th>Yüz Ölçümü</th>
<th>Nüfus / Yüzölçümü</th>
</tr>
</thead>
<tbody>
<xsl:for-each select="countries/country[Population > 50000000]">
<xsl:sort select="Population" order="ascending"/>
<tr>
<td>
<xsl:value-of select="Name"/>
</td>
<td>
<xsl:value-of select="IndepYear"/>
</td>
<td>
<xsl:value-of select="Population"/>
</td>
<td>
<xsl:value-of select="SurfaceArea"/>
</td>
<td>
<xsl:value-of select="format-number(Population div SurfaceArea,'###,###.00')"/>
</td>
</tr>
</xsl:for-each>
</tbody>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Yukarıda verilen dönüşüm uygulandığında üretilen HTML aşağıda verilmiştir:
| Ülke Adı |
Bağımsızlık Yılı |
Nüfusu | Yüz Ölçümü |
Nüfus / Yüzölçümü |
| India
| 1947
| 1013662000
| 3287263.00
| 308.36
|
| Nigeria
| 1960
| 111506000
| 923768.00
| 120.71
|
| Japan
| -660
| 126714000
| 377829.00
| 335.37
|
| China
| -1523
| 1277558000
| 9572900.00
| 133.46
|
| Bangladesh
| 1971
| 129155000
| 143998.00
| 896.92
|
| Russian Federation
| 1991
| 146934000
| 17075400.00
| 8.61
|
| Pakistan
| 1947
| 156483000
| 796095.00
| 196.56
|
| Brazil
| 1822
| 170115000
| 8547403.00
| 19.90
|
| Indonesia
| 1945
| 212107000
| 1904569.00
| 111.37
|
| United States
| 1776
| 278357000
| 9363520.00
| 29.73
|
| Ukraine
| 1991
| 50456000
| 603700.00
| 83.58
|
| Congo, The Democratic Republic of the
| 1960
| 51654000
| 2344858.00
| 22.03
|
| Italy
| 1861
| 57680000
| 301316.00
| 191.43
|
| France
| 843
| 59225700
| 551500.00
| 107.39
|
| United Kingdom
| 1066
| 59623400
| 242900.00
| 245.46
|
| Thailand
| 1350
| 61399000
| 513115.00
| 119.66
|
| Ethiopia
| -1000
| 62565000
| 1104300.00
| 56.66
|
| Turkey
| 1923
| 66591000
| 774815.00
| 85.94
|
| Iran
| 1906
| 67702000
| 1648195.00
| 41.08
|
| Egypt
| 1922
| 68470000
| 1001449.00
| 68.37
|
| Philippines
| 1946
| 75967000
| 300000.00
| 253.22
|
| Vietnam
| 1945
| 79832000
| 331689.00
| 240.68
|
| Germany
| 1955
| 82164700
| 357022.00
| 230.14
|
| Mexico
| 1810
| 98881000
| 1958201.00
| 50.50
|
for-each elemanı seçilen bir düğümün alt ağacında yatayda yer alan tüm select özniteliği ile verilen düğümlerin taranmasını sağlar.
sort elemanı for-each ile beraber kullanılır ve for-each ile taranan düğümlerin değerlerinin sıralanmasını sağlar.
if elemanı düğümün değerine göre dönüşümü farklılaştırmak için kullanılır. Genel yazımı aşağıda verilmiştir:
<xsl:if test="koşul">
...
... koşul doğru olduğunda yapılması gereken işlemler...
...
</xsl:if>
choose elemanı if elemanına benzer bir amaçla kullanılır. Burada programlama dillerindeki if-else yapısına karşı düşer. Genel yazım biçimi aşağıda verilmiştir:
<xsl:choose>
<xsl:when test="koşul">
... çıkış ...
</xsl:when>
<xsl:otherwise>
... çıkış ....
</xsl:otherwise>
</xsl:choose>
Bir XSLT dokümanı içinde birden fazla şablon tanımlayabiliriz. Bu şablonların hangi sırayla uygulanacağını apply-templates elemanı ile kontrol edebiliriz. apply-templates elemanının select özniteliği şablonun hangi düğüme ya da alt ağaca uygulanacağını tanımlar.
XPath işletim sistemlerindeki dosya isimlendirmelerine benzer şekilde XML ağacındaki düğümleri tanımlamak üzere geliştirilmiştir ve XSLT dönüşümlerinde kullanılır. Bunun yanında XPath iki karakter katarını karşılaştırma, sayısal işlemler, dizi işlemleri gibi çok sayıda fonksiyon içerir. Böylelikle XPath XSLT’ye önemli bir işlevsellik kazandırır. XPath XML ağacındaki düğümlerin seçilmesi amacıyla bazı gösterimlerden yararlanır. Bu gösterimler ve anlamları aşağıdaki tabloda verilmiştir.
| Gösterim
|
Anlamı
|
| Düğüm
adı
|
Verilen düğümün tüm çocuk düğümlerini
belirtir
|
| /
|
Kök düğümü belirtir
|
| //
|
Dokümanda her nerede olursa olsun tüm
düğümleri belirtir
|
| .
|
O anki düğümü belirtir
|
| ..
|
O anki düğümün ebeveyn düğümünü belirtir
|
| @
|
Özniteliği belirtir
|
Yüklemler belirli bir düğümü ya da belirli bir değeri içeren düğümü bulmak için kullanılır. Yüklemler her zaman köşeli parantez içinde verilirler. Aşağıdaki tabloda sıkça kullanılan yüklemler bir örnekle listelenmiştir.
| Gösterim
|
Sonuç
|
| /katalog/kitap[1]
|
Katalogda yer alan ilk kitabı seçer
|
| /katalog/kitap[last()]
|
Katalogdaki son kitabı seçer
|
| /katalog/kitap[last()-1]
|
Katalogda ondan bir önceki kitabı seçer
|
| /katalog/kitap[position()<3]
|
Katalogdaki ilk iki kitabı seçer
|
| //kitap[@kod]
|
Kodu olan tüm kitapları seçer
|
| //kitap[@kod='42']
|
Kod değeri 42 olan kitapları seçer
|
| /katalog/kitap[fiyat<20]
|
Fiyatı 20’den küçük olan kitapları seçer
|
| /katalog/kitap[fiyat<20]/başlık
|
Fiyatı 20’den küçük olan kitap başlıklarını seçer |
Aşağıdaki tabloda ise XPath ifadelerinde kullanabileceğimiz operatörler tanımlanmıştır:
|
|
Anlamı
|
|
|
Toplama
|
|
|
Çikarma
|
|
|
Çarpma
|
|
|
Bölme
|
|
|
Eşitlik testi
|
|
|
Eşitsizlik testi
|
|
|
Küçüklük testi
|
|
|
Küçük eşitlik testi
|
|
|
Büyüklük testi
|
|
|
Büyük eşitlik testi
|
|
|
Mantıksal veya
|
|
|
Mantıksal ve
|
|
|
Mod (Bölümden kalan)
|
XPath eksenleri o anki
düğüme bağıl olarak düğüm kümelerinin tanımlanabilmesine olanak sağlar. Aşağıdaki tabloda XPath’de kullanabileceğiniz eksenler ve anlamları
listelenmiştir:
Eksen
|
Anlamı
|
ancestor
|
Bulunulan düğümün tüm düzeylerdeki ebeveynlerini seçer
|
ancestor-or-self
|
Bulunulan düğümü de içermek üzere tüm
düzeylerdeki ebeveynlerini seçer
|
attribute
|
Bulunulan düğümün tüm özniteliklerini seçer
|
child
|
Bulunulan düğümün tüm çocuk düğümlerini
seçer
|
descendant
|
Bulunulan düğümün tüm düzeylerdeki
çocuklarını seçer
|
descendant-or-self
|
Bulunulan düğümü de içermek üzere tüm
düzeylerdeki çocuklarını seçer
|
following
|
Bulunulan düğümün kapatan takısından
sonra tüm elemanlari seçer
|
following-sibling
|
Bulunulan düğümü izleyen tüm kardes dügümleri
seçer
|
parent
|
Bulunulan düğümün ebeveyn düğümünü seçer
|
preceding
|
Bulunulan düğümün açan takısından önceki
dokümanda yer alan tüm elemanlari seçer
|
preceding-sibling
|
Bulunulan düğümün kendinden önceki tüm
kardeslerini seçer
|
self
|
Bulunulan düğümün kendisini seçer
|
Şimdi başka bir örneği inceleyeceğiz. Bu örnekte XSD ile verilmiş bir XML dokümanı kullanacağız:
otomobiller.xml
<?xml version="1.0" encoding="UTF-8" ?>
<otomobiller xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.omegaegitim.com/bte550/2011/hw2 otomobil.xsd"
xmlns="http://www.omegaegitim.com/bte550/2011/hw2">
<otomobil marka="Ford" model="Mustang">
<uzunluk birim="mm">4610</uzunluk>
<genislik birim="mm">1824</genislik>
<yükseklik birim="mm">1351</yükseklik>
<agirlik birim="kg">1490</agirlik>
<bagaj_hacmi birim="m3">309</bagaj_hacmi>
<motor_hacmi birim="cc">4601</motor_hacmi>
<silindir_adedi birim="adet">8</silindir_adedi>
<beygir_gucu birim="hp">228</beygir_gucu>
<yuz_km_sn birim="sec">5.3</yuz_km_sn>
<dingil_mesafesi birim="cm">1753</dingil_mesafesi>
<yakit_tuketimi birim="lt">9.1</yakit_tuketimi>
</otomobil>
<otomobil marka="Ford" model="Mondeo">
<uzunluk birim="mm">4214</uzunluk>
<genislik birim="mm">1802</genislik>
<yükseklik birim="mm">1573</yükseklik>
<agirlik birim="kg">1250</agirlik>
<bagaj_hacmi birim="m3">255</bagaj_hacmi>
<motor_hacmi birim="cc">1600</motor_hacmi>
<silindir_adedi birim="adet">4</silindir_adedi>
<beygir_gucu birim="hp">110</beygir_gucu>
<yuz_km_sn birim="sec">12.3</yuz_km_sn>
<dingil_mesafesi birim="cm">1913</dingil_mesafesi>
<yakit_tuketimi birim="lt">10.1</yakit_tuketimi>
</otomobil>
<otomobil marka="Ford" model="Focus">
<uzunluk birim="mm">3897</uzunluk>
<genislik birim="mm">1673</genislik>
<yükseklik birim="mm">1350</yükseklik>
<agirlik birim="kg">1203</agirlik>
<bagaj_hacmi birim="m3">254</bagaj_hacmi>
<motor_hacmi birim="cc">1600</motor_hacmi>
<silindir_adedi birim="adet">4</silindir_adedi>
<beygir_gucu birim="hp">120</beygir_gucu>
<yuz_km_sn birim="sec">11.6</yuz_km_sn>
<dingil_mesafesi birim="cm">1672</dingil_mesafesi>
<yakit_tuketimi birim="lt">12.1</yakit_tuketimi>
</otomobil>
<otomobil marka='Renault' model='Fluence'>
<uzunluk birim='mm'>3319</uzunluk>
<genislik birim='mm'>1762</genislik>
<yükseklik birim='mm'>1642</yükseklik>
<agirlik birim='kg'>1500</agirlik>
<bagaj_hacmi birim='m3'>312</bagaj_hacmi>
<motor_hacmi birim='cc'>1600</motor_hacmi>
<silindir_adedi birim="adet">4</silindir_adedi>
<beygir_gucu birim='hp'>125</beygir_gucu>
<yuz_km_sn birim='sec'>8.3</yuz_km_sn>
<dingil_mesafesi birim='cm'>1632</dingil_mesafesi>
<yakit_tuketimi birim='lt'>15.1</yakit_tuketimi>
</otomobil>
<otomobil marka='Renault' model='Megane'>
<uzunluk birim='mm'>4209</uzunluk>
<genislik birim='mm'>1782</genislik>
<yükseklik birim='mm'>1641</yükseklik>
<agirlik birim='kg'>1602</agirlik>
<bagaj_hacmi birim='m3'>350</bagaj_hacmi>
<motor_hacmi birim='cc'>1800</motor_hacmi>
<silindir_adedi birim="adet">4</silindir_adedi>
<beygir_gucu birim='hp'>145</beygir_gucu>
<yuz_km_sn birim='sec'>15.3</yuz_km_sn>
<dingil_mesafesi birim='cm'>1651</dingil_mesafesi>
<yakit_tuketimi birim='lt'>10.1</yakit_tuketimi>
</otomobil>
<otomobil marka='Honda' model='Civic'>
<uzunluk birim='mm'>3962</uzunluk>
<genislik birim='mm'>1752</genislik>
<yükseklik birim='mm'>1292</yükseklik>
<agirlik birim='kg'>1648</agirlik>
<bagaj_hacmi birim='m3'>401</bagaj_hacmi>
<motor_hacmi birim='cc'>1600</motor_hacmi>
<silindir_adedi birim="adet">4</silindir_adedi>
<beygir_gucu birim='hp'>168</beygir_gucu>
<yuz_km_sn birim='sec'>15.3</yuz_km_sn>
<dingil_mesafesi birim='cm'>1852</dingil_mesafesi>
<yakit_tuketimi birim='lt'>16.1</yakit_tuketimi>
</otomobil>
<otomobil marka='Honda' model='Jazz'>
<uzunluk birim='mm'>3971</uzunluk>
<genislik birim='mm'>1943</genislik>
<yükseklik birim='mm'>1672</yükseklik>
<agirlik birim='kg'>1532</agirlik>
<bagaj_hacmi birim='m3'>376</bagaj_hacmi>
<motor_hacmi birim='cc'>1400</motor_hacmi>
<silindir_adedi birim="adet">4</silindir_adedi>
<beygir_gucu birim='hp'>120</beygir_gucu>
<yuz_km_sn birim='sec'>7.9</yuz_km_sn>
<dingil_mesafesi birim='cm'>1962</dingil_mesafesi>
<yakit_tuketimi birim='lt'>11.1</yakit_tuketimi>
</otomobil>
<otomobil marka='Honda' model='City'>
<uzunluk birim='mm'>4986</uzunluk>
<genislik birim='mm'>1954</genislik>
<yükseklik birim='mm'>1574</yükseklik>
<agirlik birim='kg'>1834</agirlik>
<bagaj_hacmi birim='m3'>297</bagaj_hacmi>
<motor_hacmi birim='cc'>1600</motor_hacmi>
<silindir_adedi birim="adet">4</silindir_adedi>
<beygir_gucu birim='hp'>135</beygir_gucu>
<yuz_km_sn birim='sec'>15.3</yuz_km_sn>
<dingil_mesafesi birim='cm'>1943</dingil_mesafesi>
<yakit_tuketimi birim='lt'>14.7</yakit_tuketimi>
</otomobil>
<otomobil marka='Honda' model='Accord'>
<uzunluk birim='mm'>3721</uzunluk>
<genislik birim='mm'>1932</genislik>
<yükseklik birim='mm'>1672</yükseklik>
<agirlik birim='kg'>1203</agirlik>
<bagaj_hacmi birim='m3'>402</bagaj_hacmi>
<motor_hacmi birim='cc'>1250</motor_hacmi>
<silindir_adedi birim="adet">4</silindir_adedi>
<beygir_gucu birim='hp'>140</beygir_gucu>
<yuz_km_sn birim='sec'>15.3</yuz_km_sn>
<dingil_mesafesi birim='cm'>1629</dingil_mesafesi>
<yakit_tuketimi birim='lt'>12.4</yakit_tuketimi>
</otomobil>
</otomobiller>
otomobil.xsd:
<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="http://www.omegaegitim.com/bte550/2011/hw2"
targetNamespace="http://www.omegaegitim.com/bte550/2011/hw2"
elementFormDefault="qualified">
<xs:element name="otomobiller">
<xs:complexType>
<xs:sequence>
<xs:element name="otomobil" minOccurs="1" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="uzunluk" type="olcuTipi"/>
<xs:element name="genislik" type="olcuTipi"/>
<xs:element name="yükseklik" type="olcuTipi"/>
<xs:element name="agirlik" type="olcuTipi"/>
<xs:element name="bagaj_hacmi" type="olcuTipi"/>
<xs:element name="motor_hacmi" type="olcuTipi"/>
<xs:element name="silindir_adedi" type="olcuTipi"/>
<xs:element name="beygir_gucu" type="olcuTipi"/>
<xs:element name="yuz_km_sn" type="olcuTipi"/>
<xs:element name="dingil_mesafesi" type="olcuTipi"/>
<xs:element name="yakit_tuketimi" type="olcuTipi"/>
</xs:sequence>
<xs:attribute name="marka" type="xs:string"
use="required"/>
<xs:attribute name="model" type="xs:string"
use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="olcuTipi">
<xs:simpleContent>
<xs:extension base='xs:decimal'>
<xs:attribute name="birim" type="birimTipi" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:simpleType name="birimTipi">
<xs:restriction base="xs:string">
<xs:enumeration value="mm"/>
<xs:enumeration value="cm"/>
<xs:enumeration value="km"/>
<xs:enumeration value="m"/>
<xs:enumeration value="sec"/>
<xs:enumeration value="adet"/>
<xs:enumeration value="hp"/>
<xs:enumeration value="m3"/>
<xs:enumeration value="lt"/>
<xs:enumeration value="cc"/>
<xs:enumeration value="kg"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
Şimdi yüksek motor hacimli araçları HTML tablo olarak listeyecek bir XSL yazalım:
araba1.xsl:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:car="http://www.omegaegitim.com/bte550/2011/hw2"
version="1.0">
<xsl:output method="html"/>
<xsl:template match="/car:otomobiller">
<html>
<head>
<title>Yüksek motor hacimli araçlar</title>
</head>
<body>
<table border="1">
<thead>
<tr>
<th>Marka</th>
<th>Model</th>
<th>Genişlik</th>
<th>Yükseklik</th>
<th>Ağırlık</th>
<th>Motor Hacmi</th>
</tr>
</thead>
<tbody>
<xsl:for-each
select="car:otomobil[car:motor_hacmi > 1500 and car:motor_hacmi < 2000]">
<xsl:sort select="car:agirlik" order="decending"/>
<tr>
<td>
<xsl:value-of select="@marka"/>
</td>
<td>
<xsl:value-of select="@model"/>
</td>
<td>
<xsl:value-of select="car:genislik"/>
</td>
<td>
<xsl:value-of select="car:yükseklik"/>
</td>
<td>
<xsl:value-of select="car:agirlik"/>
</td>
<td>
<xsl:value-of select="car:motor_hacmi"/>
</td>
</tr>
</xsl:for-each>
</tbody>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Örnekleri içeren kodları NetBeans projesi olarak
bu bağlantıdan indirebilirsiniz.