XML dokümanları daha fazla bilgiyi taşıyabilmek için genişletilebilirler. Aşağıdaki kod satırını inceleyelim:
<not>
<kime>esra</kime>
<kimden>demir</kimden>
<body>sınav tarihi!</body>
</not>
Şimdi yazmış olduğumuz bu kod satırının nasıl bir çıktı vereceğini inceleyelim:
Mesaj
kime:esra
kimden:demir
sınav tarihi!
Şimdi dokümanımız içerisinde daha fazla bilgiyi sunmak istediğimizi varsayalım:
<not>
<tarih>199-03-01</tarih>
<kime>esra</kime>
<kimden>demir</kimden>
<heading>uyarı</heading>
<body>sınav tarihi!</body>
</not>
Görüleceği gibi XML dokümanının yapısında herhangi bir değişiklik yapmaksızın daha fazla bilgiyi görüntüleme olanağını bulduk. Bu da bize XML dokümanlarının esnek yapısı hakkında bazı fikirler vermektedir.
XML elementleri birbirleriyle ilişki içindedir. Bu ilişki biçimi elementlerin parent ya da child oluşlarıyla belirlenmektedir.
XML elementlerinin parent/child ilişkilerini bir örnek üzerinde açıklayalım:
Kitap Başlığı:Software AG ve XML
Bölüm 1: XML'e giriş
HTML ve XML'in karşılaştırılması
XML ve E-Ekonomi
Bölüm 2: XML Syntax
Elementler
Çıktı düzeni verilmiş olan bu kitabı tanımlayacak XML dokümanını tasarlayalım:
<kitap>
<baslik>Software AG ve XML</baslik>
<urun id="12-112" media="paper"></urun>
<bolum>XML'e giris
<para> HTML ve XML'in karşılaştırılması</para>
<para> XML ve E-Ekonomi</para>
</bolum>
<bolum>XML'e giris
<para> Elementler</para>
<para>Attribute'lar</para>
</bolum>
</kitap>
Dokümanımızın root elementi "kitap" tır."kitap" elementi "baslik" ve "bolum" elementlerinin parent'i durumundadır."baslik" ve "bolum" elementleri ise aynı seviyede bulunan elementlerdir ve bunlar arasındaki ilişkiye sibling denir. Elementler farklı içerik tiplerine sahip olabilirler. Bir element diğer bir elementi içerebileceği gibi basit,sabit ya da boş(empty) içerikte de olabilir. Yukarıdaki örneği incelediğimizde "para" elementinin sadece metin(text) içeriğinde olduğunu,"bolum" elementinin diğer elementleri içerebildiğini ve "urun" elementinin ise boş bir içerikte(empty) olduğunu görmekteyiz.
Elementlerin İsimlendirilmesi
Elementlerin isimlendirilmelerinde bazı kurallar geçerlidir:
İsimler harf,sayı ya da diğer karakterleri içerebilir.
İsimler bir sayı veya _ (underscore) karakteri ile başlamamalıdır.
İsimler "xml"(ya da XML veya Xml) şeklinde başlamamalıdır
İsimler boşluk içermemelidir.
Elementler attribute değerlerine sahip olabilirler. Attribute'lar elementler için ek bilgilerin tanımlanmasına olanak veren yapı birimleridir:
Bir HTML sayfasında tanımlanmış olan
<IMG SRC="edi1.gif">
kod parçasında SRC attribute değeri IMG elementi için ek bilgiler tanımlamamıza olanak sağlamaktadır. XML dokümanları için de durum aynıdır.
Veri bir XML dokümanında element veya attribute'lar içerisinde saklanır. Aşağıdaki örnekleri inceleyelim:
<kisi cinsiyet="bayan">
<ad>esra</ad>
<soyad>demir</soyad>
</kisi>
<kisi>
<cinsiyet>bayan</cinsiyet>
<ad>esra</ad>
<soyad>demir</soyad>
</kisi>
İki örneği karşılaştıracak olduğumuzda "cinsiyet" değerinin birinci örnekte bir attribute ikinci örnekte ise bir element halinde olduğu anlaşılacaktır. Ancak her iki örnekte de ortak olan özellik hem element hem de attribute şeklinde de "cinsiyet" değerinin bilgi depolaması olduğudur. Hangi durumlarda attribute'ların hangi durumlarda elementlerin kullanılacağına ilişkin kesin bir tanımlama yoktur. Aşağıdaki üç örneği incelediğimizde tümünün aynı bilgiyi içerdiği açıkça görülecektir:
Well-Formed XML Dokümanları Bir well-formed XML dokümanı doğru XML syntax'ında olan doküman demektir.
Valid bir XML dokümanı doğru XML syntax'ında olan(yani aynı zamanda well-formed yapıda olan) ve yapı bilgilerini aldığı DTD'ye uyumluluk gösteren doküman demektir.
Aşağıdaki örnekleri inceleyelim:
DTD'leri, XML dokümanlarının yapı bilgilerini tutan modüller olarak tanımlamak mümkündür. Doküman içinde kullanılacak olan tüm varlıklar daha önceden DTD içerisinde tanımlanmalıdır.
XML Schema XML Schema'lar da DTD'ler gibi XML dokümanlarının yapı bilgilerini tutarlar. Ancak DTD'lere göre daha kullanışlıdır ve en önemli özelliği XML syntax'ında olmalarıdır.
Hata(Error) ve Hata Kontrolü XML dokümanları içerisinde yapacağımız bir syntax error veya geçerlilik kontrolü hatası(validation error) durumunda program XML dokümanını işleme işine devam etmez ve durur. HTML'de ise yapılabilecek bir hata da(örneğin bitiş tag'i yazmayı unuttuğumuzda) program çalışmaya devam eder.
Bir XML dokümanının sunumu sırasında izlenen yollar yukarıdaki şekilde belirtildiği şekilde gerçekleşir. XML dökümanları,yapı bilgilerinin geçerlilik kontrolleri (DTD'ye bakılarak) yapıldıktan sonra XML Parser adı verilen yazılıma giderler. XML parser bu yapı bilgilerinden yararlanarak dokümanın parçalanma ağaç yapısını yani Parse Tree'sini oluşturur. Parse Tree'si oluşturulmuş olan doküman "Stylesheet" adı verilen işlem kullanılarak sunuma hazır hale getirilir. Daha sonra stylesheet işleminin uygulandığı sunum kısmından(rendering agent) alınan XML dokümanı görüntüleme cihazına aktarılır. Temel olarak kullanılan iki stylesheet tekniği bulunmaktadır:CSS ve XSL
CSS(Cascaded StyleSheets) ve XSL(Extensible StyleSheets) tekniklerinin her ikisi de XML dokümanlarının şekillendirilmesi amacıyla kullanılır. Amacı aynı olmasına rağmen XSL'in CSS'e göre daha esnek ve daha avantajlı olduğunu görmekteyiz.
Aşağıdaki XSL örneğini inceleyelim:
<?xml version="1.0"?>
<?xml:stylesheet type="text/xsl" href="ornek.xsl"?>
<kahvalti-menu>
<yemek>
<ad>Tulum Peynir</ad>
<fiyat>125</fiyat>
<tarif>Taze Tulum Peyniri</tarif>
<kalori>1200</kalori>
<yemek>
</kahvalti-menu>
Dikkat edilecek olursa XML dokümanının şekil bilgisi "ornek.xsl" adı verilen ayrı bir yapı biriminde tutulmaktadır."ornek.xsl" yapı birimi xsl uzantısından anlaşılacağı gibi XML dokümanımız üzerinde xsl tekniğini kullanarak stylesheet işlemini uygulamıştır.