Daha önce üst veri oluşturabilmek için iki yöntemin( DTD Schema, XML Schema ) olduğundan bahsetmiştim. Bugünde DTD Şema‘yı elimden geldiğince anlatmaya çalışacağım.

DTD şema, XML‘in dışında kendi kuralları olan ayrı bir dildir.

XML‘i anlatırken şöyle bir örnek kullanmıştım hatırlayacağınız gibi:

Şimdi bu örneğin DTD şemada gösteriminin nasıl olduğuna bir bakalım:

dtd

İlk satırda deniliyor ki; bir lecturer elementi tanımladıysan onun içine bir name bir de phone elementi eklemelisin. name ve phone  elementleri de içerisine atomik bir değer alıyorlarmış. Eğer üst verimiz buysa, XML verimiz bu üst verimiz ile doğrulanır. Bu şekilde anlaştıysak veriyi gönderdik demek oluyor, veriyi bilgi haline dönüştürdük demek oluyor.

Burada da deniliyor ki; bir lecturer elementi var sözlüğümüzde. İçerisinde de name veya phone‘dan biri olabilir. İkisi de olabilir fakat hiçbiri de olmayabilir. Logicdeki or‘u düşünün.

Bu örnekde, içeriğindekilerin sırası önemli değil demek. Önce name sonra phone da olabilir veya önce phone sonra name de olabilir demek.

Şimdi de XML anlatırken verdiğim sipariş örneğinin DTD halini yazalım. XML de şu şekilde göstermiştik:

DTD Hali:

item+ diyerek, “order‘ın içerisinde birden fazla(en az bir) item vardır.” demiş oluyoruz. Attribute tanımlamak içinde görüldüğü gibi ATTLIST kullanılmaktadır. order‘ın attributeleri orderNo, customer, date imiş. REQUIRED‘ı, mutlaka olmalı dediğimizde kullanıyoruz. Bakın görüldüğü gibi içi boş element tanımlamak için de EMPTY kullanılmaktadır. “item‘ın içeriği boş fakat attributeleri bulunmaktadır.” diyerek artık üst veriyi(meta data) tanımlamış oluyoruz.

+ : 1 veya daha fazla olduğunu belirtmek için kullanılmaktadır.

? : 0 veya 1 kez olduğunu belirtmek için kullanılmaktadır.

* : 0 veya daha fazla olduğunu belirtmek için kullanılmaktadır.

#FIXED “value” : Sabit tanımlamak için kullanılmaktadır.

“value” : Default olarak tanımlama yapmak için kullanılmaktadır.

Eğer bunlardan hiçbiri kullanılmaz ise varsayılan olarak 1 kez olduğu anlaşılmaktadır.

Bir aile yapısının DTD gösterimi şu şekildedir:

IDREF : ID ile tanımlanmış person’a referansı var demektir. A’nın annesi B demek için kullanıyoruz. Buradan başka bir elementin ID si bulunmaktadır.

IDREFS : Birden fazla ID içermektedir. children’ın hem annesi hem babası bulunmaktadır. Birden fazla ID’ye referansı vardır yani.

DTD şemada recursive tanımlamalarda yapılabilmektedir. Örnek olarak bir binary tree’ye baktığımızda;

Her node ya binary tree olur yada boş olabilir demiş oluyoruz. bintree elementini tanımlarken bintree‘yi tanımlama içerisinde kullanırsak recursive bir tanımlama yapmış oluyoruz. Görüldüğü gibi ağaç yapısı böyle tanımlanabilmektedir.

DTD şemanın en büyük dezavantajlarından biri farklı bir dil olmasıdır. Farklı bir dil olduğu için farklı bir parser’a ihtiyaç duyar. Yani biz XML verisini ayrı, DTD şemayı ayrı parse etmemiz gerekiyor. Bir diğer dezavantajı ise notasyonunun çok kısıtlı olmasıdır. Veri tipleri, deyimleri kısıtlıdır. Ama tabiki sözlük oluşturmak için kullanılabilmektedir.

Kısa bir şekilde DTD Şemayı bu şekilde anlatılabilmektedir. Umarım anlaşılır bir yazı olmuştur. Bir diğer yazımda XML Şema’yı anlatacağım.

İyi çalışmalar. 🙂

639 Total Views 2 Views Today
Share on FacebookTweet about this on TwitterShare on Google+Share on LinkedIn