Yazan: Şadi Evren ŞEKER

XML veya HTML dosyalarındaki kayıtların uyması gereken koşulları belirlemeye yarar. Buna göre bir XML dökümanı istenilen bir DTD kuralına tabi tutularak bu kurala uyup uymadığı denetlenebilir. DTD’nin kendisi de bir dil olarak tanımlanabilir ve bu dilin de kendisine özgü kuralları bulunmaktadır.

Temel olarak bir dökümanda kullanılacak olan DTD’nin belirlenmesi iki türlü mümkündür. Birinci yöntemde dökümanda kullanılacak olan DTD tanımı harici olarak yapılmıştır ve dökümana bu harici tanım belirtilir. İkinci yöntemde ise DTD tanımı doğrudan dökümanın içinde yapılır.

İlk gruba örnek olarak aşağıdaki yapıyı alabiliriz:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

Yukarıdaki örnek kodda bir HTML tamını içerisinde kullanılacak olan DTD dosyasının yolu verilmiş ve HTML kodlarımızın bu DTD dosyasındaki kurallara uygun olacağı tanımlanmıştır.

İkinci gruba yani döküman içerisinde DTD tanımının yapıldığı duruma örnek olarak aşağıdaki kodu inceleyelim:

<?xml version=”1.0”?>
<!DOCTYPE SIMPLE
	[
		<!ELEMENT SIMPLE ANY>
	]
>
<SIMPLE> Bu basit bir dtd'li xml ornegidir. </SIMPLE>

Yukarıdaki örnekte basit bir XML dosyası ve dosyanın içeriğinde bir DTD tanımı yapılmıştır. Bu DTD tanımı <!DOCTYPE ile başlayan ve > işareti ile biten aralıktır. DTD alanında bir SIMPLE etiketi(tag) tanımlanmış ve bu etiketin içerisine ANY yapısına uygun yani XML kurallarına uygun herhangi bir bilgi girilebileceği belirtilmiş. Dolayısıyla XML dökümanının içerik kısmında da benzer şekilde SIMPLE etiketi kullanılmış ve içerisine serbest olarak bir metin girilmiştir.

Biraz daha detaylı tanımların yapıldığı aşağıdaki DTD örneğini inceleyelim:

<!DOCTYPE INSAN
	[
	<!ELEMENT INSAN(ISIM,SOYISIM,MEMLEKET)>
	<!ELEMENT ISIM(#PCDATA)>
	<!ELEMENT SOYISIM(#PCDATA)>
	<!ELEMENT MEMLEKET(#PCDATA)>
	]
>

Yukarıdaki örnekte INSAN dökümanı içerisinde ISIM, SOYISIM ve MEMLEKET etiketleri bulunacağı belirtilmiş ve bu etiketlerin tipi olarak PCDATA tanımlanmış. PCDATA alanlar yanlızca karakter içerikli veriler bulundurabilir. Örneğin aşağıdaki XML kodu yukarıdaki DTD tanımına uygundur:

<INSAN>
	<ISIM>ŞADİ</ISIM>
	<SOYISIM>ŞEKER</SOYISIM>
	<MEMLEKET>İSTANBUL</MEMLEKET>
</INSAN>

Ancak aşağıdaki kod yukarıdaki DTD tanımı dahilinde çalışmaz:

<INSAN>
	<SOYISIM>VELI</SOYISIM>
	<ISIM>ALI</ISIM>	
	<MEMLEKET>GIRESUN</SOYISIM>
</INSAN>

DTD tanımlamaları içinde ayrıca mantıksal operatörler kullanılması da mümkündür. Örneğin yukarıdaki örnekte bir insan etiketi için mutlaka isim, soyisim ve memleket tanımı yapılması beklenmektedir ancak meslek için farklı bir durum söz konusudur bir insan postac, mühendis yada hemşire olabilir ama hepsini birden olması beklenemez. İşte böyle bir DTD tanımı aşağıda verilmiştir:

<!DOCTYPE INSAN
	[
	<!ELEMENT INSAN(POSTACI | MUHENDIS | HEMSIRE)>
	<!ELEMENT POSTACI(#PCDATA)>
	<!ELEMENT MUHENDIS(#PCDATA)>
	<!ELEMENT HEMSIRE(#PCDATA)>
	]
>

Yukarıdaki DTD örneğinde dikkat edilecek nokta etiketler arasına | (pipe) işareti konmuş olmasıdır. Bu işaretin anlamı mantıksal olarak veya’dır.

Yukarıdaki DTD tanımına uygun bir XML dökümanı aşağıdaki şekilde olabilir:

<INSAN>
	<POSTACI>ALI</POSTACI>
</INSAN>

veya

<INSAN>
	<MUHENDIS>ALI</HEMSIRE>
</INSAN>

ama asagidaki dokuman birden fazla komutu ayni anda icerdigi icin gecersiz kabul edilir.

<INSAN>
	<MUHENDIS>ALI</HEMSIRE>
	<POSTACI>ALI</POSTACI>
</INSAN>

Ayrıca DTD tanımı içerisinde bir etiketin ne kadar olması gerektiği de tanımlanabilir bunu için  ?, +, * sembolleri kullanılır

automata theorydeki regular expressionlardan esinlenen bu semboller kisaca:

  • ? : sifir yada bir
  • +: bi yada daha cok
  • *: sifir yada daha cok

demektir.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir