kEditor - Yararlı Bilgiler / İnternet / XML Nedir, Neler Yapılabilir?

http://www.keditor.com/bilgi_internet_27.html


Bulunduğunuz bölüm:   Anasayfa / Yararlı Bilgiler / İnternet

XML Nedir, Neler Yapılabilir?


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.

XML ve HTML arasındaki en belirgin fark XML’in verinin kendisiyle ilgilenmesi, HTML’in ise verinin sunumuyla ilgilenmesidir. Buna bağlı olarak HTML belgeleri veriye ilişkin şekillendirme bilgilerini içerirken, XML dökümanları ise verinin tanım bilgilerini içermektedir. XML’in tasarım amaçlarından biri de verinin taşınmasıdır.

Şimdi basit bir XML belgesini birlikte inceleyelim:

<not>
<kime>Birisine</kime>
<kimden>Benden</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 kullanıcıya şunları sunar:
• Çoklu kütükleri birleştirerek, bileşik belgeler yaratmak
• Metin kütüklerinde, istenilen yere ve istenilen formatta resim eklemek
• Belge geçerleyiciler ve tarayıcılar gibi programlara bilgi denetim işlemini sağlamak
• Kütüğe, açıklama satırları eklemek

Fakat unutmamak lazımdır ki, XML’de şunlar bulunmaz:

• HTML’deki gibi, belgeleri işaretlemek için, daha önceden tanımlanmış etiketler.
• Belirli tiplerdeki belgeler üretmek için standart bir şablon.

XML tasarlanırken ortada birçok düşünce vardı. Sonuçta, W3C XML’in tasarım amaçlarını açıkladı:

1- XML internet üzerinde çalışabilmelidir.
2- XML tüm uygulamalar tarafından desteklenmelidir.
3- XML, SGML ile uyumlu olmalıdır.
4- XML üreten programlar oldukça kolay olmalıdır.
5- XML’de seçmeli özellikler minumum olmalı veya hiç olmamalıdır.
6- XML belgeleri okunabilir ve açık olmalıdır.
7- XML tasarımı tek bir firma bu işi ele almadan acilen hazırlanmalıdır.
8- XML tasarımı biçimlendirilmiş ve kısa olmalıdır.
9- XML belgelerinin yaratılması çok kolay olmalıdır.
10- XML belgelerinde anlam belirsizlikleri olmamalıdır

XML Nasıl Kullanılabilir?

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

Data Island iki şekilde HTML sayfalarına gömülür:

- Direk XML datasını HTML'in içine gömerek

<XML ID="XMLID">
<iller>
<ilkod>34</ilkod>
<İlad>İstanbul</İlad>
</iller>
</XML>

- HTML sayfasından XML'i referans göstererek.

<XML ID="XMLID" SRC="iller.xml"></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.

Verinin XML formatına çevrilmesi ile, farklı sistemler ve uygulamalardaki verilerin karmaşıklık derecesi indirgenerek, alış veriş işleminin kolaylaştırılması sağlanır.

XML ile finansal bilgilerin Internet üzerinden alış verişi sağlanmaktadır. Günümüzde artık sıklıkla duyulan elektronik iş kavramı açısından incelenecek olduğunda XML’in önemli işlevleri yerine getirdiği görülmektedir. Bahsedilen bu işevleri ile XML geleceğin elektronik iş dili olarak da yeni bir görevi üstlenmektedir.

- XML ile verinin paylaşımı kolaylaştırılır

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 ile verinin depolanması sağlanır.

XML, verinin dosyalarda veya veritabanlarında saklanması için de kullanılabilir.

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.

Neden XML?

Bu sorunun cevabını iyi verebilmek için, şöyle bir örnek yararlı olacaktır:

Diyelim ki evde otururken canımız meyve suyu istedi. Markete gidip meyve suyu 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.

Bu noktada endişeye kapılmak doğal. Fakat unutmamak gerekir ki arabayı kullanmak için yürüyen aksamın direksiyona nasıl bağlandığı, hareketin tekerleklere nasıl iletildiği, karbüratörün ne işe yaradığı gibi konularda uzman olmaya gerek yok.

