XML HAKKINDA BİLGİ
Genişletilebilir
İşaretleme Dili ( eXtensible Markup Language ) SGML 'den türetilmiş, basit ve
çok esnek bir işaretleme dilidir.
Maddeler halinde
XML 'i anlatmak gerekirse;
- XML , HTML gibi bir işaretleme dilidir.
- XML, veri yi tanımlamak için dizayn edilmiştir.
- Önceden belirtilmiş etiketler (tag) yoktur. Kendi etiketlerinizi kendiniz
oluşturmanız gerekir.
- XML de veriyi tanımlamak için doküman tipi tanımlaması DTD (Document Type
Definition ) veya XML Schema kullanmanız gerekmektedir.
- XML DTD veya XML Schema ile birlikte kendini tanımlayıcı bir yapıda olması
gerekmektedir.
Biraz maddeleri açmamız gerekirse XML, HTML gibi bir işaretleme dilidir. (Markup
Language). XML, HTML 'in yerin almak için geliştirilmemektedir. İkisi de farklı
amaçlar ile geliştirilmiştir. HTML verinin gösterilmesi için geliştirilmiştir ve
verinin nasıl görüntülendiği ile ilgilenir. XML ise verinin tanımlanması için
geliştirilmiştir ve verinin ne olduğu ile ilgilenir. Kısaca HTML, bilgiliyi
gösterir, XML ise bilgiyi tanımlar.
XML de HTML deki gibi önceden belirtilmiş etiketler (tag) bulunmaz, bunların
yerine kendi etiketlerinizi oluşturursunuz. İlk bakışta çok serbest bir yapı
gibi görünse de verdiğiniz etiketlerin sıralamaları, içerdiği veri veya öğeleri,
DTD 'iz de tanımlamanız ve bu kurallar sıkı sıkıya uymanız gerekmektedir. DTD yi
kendiniz oluşturacağınız gibi hali hazırda başkaları tarafından kullanılmakta
oldan DTD 'leri kullanabilirsiniz.
XML DTD veya XML Schema nızla beraber kendini tanımlayıcı bir yapıda bulunması
gereklidir. Peki bu nedir? Az önce üst bölümde açıkladığım gibi DTD ler
sayesinde XML belgenizde kullanmış olduğunuz etiketlerin niteliklerini,
yapılarını ve içermesi gereken verileri veya diğer etiketleri tanımladığınız
bölümdür. Bu bölüm XML belgesinin içinde olabileceği gibi bir dış belge olarak
XML belgesinde link edilmiş olabilir. Bu DTD ler sayesinde XML belgeniz browser
veya farklı bir program tarafında çözümlenerek görüntülenir.
XML'E GİRİŞ
XML(Extendsible Markup Language -
Gelişleyebilir Markup Dili) yeni çağın internet üzerinden veri taşıma ve
verileri işleme dili olarak tasarlanmıştır. İsminden anlaşılacağı gibi bu dilin
tag'lerini kullanıcı kendi ihtiyaçları doğrultusunda genişletebilir. HTML
kullanırken bildiğimiz gibi belirli sayıda tag ile web sayfalarımızı dizayn
ediyorduk. Fakat artık XML sayesinde web üzerinde verileri taşıma ve işleme gibi
görevleri daha kolay yapabaliriyoruz.
Burada şu hususa dikkat etmekte yarar var: HTML verinin kullanıcıya ulaştrırken
hangi formatta sunulduğu ile ilgilenir. Buna karşın XML ise veriyi nasıl anlamlı
bir bütün olarak ve sunulan verinin kendini programcı tarafından üretilen
tag'larla nasıl tanımladığıyla ilgilenir. Aşağıda bir xml belgesi örneğimiz var:
<?xml version="1.0"?>
<!-- xml deneme belgesi-->
<denemeler>
<deneme>
<il>istanbul</il>
<ilce>seyrantepe</ilce>
</deneme>
<deneme>
<il>ankara</il>
<ilce>etimesgut</ilce>
</deneme>
<deneme>
<il>izmir</il>
<ilce>bornova</ilce>
</deneme>
<deneme>
<il>erzincan</il>
<ilce>refahiye</ilce>
</deneme>
</denemeler>
Yukarıdaki XML belgesi örneğinde de
görebileceğiniz gibi bir XML belgesinde ilk satır bulunmaz zorunda. Bu giriş
satırı dosyanın bir XML belgesi olduğunu deklare eder. Sonraki satırda ise
programcıya yardımcı olacak yorum/açıklama satırımız bulunuyor. Dikkat ederseniz
XML' de yorum satırlarımızı aynı HTML'de olduğu gibi yazarabiliriz.
Yukarıdaki kodumuz tag'larımız iç içice girmiş (nested-loops gibi). Burda
tag'ından sonra tag'ı geliyor. Bu durumda önce yazar tagını, sonra yazarlar
tagını kapatmalıyız. Yani en dıştaki tag en son kapanmalı.
<tag_1>
<tag_2>
<tag_3>
............
</tag_3>
</tag_2>
</tag_1>
Yukarıdaki kod parçasında önce <tag_1>
açılmıştır. Sonra <tag_2> ve en son ise
<tag_3> açılmıştır. Buna göre önce <tag_3> sonra <tag_2> ve
enson olarak <tag_1>'i kapatmak durumundayız.
Son olarak XML'i HTML'den ayıran diğer bir önemli nokta ise XML büyük- küçük
harf duyarlıdır (case-sensitive). <deneme> , <deneme> ve <deneme>
tag'larının hepsi birer tag olarak XML tarafından algılanır.
BİR XML BELGESİNİN YAPISI
XML, HTML metin tabanli bir dil oldugundan
dolayi basit bir metin düzenleyicisi ile yazılabilir. Buradaki işlemlerimiz için
Notepad yeterli olacaktir. Simdi gelin asagidaki örnek xml belgesini
olusturalim.
<?xml version="1.0" encoding="ISO-8859-9"
?>
<!-- xml deneme belgesi-->
<denemeler>
<deneme>
<il>istanbul</il>
<ilce>seyrantepe</ilce>
</deneme>
<deneme>
<il>ankara</il>
<ilce>etimesgut</ilce>
</deneme>
<deneme>
<il>izmir</il>
<ilce>bornova</ilce>
</deneme>
<deneme>
<il>erzincan</il>
<ilce>refahiye</ilce>
</deneme>
</denemeler>
Yazdigimiz Örnek xml metinini yukaridan
asagiya dogru incelemeye baslayalim. Ilk üç satirdan olusan blok giris bölümü
olarak adlandirilir. Bu blogun ilk satir ise XML bildirimini içerir Bu satirla
yazdigimiz dokumanin bir xml belgesi oldugunu deklare edip, versiyonunu
belirtmis ve kullanacagimiz dil biçiminiz (encoding) belirtmis durumdayiz.
<?xml version="1.0"
encoding="ISO-8859-9"?>
Ikinci satira bosluk satiridir. Bu satir
sadece xml belgesinin baskalari tarafindan rahat okunmasi amaciyla
birakilmistir. XML islemcisi bu satirlari göz ardi edecektir.
Üçüncü satir ise yorum satiridir. <!-- baslayip
--> ile biten bölüm arasina -- isaretleri haricinde herhangi bir
sey yazila bilinir. Bu kismin her xml belgesinde olacak diye bir kosul yoktur.
Bu yorum kismi xml belgemizin baskalari tarafindan daha rahat anlasilmasi için
yazmaktayiz. Hatirlarsak XML amaçlarindan biri okunabilirligi yüksek olan
belgeler olusturmakti.
<!-- xml deneme belgesi-->
Giris bölümünde, örnekte bulunan bildirimler
ve yorumlar haricinde belgenin türünü ve yapisini belirleyen bir bildirim veya
XML görüntülemek için CSS gibi bir belgeyi ekleye bilirsiniz.
Giris bölümünden sonra gelen ilk etiket (tag) kök elemanina ait etiket(tag)dir.
Örnegimizde kök eleman denemeler`dir. Tüm XML belgelerinde tek bir kök eleman
bulunmalidir. Bu elemanin içine yerlesmis olan diger elemanlar ve veriler esas
verinin bulundugu ve siniflandirildigi bölümdür.
Herhangi bir sekilde XML belgemizin nasil
görüntülenecegine dair bir bildirim yapmadigimizdan dolayi Internet Explorer
belgemizi kendinde mevcut olan default biçimde bize gösterecektir.
XML Belgemize bir CSS belgesi ekleyerek
belgemizi bizim belirledigimiz formatlarda görüntülenmesini saglaya biliriz.
Ekleyecegimiz CSS dosyasinin link ni yukarida belirttigimiz gibi giris bölümünde
tanimlamamiz gerekmektedir. Isterseniz ilk önce CSS dosyamizi bir olusturalim.
deneme
{
display:block;
margin-top:12pt;
font-size:10pt
}
il
{
font-size:16pt;
font-weight:bold;
font-style:italic;
margin-left:20pt;
}
ilce
{
font-size:16pt;
font-weight:bold;
font-style:italic;
}
XML belgemize css dosyasini giris bölümüne
<?xml-stylesheet type="text/css" href="xml.css" ?> satirini ekleyerek
eklemekteyiz. Buradaki <?xml-stylesheet
bölümü stylesheet islem yönergesi oldugunu type="text/css" bunun bir CSS
dosyasi oldugunu ise css dosyasinin bulundugu yeri ve ismini belirtmektedir.
Sonuç olarak örnek XML belgemiz asagidaki sekle dönüsmüstür.
<?xml version="1.0" encoding="ISO-8859-9"
?>
<?xml-stylesheet type="text/css" href="xml.css" ?>
<!-- xml deneme belgesi-->
<denemeler>
<deneme>
<il>istanbul</il>
<ilce>seyrantepe</ilce>
</deneme>
<deneme>
<il>ankara</il>
<ilce>etimesgut</ilce>
</deneme>
<deneme>
<il>izmir</il>
<ilce>bornova</ilce>
</deneme>
<deneme>
<il>erzincan</il>
<ilce>refahiye</ilce>
</deneme>
</denemeler>
Herhangi bir elemani veya elemana ait olmasi
gereken bir biçim özelligini CSS belgemizde belirtmeseydik. Bir üstündeki
elemana ait özellikleri alarak görüntülenecektir.
XML DOKÜMAN TİPİ TANIMLAMASI - 1
XML belgemizi neden standart bir hale
sokmalıyız?
XML ‘in ana çıkış amaçlarından birisi de veri depolamadır. Örneğin bir projede
XML belgeleri oluşturulması isteniyor ve bu belgeler özel bir yazılım sayesinde
işlenecek. Tüm kullanıcıların XML belgeleri önceden tanımlanmış ortak bir DTD
(Document Type Defination) içerirse, bu belgelerin istenilen yapıya uygun
olması, çalışanların gelişigüzel yeni etiketler eklememeleri, etiketlerle
depolanan bilgiyi hatalı sıralamamaları, etiketlerine hatalı nitelikler
eklememeleri sağlanır. Ayrıca işlem yapan programında bu belgeleri tanıması ve
işlemesi garanti altına alınmış olunur.
DTD (Document Type
Defination) nedir?
XML belgelerimizin giriş bölümünde tanımlanan ve belgenin yapısını belirleyen
Doküman Tipi Belirleyicisidir. DTD’nin amacı yukarıda belirttiğimiz gibi XML
belgemizin kurallara uygun yapısal bloklarını tanımlamaktır.
Bir DTD’nin genel biçimi aşağıdaki gibidir.
<! DOCTYPE Name DTD >
Buradaki name kısmı belgemizdeki kök
elemanının adını belirtir. DTD kısmı ise belgede geçecek olan etiketlerin,
etiket niteliklerinin ve diğer özelliklerinin tanımlarının bulunduğu kısımdır.
Tâbi ki DTD bildirimlerimizi sadece
belgemizin içinde yapmamaktayız. Ayrıca dışarıdan herhangi bir DTD 'yi
belgemizin içinde kullanmak amacıyla XML belgemize ekleyebilmekteyiz. Bir DTD
belgesini XML belgemize eklememiz için gerekli olan söz dizilimi aşağıdaki
gibidir.
<!DOCTYPE kök-elemaný SYSTEM "dosyaadi">
DTD tanımlamasını dış bir dosyadan
alırsak aşağıdaki şekilde düzenlememiz gerekecektir.
basit.xml :
<?xml version=”1.0” ?>
<!DOCTYPE BASIT SYSTEM “basit.dtd”>
<BASIT>Basit bir XML Dökümaný </BASIT>
basit.dtd:
<! ELEMENT BASIT ANY >
Bir doküman tipi tanımlamasında aşağıdaki
işaretleme bildirimleri bulunur.
Eleman Türü Bildirimleri :
XML 'de kullandığımız elemanlar, içerikleri ve sıralanışları DTD ‘in içinde
tanımlanmaktadır. Bir eleman bildiriminin söz dizimi aşağıdaki gibidir.
<!ELEMENT eleman_adi Katagorisi>
veya
<!ELEMENT eleman_adi (bulunabilecek-elemanlar)>
---- Boş Elemanlar: XML ‘de boş içerikli elemanlara sahip
olabiliriz. Örneğin HTML 'deki <br> veya <img> etiketleri gibi. Bu elemanların
bildirimleri için EMPTY anahtar sözcüğünü kullanırız. Örnek:
<!ELEMENT IMAGE EMPTY>
XML belgemizde IMAGE elemanýný aþaðýdaki þekillerde kullanabiliriz.
<IMAGE></IMAGE>
veya
<IMAGE />
----- Herhangi bir içerikli Elemanlar:
XML belgemizde karışık içerikli elemanlarımız bulunabilir. Bu elemanımız içinde
herhangi bir sırada ve tekrar edilebilen elemanlar karakter verisi içeren veya
içermeyen sıfır veya daha fazla alt eleman içerebilir. Herhangi bir data
kombinasyonunu içerebilir. En serbest içerik tanımıdır. Örnek;
<!ELEMENT MISC ANY>
---- Alt elemanlı Elemanlar: XML belgemizde bir elemanımızın içine
yerleştirilmiş elemanlarımız bulunabilir. Bu konu ile ilgili örneklerimize
konumuzun ilerleyen kısmında geniş bir şekilde yer vereceğiz.
---- Karışık içerikli Elemanlar:
Karakter verisi ile seçimimize bağlı istediğimiz kadar alt eleman barındıran
elemanlardır. Bu konu ile ilgili örnekler ilerleyen kısımda verilecektir.
Nitelik Bildirimleri: Elemanlarımızın alabilecekleri veya
almaları gereken nitelikleri dtd içerisinde tanımlamanız gerekmektedir. Bu
bildirim sayesinde:
Elemanla ilişkili nitelik adları tanımlanır. Geçerli bir XML belgesinde bir
elemanın başlangıç etiketinde yalnızca bu eleman için tanımladığımız nitelikleri
kullanabiliriz.
Bu niteliklerin veri türleri belirlenir.
Her niteliğin gerekli olup olmadığı (REQUIRED), eğer gerekli değilse ve
belirtilmediyse işlemcinin ne yapacağını belirtir.
Bir nitelik bildiriminin söz dizimi aşağıdaki gibidir:
<!ATTLIST Eleman_adi Nitelik_adi
Nitelik_tipi default_deger>
Burada Eleman_adi olarak nitelik
belirteceğimiz elemanın adını, nitelik adı olarak verilecek niteliğin adını
yazmaktayız. Ayrıca nitelik tipi ve eğer nitelik belirtilmezse default değer
yerine verilen değer ile işlemcinin nasıl bir işlem yapacağını belirtmekteyiz.
Örneğin;
<! ATTLIST YAZAR bolum (xml|C#|C++) “C++”
#REQUIRED>
Nitelik tipleri aşağıdaki değerleri
alabilir.
|
Değer
|
Açıklaması
|
|
CDATA
|
Değer Karakter verisi olması
|
|
(en1|en2|..)
|
Değer parantez içindeki değerlerden
birisi olmalı
|
|
ID
|
Değer tekil ID olmalı
|
|
IDREF
|
Değer başka bir elemanın ID si olmalı
|
|
IDREFS
|
Değer başka ID ‘lerin listesi olmalı
|
|
NMTOKEN
|
Değer geçerli XML adı olmalı
|
|
NMTOKENS
|
Değer geçerli XML adı listesi olmalı
|
|
ENTITY
|
Değer bir varlık olmalı
|
|
ENTITIES
|
Değer bir varlık listesi olmalı
|
|
NOTATION
|
Değer bir notasyon olmalı
|
|
xml:
|
Değer önceden tanımlamış bir XML değeri
olmalı
|
Default Değer aşağıdaki değerleri
alabilir.
|
Değer
|
Açıklama
|
|
deger
|
Niteliğin Default değeri
|
|
#REQUIRED
|
Nitelik değeri Eleman içinde geçmek
zorundadır.
|
|
#IMPLIED
|
Nitelik değeri Eleman içinde geçmek
zorunda değildir.
|
|
#FIXED value
|
Nitelik değeri sabittir. Eğer nitelik
değeri belirtirseniz default değeri yazmak zorundasınız.
|
XML DOKÜMAN TİPİ TANIMLAMASI - 2
Varlık (Entity) Bildirimleri:
Varlık bildirimleri XML belgemizde kullanacağımız değişik tür ve biçimlerdeki
verilerimizi XML belgemize aktarmamızın bir yoludur. Örneğin sıklıkla
kullandığımız bir metin bloğunu varlık olarak tanımlayarak istediğimiz yerde bu
metni kolayca ekleyebilir ve bu metin üzerindeki değişiklikleri varlık
bildiriminden yapabiliriz. Bunun yanı sıra XML belgemizin dışındaki harici bir
dosyayı varlık olarak tanımlayarak içindeki veriyi XML belgemizde
kullanabiliriz. Bu veri metin olmak zorunda değildir.
XML belgemiz içinde tanımladığımız varlık için bir veri pratikte metin olmak
zorundadır. Ama varlık olarak tanımlayacağımız harici bir dosyanın içeriği
herhangi türden bir veri olabilmektedir. XML belgemizin içinde tanımlayacağımız
bir varlık için söz dizimi aşağıdaki gibidir.
<!ENTITY varlýk_adý "varlýk_degeri">
Harici bir dosyadan alınacak bir varlık için
söz dizimi ise aşağıdaki gibidir.
<!ENTITY varlýk_adý SYSTEM "URI/URL">
(Not: URL = Uniform Resource Locator / URI =
Uniform Resource Identifier )
Geçen yazımızı da gözönüne alacak olursak bir döküman tipi tanımlamasında
bulunan işaretleme bildirimlerini yüzeysel olarak tanımlamış durumdayız. Şimdi
biraz daha ayrıntıya girelim.
1- Eleman Bildirimleri :
Bir önceki yazımızda kısaca değindiğimiz eleman bildirimlerine bu başlığımızda
daha geniş bir şekilde yer vermeye çalışacağız.
Bir eleman bildirimi aşağıdaki söz dizimine sahiptir.
<!ELEMENT eleman_adi Kategorisi>
Buradaki eleman_adi XML belgemizde
kullanacağımız elemanın adıdır. Alabileceği değerler şu kurala uygun olmak
zorundadır; ”İsim bir harf ya da alt tire (_) ile başlayıp sıfır ya da daha
fazla harf, rakam, nokta(.), tire(-) veya alt tire (_) ile devam etmelidir.
Ayrıca xml öneki (Küçük veya Büyük harflerin kombinasyonundan olabilir) ile
başlayan eleman adları standartlar için ayrılmıştır. Şart koşulmasa da, ileride
problemlerle karşılaşmamak için kullanılmaması uygun olur.”
Elemanlarımızın alabileceği içerik türlerini Kategorisi kısmında belirtmekteyiz.
Kategori kısmında içeriği belirlenir.
Eğer bir eleman alt elemanlara sahipse sadece belirtilen alt elemanları
içerebilir. Örneğin;
<?xml version=”1.0”?>
<!DOCTYPE deneme
[
<!ELEMENT deneme (il, ilce)>
<!ELEMENT il (#PCDATA)>
<!ELEMENT ilce (#PCDATA)>
]
>
<deneme>
<il>izmir</il>
<ilce>bornova</ilce>
</deneme>
Bu örnekte dikkat edecek olursanız deneme
elemanı tanımlanırken il ve ilce alt elemanlarını içerir bir şekilde
tanımlanıyor. il ve ilce elemanları ise sadece karakter verisine sahip olacak
şekilde tanımlanmıştır.
Not: #PCDATA anahtar sözcüğü karakter verisinin tanımıdır.
Kategori bölümü iki temel şekilde bulanabilinir. Bunlardan birisi sıralı, yani
içerilen elemanlar belirtilen sırada bulunmak zorundadır. Ya da seçimli, yani
belirtilen elemanlardan birisi seçilip yer verilmesi şeklindedir.
Sıralı : Alt elemanların belli bir sıra içinde bulunması gerektiği
zamanlarda eleman bildiriminde, kullanılacak alt elemanlar virgülle ayrılmış ve
bulunacakları sırayla kategori kısmında belirtilirler. Örneğin;
<!DOCTYPE deneme
[
<!ELEMENT deneme (il, ilce)>
<!ELEMENT il (#PCDATA)>
<!ELEMENT ilce (#PCDATA)>
]
>
şeklinde bir DTD belgesine sahip olan bir XML
belgesinin aşağıdaki şekilde olması gerekir.
<deneme>
<il>erzincan</il>
<ilce>refahiye</ilce>
</deneme>
Eğer ki bu satırlardan herhangi birisi
bulunmazsa ya da yerlerinin sıralarında bir değişiklik olursa XML belgemiz DTD
‘mize uygun olmaz. Örneğin aşağıdaki deneme elemanları yukarıdaki DTD ‘mize göre
geçersiz elemanlardır.
<deneme> <!—Gecersiz Eleman --!>
<il>erzincan</il>
<ilce>refahiye</ilce>
</deneme>
veya
<deneme> <!—Gecersiz Eleman --!>
<il>erzincan</il>
<ilce>refahiye</ilce>
</deneme>
Bir alt elemanı birden fazla tekrarlamak da
geçersizliğe neden olacaktır.
Seçimli : Alt elemanlardan birisinin elemanın içinde bulması için eleman
bildiriminde kategori bölümünde alt elemanlar ( | ) işareti aralarına
konularak tanımlanırlar. Örneğin;
<!DOCTYPE deneme_ilce
[
<!ELEMENT deneme_ilce (mah | cad| no)>
<!ELEMENT mah (#PCDATA)>
<!ELEMENT cad (#PCDATA)>
<!ELEMENT no (#PCDATA)>
]
>
Şeklindeki bir DTD ‘e sahip olan XML belgesi
aşağıdaki şekillerde olabilir.
<deneme_ilce>
<mah>erzene</mah>
</deneme_ilce>
veya
<deneme_ilce>
<mah>ergenekon</mah>
</deneme_ilce>
veya
<deneme_ilce>
<mah>3</mah>
</deneme_ilce>
Ama herhangi bir elamanın tekrarı veya
belirtilen iki elemanın bir arada kullanılması durumunda eleman geçersiz olur.