- 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=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: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.
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.
Aşağıdaki tabloda ise XPath ifadelerinde kullanabileceğimiz operatörler tanımlanmıştır:
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:
Simge
|
Anlamı
|
+
|
Toplama
|
-
|
Çikarma
|
*
|
Çarpma
|
div
|
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
|
or
|
Mantıksal veya
|
and
|
Mantıksal ve
|
mod
|
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"?>
<?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]">
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.
No comments:
Post a Comment