Kolayca görülüyor ki eğer webdeki işimiz küçük ve dar kapsamlıysa, HTML kullanmak daha kolay ve daha ucuzdur. Fazla ayrıntı bilmeye ve kafamızı karmaşık teknolojilere yormaya gerek yok. Fakat eğer biraz deneyimli bir kullanıcıysak ve yapacağımız işte HTML yetersiz kalıyorsa, XML kullanmak kaçınılmaz hale geliyor. Üstelik örnekte de görüldüğü gibi, bunun için küçük bir miktar daha bilgi bilmek gerekliyken işin fazla ayrıntısına girmek gerekmiyor.

Ş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.

XML bilgisayarların daha iyi haberleşmesine iki yoldan katkıda bulunur:

• İçeriği gösterimden ayırır. (HTML – XHTML)
• Uygulamalar arasında bilginin doğrudan geçişini sağlar.

Şimdi de XML’in diğer yararlarını madde madde inceleyelim.

Yalınlık: XML’de kodlanan bilgilerin okunması ve anlaşılması kolaydır çünkü doğal dile yakın anlamlı etiketler insanlar tarafından daha kolay anlaşılır. Ayrıca bu etiketler bilgisayarlar tarafından da kolayca işlenebilirler.

Açıklık: XML W3C standartıdır ve yazılım liderleri tarafından da onaylanmıştır.

Genişleyebilirlik: Sabit bir etiketler kümesi bulunmaz. Yeni etiketler istenildiğinde yaratılabilir.

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.

Makine tarafından anlaşılabilen bağlam bilgisi içerir: Etiketler, özellikler (attributes) ve eleman(element) yapıları; içerik anlamını yorumlamada, etkin arama motorlarında yeni olasılıklar oluşturmada, akıllı veri işlemede (data mining) vb. bağlam bilgisi sağlar. Bağlam bilgisinin değerlendirilmesinin neredeyse imkansız olduğu HTML veya düz metine göre bu büyük bir avantajdır.

Ö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.

İçeriği gösterimden ayırır: XML etiketleri, gösterimi değil anlamı tanımlar. HTML’in parolası :”Nasıl göründüğünü biliyorum!” iken XML’inki : “Ne anlama geldiğini biliyorum, öyleyse bana nasıl görünmesi gerektiğini söyleyin!”. Bir XML belgesinin görünüşü ve anlattıkları XSL “style sheet”leri tarafından oluşturulur. Bu, bir belgenin görünüşünün, belgenin bağlamına dokunmadan değiştirilebilmesini sağlar. Aynı içerikten ortaya çıkan birçok görünüm veya sunum kolayca oluşturulabilir.

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.

Çokdilli belgeleri ve “Unicode”u destekler: Uygulamaların uluslararası hale getirilmesinde çok önemli bir özellik.

Verilerin kümelenmesi ve karşılaştırılmasını kolaylaştırır: XML belgelerindeki ağaç yapısı, belgelerin eleman eleman etkin bir biçimde kümelenmesine ve karşılaştırılmasına izin verir.

Ç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.

Sektör tarafından hızlıca benimsenmiştir: IBM, Sun, Microsoft, Netscape, SAP gibi birçok kurum XML’i destekliyor. Microsoft ve SAP şimdiden ileride çıkaracakları programların sürümlerine XML desteği koyuyorlar. Microsoft ve Netscape’in web tarayıcıları
XML’i destekliyor.

Örneklerle XML Sözdizimi , Özellik ve Eleman Kullanımı

XML sözdizimi , basit birkaç kuraldan oluşmuştur bu yüzden de kullanılması ve öğrenilmesi kolaydır. Önceden de incelediğimiz basit XML belgesine tekrar göz atalım:


