Professional Documents
Culture Documents
1. Giriş ve Özet
2. XML Tarihi
3. XML’in Genel Özellikleri ve Kullanımı
3.1. XML Nedir?
3.2. XML Nasıl Kullanılabilir?
3.3. Neden XML?
3.4. Örneklerle XML Sözdizimi , Özellik ve Eleman Kullanımı
4. XML İşleme (XML Processing)
4.1. DTD’ler
4.2. Bir DTD Yaratmak
4.3. Özellikler(Attributes) İle Çalışmak
4.4. XML Ayrıştırma (XML Parsing)
4.4.1. SAX (Simple API for XML)
4.4.2. DOM (Document Object Model)
4.4.3. XPath
4.4.4. XPointer
4.4.5. Xlink
4.4.6. “XML Parser” ları (XML Ayrıştırıcıları)
4.5. XML Şema (XML Schema)
4.5.1. XML Şema’nın içyapısı
4.6. Well-Formed ve Validated XML Belgeleri
4.6.1. “Well-Formed” Belge
4.6.2. Geçerli Belge(VALID)
5. İlgili Teknolojiler
5.1. XSL (eXtensible Stylesheet Language)
5.1.1. XML'in Sunulması (CSS-XSLT)
5.1.2. XQuery
5.2. XHTML (eXtensible HyperText Mark-up Language)
5.2.1. XHTMLin Getirdiği Yenilikler:
5.2.2. Neden XHMTL?
5.2.3.XHTML Çeşitleri
5.2.4. XHTML Belgelerinin Özellikleri
6.Teşekkür
Kaynakça
1. Giriş ve Özet
XML tam anlamıyla bir standart haline gelmemiş olmasına rağmen geleceğin web
tabanlı uygulamalarında alt yapıyı oluşturacak en büyük aday olarak görünüyor. Bu açıdan
bakıldığında, XML’in günümüzdeki popülaritesi ve XML ile ilgili teknolojilerin her geçen
gün daha hızlı bir şekilde artması daha rahat anlaşılıyor.
XML, ortaya çıkış düşüncesiyle insanlar için HTML’den çok daha rahat ve kullanımı
kolay bir dil olmayı amaçlıyor. Bununla beraber uygulamada HTML’in yetersiz kaldığı
konulara da eğilerek aynı zamanda da teknik açıdan günümüzde HTML’in açıklarını
yamamaya çalışan birçok programı ortadan kaldıracak gibi gözüküyor.
Belge içerisinde öncelikle XML fikrinin ortaya atılışını ve tarihi incelenecektir , bunun
ardından XML sözdizimi ve genel özelliklerine değinilecektir. XML genel özelliklerinden
sonra XML’in işlenmesi konusunda XML DTD’leri ve şemalar incelenecek bir XML
belgesinin hazırlanmasından sunumuna kadar üzerinde yapılan işlemler açıklanacaktır. Son
bölümde de ilgili XML teknolojileri ile ilgili olarak XSL ve XSLT ile XML belgelerinin
sunuma hazır hale getirilmesi ve son olarak da XQuery ve XHTML konuları ile XML’den
tüeryen teknolojiler incelenecek.
2. XML Tarihi
Daha sonraları görüldü ki SGML’in gelişmişliği, hızlı ve kolay web yayınları için
uygun değildi. Bu nedenle herkesin kolayca öğrenip uygulayabileceği pratiklikte basit bir
işaretleme diline ihtiyaç duyuldu. Böylece SGML’in özel bir belge tipi (ya da DTD) ‘nden
biraz daha fazla kapsamlı olan HTML geliştirildi. Öğrenilmesi ve uygulanması kolay olduğu
ve öncü web tarayıcıları tarafından desteklendiği için HTML yeni gelişmekte olan web’in
süratle temelini oluşturmaya başladı. Gerçekten de eğer SGML web’in geçerli işaretleme dili
olarak kullanılsaydı web şu andaki popülaritesine kavuşamazdı.
Birçok Web uygulaması geliştiricileri , HTML genişleyebilir değilken onun ana dili
olan SGML’in tam genişleyebilir olduğunu biliyorlardı. SGML’de tamamen özelleştirilebilir
belge kümesi oluşturmak amacıyla, uygulama geliştiriciler tüm bu belge kümesini
denetleyecek bir DTD geliştirdiler. Bu zaman alıcı ve karmaşık bir işti ama işe yaradı. Asıl
sorun SGML’in genişleyebilir olan özelliğini karmaşıklığından arındırabilmekti. Diğer bir
deyişle amaç SGML ve HTML arasında bir köprü kurabilmekti.
XML, HTML ile pek çok açıdan benzerlik gösteren bir işaretleme(markup) dilidir.
Verinin tanımlanması ve tarif edilmesi için kulanılır. HTML’deki yapının aksine XML’de
kullanılacak olan etiketler önceden tanımlı değildir.Yani bir XML belgesinin yapısı tamamıyle
kullanıcı tarafından oluşturulur.Verinin tarif edilmesi için DTD(Document Type Definition
(XML belgesinde kullanılacak etiketleri ve yapıları önceden tarif ettiğimiz kütükler)) adı
verilen yapılar kullanılmaktadır. XML ve DTD’nin birlikte kullanılması ile belgeler kendini
tarif eden bir yapı halini alırlar.
XML, SGML’den türetülmiş bir dildir. SGML bir meta-dildir. Meta-dil demek dil
yaratmaya yarayan dil demektir. İlginç olan XML'in SGML gibi bir meta-dilden türemesine
rağmen kendisinin de bir meta-dil olmasıdır. Yani XML'den de yeni diller türetilebilir.
Örneğin Wireless Markup Language(WML) mobil cihazları için kullanılan WAP ortamlarının
dilidir ve XML’in türevidir. HTML de SGML’den türetilmiş bir dil olmasına rağmen bu
özelliği taşımaz.
<not>
<kime>Mehmet</kime>
<kimden>Levent</kimden>
<başlık>Kutlama</başlık>
<ileti>Doğum Günün Kutlu Olsun!!</ileti>
</not>
HTML belgelerine çok benzeyen bu yapıda ilk etapta göze çarpan nokta etiket
yapılarının bizim tarafımızdan tasarlanmış oluşudur. XML kütükleri her zaman belgelerin
mantıksal bölümlerinin(element) başlangıç ve bitişlerini işaret eder.
HTML’de kullanılan <p> ve <h1> gibi standart etiket yapıları yukarıdaki XML
belgesinde kullanılmamıştır. Bahsedilen bu özelliği nedeniyle XML belgeleri
genişleyebilir(extensible) bir yapıya sahiptir.Belgelerin bu hali gerçek anlamda herhangi bir
şey ifade etmez. Belgenin iletimi(gönderim veya alım) ya da sunumu için başka şeylerin de
yapılması gerekmektedir.
Buradaki önemli nokta şudur: XML, HTML’in yerine geçecek bir dil değil
HTML’in tamamlayıcısı olabilecek bir dildir. Günümüz bilişim dünyasına bakarsak
XML’in her alanda karşımıza çıktığını görmekteyiz. Bu nedenle XML’i bir anlamda geleceğin
web dili olarak tanımlamak mümkündür.
XML tasarlanırken ortada birçok düşünce vardı. Sonuçta, W3C XML’in tasarım
amaçlarını açıkladı:
XML hakkında bilinmesi gereken en önemli nokta, bu dilin veriyi taşımak amacıyla
tasarlanmış oluşudur.
XML ile veriler yapı bakımından modülerlik kazanmaktadır. XML belgeleri verinin
içeriğiyle ilgilenmektedirler.Bu sayede verilerin içerik,yapı ve sunum kısımları ayrı modüller
halinde farklı XML belgelerinde tutulmaktadır.
XML belgeleri Veri Adaları(Data Islands) adı verilen teknik sayesinde HTML sayfaları
içerisinde de depolanabilmektedir.Bu teknik sayesinde verinizin sadece sunumuyla
ilgilenilmektedir
Veri Adaları(Data Islands) bir HTML sayfasında XML komutlarının gömülü olması ve
onların işlenebilmesi demektir. Böylece HTML sayfasının içine artık sadece HTML etiketleri
değil, aynı zamanda XML komutları da yazılabilir
<XML ID="XMLID">
<iller>
<ilkod>06</ilkod>
<İlad>ANKARA</İlad>
</iller>
</XML>
XML ile verinin alışveriş işlemi gerçekleştirilir. XML, yapısının esnekliği sayesinde
birbirine uyumlu olmayan sistemler arasında veri alış verişi rahatlıkla gerçekleştirilmektedir.
Günümüz bilişim dünyasında bilgisayar sistemleri ve veri tabanlarının genellikle birbirine
uyumsuz sistemler içerebildiklerini görmekteyiz. Bundan dolayı uygulama geliştiriciler
Internet üzerinden bu tip uyumsuz verilerin alış veriş işlemini gerçekleştirmek zorundadırlar.
XML, veriyi düz metin (plain text) formatında saklamasından dolayı veriyi
paylaştırma konusunda da hem yazılım hem de donanımdan bağımsız hareket edebilme
imkanını sunmuştur.
Bu sayede farklı uygulamalarda hareket eden farklı veri tipleriyle çalışmak daha
kolaylaşır. Ayrıca işletim sistemlerinin yükseltgenmesi, sunucu, uygulama vb. dışsal
faktörlerin yenilenmesi gibi etkenlerden de en az düzeyde etkilenilmiş olunur.
XML, yazılım, donanım ve uygulamalardan bağımsız olduğu için verinin daha elverişli olarak
kullanımını sağlamaktadır. Yani başka istemci(client) veya uygulamalar tıpkı veri
kaynaklarına erişiyormuş gibi XML kütüklerine rahatlıkla erişebilirler.
Bu sorunun cevabını iyi verebilmek için, şöyle bir örnek yararlı olacaktır:
Diyelim ki evde otururken canımız kola istedi. Markete gidip kola almak çok zor bir iş
değil. Markete yürüyüp hızlı ve ucuz bir şekilde ihtiyacımızı giderebiliriz. Üstelik fazla
yüksek bir teknolojiye ihtiyacımız yok. HTML ile web sayfası hazırlamak da birçok yönden
buna benziyor. Eğer düz bir metin düzenleyiciye ve küçük bir HTML bilgisine sahipsek, hızlı
ve ucuzca sayfamızı hazırlayabiliriz. Hatta FrontPage,DreamWeaver gibi programlarla HTML
bilgisine de ihtiyac minimum düzeye indi.
Şimdi ihtiyacımızın daha büyük olduğunu düşünelim. Bir hatta birkaç süpermarkete
uğrayıp, evin haftalık alışverişini yapalım. Bu durumda yürümek pek de akıl karı bir iş değil.
Ayrıca taşıyacağımız yükü de göz önüne alırsak, bir araç vazgeçilmez hale geliyor.
Daha büyük işler için bir araç kullanmanın daha kolay ve daha hızlı olduğu çok açık.
Ama arabanız varsa ona benzin doldurmayı, tekerleklerine doğru hava basıncını yüklemeyi ve
bunun gibi birçok işi bilmemiz gerekir. XML ailesiyle HTML’de yapamadığımız birçok şeyi
yapabiliriz. Fakat tam anlamıyla bunu başarabilmemiz için beraber çalışan birçok teknolojinin
kullanımını bilmemiz gerekir. Sonuçta bir öğrenme engeliyle karşı karşıyayız.
Şimdi işin teknik ayrıntılarına girebiliriz. “Neden XML?” sorusuna akla gelen ilk
cevap “insanlar arasındaki iletişimi kolaylaştırmak” olabilir. Fakat dikkatlice
düşündüğümüzde insanlar telefon, yazışma gibi iletişim araçları varken neden köşeli
parantezler arasındaki etiketleri kullanmak istesin ki? Bu noktada cevabımız son halini alıyor:
“Asıl amaç bilgisayarlar arasındaki iletişimin iyileştirilmesini sağlanmak.” Biraz daha açacak
olursak XML’in asıl kolaylığı insanların, iki bilgisayarın arasındaki iletişimi daha kolay
anlayabilmesini sağlamaktır.
Kendi kendini tanımlama: Alışılagelmiş veri tabanlarında ; veri kayıtları , veri tabanı
sorumlusu tarafından kurulan şemalara ihtiyaç duyar. XML belgeleri bu tür tanımlamalara
ihtiyaç duymadan saklanabilir çünkü XML etiket ve özelliklerden oluşan meta veriler içerir.
Örneğin, Chip isimli isimli birini aramak için ‘chip’ kelimesiyle arama yaptığınızda
karşınıza chocolate chips, computer chips, ya da Chip gelebilir. Eğer isim ve adres kayıtları
için tanımlanmış DTD’ler olsaydı, ‘chip’ kelimesiyle yapılan aramalar çok daha kesin ve
doğru sonuşlar verebilirdi.
Farklı XSL dönüştürücüler ile aynı XML belgesinden farklı görünüşte sunumlar elde
edilmesi bunun en büyük örneğidir.
Çoklu veri türleriyle kullanılabilir: XML belgeleri, çoklu ortam verilerinden (resim,
ses, video) aktif bileşenlere (Java Appletleri, ActiveX) kadar birçok olası veri türünü
içerebilir.
Varolan veri türleriyle kullanılabilir: Varolan kütük dizgeleri veya ilişkisel veri
tabanlarının XML’le ilişkilendirilmesi çok kolaydır.
Dağıtılmış veriler için tek bir sunucudan görünüş sağlar: XML’in erişim sağladığı
birçok verinin öğeleri değişik veri tabanları içerisinde bulunabilir -örneğin Internet gibi-.
XML ile bu verilere tek bir sunucu üzerinden bakılıyormuş gibi erişilebilir.
<?xml version=”1.0”?>
<not>
<kime>Mehmet</kime>
<kimden>Levent</kimden>
<başlık>Kutlama</başlık>
<ileti>Doğum Günün Kutlu Olsun!!</ileti>
</not>
Dökümanın ilk satırında XML bildirimine yer verilir ve hangi XML sürümünü
kullandığımız belirlenir. Bu satırdan sonra XML belgesinde DTD bildirimi de yer alabilir. Bir
sonraki satırda ise belgenin kök(root) elemanı açıklanıyor. Bu belgenin kök elemanı <not>.
XML belgelerinde ilk sırada açıklanan eleman kök eleman olarak adlandırılır ve ondan sonra
gelen elemanlar XML sıradüzenine uyacak şekilde kök elemana bağlı olmak durumundadırlar.
XML sıradüzensel bir sözdizime sahiptir ve bunu bozacak sözdizimleri hatalı olarak
niteler. Örnek olarak aşağıdaki HTML koduna bakalım:
Görüldüğü üzere önce başlatılan kalınlık niteliği sonra başlatılan eğiklik niteliğinden
önce kapatılmış. Bu şekilde sıradüzenselliği bozan sözdizimler XML’de bulunmaz. Bu kodu
XML sözdizimiyle denetlediğimizi varsayalım:
<?xml version=”1.0”?>
<not tarih=”20/02/2002”>
<kime>Levent</kime>
<kimden>Tolga</kimden>
<başlık>İlginç</başlık>
<ileti>Bugün çok simetrik bir gün!!</ileti>
</not>
XML elemanları özelliklere sahip olabiliriler. Bu özelliklerin bir ismi ve ona
atadığımız bir değeri vardır. Tabii bazı zamanlar özelliklere değer atayamayabiliriz. Örnekte
de görüldüğü üzere <not> elemanı “tarih” özelliğine sahip. Dikkat edilecek olursa “=” ile
“tarih”e atanan değer çif tırnak içine alınmış. Bu XML sözdiziminin bir özelliğidir.
Özelliklere değerleri , eleman etiketinin içerisinde “=” kullanılarak çift tırnak içerisinde
atılmalıdır. Örnekte de “tarih” özelliğine 20/02/2002 değeri atanmıştır.
<?xml version=”1.0”?>
<not>
<tarih>20/02/2002</tarih>
<kime>Levent</kime>
<kimden>Tolga</kimden>
<başlık>İlginç</başlık>
<ileti>Bugün çok simetrik bir gün!!</ileti>
</not>
Görüldüğü gibi az önce <not> elemanının bir özelliği olan tarih bilgisi bu örnek bu
elemanın bir çocuğu halinde karşımıza çıkıyor. Bu şekilde tutulan verinin niteliği değişmiyor
ama tutulma şekli değişiyor. Ayrıca bu örneği en baştaki örnekle karşılaştırdığımızda yeni bir
nitlik olan <tarih> in belgenin yapısına hiçbir zarar vermeden belgeye eklenebildiğini
görüyoruz. Şimdi belgeyi biraz daha dğiştirelim:
<?xml version=”1.0”?>
<not>
<tarih>
<gun>20</gun>
<ay>02</ay>
<yil>2002</yil>
</tarih>
<kime>Levent</kime>
<kimden>Tolga</kimden>
<başlık>İlginç</başlık>
<ileti>Bugün çok simetrik bir gün!!</ileti>
</not>
4.1. DTD’ler
İşte bu DTD’lerin gerek içsel ya da dışsal olmasını, gerekse dışsal olması durumunda
DTD’nin adresini XML belgesine sunmak gerekir. Bu amaçla, DTD(Document Type
Declaration) adı verilen bildirim sözcükleri XML belgesine eklenir. Bu yapıyı bir yönüyle,
programlarımıza kitaplık kütüklerinin dahil edilmesine benzetebiliriz. DTD’ler bir XML
belgesinin girişinde yer alır.
Definition ile declaration arasındaki ayrımı tam olarak belirtmek için şunu
söyleyebiliriz: Bir XML belgesinde yeralan declaration, o XML belgesiyle ilişikli olan
Definiton’ı XML belgesine tanıtmakta kullanılır. Örnek vermek gerekirse:
<?XML version=”1.0”?>
<!DOCTYPE kutlama SYSTEM “kutlama.dtd”>
<kutlama>
<kime> Mehmet </kime>
<ileti> Doğum Günün Kutlu Olsun </ileti>
</kutlama>
<!ELEMENT kutlama(kime,ileti)>
<!ELEMENT kime (#PCDATA)>
<!ELEMENT ileti (#PCDATA)>
<!DOCTYPE kutlama[
<!ELEMENT kutlama(kime,ileti)>
<!ELEMENT kime (#PCDATA)>
<!ELEMENT ileti (#PCDATA)>
]>
XML gerçekten de çok esnek bir dildir. Bir XML belgesinde istediğimiz özelliklere
sahip herhangi bir elementi dilediğimiz şekilde kullanabiliyoruz. Bu, çok büyük bir güç
getirmekle birlikte büyük bir düzensizlik ve dağınıklık potansiyeline de sahiptir.
Çok sayıda eleman içeren bir XML uygulamasının kilitlenmesini kontrol altına
alabilmek için, XML belgelerinde yer alabilecek bazı mantıksal ve pratik kısıtlar koyarak, bu
esnekliği dizginlemek akıllıca olacaktır.
Bir DTD, XML 1.0 ‘da tanımlanmış XML’i kısıtlama mekanizmasıdır. Bir DTD,
kendisini kullanan XML belgesinin örneklerinin yapısını kısıtlar veya tanımlar.
İyi yazılmış bir DTD, kullanılan yapıdan türemiş bir XML belgesinden, XML
işleyicisinin çıkaracağı aykırı durumların tanımlanmasını sağlar. Eğer belge içerisinde birkaç
kez geçen bir eleman, DTD içinde yoksa, uygun bir düzeltme işleminin gerçekleşmesi için
uyarı oluşturulur. Bir başka hata olasılığı ise DTD’de bulunan bir verinin XML belgesinde hiç
geçmemesidir.
Örneğin DTD’miz bu şekilde olsun.
<!ELEMENT kutlama(kime,ileti,kimden)>
<!ELEMENT kime (#PCDATA)>
<!ELEMENT ileti (#PCDATA)>
<!ELEMENT kimden (#PCDATA)>
<?XML version=”1.0”?>
<!DOCTYPE kutlama SYSTEM “kutlama.dtd”>
<tebrik>
<kime> Mehmet </kime>
<ileti> Doğum Günün Kutlu Olsun </ileti>
</tebrik>
DTD’ler, XML belgelerine modülerlik katar. Örneğin elimizde çok büyük bir XML
kütüğü olduğunu farzedelim. Eğer DTD olmazsa bu belgeye göz atmak çok zor ve sıkıcı
olabilir. Bu şekilde, belgenin anlamıyla ilgisiz, uzun metinler içerisinde belgenin genel yapısı
hakkında fikir edinmekle uğraşılır. Bunun yerine iyi hazırlanmış bir DTD’yi kısa bir süre
inceleyerek çok daha etkin bir görüşe sahip olabiliriz. Sonuç olarak bir DTD, ele alınan XML
belgesi hakkında bize açık ve hızlı bir resim çizer.
Ayrıca, hazırlanan XML belgelerinin amacı hakkında da kesin bir fikir sahibi
olabilmek için DTD’ler yararlı olacaktır.
Bir DTD oluşturmak için öncelikle XML’in temel özelliklerini bilmeliyiz. Bir
DOCTYPE bildirimi, DTD ile XML belgesini birbirine bağlar. DOCTYPE bildirisi XML
belgesinin girişine yazılır ve herhangi bir elemandan önce gelir. Bu bildiriden önce XML
bildirisi yer alır. Bundan başka işleyici komutları, yorum satırları da olabilir.
.
Diyelim ki genel bir kutlama mesajını, XML kullanarak geliştirmek istiyoruz. Hangi
yapıları tanımlamaya ihtiyacımız var? İçinde <ileti> ve <kime> elemanlarını bulunduran
<kutlama> elemanına ihtiyacımız var. Tanımladığımız <kime> elemanı ilk çocuk olmalıdır
ve <ileti> elementi onu izlemelidir. Bu iki elementin babası <kutlama> olmalıdır. <ileti> ve
<kime>, başka elementler barındırmamalı ve sadece metin (karakter) bilgisi içerebilir.
Karakter bilgisi, XML işlemcisi tarafından parse edileceği için, Parsed Character DATA
anlamına gelen PCDATA sözcüğüyle ifade edilir.
DTD’demizi iç DTD olarak tanımlarsak şu kodu yazmalıyız:
<!DOCTYPE kutlama[
<!ELEMENT kutlama(kime,ileti)>
<!ELEMENT kime (#PCDATA)>
<!ELEMENT ileti (#PCDATA)>
]>
<!DOCTYPE kutlama [
Bu satırda <kutlama> adında bir kök elementi bulunan DOCTYPE bildirisi yapılıyor.
Köşeli sol parantez ([) , bir iç DTD alt kümesinin başladığını gösterir. Eğer bir dış DTD de
bulunsaydı, bu paramtezden önce dış DTD referansı yer alacaktı.
Uygulamada iç DTD’ler pek kullanılmaz. XML belgesine eklenen her DTD saklama
ihtiyaçları doğurur. Çok sayıdaki XML belgelerinin temel aldığı bir dış DTD’nin bakımı
bütün XML belgelerindeki iç DTD’lerin bakımından daha kolaydır. Dikkat edilecek olursa, iç
DTD’deki <!ELEMENT ‘le başlayan satırlar , XML belgesi içinde bir eleman bildirimi
yapacağımızı belirtmektir.
<?xml version=’1.0’?>
<!DOCTYPE kitap SYSTEM “kitapyapisi.dtd”>
<kitap>
<isim> Malatya ve Bursa Yöresi Yemek Tarifleri</isim>
<yazarlar>
<yazar> Tolga Ovatman </yazar>
<yazar> Mehmet Gürsul </yazar>
<yazar> Levent Tanın </yazar>
</yazarlar>
<onsoz>
</onsoz>
<yayınevi>
<!—Yayınevi hakkında ayrıntılar buraya yazılır-->
</yayınevi>
<isbn>
<!-- ISBN numarası buraya yazılır -->
</isbn>
<bolumler>
<!--baslangıc bolumleri -->
<bolum>
<bno>9
</bno>
<badi> Malatya Etli Yemekleri
</badi>
<!--Diğer konu adları -->
<konu> Malatya İçli Köftesi
</konu>
<!--Başka konu adları -->
</bolum>
<!--Sonraki bölümler -->
</bolumler>
<ekler>
<!—Diğer ekler -->
<ek> Lavaş yapımı </ek>
</ekler>
<dizin>
<!—Buraya dizin yazılabilir -->
</dizin>
</kitap>
isim yerine geçebilecek herhangi bir sembol ne eksik ne fazla sadece bir kez
görünmeli , <title> elementinin bildirimi şu şekildedir :
Her bölüm’ün sadece bir numarası ve bir başlığı olması gerekir. Bunula beraber
konu’ların sayısı birden fazla olabilir. Böylece konu elementinin şöyle tanımlayabiliriz:
Bu tanımla, bno ve badi elemanı yalnızca bir kez geçmesi gerekirken , konu elemanı
birden çok kez görünebilir.
Sırada <yazarlar> elemanı var. Her kitabın bir yazarı vardır. Fakat bazı kitapların
birden çok yazarı da olabilir. Birden çok yazar olması ihtimalini ve hiç yazar olmaması
ihtimalini göz önünde bulundurmak için aşağıdaki tanım yapılır:
<!ELEMENT yazarlar(yazar*)>
Sıradaki eleman <onsoz>, dikkat edecek olursak bu elemanın sonunda bir “?”
olduğunu görürüz. Nesnenin gerçekteki özelliklerine bakılırsa, bir kitabın bir önsöz bölümü
olur ya da olmaz. Veya biz bunu veri tabanımıza katmak isteriz ya da istemeyiz. Bu durumda
elemanın belge içinde bulunma sayısı 0 veya 1 olabilir. İşte başta söz ettiğimiz “?” nesnenin
bu özelliğini belirlemeye yarar.
<?xml version=’1.0’?>
<belgeciktisi>
<kagitrengi renk=”beyaz”> Yükses kalite harika kuşe kağıt
</kagitrengi>
<murkrengi renk=”siyah”> Süper kalite şahane mürekkep
</murkrengi>
</belgeciktisi>
DTD Yapıları :
• #REQUIRED
• #IMPLIED
• #FIXED
• default
“String Attribute”ları
Bu örnekte oyuncu‘nun ait olduğu takim, oyuncu elemanının bir özelliğidir.Bu özellik,
oyuncu elemanı için gerekli olan bir karakter verisi tipinde olmalıdır. Bu takim özelliğini
seçimsel hale getirmek isteseydik:
“Enumerated Attribute”lar
Bu tür özellikler daha önceden tanımlanmış bir metin dizisinin listesini içerirler.
“Enumerated” tipi CDATA tipine benzemektedir ancak bu veri tipinde kabul edilebilir özellik
değerleri, özellik listesi bildirimi içinde sağlanmaktadır.Şimdi, oyuncu elemanına
“enumerated” bir özellik değeri olan pozisyon bilgisini de ekleyelim:
Bir XML belgesi bir bakımdan da yalın bir metin belgesi olarak görülebilir. Tam
olarak bir XML kütüğü arka arkaya sıralanmış gerçek bir anlamı olmayan karakterler dizisidir
(tabii bir bilgisayar onları yorumlamadığı sürece!). Bir metin düzenleyici, XML kütüğü
yaratabilir ama onu bir dizi karakter olarak görür. Sıradan bir metin düzenleyici, XML belgesi
içindeki sıralı karakterlerin içinde barındırdığı mantıksal yapı hakkında hiçbir şey bilmez.
XML iki bilgisayar arasındaki iletişimde kullanıldığı için, XML belgesinin mantıksal
içeriğine ya da “anlamına” erişmek önemlidir. Bu nedenle XML belgesi, bir dizi karakterden
mantıksal bir yapıya çevrilmelidir.
Biraz daha değişik bir açıdan bu düşünce şu şekilde ele alınabilir. Bir XML belgesini
parse etmenin amacı diğer uygulamaların, XML belgesinin mantıksal yapısının içeriğine
erişip inceleme yapabilecekleri arayüzler üretmektir.
Bu üretim sırasında uyulacak bazı kurallar vardır. Örneğin bir “validating parser” bir
XML belgesinin hem valid hem de well-formed olduğunu sınamalıdır. Fakat bir “non-
validating parser” sadece belgenin well-formed olup olmadığını sınar.
Şimdi de bir uygulamanın XML işleyicisinden elde ettiği çıktıyı nasıl ele alabileceğine
bakalım. Bir programdan, XML belgesi okumanın dört yolu vardır. Bunlardan birincisi bir
bilgisayar yazılımı üretmemiz ve kendi arayüzümüzü yaratmamız. Fakat genelde, daha çok
kabul gören SAX(the Simple API for XML) ve DOM(the Document Object Model) isimli
test edilmiş arayüzler kullanılır. 4. yol ise bir API’ye sahip XML Parser’ını kullanmak.
Temelde iki çeşit XML API’si (Application Programming Interface) bulunur: ağaç-
tabanlı ve olay-güdümlü (tree-based/event-driven). Ağaç tabanlı API’ler XML belgesini bir
ağaç yapısına dönüştürür ve bir uygulamanın bu ağacı dolaşmasını sağlar. DOM isimli API bu
tür API’lere bir örnektir.
SAX, W3C tabanlı olmayan pek az XML tabanlı standartlardan biridir. XML-DEV
mailing List’deki tartışmalarda ortaya çıkmıştır. SAX , DOM gibi ağaç tabanlı API’lere göre ,
XML belgesine daha basit ve daha alt düzeyli bir erişim sağlar. Hafızaya sığmayan çok büyük
belgeleri parse etmek SAX ile mümkündür.
SAX’ın nasıl çalıştığını daha iyi anlamak için şu küçük XML belgesini inceleyelim:
<?xml version="1.0"?>
<belge>
<para>Basit bir örnek</para>
</belge>
SAX kullanan bir “parser” belgeyi şu şekilde bir dizi olay haline getirir:
startDocument
startElement: belge
startElement: para
characters: Basit bir örnek
endElement: para
endElement: belge
endDocument
SAX’a istemci konumunda olan bir uygulama bu olayları ele alır ve istenilen faaliyetleri
yerine getirir. Bütün belgenin hafızaya alınmasına böylece gerek kalmaz ve belgenin içinde
ilgilenmediğimiz herhangi bir bölümü yazacağımız uygulama ile ele almak zorunda kalmayız.
DOM, W3C tabanlı bir modeldir. Bu model ile XML belgesi düğümlerden oluşan bir
ağaca dönüştürülür ve bu ağaç bilgisayar hafızasına alır. Bütün belge, hafızada bir kerede
tutulmak zorundadır. Bu nedenle, çok büyük XML belgelerini DOM tabanlı yaklaşımla ele
almak, hafıza yetersizlikleri nedeniyle kısıtlamalar getirebilir. Ayrıca DOM’u çok büyük
belgelerde kullanmak, yavaş bir işlemdir.
DOM, XML ağaç yapısına ulaşımı kolaylaştırmak için bir dizi arayüzler (inerface)
içerir. Bu arayüzler de düğüm tipine göre değişen metod ve özellikler içerir. DOM'un temel
arayüzü düğümdür. Herhangi bir düğüm ise eleman, özellik veya metin olabilir. Düğüm
arayüzü bütün düğüm tipleri için ortak olan metod ve özellikler içerir. Diğer DOM arayüzleri
ise düğümden türetilmişlerdir.
Şimdi, örnek bir xml belgesi üzerinde istenen bir düğüme a nasıl ulaşıldığına bakalım.
Burada ulaşılmak istenen bilgi, pembe renkle gösterilen "Prescod" değeri.
Bu yapının, XML belgesi aşağıdaki gibidir:
<?xml version="1.0"?>
<kitaplar>
<kitap>
<baslik>The XML Handbook</baslik>
<yazar>Goldfarb</yazar>
<yazar>Prescod</yazar>
<kitabevi>Prentice Hall</kitabevi>
<sayfa>688</sayfa>
<isbn>1-3081-1521-0</isbn>
<fiyat currency="DM">44.95</fiyat>
</kitap>
<kitap>
<baslik>XML Design</baslik>
<yazar>Spencer</yazar>
<kitabevi>Wrox Press</kitabevi>
<sayfa>426</sayfa>
<isbn>1-861002-28-9</isbn>
<fiyat currency="USD">39.99</fiyat>
</kitap>
</kitaplar>
Aşağıdaki HTML sayfası ise bu veriyi işleyen Java Script kodu içeriyor ve MS Internet
Explorer 5.x tarayıcı ile çalıştırılabilir. Yani XML işlenmesi (parsing) istemci (client) tarafında
gerçekleşiyor. Bu kod parçası XML işleyicisi olarak "Microsoft.XMLDOM" kullanıyor.
<HTML>
<HEAD><TITLE>DOM Örneği</TITLE></HEAD>
<BODY>
<H1>DOM Example</H1>
<SCRIPT LANGUAGE="JavaScript">
var doc, kok, kitap1, yazarlar, yazar2;
doc = new ActiveXObject("Microsoft.XMLDOM");
doc.async = false;
doc.load("kitaplar.xml");
if (doc.parseError != 0)
alert(doc.parseError.reason);
else {
kok = doc.documentElement;
document.write("Kok node un adı: " + kok.nodeName +
"<BR>");
document.write("Kok node un tipi: " + kok.nodeType +
"<BR>");
kitap1 = kok.childNodes.item(0);
yazarlar = kitap1.getElementsByTagName("yazar");
document.write("Yazarların adedi: " +
yazarlar.length + "<BR>");
yazar2 = yazarlar.item(1);
document.write("İkinci yazarın adı : " +
yazar2.childNodes.item(0).data);
}
</SCRIPT>
</BODY>
</HTML>
4.4.3. XPath
W3C tanımına göre XPath: XML belgesinin ağaç yapısı içerisindeki elemanların
adreslenmesi için geliştirilmiş bir dildir. XSLT ve XPointer tarafından da kullanılır. XPath,
XML belgelerindeki elemanlar, özellikler ve diğer XML düğümlerinin adreslenmesi için basit
ve standart bir yapı sağlar. XPath standardı, üç diğer W3C standardının içinde yeralmaktadır:
Bunlardan birincisi XSLT, ikincisi XLink ve bunun içinde yer alan XPointer, ve üçüncüsü ilk
XML sorgulama dillerinden biri olan XQL'dir.
child axis: Bulunulan düğümün çocuk düğümü. Bir düğüm için varsayılan (default) axis
budur.
descendant axis: Bulunulan düğümün çocuğu veya çocuğunun çocuğu veya bu şekilde
herhangi bir seviye altındaki alt düğüm.
parent axis: Bulunulan düğümün bir seviye üstteki düğümü. ".." ile ifade edilir.
ancestor axis: Bulunulan düğümün atası veya herhangibir seviye üstündeki düğümü
following-sibling axis: Bulunulan düğümün devamındaki kardeş (aynı seviyede) düğümler
preceding-sibling axis: Bulunulan düğümden önce gelen kardeş düğümler
following axis: Belgedeki sıraya göre bulunulan düğümden sonra yer alan, alt düğümleri hariç
bütün düğümler
preceding axis: Belgedeki sıraya göre bulunulan düğümden sonra yeralan, ataları hariç bütün
düğümler
attribute axis: Bulunulan düğümün özellikleri. "@" öneki ile tarif edilir.
namespace axis:bulunulan düğümün namespace düğümleri
self axis: bulunulan düğümün kendisi. "." ile ifade edilir.
descendant-or-self axis: bulunulan düğümün kendisi ve ata (descendant) düğümleri. "//" ile
ifade edilir.
ancestor-or-self axis: bulunulan düğümün kendisi ve alt (ancestor) düğümleri
4.4.4. XPointer
XPointer kullanarak bir nesnenin yerini belirlediğimzde bunu bağlama (link) için bir
taban olarak kullanabiliriz.
Birkaç küçük örnek ile XPointer’ın nasıl çalıştığına bir göz atalım. İlk olarak şu XML
belgesini ele alalım:
<!DOCTYPE konusma [
<!ELEMENT konusma (#PCDATA|konusan|yon)*>
<!ATTLIST konusma
ID ID #IMPLIED>
<!ELEMENT konusan (#PCDATA)>
<!ELEMENT yon (#PCDATA)>
]>
<konusma ID="a27">
<konusan>Tolga</konusan>
<yon> pencereden dışarı</yon>
Acele et , ders başlıyor
<yon>Levent’e</yon>
Mehmet birazdan sınıfta olur
</konusma>
Bazı XPointer deyimleriyle bu belgeden kaynaklar seçelim:
id(a27).child(2,yon)
İkinci “yon” elemanını seçer (içeriği “Levent’e” olanı).
id(a27).child(2,#element)
İkinci çocuk elemanı seçer (bu ilk “yon” , içeriği “pencereden dışarı” olan).
id(a27).child(2,#text)
İkinci metin bölümünü seçer , "Mehmet birazdan sınıfta olur" (“Acele et ders
başlıyor” ilk bölgeydi)
#element
XML elemanlarını seçmekte kullanılır.
#pi
XML işleyici komutlarını seçmekte kullanılır.
#comment
XML açıklama satırlarını seçmekte kullanılır.
#text
elemanlar arasındaki ve CDATA bölümlerindeki metin alanlarını seçmekte kullanılır.
#cdata
CDATA bölümleri içerisinde bulunan metin alanlarını seçmekte kullanılır.
#all
Yukarıdaki düğüm türlerinden hepsi için kullanılır.
child(1,#element,TARGET,*)
child(1,#element,N,2).(1,#element,N,1)
Kaynağın başından başlayarak eleman tipi ne olursa olsun N isimli özelliği “2” değerine
sahip ilk çocuk seçiliyor. Daha sonra bu elemanın N isimli özellik değeri “1” olan ilk çocuğu
seçiliyor.
Örneklerden de gördüğümüz gibi XPointer XPath’e çok benziyor fakat çok daha
gelişmiş seçme özelliklerine sahip.
4.4.5. Xlink
Bir XML Parser’ı (XML işleyicisi olarak da bilinir), XML belgesinin söz dizimini ve
mantıksal içeriğini denetler. Bütün ayrıştırıcı XML belgesinin iyi-oluşturulmuş (well-formed)
olup olmadığını kontrol eder Ek olarak, geçerleyici ayrıştırıcılar belgenin uygun DTD ile
eşleşip eşleşmediğini doğrular.
Teknik açıdan bakıldığında XML Parser’ı yazmak göreli olarak daha kolaydır. Bu
yüzden de artan sayıda parser’lar piyasada mevcuttur. Büyük ihtimalle kullanıcılar doğrudan
bir XML Parser’ını kullanmaya ihtiyaç duymayacaklardır. Bunun nedeni genellikle XML
Parser’lara erişim sağlayan bileşik bir aracın kullanılmasıdır. Örneğin XML Writer programı
arka planda Microsoft MSXML Parser’ını kullanır.
Öyleyse bir Parser ne yapar? Bir takım karakterden nasıl mantıksal sonuçlar çıkarır.
Aslında bir XML Parser’ı XML metin kütüğünü sıradüzensel bir şekilde tarar. XML
belgesinin elementleri gibi bölümleri belirler. Eğer Parser geçerleyici ise, XML belgesinde
kullanılabilecek yapıyı belirlemek için, DTD üzerinde basit bir işlem yürütür. Daha sonra
Parser, XML belgesinin yapısı ile DTD’ye uygunluk sağlayan yapıyı karşılaştırır. Bu işlem
sonucunda da geçerlilik kontrol edilmiş olur.
Çok sayıda XML ayrıştırıcısı ücretsiz olarak kullanılabilir. Bunların çoğu hem DOM
hem SAX modelini destekler. Bazıları şunlardır:
XML schema tıpkı DTD lerde olduğu gibi belge içindeki elementlerin ve içerik
modellerinin tanımlanması işlemini ve dolayısıyla belgenin geçerlenmesini sağlar. Ancak
XML schemalar elemanların bu tanım işleminde zengin bir veri tipi çeşitliliği ve özellik
desteği sağlamaktadır.
DTD içerisinde, eleman içeriği string ve diğer birkaç veri tipi ile sınırlıdır. XML
schema çok geniş bir veri tipi desteği sağlamaktadır (integer,floating point sayılar,date,time,
gibi). XML schema ayrıca açık içerik modeli(open content model) ve isim uzayı(namespace
integration) gibi ek özellikler de sunmaktadır. XML schema belgeleri oluşturulması sırasında
XML sözdizimi kullanılmaktadır. Bu DTD lere göre çok belirgin bir üstünlüktür çünkü yeni
bir sözdizim öğrenmemiz yerine XML’in XML schemaya özel komutlarını öğrenmek yeterli
olur.
Aşağıda XML schemanın DTD ye göre olan yararları liste halinde verilmiştir:
• XML schemalar XML sözdizimini temel olarak alır.Özel bir sözdizimi gerektirmez
• Diğer XML belgeleri gibi parse edilip üzerinde işlem yapılabilir
• Çok geniş bir veri tipi desteği sağlar
• Open-ended bir veri modeli sunar.Bu model sayesinde elemanlar arasındaki ilişkilerin
kurulması ve vocabulary haznesinin genişletilmesi sağlanır
• Namespace desteği sağlar.Bu özellik schema içerisindeki bildirimler için ayrı node’ları
birleştirmeye yarar.
• Özellik gruplarını destekler. Böylece özellikler mantıksal olarak gruplanabilir.
XML schema’nın kendisi de bir XML uygulamasıdır, yani kendisi de bir XML
“vocabulary” olarak değerlendirilebilir. XML schema kullanarak schemaların oluşturulması
tıpkı diğer XML belgelerinin oluşturulmasına benzer.
Schema Element
Schema elementi XML Schema belgeleri için kök eleman olarak hizmet verir ve diğer
schema içeriğine taşıyıcılık yapar. Schema elementi iki tane özelliğe sahiptir:
• name
• xmlns
name özelliği schema için bir isim belirtilmesine yarar.xmlns özelliğinin ise son
derece önemli bir görevi vardır. Schema için bir namespace oluşturulmasına yarar. Bu özellik
örneğin Microsoft’un schema belirtimlerini kullanabilmesi için “urn:schemas-microsoft-
com:xml-data” değerine set edilmesi gerekir .Aşağıdaki örnekte XML schema belgesi için
name ve xmlns attribute’larının nasıl kullanılacağı basitçe gösterilmiştir.
ElementType Element
ElementType elementi eleman tipinin belirtilebilesi için bazı özellikler içerir. Bunlar:
XML dökümanları verilen etiket isimleri ile kendini tanımlayabilir olmalıdır. Örneğin:
<okuladi>HACETTEPE</okuladi>
Burada açık olarak anlaşılıyor ki HACETTEPE bir okulun adıdır. Aslında işin
temeline inmemizde ben yine yarar görüyorum. En başta dedim ya temel sağlam olmalı. XML
dökümanları 2 kritere uymalıdır; iyi-oluşturulmuş(well-formed) ve geçerli(valid).
Bir XML dökümanının “well-formed” olması için aşağıdaki temel kurallara uyması
gereklidir:
1- HTML ve SGML gibi XML de büyüktür (>) ve küçüktür (<) karakterlerini ayıraçlar
olarak kullanır.
2- Bu karakterlerle etiket dediğimiz yapılar oluşturulur ve bunlar açıldığı zaman
kapatılmalıdır. Tek istisna boş elemandır(değeri olmayan eleman). Bu durumlarda
açma ve kapama etiketi aynı olabilir. Örneğin: <okuladi/> dediğimizde okuladi diye
bir etiketi açmış oluruz ama içinde herhangi bir değer bulunmaz.
3- Etiketlerin eklentileri çift-tırnak içine alınmalıdır. HTML bu açıdan esnektir fakat
XML bunu yapmanıza izin vermez. Örneğin HTML’de <font size=3> diye bilirsiniz
ama XML’de 3 kesinlikle çift-tırnaklar içine alınmalıdır.<font size=”3”>
4- Elemanlar aynı HTML’de olduğu gibi iç-içe düzgün bir şekilde tanımlanmalıdır. Her
XML dökümanı bir kök elemanına sahiptir ve diğer tüm elemanlar onun çocukları
olarak anılırlar. Hemen bir örnek verelim:
<universite>
<universiteadi>HACETTEPE</universiteadi>
<universitesehiri>Ankara</universitesehiri>
</universite>
<?XML version=”1.0”?>
<!DOCTYPE kutlama SYSTEM “kutlama.dtd”>
<tebrik>
<kime> Mehmet </kime>
<ileti> Doğum Günün Kutlu Olsun </ileti>
</tebrik>
5. İlgili Teknolojiler
XSL (eXtensible
Stylesheet Language) , XML’in
tercih edilen “style sheet” dilidir
ve XSL, HTML tarafından
kullanılan CSS’den daha
beceriklidir. XSL de , XML'in
yapısını kullanarak sunumlar
hazırlamak için kullanılır. Fakat
sunum, yalnız web üzerinden
değil, aynı zamanda işitsel ya da
yazılı da olabilir.
Diyelim ki, BAŞLIK diye bir kitap başlığı etiketimiz var. XSL'e, “BAŞLIKı gördüğün
zaman, içeriğini bold ve rengini kırmızı yap” kuralını tanımlıyoruz. (verimizi webde
yayınlamak istediğimizi düşünelim). XSL işlemcisi (mesela IE 5 içerisinde bulunan, ya da bir
XSL viewer), bunu HTML'e çeviriyor. Yani XSL, XML kodlarını değişik biçimlere çevirmek
için kurallar tanımlayan bir stil uygulaması olarak da düşünülebilir. Mesela, görme engelliler
için bir web sayfasından verilerin sese çevrilmesi gibi amaçlar için kullanmak hayal değildir
Daha basitçe XSL, XML’i HTML’e ya da başka yapıdaki XML belgelerine çevirmeye
yarayan , XML verisini süzen ve sıralayan , XML belgesinin bölümlerini adresleyen , XML
verilerini veri değerine göre biçimlendiren (örneğin negatif değerleri kırmızı renkle gösteren),
XML verilerinin çıktısını değişik aygıtlara veren (ekran, kağıt vb.) bir dildir. Eğer belli yapıda
bazı verilerimiz var ve aynı amaç içinde kullanmamız gereken başka yapılarda verilerimiz de
varsa, ikisinin ortak bir yapıya dönüştürülmesi için, belgemizi başka bir XML belgesine
çevirmek gereğini duyabiliriz.
XSLT, XML belgelerini diğer türden belgelere veya diğer XML belgelerine çevirmeye
yarar.
XSL dili halen W3C tarafından geliştirilme aşamasında olduğu için burada
söylediklerimiz sadece ana içeriği belirtmekle yetiniyor. Daha ayrıntılı konular XSL
tamamlandığında görülecek.
Şimdi XML ile ilgili çok basit bir örneği inceleyerek daha iyi anlayalım :
<xsl:template match="kitapçı">
<H1>
<xsl:process-children/> 'ya hoş geldin
</H1>
</xsl:template>
<kitapçı>PANDORA<kitapçı>
şeklinde bir kaydımız varsa, bunun HTML çıktısı şöyle olacaktır :
<H1>
PANDORA'ya hoş geldin
</H1>
Bir XSL belgesi aşağıdakine benzer bir şekilde başlar. XSL de “Namespace”ler çok
önemlidir.
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"
xmlns:fo="http://www.w3.org/TR/WD-xsl/FO" result-ns="fo">
<xsl:template match="başlık">
<html:H1 ALIGN="CENTER">
<xsl:apply-templates/>
</html:H1>
</xsl:template>
Burada başlık etiketi görülen her yerin, ortalanarak yazılması için kural
tanımlanmıştır.
Ayrıca XSL'de bir programlama diline benzer olarak bazı kalıplar mümkündür. Mesela,
for-each döngüleri, if benzeri mantıksal işlemler, belli kriterlere göre sıralama ve bunun gibi
işlemler için aşağıdaki yapılar mevcuttur:
• <xsl:for-each select="xml/album">
• <xsl:value-of select="artist"/>
• <xsl:if match=“artist[0]”>
• <xsl:choose><xsl:when test=“artist”>
• <xsl:apply-templates select="xml">
• <xsl:template match="artist">
• <xsl:for-each select="xml/album" order-by="+category;+title">
Web'de yaygın olarak kullanılan markup dili HTML, sunuşa yönelik markup içerir.
HTML dokumanlarının sunumunu etkilemek için CSS stylesheet leri kullanılabilir. XML ise
anlamsal markup kullanır. Dolayısı ile XML verisinin herhangibir media tipinde sunulması bir
stylesheet gerektirir. XML verisinin görünümünü değiştirmek için CSS2 kullanılabilir.
XSLT(XSL Transformations) ise XML'i herhangibir biçimdeki başka bir XML dokumanına
veya HTML'e dönüştürmek için kullanılabilir. XSLT de bir W3C standardıdır.
XSLT'de ise sunuşun nasıl olacağını tamamen stylesheet içindeki komutlar berlirler.
Stylesheet, XML dokumanı içeriğini seçer ve sunum için biçimlendirmeyi belirler, hatta XML
dokumanında hiç olmayan bilgiler de ekleyebilir. Yani işlem sırasında baz olarak stylesheet
alınır. XSLT içinde, bir XML dokumanının bölümlerini tarif etmek için yine bir W3C
strandardı olan XPATH dili kullanılır. Ek olarak XSLT ile bir XML dokumanının belli
bölümleri filtrelenebilir, bölümler sıralanabilir (sort), dokuman tamamen dönüştürülebilir.
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/TR/REC-html40">
<xsl:template match="/">
<HTML>
<HEAD>
<TITLE>Musteriler</TITLE>
</HEAD>
<BODY>
<H1>Musteriler</H1>
<xsl:apply-templates/>
</BODY>
</HTML>
</xsl:template>
<xsl:template match="*">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="musteriler">
<TABLE>
<xsl:apply-templates select="musteri"/>
</TABLE>
</xsl:template>
<xsl:template match="musteri">
<TR>
<TH>
<xsl:apply-templates select="isim"/>
</TH>
<xsl:for-each select="siparis">
<TD>
<xsl:apply-templates/>
</TD>
</xsl:for-each>
</TR>
</xsl:template>
</xsl:stylesheet>
<HTML xmlns="http://www.w3.org/TR/REC-html40">
<HEAD>
<TITLE>Musteriler</TITLE>
</HEAD>
<BODY>
<H1>Musteriler</H1>
<TABLE>
<TR>
<TH>Musteri1</TH>
<TD>Siparis1</TD>
<TD>Siparis2</TD>
</TR>
<TR>
<TH>Musteri2</TH>
<TD>Siparis3</TD>
<TD>Siparis4</TD>
</TR>
<TR>
<TH>Musteri3</TH>
<TD>Siparis5</TD>
</TR>
</TABLE>
</BODY>
</HTML>
Musteriler
Musteri1 Siparis1 Siparis2
Musteri2 Siparis3 Siparis4
Musteri3 Siparis5
Bu kaynak ile aynı çıktıyı, sadeleştirilmiş bir XSL belgesi ile de elde edebiliriz. Bu XSL'de
<xsl:for-each> kullanılarak <xsl:template> elamanlarının adedi bir taneye indirgenmiş.
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/TR/REC-html40">
<xsl:template match="/">
<HTML>
<HEAD>
<TITLE>Musteriler</TITLE>
</HEAD>
<BODY>
<H1>Musteriler</H1>
<TABLE>
<xsl:for-each select="musteriler/musteri">
<TR>
<TH>
<xsl:apply-templates select="isim"/>
</TH>
<xsl:for-each select="siparis">
<TD>
<xsl:apply-templates/>
</TD>
</xsl:for-each>
</TR>
</xsl:for-each>
</TABLE>
</BODY>
</HTML>
</xsl:template>
</xsl:stylesheet>
Örnek:
–<calisan> elemanlarının azalan <maas> elemanına göre sıralanması
<xsl:apply-templates select="calisan">
<xsl:sort select="maas"
order="descending"
data-type="number"/>
</xsl:apply-templates>
<xsl:apply-templates select="calisan">
<xsl:sort select="region"/>
<xsl:sort select="name"/>
</xsl:apply-templates>
xsl:if ve xsl:when-xsl:choose komutları ile XML dokumanının içeriğine göre şartlı işlem
yapılabilir. Burada örneğin xsl:if proglamlamada bildiğimiz if deyimine karşılık gelirken
xsl:choose switch-case deyimine karşılık gelir.
<xsl:template match="calisan">
<xsl:if test="maas>50000">
Yuksek Maas --
</xsl:if>
<xsl:value-of select="isim"/><br/>
</xsl:template>
veya kaynak XML belgesinde hiç olmayan veriler eklenebilir, olan veriler tamamen
değiştirilebilir.
5.1.2. XQuery
XML Query SQL’in ilişkisel veri tabanlarının bağlamında kullanıldığı gibi kendi
deyimleriyle XML belgelerine veya veri kaynaklarına erişim , sorgulama , kullanımı sağlar.
XML Query’nin şekillenmesi halen devam etmektedir. Şu ana kadar üç düşünce şekil
almıştır: veri modellemesi , sorgu cebiri ve sözdizim. Buradaki asıl amaç XML Query’nin
bildirilebilir ve sözdiziminin XML uyumlu olmasıdır. Ayrıca sıradüzenselliğe ve dizilere
erişime , birleşikliğe izin verir.
Gittikçe daha çok bilgi XML kullanılarak saklanıp , transfer edildikçe XML veri
kaynaklarını akıllıca sorgulamak da o denli önem kazanıyor. XML’in en büyük güçlerinden
biri de çeşitli kaynaklardan elde edilen değişik bilgilerin sunumundaki esnekliğidir. Bu
esnekliği iyi bir şekilde kullanabilmek için , XML sorgu dili , bu bilgileri almak ve
yorumlamak için çeşitli özellikler sağlamalıdır.
XQuery güçlü bir dildir. Sorgu , bir şemadan tür tanımları alabilir. Bir sorguyu
işletmek, durağan yazım aşaması ve dinamik hesaplama aşaması içerir. XQuery çoklu
uyumluluk düzeyine sahiptir. Örneğin durağan yazım denetimini içermeyen bir uyumluluk
düzeyi olabilir. Ya da şemadan tür tanımları alımını desteklemeyen bir uyumluluk düzeyi de
olabilir.
Xquery;
• İşlevsel dildir.
• Deyimler başka deyimlerle birleştirilebilir.
“ ‘meyve.xml’ adlı belgenin, ikinci bölümünde ‘Kayısı’ başlıklı bütün şekilleri bul ”
document(“meyve.xml”)/bolum[2]//sekil[baslik=“Kayısı”]
“ ‘meyve.xml’ adlı belgede 2. Bölümden 5. Bölüme kadar olan bütün şekilleri bul.
document(“meyve.xml”)/bolum[RANGE 2 TO 5]//sekil
XML ilk piyasaya çıktığında, onun HTML’in yerini alacağını hepimiz duymuşuzdur.
Bu kesinlikle mümkün değil, çünkü XML diğer işaretleme dillerini yaratmada kullanılacak bir
meta dildir. Gerçek amaç her zaman için HTML’i XML kurallarına göre yeniden
düzenlemekti. W3C bunu gerçekleştirdi ve sonuçta XHMTL oluştu. XHTML Ocak 2000’de
bir W3C standartı haline geldi ve şimdide web’de giderek yaygınlaşmaya başladı. Tarayıcı
şirketleri için bu , tarayıcılarını XHTML kodu ile çalıştırılabilir hale getirmelerini
gerektiriyordu. Uygulama geliştiricileri için ise dilin inceliklerinin öğrenmek lazımdı.
XHTML gerçekte HTML’e çok benziyordu. Böylece çok fazla yeni özellik ve element
öğrenmeye gerek yoktu. Uygulama geliştiriciler için en önemli değişim, XHTML’in sözdizim
kurallarına sıkı sıkıya bağlı olma zorunluğudur. Bu tarayıcıların o anki çalışma şekillerinden
oldukça değişikti. Eğer söz dizim hatalı bir HTML belgesi üretirsek çoğu tarayıcı bunu
görmemezlikten gelerek belgeyi yorumlayacaktır. Bu çeşit “görmezden gelme” özellikleri
XHMTL’de yok.
XHMTL ayrıca bir HTML uygulamasıdır. HTML standartının aslı, SGML kullanılarak
yazılmıştır. Fakat XML ile birlikte HTML’i XML uygulaması şeklinde yeniden düzenlemek
mantıklı hale gelmiştir. İşte bu çabanın sonucu XHTML 1.0 Standart’ıdır.
İkinci olarak, Web programcılarının CCS kullanarak, içeriğin web’de nasıl temsil
edileceğine etki etmelerini sağlar. En kesin haliyle XHMTL, herhangi bir elementinin,
belgenin içeriğinin nasıl temsil edileceğine etki etmesine izin vermez.
Şimdiden XHTML’in iki yararını öğrendik. Tabii bundan başka yararları da var. Şimdi
onlara göz atalım:
5.2.3.XHTML Çeşitleri
Burada sayfanın başında dosya tipini belirlemeye yarayan üç tip görüyoruz bunlar;
Görüldüğü gibi, XHTML ile HTML arasında çok fark yok. Bu bağlamda XHTML,
HTML'nin daha disiplinli halidir de denilebilir. Gerçekten de XHTML’in temeli sıkı
disiplindir. HTML tarayıcılarının genelde HTML kodundaki hataları görmezden gelerek
HTML sayfasını görüntülemesi gibi bir durum XHTML de bulunmuyor. Bu, XHTML’e atası
XML’den aktarılan bir özellik.
XHTML’in XML’den aldğı bir diğer özellik XHTML sayfalarının well-formed olma
özelliği. Aynı XML’de olduğu gibi XHTML’de de sözdizime uymayan belgelerin well-formed
özelliği olmuyor ve sonuçta geçersiz XHTML belgeleri olarak karşımıza çıkıyorlar.
Şimdi bir XHTML belgesinin well-formed sayılabilmesi için dikkat edilmesi gereken
özelliklere bakalım. Bu özellikler HTML’de “olmasa da olur” özelliklerdir.
Doğru : <li>
Yanlış : <LI>
Sayısal değerlerde tırnak kullanmama gibi bir durum söz konusu değil. Bütün değerler
tırnak içerisinde yazılmalı.
Doğru: Yanlış:
<dl compact="compact"> <dl compact>
<input checked="checked"> <input checked>
<input readonly="readonly"> <input readonly>
<input disabled="disabled"> <input disabled>
<option selected="selected"> <option selected>
<frame noresize="noresize"> <frame noresize>
XHTML HTML
compact="compact" compact
checked="checked" checked
declare="declare" declare
readonly="readonly" readonly
disabled="disabled" disabled
selected="selected" selected
defer="defer" defer
ismap="ismap" ismap
nohref="nohref" nohref
noshade="noshade" noshade
nowrap="nowrap" nowrap
multiple="multiple" multiple
noresize="noresize" noresize
<script type="text/javascript">
<![CDATA[
... script içeriği ...
]]>
</script>
Resim Kodu
Tablo Kodu
Kod Çıktı
6.Teşekkür
Herkesden önce bu çalışmanın hazırlanması için girişimde bulunan ve fikri ortaya atan
değerli hocamız Ebru Sezer’e , bölüm öğrencileri ve BBM bölümü için çok büyük fayda
sağlayacağına inandığımız bu faaliyetin altına imzasını attığı için çok teşekkür ediyoruz.
Kaynakça
www.w3c.org
www.ibm.com
www.microsoft.com
www.softwareag.com
www.softwareag.com.tr
www.xml.com
www.xml.org
www.xmlnedir.com
Hazırlayanlar
Mehmet Gursul
Tolga Ovatman
Levent Tanin
Linkler
http://ata.cs.hun.edu.tr/not/duyuru/duyuru09_09_2002_04-37-18.html
http://www.turkcenet.org