BilgiTeknoloji.net    
b i l g i   t e k n o l o j i   y a z ı l ı m

Ana Sayfa

Marjinal XML Access Pratik Uygulamalar Projeler Ekonometri Dilimiz Çetrefil İletişim
 

Gelişmiş Belge Tanımlamaları

Geçen ayki DTD ile belge tanımlama konulu yazının devamı olan bu yazımızda DTD'lerdeki daha gelişmiş tanımlamalara ve özniteliklerin tanımlanmasına yer veriyoruz.

XML belge tanımlamaları sınırlı işaretleme ifadelerinden oluşur. Tür tanımlaması için ELEMENT, öznitelikler (attribute) için ATTLIST gibi ifadeler kullanılır. Bunların dışında belge tanımlamasını genişleten NOTATION, ENTITY gibi ifadeler ve birkaç bildirim türü daha mevcuttur.

GELİŞMİŞ BİLDİRİMLER

Elementler alt element ya da doğrudan veri içerebiliyorlar. Bir elementin altında aynı zamanda metin bilgisi ya da alt elementler bulunabilir. Bunun için DTD bölgesinde o element için #PCDATA ve alt-element bildirimi birlikte bulunur.

Çoğulluk işaretçileri de her zaman alt elementler hakkında kural tanımlar. Aşağıdaki örnekte OKULLISTE'nin çoğul ya da seçimlik olması hakkında hiçbir kural yoktur. Bütün kurallar alttaki OGRETMEN ve OGRENCI elementleri için geçerlidir. OKULLISTE kök-element değilse bununla ilgili kurallar bir üst element tanımında yer alır.

  <!ELEMENT OKULLISTE   (OGRETMEN* , OGRENCI*)>
    <!ELEMENT OGRETMEN  (#PCDATA)>
    <!ELEMENT OGRENCI   (#PCDATA)>

OKULLISTESI tanımındaki parantezler içinde alt-element tanımları yer alıyor. * işareti her iki elementten sınırsız sayıda yazılabileceği anlamına geliyor.

OKULLISTE (OGRETMEN* , OGRENCI*) <OKULLISTE>
(
  OGRETMEN*
  <OGRETMEN>Mahmut Hoca</OGRETMEN>
  <OGRETMEN>Sıfırcı Necati</OGRETMEN>
  OGRENCI*
)
  <OGRENCI>Güdük Necmi</OGRENCI>
  <OGRENCI>İnek Şaban</OGRENCI>
  <OGRENCI>Yirmidokuz Hasan</OGRENCI>
  </OKULLISTE>

Bu şekilde peşpeşe sınırsız sayıda öğretmen ve öğrenci listesi oluşturulabilir. Tabii öğretmen ve öğrencilerin içiçe olmaması gerekiyor. Karışık listeler oluşturmak için kapanış parantezinin sonuna çoğulluk işaretçilerinden gerekli olanını yerleştirmek yeterlidir.

OKULLISTE (OGRETMEN* , OGRENCI*)*

<OKULLISTE>

(OGRETMEN* , OGRENCI*)*

            <OGRETMEN>Mahmut Hoca</OGRETMEN>

            <OGRETMEN>Sıfırcı Necati</OGRETMEN>

            <OGRENCI>Güdük Necmi</OGRENCI>

            <OGRENCI>İnek Şaban</OGRENCI>

(OGRETMEN* , OGRENCI*)*

            <OGRETMEN>Kimyager Tahsin</OGRETMEN>

            <OGRETMEN>Ayşe Öğretmen</OGRETMEN>

 

(OGRETMEN* , OGRENCI*)*

            <OGRETMEN>Edebiyatçı Edip</OGRETMEN>

            <OGRENCI>Çalışkan Ahmet</OGRENCI>

            <OGRENCI>Sırık Naci</OGRENCI>

            <OGRENCI>Yirmidokuz Hasan</OGRENCI>

 

</OKULLISTE>

okulliste.xml

Yukarıdaki gibi karışık listeler oluşturmak için geçen ay bahsettiğimiz seçimlik oluşturma yöntemi daha etkin olabilir. Alt-elementleri tanımlarken ayıraç olarak virgül yerine "|" (ascii 124) işareti kullanıldığında her elementten istenildiği kadar oluşturulabilir. Bu şekilde kullanıldığında kapanış parantezinden sonra * belirteci kullanmak zorunludur.

<!ELEMENT OKULLISTE (OGRETMEN | OGRENCI)*>

Bir okulda öğretmen ve öğrenciler dışında başka kişiler de bulunabilir. Diğer türleri doğrudan tanımlamak yerine herhangi bir tanımı ifade etmesi için #PCDATA etiketini alt element adları ile birlikte tanımlamak mümkündür. Bu, kayıtlar arasında metin bölgelerinin oluşturulmasını sağlar. Böylelikle öğrenci ve öğretmen dışındaki kişiler doğrudan yazılabilir.

<?xml version="1.0" ?>
<!DOCTYPE OKULLISTE [
    <!ELEMENT OKULLISTE   (#PCDATA | OGRETMEN | OGRENCI)*>
      <!ELEMENT OGRETMEN  (#PCDATA)>
      <!ELEMENT OGRENCI   (#PCDATA)>
]>
<OKULLISTE>
	<OGRETMEN>Ayşe Öğretmen</OGRETMEN>
	Adile Naşit
	<OGRENCI>Çalışkan Ahmet</OGRENCI>
	<OGRETMEN>Edebiyatçı Edip</OGRETMEN>
	<OGRENCI>Güdük Necmi</OGRENCI>
	<OGRENCI>İnek Şaban</OGRENCI>
	<OGRETMEN>Kimyager Tahsin</OGRETMEN>
	<OGRETMEN>Mahmut Hoca</OGRETMEN>
	Müfettiş Bey
	<OGRETMEN>Sıfırcı Necati</OGRETMEN>
	<OGRENCI>Sırık Naci</OGRENCI>
	<OGRENCI>Yirmidokuz Hasan</OGRENCI>
</OKULLISTE>

okulliste2.xml

Elementleri daha kontrollü gruplandırmak mümkündür. İçiçe parantezlerle birlikte çoğulluk işaretçileri beraber kullanılabiliyor.

<?xml version="1.0" ?>
<!DOCTYPE ODUNC [
   <!ELEMENT ODUNC (TARIH, (KITAP | DERGI)* )>
     <!ELEMENT TARIH (#PCDATA)>
     <!ELEMENT KITAP (#PCDATA)>
     <!ELEMENT DERGI (#PCDATA)>
]>
<ODUNC>
	<TARIH>2002-06-02</TARIH>
	<KITAP>Türk Aynştaynı Oktay Sinanoğlu Kitabı</KITAP>
	<KITAP>Kar - Orhan Pamuk</KITAP>
	<DERGI>Chip</DERGI>
	<KITAP>Zihin Yönlendirenler</KITAP>
	<DERGI>Atlas Dergisi</DERGI>
</ODUNC>

odunc.xml

ODUNC ana elementi altında sadece bir TARIH elementi bulunup, KITAP ve DERGI elementleri karışık bir liste halinde devam edebiliyor.

ÖZNİTELİKLERİ TANIMLAMAK

DTD şablonlarında öznitelikler için de kurallar tanımlanır. Öznitelikler ait oldukları elementin alt satırında ATTLIST (attribute list - öznitelik listesi) ifadesiyle belirtilirler. İfadede özniteliğin adı, türü, varsayım bildirimi gibi özellikler tanımlanır. Bir elemente ait tüm öznitelikler aynı ATTLIST tümcesinde sıralanır.

<!ATTLIST ElementAdı
    Öznitelik1 Tür Varsayım 
    Öznitelik2 Tür Varsayım
    ...
>

Tür bilgisi özniteliğin veri biçimini ifade eder. Bu bilgi karakter verisini ifade eden CDATA, seçim yapılması gereken bir dizi ya da bir simge ifadesi olabilir. Varsayım bildirimleri ise geçerli bir metin olabilmekle birlikte, tür katarındaki dizide bulunan bir veriyi de ifade edebilir. Geçerli veri tanımlanmadığı durumlarda #IMPLIED, #REQUIRED veya #FIXED dizeleri kullanılabilir. Varsayım bildirimi #IMPLIED olduğunda özniteliğin değeri üzerinde bir kısıtlama yoktur. #REQUIRED özniteliğin mutlaka kullanılması ve boş bırakılmaması gerektiğini işaret eder. #FIXED ise özniteliğe değişmez bir veri ataması yapar.

Tür

Varsayım ifadesi

 

CDATA

Karakter verisi

ÖznitelikAdı CDATA "varsayılan değer"

 

#IMPLIED

ÖznitelikAdı CDATA #IMPLIED

 

#REQUIRED

ÖznitelikAdı CDATA #REQUIRED

 

#FIXED Sabit değer

ÖznitelikAdı CDATA #FIXED "sabit değer"

 

 

 

( Dizi )

Dizi içindeki bir değer

ÖznitelikAdı (değer1 | değer2 | değer3) "değer2"

 

#IMPLIED

ÖznitelikAdı (değer1 | değer2 | değer3) #IMPLIED

 

#REQUIRED

ÖznitelikAdı (değer1 | değer2 | değer3) #REQUIRED

Öznitelik tanımlamalarında #REQUIRED ile belirtilmemiş öznitelikleri XML belgesinde bulundurmak zorunlu değildir. Varsayılan ya da sabit değeri belirtilenler kullanılmadığında ise XML belgesinde gösterilirler ve varsayılan ya da sabit değerlerini alırlar. Aşağıdaki XML belgesinde sadece CINSIYET ve UYRUK özniteliği yer almasına rağmen ekran görüntüsünde UYETIPI ve MEDENIHALI değerleri de mevcuttur. Zira bu iki öznitelik için varsayılan değerler tanımlanmıştır.

<?xml version="1.0" ?>
<!DOCTYPE KISI [

<!ELEMENT KISI (AD, SEHIR)>
	<!ATTLIST KISI
		UYETIPI		CDATA			#FIXED "Yeni Üye"
		UYRUK		CDATA			"TC" 
		TARIH		CDATA			#IMPLIED 
		CINSIYET	(Kadın | Erkek)		#REQUIRED 
		MEDENIHALI	(Bekar | Evli | Dul)	"Bekar"
	>
	<!ELEMENT AD    (#PCDATA)>
	<!ELEMENT SEHIR (#PCDATA)>
	
]>

<KISI CINSIYET="Kadın" UYRUK="KKTC" >
	<AD>Ayşe</AD>
	<SEHIR>Lefkoşa</SEHIR>
</KISI>

oznitelik.xml

 

DOSYALAR:
odunc.xml
okulliste.xml
okulliste2.xml
oznitelik.xml


Serkan ŞAHİNOĞLU
(Chip Dergisi, Haziran 2002)


http://BilgiTeknoloji.net