<?xml version=”1.0”?>
<not>
<kime>Birisine</kime>
<kimden>Benden</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 belgelerinin yapısı “kök” sözcüğünden de anlaşılabileceği gibi ağaç yapısına benzer. Bundan sonraki 4 satırda ise 4 çocuk(child) eleman açıklanmıştır. Bu çocuk elemanlar birbirleriyle kardeştir(sibling). Bunun yanında kök eleman da çocuk elemanlarının atası (parent) durumundadır. Dikkat edilecek olursa kök,çocuk ve kardeş elemanlar son derece sıradüzensel , içiçe geçmemiş bir yapı sergiliyor.

Bu sıradüzene göre örneğimizde <not> kök eleman. <kime>,<kimden>,<başlık> ve <ileti> ise <not> un çocuğudur ve dolayısıyla <not> bu dört elemanın atası durumundadır. Bu dört eleman aynı zamanda birbirleriyle kardeştir de. <kime> , <kimde> vs. Elemanlarının da kendi çocuklarına sahip olabileceklerini unutmamak gerekir.

Diğer bir özellik ise XML’in başlangıç ve bitiş etiketi kurallarına sıkı sıkıya bağlı olmasıdır. HTML’de örneğin <p> ile başlamamız gereken bir paragrafı </p> etiketiyle kapatmasak bile tarayıcı çoğu zaman bu hatayı gözardı ederek HTML belgesini görüntüler. XML bunu kesinlikle kabul etmez. Örnekte de görüldüğü gibi açılan bütün etiketler kapatılmıştır. Bu XML’in kendisinden türetilecek dillere(ör. XHTML) de geçireceği bir özelliğidir.

XML’in bu nitelikte bir başka özelliği de büyük/küçük harf duyarlı (case-sensitive) olmasıdır. Bu bağlamda bir elemanın başlangıç etiketinin bitiş etiketiyle tamamen aynı yazılışta olması gerekir. Bu doğrultuda bir örnek vermek gerekirse:

<yazar>Falan Filan</YAZAR>

Hatalı bir sözdizimdir. Doğrusu ise:

<YAZAR>Falan Filan</YAZAR>
veya
<yazar>Falan Filan</yazar>
şeklinde olmalıdır.

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:

<b><i>Kalın ve eğik metin</b></i>

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:

<b><i>Kalın ve eğik metin</i></b>

Bu haliyle kod, XML sözdizimine uygundur. Daha önceden değinilen kök-çocuk ilişkisine sadık kalınmış ve XML sözdizimi açısından geçerli bir kod elde edilmiştir.

XML sözdiziminin temel taşı olan elemanların(element) isimlendirilmesinde uyulması gereken kurallar şunlardır:
• İsimler harf,sayı ya da diğer karakterleri içerebilir.
• İsimler bir sayı veya _ (alt çizgi) karakteri ile başlamamalıdır.
• İsimler “xml“(ya da XML veya Xml) şeklinde başlamamalıdır
• İsimler boşluk içermemelidir.

Şimdi de özellik(attribute) değerlerinin XML sözdizimi içerisinde uyması gereken kuralları inceleyelim. Baştaki örneğimize geri döndüğümüzde:

<?xml version=”1.0”?>
<not tarih=”20/02/2002”>
<kime>Birisine</kime>
<kimden>Benden</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.

Gördüğümüz gibi özellikler elemanlar için ek bilgilerin tanımlanmasına olanak veren yapı birimleridir. Özellik değerini de ekleyerek ilk baştaki belgemizi biraz daha fazla bilgi tutabilecek hale getirdik. Şimdi bunu başka yollardan yapmaya çalışalım:

<?xml version=”1.0”?>
<not>
<tarih>20/02/2002</tarih>
<kime>Birisine</kime>
<kimden>Benden</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>Birisine</kime>
<kimden>Benden</kimden>
<başlık>İlginç</başlık>
<ileti>Bugün çok simetrik bir gün!!</ileti>
</not>

Elimizdeki <tarih> elemanını , alt elemanlara ayırarak parçaladık. Bu şekilde elimizdeki veriyi daha etkili bir yöntemle saklamış oluyoruz. Üstelik bu çeşit bir kullanım ile hata kontrolü ve modülerlik gibi konularda da avantajlar elde etmiş oluyoruz.

