Bu yazımızdan önceki yazılarımızda XML’in yapısını ve nasıl görüntülenebileceğini basit bir şekilde anlatmaya çalışmıştım. Şimdi sıra XML belgelerimizi bir standart yapıya nasıl kavuşturacağımıza geldi.

XML belgemizi standart bir hale sokmalıyız? Daha önceki yazılarımızda XML ‘in ana çıkış amaçlarından birisinin veri depolama olduğunu görmüştük. Ö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. Pekala şimdi basit bir örnek görelim;

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”>


Az önce incelediğimiz basit örneğimizdeki 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>

ya da

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

Bu yazımızda XML belgemize nasıl DTD tanımları ekleyerek standart bir yapıya nasıl kavuşturacağımız hakkında bilgi vermeye çalıştık. Bundan sonraki yazılarımızda DTD hakkında yazılarımıza devam edeceğiz.

Aziz Durmaz adlı yazara ait diğer makaleleri görmek için tıklayın >>

Favorilerinize Ekleyin.
  • BlinkList
  • del.icio.us
  • Digg
  • Netvouz
  • DZone
  • ThisNext
  • MisterWong
  • Wists
  • blogmarks
  • Furl
  • Netscape
  • NewsVine
  • Reddit
  • Shadows
  • Technorati
  • YahooMyWeb
  • Fark
  • feedmelinks
  • Fleck
  • kick.ie
  • LinkaGoGo
  • Linkter
  • MyShare
  • Spurl
  • Webride