|
|
||||||||||||
|
|
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.
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.
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>
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 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.
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.
Ö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>
DOSYALAR: Serkan ŞAHİNOĞLU |
|||||||||||||||||||||||||||||||||||||||||||||||||