|
XML HAKKINDA
BİLGİ
Genişletilebilir İşaretleme Dili (
eXtensible Markup Language ) SGML 'den türetilmiş, basit ve çok
esnek bir işaretleme dildir.
(
http://www.w3.org/XML/#intro "Extensible Markup Language (XML)
is a simple, very flexible text format derived from SGML") W3C ye
göre XML' in tanımıdır.
Hala gelişim içinde bulunan XML bir çok kişinin düşündüğü gibi HTML
in yerini almak için geliştirilmemiştir. Peki neden XML 'e ihtiyaç
duyarız. Aslında XML büyük ölçekli elektronik yayıncılıkta
kullanılmak üzere dizayn edilmiş, aynı zamanda da geniş
çeşitlilikteki verilerin web üzerinden veya herhangi bir platformda
alış verişinin sağlanmasında önemli bir rol oynamaya başlamıştır. (
http://www.w3.org/XML/#intro "Originally designed to meet the
challenges of large-scale electronic publishing, XML is also playing
an increasingly important role in the exchange of a wide variety of
data on the Web and elsewhere.")
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 yazila bilinir. Buradaki islemlerimiz 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.
|