Görüldüğü gibi XML sözdizimi açısından pek esnek olmamakla birlikte verinin saklanması ve temsili açısından son derece esnek bir yapıya sahip. Bu da ona HTML’in aksine daha teknik ve kapsamlı konularda daha etkili bir biçimde kullanılma olanağı sunuyor.

DTD’ler

a) Document Type Declaration (DTD)

XML belgelerinde kullanılan etiketlerin tanımının önceden yapılmış olması gereklidir. Etiketler kişiden kişiye farklı olabilir. Bu yüzden bir etiketin, XML kütüğü içerisindeki işlevini açıklayan tanımların bulunduğu bir DTD (Document Type Definition)’nin varlığına ihtiyaç duyulur. Bu DTD, XML kütüğünün içinde (içsel altküme), dışında (dışsal altküme (genellikle .dtd uzantılı) ), ya da bir kısmı içinde bir kısmı dışında olabilir.

İş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> Birisne</kime>
<ileti> Doğum Günün Kutlu Olsun </ileti>
</kutlama>

Burada 2. satırın(declaration) eklenmesi ile, “kutlama” adındaki yapımızın kökünün “kutlama.dtd” isimli dosya içerisinde bulunduğunu XML Parser’a anlatıyoruz.

Eğer <kutlama> , <kime> , <ileti> elemanlarının hepsi gerekli elemanlarsa ve “Definition”da yer alıyorsa “kutlama.dtd” şöyle görünecekti :

<!ELEMENT kutlama(kime,ileti)>
<!ELEMENT kime (#PCDATA)>
<!ELEMENT ileti (#PCDATA)>

Eğer “Declaration” kullanmasaydık ve “Definition”larımızı XML belgesinin içine gömmeye kalksaydık , bunu belgeye şu satırları ekleyerek sağlamak zorundaydık.

<!DOCTYPE kutlama[
<!ELEMENT kutlama(kime,ileti)>
<!ELEMENT kime (#PCDATA)>
<!ELEMENT ileti (#PCDATA)>
]>


b) Document Type Definition


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.

Hatırlayacağımız gibi XML teknolojisinin öncelikli amacı iki bilgisayar arasındaki bilgi alışverişini uygun biçimde sağlamaktı. Anlaşılacağı üzere bu bilgi iletişimindeki ufak bir dağınıklık kilitlenmelere ve verilerin güvensiz bir biçimde değişimine sebep olabilir.

Ç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)>

Bu DTD’yi kullanan XML belgesi de şöyle olsun :

<?XML version=”1.0”?>
<!DOCTYPE kutlama SYSTEM “kutlama.dtd”>
<tebrik>
<kime> Birisne</kime>
<ileti> Doğum Günün Kutlu Olsun </ileti>
</tebrik>

Bu örnekte, <tebrik> elemanı, XML belgesinde bulunmasına rağmen, DTD içinde tanımlı değil. Bu bize XML işleyicisinden hata gelmesine yol açar. Diğer hata ise, DTD içinde tanımanmış <kimden> elemanı, XML belgesinde kullanılmamış. Bu da bir başka hatadır.

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.

XML’in yazılış amacını öğrenmek ve içeriğini anlamak önemlidir. Bunun için, XML belgesiyle DTD’sinin uyumlu olması gerekir. İşte bu uyumu denetlenmek amacıyla “parser” adı verilen araçlar kullanılır.

Bir DTD Yaratmak

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)>
]>

Şimdi bu DTD’yi satır satır inceleyelim.

<!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ı.

<!ELEMENT kutlama (kime,ileti)>
Bu satır ise <kutlama> elementinin, bir <kime> elementi ve bir de <ileti> elementi içerdiğini, bunlardan sadece birer tane olabilceğini ve <kime> elementinin <ileti> elementinde önce gelmesi gerektiğini anlatıyor.

Şimdi sözdizime biraz daha yakından bakalım :

Parantezler <kutlama> elementinin izin verilen içeriğini tutar. Element isimleri arasındaki “virgül” <kime> ‘nin <ileti> ‘den önce gelmesi gerektiğini anlatır.

<!ELEMENT kime (#PCDATA)>
<!ELEMENT ileti (#PCDATA)>
Bu satırlar bize <kime> ve <ileti> elementlerinin her birinin “parsed character” verisi tuttuğunu fakat herhangi bir çocuk element içermediğini belirtir.

“]>” satırı, DOCTYPE bildirisinin iç alt kümesinin tamamlandığını belirtir.

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.

Daha geniş bir örnekle yolumuza devam edelim :

<?xml version=’1.0’?>
<!DOCTYPE kitap SYSTEM “kitapyapisi.dtd”>
<kitap>
<isim>Bazı Yemek Tarifleri</isim>
<yazarlar>
<yazar>Falan Filan</yazar>
<yazar>Filankes Mevankes</yazar>
<yazar>Adamın Biri</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>Etli Yemekler
</badi>
<!--Diğer konu adları -->
<konu>İçli Köfte
</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>

<kitap> elementinin , element bildirimi şu şekildedir :

<!ELEMENT kitap (isim,yazarlar*,onsoz?,yayınevi,isbn?,
bolumler+,ekler*,dizin?)>

isim yerine geçebilecek herhangi bir sembol ne eksik ne fazla sadece bir kez görünmeli , <title> elementinin bildirimi şu şekildedir :

<!ELEMENT title (#PCDATA)>

Şimdi bir bolum’ü nasıl tanımladığımıza bakalım:

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:

<!ELEMENT bolum (bno,badi,konu+)>

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*)>

Anlaşıldığı üzere, bildiri <yazarlar> elemanını tanımlıyor ve bu elemanın <yazar> adlı hiç veya pekçok özelliğe sahip olabilecek bir çocuk elemanına sahip olduğunu * kullanarak tanımlıyor.

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.

Yaptığımız açıklamalar sonucunda verdiğimiz XML belgesinin “kitapyapisi.dtd” isimli dış DTD’si şu şekilde görülecektir :

<!ELEMENT kitap (isim,yazarlar*,onsoz?,yayınevi,isbn?,
bolumler+,ekler*,dizin?)>
<!ELEMENT isim (#PCDATA)>
<!ELEMENT yazarlar (yazar*)>
<!ELEMENT yazar (#PCDATA)>
<!ELEMENT onsoz (#PCDATA)>
<!ELEMENT yayınevi (#PCDATA)>
<!ELEMENT isbn (#PCDATA)>
<!ELEMENT bolumler (bolum+)>
<!ELEMENT bolum (bno,badi,konu+)>
<!ELEMENT bno (#PCDATA)>
<!ELEMENT badi (#PCDATA)>
<!ELEMENT konu (#PCDATA)>
<!ELEMENT ekler (ek*)>
<!ELEMENT ek (#PCDATA)>
<!ELEMENT dizin (#PCDATA)>

Bu örneklerde gördüğümüz PCDATA, XML işleyicisi tarafından “parse” edilen karakter verilerdir. “XML parser”ı tarafından hiç bir “parse” işleminin yapılmadığı CDATA gibi bölümlerde (section) bulunur.
PCDATA verisinin yetersiz kaldığı yön ise, hiç bir zaman tür kontrolünün yapılamamasıdır. Bu belge tabanlı XML ile ilgilendiğimizde büyük bir eksikliktir.

Şimdiye kadar DTD’lerin eleman tanımladığı örneklere baktık. Bunun dışında DTD’de bir eleman için atanabilir özellikleri de tanımlayabiliriz. Şu XML örneğinin ele alalım:

<?xml version=’1.0’?>
<belgeciktisi>
<kagitrengi renk=”beyaz”>kaliteli kuşe kağıt
</kagitrengi>
<murkrengi renk=”siyah”> Süper şahane mürekkep
</murkrengi>
</belgeciktisi>

Burada , <kagitrengi> ve <murkrengi> elemanları mevcuttur ve her birinin renk özelliği vardır. Eğer sadece siyah-beyaz kağıt ve siyah-beyaz mürekkep kullancağımız gözönüne alınırsa özellik bildirimimiz şu şekilde olacaktır :

<!ELEMENT belgeciktisi (kagitrengi,murkrengi)>
<!ELEMENT kagitrengi (#PCDATA)>
<!ATTLIST kagitrengi renk (siyah|beyaz) #REQUIRED>
<!ELEMENT murkrengi (#PCDATA)>
<!ATTLIST murkrengi renk (siyah|beyaz) #REQUIRED>

Söz dizimden de görüldüğü gibi, renk özelliği siyah-beyaz değerlerinden birini almak zorundadır(#REQUIRED).

DTD Yapıları :

Şimdiye kadar sadece ELEMENT ve ATTLIST bildirirmlerine göz attık. Bu bölümde de mümkün olan bütün geçerli bildirimleri kısaca tanımlayacağız :

Dtd Yapısı | İşlevi

ELEMENT => XML eleman tipi bildirimi.

ATTLIST => Belirli bir ELEMENT tipine bağlanabilecek özelliklerin ve bu özelliklerin alabileceği değerlerin bildirimi.

ENTITY => Yeniden kullanılabilir içerik bildirimi

NOTATION => “Parse” edilmeyecek dış içeriğin (örneğin ikil ya da resim kütükleri) biçiminin bildirimi.

Özellikler(Attributes) İle Çalışmak

Şimdi bir DTD içinde özellik tanımlarken kullanabileceğimiz yapıları da gözden geçirelim. Özellikler, özellik bildirim listesi(attribute declaration list) denilen bir liste içinde aşağıda belirtilen şekilde tanımlanır:

<!ATTLIST ElementName AttrName AttrType Default>

Görüleceği gibi bir özellik; isim(AttrName), tip(AttrType) ve öndeğer(default) olmak üzere üç bileşenden oluşmaktadır.Bir özellik bildirimi sırasında kullanılabilecek olan dört öndeğeri vardır:

• #REQUIRED
• #IMPLIED
• #FIXED
• default

#REQUIRED değeri özelliğin eleman için mutlaka gerekli olduğunu belirtir. #IMPLIED değeri özelliğin seçimsel olduğunu ve eleman için kullanımının zorunlu olmadığını belirtir. #FIXED değeri özelliğe atanacak değerin sabit olacağını ve bunun da özelliği, bir bilginin sabit bir parçası durumuna getireceğini belirtir.

XML 10 tane farklı özellik tipini desteklemektedir:

• CDATA :Parse edilmemiş karakter verisi
• Enumerated :Bir dizi değer
• NOTATION TD içinde herhangi bir yerde tanımlanmış olan notasyon
• ENTITY: Dışsal bir binary entity
• ENTITIES Birden fazla dışsal binary entity ler
• ID : Biricik bir tanımlayıcı
• IDREF: DTD içinde tanımlanmış olan bir ID ye referans edilen değer
• IDREFS: DTD içinde birden fazla ID lere refere edilen değerler
• NMTOKEN: XML token değerlerini içeren isim
• NMTOKENS:XML tone karakterlerini içeren isim boşlukları

“String Attribute”ları

“String attribute”lar CDATA tarafından gösterilen ve en çok kullanılan özellik tipidir. CDATA tipi özelliklerin bir metin “string”ini içereceğini belirtir.Aşağıdaki örnekte CDATA tipi ile beraber oyuncu elementinin kullanılışı gösterilmiştir:

<!ATTLIST oyuncu takim CDATA #REQUIRED>

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:

<!ATTLIST oyuncu takim CDATA #IMPLIED> şeklinde kullanmamız gerekirdi.

“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:

<!ATLIST oyuncu pozisyon (ortasaha | forvet | savunma | kaleci)
"ortasaha">

Bu örnekte pozisyon değerinden birini seçebilmekteyiz. Eğer hiçbir şey seçmezsek “default” değer olan “ortasaha” devreye girer.

Admin, Son Güncelleme: 06.05.07

İlgili haberler
İlgili Yazılar

 Yukarı çık