AnasayfaspaceHaberlerspaceForumspaceYazılarspaceBilgilerspaceSitemapspace
BulunduÄŸunuz bölüm:   Anasayfa / Yararlı Bilgiler / İnternet


XML Nedir, Neler Yapılabilir?

XML, HTML ile pek çok açıdan benzerlik gösteren bir iÅŸaretleme (markup) dilidir. Verinin tanımlanması ve tarif edilmesi için kulanılır. HTML’deki yapının aksine XML’de kullanılacak olan etiketler önceden tanımlı deÄŸildir.Yani bir XML belgesinin yapısı tamamıyle kullanıcı tarafından oluÅŸturulur.Verinin tarif edilmesi için DTD(Document Type Definition (XML belgesinde kullanılacak etiketleri ve yapıları önceden tarif ettiÄŸimiz kütükler)) adı verilen yapılar kullanılmaktadır. XML ve DTD’nin birlikte kullanılması ile belgeler kendini tarif eden bir yapı halini alırlar.

XML, SGML’den türetülmiÅŸ bir dildir. SGML bir meta-dildir. Meta-dil demek dil yaratmaya yarayan dil demektir. İlginç olan XML'in SGML gibi bir meta-dilden türemesine raÄŸmen kendisinin de bir meta-dil olmasıdır. Yani XML'den de yeni diller türetilebilir. ÖrneÄŸin Wireless Markup Language(WML) mobil cihazları için kullanılan WAP ortamlarının dilidir ve XML’in türevidir. HTML de SGML’den türetilmiÅŸ bir dil olmasına raÄŸmen bu özelliÄŸi taşımaz.

XML ve HTML arasındaki en belirgin fark XML’in verinin kendisiyle ilgilenmesi, HTML’in ise verinin sunumuyla ilgilenmesidir. Buna baÄŸlı olarak HTML belgeleri veriye iliÅŸkin ÅŸekillendirme bilgilerini içerirken, XML dökümanları ise verinin tanım bilgilerini içermektedir. XML’in tasarım amaçlarından biri de verinin taşınmasıdır.

Åžimdi basit bir XML belgesini birlikte inceleyelim:

<not>
<kime>Birisine</kime>
<kimden>Benden</kimden>
<başlık>Kutlama</başlık>
<ileti>Doğum Günün Kutlu Olsun!!</ileti>
</not>

HTML belgelerine çok benzeyen bu yapıda ilk etapta göze çarpan nokta etiket yapılarının bizim tarafımızdan tasarlanmış oluşudur. XML kütükleri her zaman belgelerin mantıksal bölümlerinin(element) başlangıç ve bitişlerini işaret eder.

HTML’de kullanılan <p> ve <h1> gibi standart etiket yapıları yukarıdaki XML belgesinde kullanılmamıştır. Bahsedilen bu özelliÄŸi nedeniyle XML belgeleri geniÅŸleyebilir(extensible) bir yapıya sahiptir.Belgelerin bu hali gerçek anlamda herhangi bir ÅŸey ifade etmez. Belgenin iletimi(gönderim veya alım) ya da sunumu için baÅŸka ÅŸeylerin de yapılması gerekmektedir.

Buradaki önemli nokta ÅŸudur: XML, HTML’in yerine geçecek bir dil deÄŸil HTML’in tamamlayıcısı olabilecek bir dildir. Günümüz biliÅŸim dünyasına bakarsak XML’in her alanda karşımıza çıktığını görmekteyiz. Bu nedenle XML’i bir anlamda geleceÄŸin web dili olarak tanımlamak mümkündür.

XML kullanıcıya şunları sunar:
• Çoklu kütükleri birleÅŸtirerek, bileÅŸik belgeler yaratmak
• Metin kütüklerinde, istenilen yere ve istenilen formatta resim eklemek
• Belge geçerleyiciler ve tarayıcılar gibi programlara bilgi denetim iÅŸlemini saÄŸlamak
• Kütüğe, açıklama satırları eklemek

Fakat unutmamak lazımdır ki, XML’de ÅŸunlar bulunmaz:

• HTML’deki gibi, belgeleri iÅŸaretlemek için, daha önceden tanımlanmış etiketler.
• Belirli tiplerdeki belgeler üretmek için standart bir ÅŸablon.

XML tasarlanırken ortada birçok düşünce vardı. Sonuçta, W3C XML’in tasarım amaçlarını açıkladı:

1- XML internet üzerinde çalışabilmelidir.
2- XML tüm uygulamalar tarafından desteklenmelidir.
3- XML, SGML ile uyumlu olmalıdır.
4- XML üreten programlar oldukça kolay olmalıdır.
5- XML’de seçmeli özellikler minumum olmalı veya hiç olmamalıdır.
6- XML belgeleri okunabilir ve açık olmalıdır.
7- XML tasarımı tek bir firma bu işi ele almadan acilen hazırlanmalıdır.
8- XML tasarımı biçimlendirilmiş ve kısa olmalıdır.
9- XML belgelerinin yaratılması çok kolay olmalıdır.
10- XML belgelerinde anlam belirsizlikleri olmamalıdır

XML Nasıl Kullanılabilir?

XML hakkında bilinmesi gereken en önemli nokta, bu dilin veriyi taşımak amacıyla tasarlanmış oluşudur.

XML ile veriler yapı bakımından modülerlik kazanmaktadır. XML belgeleri verinin içeriğiyle ilgilenmektedirler.Bu sayede verilerin içerik,yapı ve sunum kısımları ayrı modüller halinde farklı XML belgelerinde tutulmaktadır.

XML belgeleri Veri Adaları(Data Islands) adı verilen teknik sayesinde HTML sayfaları içerisinde de depolanabilmektedir.Bu teknik sayesinde verinizin sadece sunumuyla ilgilenilmektedir

Veri Adaları(Data Islands) bir HTML sayfasında XML komutlarının gömülü olması ve onların işlenebilmesi demektir. Böylece HTML sayfasının içine artık sadece HTML etiketleri değil, aynı zamanda XML komutları da yazılabilir

Data Island iki şekilde HTML sayfalarına gömülür:

- Direk XML datasını HTML'in içine gömerek

<XML ID="XMLID">
<iller>
<ilkod>34</ilkod>
<İlad>İstanbul</İlad>
</iller>
</XML>

- HTML sayfasından XML'i referans göstererek.

<XML ID="XMLID" SRC="iller.xml"></XML>

XML ile verinin alışveriş işlemi gerçekleştirilir. XML, yapısının esnekliği sayesinde birbirine uyumlu olmayan sistemler arasında veri alış verişi rahatlıkla gerçekleştirilmektedir. Günümüz bilişim dünyasında bilgisayar sistemleri ve veri tabanlarının genellikle birbirine uyumsuz sistemler içerebildiklerini görmekteyiz. Bundan dolayı uygulama geliştiriciler Internet üzerinden bu tip uyumsuz verilerin alış veriş işlemini gerçekleştirmek zorundadırlar.

Verinin XML formatına çevrilmesi ile, farklı sistemler ve uygulamalardaki verilerin karmaşıklık derecesi indirgenerek, alış veriş işleminin kolaylaştırılması sağlanır.

XML ile finansal bilgilerin Internet üzerinden alış veriÅŸi saÄŸlanmaktadır. Günümüzde artık sıklıkla duyulan elektronik iÅŸ kavramı açısından incelenecek olduÄŸunda XML’in önemli iÅŸlevleri yerine getirdiÄŸi görülmektedir. Bahsedilen bu iÅŸevleri ile XML geleceÄŸin elektronik iÅŸ dili olarak da yeni bir görevi üstlenmektedir.

- XML ile verinin paylaşımı kolaylaştırılır

XML, veriyi düz metin (plain text) formatında saklamasından dolayı veriyi paylaştırma konusunda da hem yazılım hem de donanımdan bağımsız hareket edebilme imkanını sunmuştur.

Bu sayede farklı uygulamalarda hareket eden farklı veri tipleriyle çalışmak daha kolaylaşır. Ayrıca işletim sistemlerinin yükseltgenmesi, sunucu, uygulama vb. dışsal faktörlerin yenilenmesi gibi etkenlerden de en az düzeyde etkilenilmiş olunur.

- XML ile verinin depolanması sağlanır.

XML, verinin dosyalarda veya veritabanlarında saklanması için de kullanılabilir.

XML, yazılım, donanım ve uygulamalardan bağımsız olduğu için verinin daha elverişli olarak kullanımını sağlamaktadır. Yani başka istemci(client) veya uygulamalar tıpkı veri kaynaklarına erişiyormuş gibi XML kütüklerine rahatlıkla erişebilirler.

Neden XML?

Bu sorunun cevabını iyi verebilmek için, şöyle bir örnek yararlı olacaktır:

Diyelim ki evde otururken canımız meyve suyu istedi. Markete gidip meyve suyu almak çok zor bir iÅŸ deÄŸil. Markete yürüyüp hızlı ve ucuz bir ÅŸekilde ihtiyacımızı giderebiliriz. Üstelik fazla yüksek bir teknolojiye ihtiyacımız yok. HTML ile web sayfası hazırlamak da birçok yönden buna benziyor. EÄŸer düz bir metin düzenleyiciye ve küçük bir HTML bilgisine sahipsek, hızlı ve ucuzca sayfamızı hazırlayabiliriz. Hatta FrontPage, DreamWeaver gibi programlarla HTML bilgisine de ihtiyac minimum düzeye indi.

Şimdi ihtiyacımızın daha büyük olduğunu düşünelim. Bir hatta birkaç süpermarkete uğrayıp, evin haftalık alışverişini yapalım. Bu durumda yürümek pek de akıl karı bir iş değil. Ayrıca taşıyacağımız yükü de göz önüne alırsak, bir araç vazgeçilmez hale geliyor.

Daha büyük iÅŸler için bir araç kullanmanın daha kolay ve daha hızlı olduÄŸu çok açık. Ama arabanız varsa ona benzin doldurmayı, tekerleklerine doÄŸru hava basıncını yüklemeyi ve bunun gibi birçok iÅŸi bilmemiz gerekir. XML ailesiyle HTML’de yapamadığımız birçok ÅŸeyi yapabiliriz. Fakat tam anlamıyla bunu baÅŸarabilmemiz için beraber çalışan birçok teknolojinin kullanımını bilmemiz gerekir. Sonuçta bir öğrenme engeliyle karşı karşıyayız.

Bu noktada endişeye kapılmak doğal. Fakat unutmamak gerekir ki arabayı kullanmak için yürüyen aksamın direksiyona nasıl bağlandığı, hareketin tekerleklere nasıl iletildiği, karbüratörün ne işe yaradığı gibi konularda uzman olmaya gerek yok.

Kolayca görülüyor ki eğer webdeki işimiz küçük ve dar kapsamlıysa, HTML kullanmak daha kolay ve daha ucuzdur. Fazla ayrıntı bilmeye ve kafamızı karmaşık teknolojilere yormaya gerek yok. Fakat eğer biraz deneyimli bir kullanıcıysak ve yapacağımız işte HTML yetersiz kalıyorsa, XML kullanmak kaçınılmaz hale geliyor. Üstelik örnekte de görüldüğü gibi, bunun için küçük bir miktar daha bilgi bilmek gerekliyken işin fazla ayrıntısına girmek gerekmiyor.

Åžimdi iÅŸin teknik ayrıntılarına girebiliriz. “Neden XML?” sorusuna akla gelen ilk cevap “insanlar arasındaki iletiÅŸimi kolaylaÅŸtırmak” olabilir. Fakat dikkatlice düşündüğümüzde insanlar telefon, yazışma gibi iletiÅŸim araçları varken neden köşeli parantezler arasındaki etiketleri kullanmak istesin ki? Bu noktada cevabımız son halini alıyor: “Asıl amaç bilgisayarlar arasındaki iletiÅŸimin iyileÅŸtirilmesini saÄŸlanmak.” Biraz daha açacak olursak XML’in asıl kolaylığı insanların, iki bilgisayarın arasındaki iletiÅŸimi daha kolay anlayabilmesini saÄŸlamaktır.

XML bilgisayarların daha iyi haberleşmesine iki yoldan katkıda bulunur:

• İçeriÄŸi gösterimden ayırır. (HTML – XHTML)
• Uygulamalar arasında bilginin doÄŸrudan geçiÅŸini saÄŸlar.

Åžimdi de XML’in diÄŸer yararlarını madde madde inceleyelim.

Yalınlık: XML’de kodlanan bilgilerin okunması ve anlaşılması kolaydır çünkü doÄŸal dile yakın anlamlı etiketler insanlar tarafından daha kolay anlaşılır. Ayrıca bu etiketler bilgisayarlar tarafından da kolayca iÅŸlenebilirler.

Açıklık: XML W3C standartıdır ve yazılım liderleri tarafından da onaylanmıştır.

Genişleyebilirlik: Sabit bir etiketler kümesi bulunmaz. Yeni etiketler istenildiğinde yaratılabilir.

Kendi kendini tanımlama: Alışılagelmiş veri tabanlarında ; veri kayıtları , veri tabanı sorumlusu tarafından kurulan şemalara ihtiyaç duyar. XML belgeleri bu tür tanımlamalara ihtiyaç duymadan saklanabilir çünkü XML etiket ve özelliklerden oluşan meta veriler içerir.

Makine tarafından anlaşılabilen bağlam bilgisi içerir: Etiketler, özellikler (attributes) ve eleman(element) yapıları; içerik anlamını yorumlamada, etkin arama motorlarında yeni olasılıklar oluşturmada, akıllı veri işlemede (data mining) vb. bağlam bilgisi sağlar. Bağlam bilgisinin değerlendirilmesinin neredeyse imkansız olduğu HTML veya düz metine göre bu büyük bir avantajdır.

ÖrneÄŸin, Chip isimli isimli birini aramak için ‘chip’ kelimesiyle arama yaptığınızda karşınıza chocolate chips, computer chips, ya da Chip gelebilir. EÄŸer isim ve adres kayıtları için tanımlanmış DTD’ler olsaydı, ‘chip’ kelimesiyle yapılan aramalar çok daha kesin ve doÄŸru sonuÅŸlar verebilirdi.

İçeriÄŸi gösterimden ayırır: XML etiketleri, gösterimi deÄŸil anlamı tanımlar. HTML’in parolası :”Nasıl göründüğünü biliyorum!” iken XML’inki : “Ne anlama geldiÄŸini biliyorum, öyleyse bana nasıl görünmesi gerektiÄŸini söyleyin!”. Bir XML belgesinin görünüşü ve anlattıkları XSL “style sheet”leri tarafından oluÅŸturulur. Bu, bir belgenin görünüşünün, belgenin baÄŸlamına dokunmadan deÄŸiÅŸtirilebilmesini saÄŸlar. Aynı içerikten ortaya çıkan birçok görünüm veya sunum kolayca oluÅŸturulabilir.

Farklı XSL dönüştürücüler ile aynı XML belgesinden farklı görünüşte sunumlar elde edilmesi bunun en büyük örneğidir.

Çokdilli belgeleri ve “Unicode”u destekler: Uygulamaların uluslararası hale getirilmesinde çok önemli bir özellik.

Verilerin kümelenmesi ve karşılaştırılmasını kolaylaştırır: XML belgelerindeki ağaç yapısı, belgelerin eleman eleman etkin bir biçimde kümelenmesine ve karşılaştırılmasına izin verir.

Çoklu veri türleriyle kullanılabilir: XML belgeleri, çoklu ortam verilerinden (resim, ses, video) aktif bileşenlere (Java Appletleri, ActiveX) kadar birçok olası veri türünü içerebilir.

Varolan veri türleriyle kullanılabilir: Varolan kütük dizgeleri veya iliÅŸkisel veri tabanlarının XML’le iliÅŸkilendirilmesi çok kolaydır.

Dağıtılmış veriler için tek bir sunucudan görünüş saÄŸlar: XML’in eriÅŸim saÄŸladığı birçok verinin öğeleri deÄŸiÅŸik veri tabanları içerisinde bulunabilir -örneÄŸin Internet gibi-. XML ile bu verilere tek bir sunucu üzerinden bakılıyormuÅŸ gibi eriÅŸilebilir.

Sektör tarafından hızlıca benimsenmiÅŸtir: IBM, Sun, Microsoft, Netscape, SAP gibi birçok kurum XML’i destekliyor. Microsoft ve SAP ÅŸimdiden ileride çıkaracakları programların sürümlerine XML desteÄŸi koyuyorlar. Microsoft ve Netscape’in web tarayıcıları
XML’i destekliyor.

Örneklerle XML Sözdizimi , Özellik ve Eleman Kullanımı

XML sözdizimi , basit birkaç kuraldan oluşmuştur bu yüzden de kullanılması ve öğrenilmesi kolaydır. Önceden de incelediğimiz basit XML belgesine tekrar göz atalım:


<?xml version=”1.0”?>
<not>
<kime>Birisine</kime>
<kimden>Benden</kimden>
<başlık>Kutlama</başlık>
<ileti>Doğum Günün Kutlu Olsun!!</ileti>
</not>

Dökümanın ilk satırında XML bildirimine yer verilir ve hangi XML sürümünü kullandığımız belirlenir. Bu satırdan sonra XML belgesinde DTD bildirimi de yer alabilir. Bir sonraki satırda ise belgenin kök(root) elemanı açıklanıyor. Bu belgenin kök elemanı <not>. XML belgelerinde ilk sırada açıklanan eleman kök eleman olarak adlandırılır ve ondan sonra gelen elemanlar XML sıradüzenine uyacak şekilde kök elemana bağlı olmak durumundadırlar.

XML belgelerinin yapısı “kök” sözcüğünden de anlaşılabileceÄŸi gibi aÄŸaç yapısına benzer. Bundan sonraki 4 satırda ise 4 çocuk(child) eleman açıklanmıştır. Bu çocuk elemanlar birbirleriyle kardeÅŸtir(sibling). Bunun yanında kök eleman da çocuk elemanlarının atası (parent) durumundadır. Dikkat edilecek olursa kök,çocuk ve kardeÅŸ elemanlar son derece sıradüzensel , içiçe geçmemiÅŸ bir yapı sergiliyor.

Bu sıradüzene göre örneğimizde <not> kök eleman. <kime>,<kimden>,<başlık> ve <ileti> ise <not> un çocuğudur ve dolayısıyla <not> bu dört elemanın atası durumundadır. Bu dört eleman aynı zamanda birbirleriyle kardeştir de. <kime> , <kimde> vs. Elemanlarının da kendi çocuklarına sahip olabileceklerini unutmamak gerekir.

DiÄŸer bir özellik ise XML’in baÅŸlangıç ve bitiÅŸ etiketi kurallarına sıkı sıkıya baÄŸlı olmasıdır. HTML’de örneÄŸin <p> ile baÅŸlamamız gereken bir paragrafı </p> etiketiyle kapatmasak bile tarayıcı çoÄŸu zaman bu hatayı gözardı ederek HTML belgesini görüntüler. XML bunu kesinlikle kabul etmez. Örnekte de görüldüğü gibi açılan bütün etiketler kapatılmıştır. Bu XML’in kendisinden türetilecek dillere(ör. XHTML) de geçireceÄŸi bir özelliÄŸidir.

XML’in bu nitelikte bir baÅŸka özelliÄŸi de büyük/küçük harf duyarlı (case-sensitive) olmasıdır. Bu baÄŸlamda bir elemanın baÅŸlangıç etiketinin bitiÅŸ etiketiyle tamamen aynı yazılışta olması gerekir. Bu doÄŸrultuda bir örnek vermek gerekirse:

<yazar>Falan Filan</YAZAR>

Hatalı bir sözdizimdir. Doğrusu ise:

<YAZAR>Falan Filan</YAZAR>
veya
<yazar>Falan Filan</yazar>
şeklinde olmalıdır.

XML sıradüzensel bir sözdizime sahiptir ve bunu bozacak sözdizimleri hatalı olarak niteler. Örnek olarak aşağıdaki HTML koduna bakalım:

<b><i>Kalın ve eğik metin</b></i>

Görüldüğü üzere önce baÅŸlatılan kalınlık niteliÄŸi sonra baÅŸlatılan eÄŸiklik niteliÄŸinden önce kapatılmış. Bu ÅŸekilde sıradüzenselliÄŸi bozan sözdizimler XML’de bulunmaz. Bu kodu XML sözdizimiyle denetlediÄŸimizi varsayalım:

<b><i>Kalın ve eğik metin</i></b>

Bu haliyle kod, XML sözdizimine uygundur. Daha önceden değinilen kök-çocuk ilişkisine sadık kalınmış ve XML sözdizimi açısından geçerli bir kod elde edilmiştir.

XML sözdiziminin temel taşı olan elemanların(element) isimlendirilmesinde uyulması gereken kurallar şunlardır:
• İsimler harf,sayı ya da diÄŸer karakterleri içerebilir.
• İsimler bir sayı veya _ (alt çizgi) karakteri ile baÅŸlamamalıdır.
• İsimler “xml“(ya da XML veya Xml) ÅŸeklinde baÅŸlamamalıdır
• İsimler boÅŸluk içermemelidir.

Şimdi de özellik(attribute) değerlerinin XML sözdizimi içerisinde uyması gereken kuralları inceleyelim. Baştaki örneğimize geri döndüğümüzde:

<?xml version=”1.0”?>
<not tarih=”20/02/2002”>
<kime>Birisine</kime>
<kimden>Benden</kimden>
<başlık>İlginç</başlık>
<ileti>Bugün çok simetrik bir gün!!</ileti>
</not>

XML elemanları özelliklere sahip olabiliriler. Bu özelliklerin bir ismi ve ona atadığımız bir deÄŸeri vardır. Tabii bazı zamanlar özelliklere deÄŸer atayamayabiliriz. Örnekte de görüldüğü üzere <not> elemanı “tarih” özelliÄŸine sahip. Dikkat edilecek olursa “=” ile “tarih”e atanan deÄŸer çif tırnak içine alınmış. Bu XML sözdiziminin bir özelliÄŸidir. Özelliklere deÄŸerleri , eleman etiketinin içerisinde “=” kullanılarak çift tırnak içerisinde atılmalıdır. Örnekte de “tarih” özelliÄŸine 20/02/2002 deÄŸeri atanmıştır.

Gördüğümüz gibi özellikler elemanlar için ek bilgilerin tanımlanmasına olanak veren yapı birimleridir. Özellik değerini de ekleyerek ilk baştaki belgemizi biraz daha fazla bilgi tutabilecek hale getirdik. Şimdi bunu başka yollardan yapmaya çalışalım:

<?xml version=”1.0”?>
<not>
<tarih>20/02/2002</tarih>
<kime>Birisine</kime>
<kimden>Benden</kimden>
<başlık>İlginç</başlık>
<ileti>Bugün çok simetrik bir gün!!</ileti>
</not>

Görüldüğü gibi az önce <not> elemanının bir özelliği olan tarih bilgisi bu örnek bu elemanın bir çocuğu halinde karşımıza çıkıyor. Bu şekilde tutulan verinin niteliği değişmiyor ama tutulma şekli değişiyor. Ayrıca bu örneği en baştaki örnekle karşılaştırdığımızda yeni bir nitlik olan <tarih> in belgenin yapısına hiçbir zarar vermeden belgeye eklenebildiğini görüyoruz. Şimdi belgeyi biraz daha dğiştirelim:


<?xml version=”1.0”?>
<not>
<tarih>
<gun>20</gun>
<ay>02</ay>
<yil>2002</yil>
</tarih>
<kime>Birisine</kime>
<kimden>Benden</kimden>
<başlık>İlginç</başlık>
<ileti>Bugün çok simetrik bir gün!!</ileti>
</not>

Elimizdeki <tarih> elemanını , alt elemanlara ayırarak parçaladık. Bu şekilde elimizdeki veriyi daha etkili bir yöntemle saklamış oluyoruz. Üstelik bu çeşit bir kullanım ile hata kontrolü ve modülerlik gibi konularda da avantajlar elde etmiş oluyoruz.

Görüldüğü gibi XML sözdizimi açısından pek esnek olmamakla birlikte verinin saklanması ve temsili açısından son derece esnek bir yapıya sahip. Bu da ona HTML’in aksine daha teknik ve kapsamlı konularda daha etkili bir biçimde kullanılma olanağı sunuyor.

DTD’ler

a) Document Type Declaration (DTD)

XML belgelerinde kullanılan etiketlerin tanımının önceden yapılmış olması gereklidir. Etiketler kiÅŸiden kiÅŸiye farklı olabilir. Bu yüzden bir etiketin, XML kütüğü içerisindeki iÅŸlevini açıklayan tanımların bulunduÄŸu bir DTD (Document Type Definition)’nin varlığına ihtiyaç duyulur. Bu DTD, XML kütüğünün içinde (içsel altküme), dışında (dışsal altküme (genellikle .dtd uzantılı) ), ya da bir kısmı içinde bir kısmı dışında olabilir.

İşte bu DTD’lerin gerek içsel ya da dışsal olmasını, gerekse dışsal olması durumunda DTD’nin adresini XML belgesine sunmak gerekir. Bu amaçla, DTD(Document Type Declaration) adı verilen bildirim sözcükleri XML belgesine eklenir. Bu yapıyı bir yönüyle, programlarımıza kitaplık kütüklerinin dahil edilmesine benzetebiliriz. DTD’ler bir XML belgesinin giriÅŸinde yer alır.

Definition ile declaration arasındaki ayrımı tam olarak belirtmek için ÅŸunu söyleyebiliriz: Bir XML belgesinde yeralan declaration, o XML belgesiyle iliÅŸikli olan Definiton’ı XML belgesine tanıtmakta kullanılır. Örnek vermek gerekirse:

<?XML version=”1.0”?>
<!DOCTYPE kutlama SYSTEM “kutlama.dtd”>
<kutlama>
<kime> Birisne</kime>
<ileti> Doğum Günün Kutlu Olsun </ileti>
</kutlama>

Burada 2. satırın(declaration) eklenmesi ile, “kutlama” adındaki yapımızın kökünün “kutlama.dtd” isimli dosya içerisinde bulunduÄŸunu XML Parser’a anlatıyoruz.

EÄŸer <kutlama> , <kime> , <ileti> elemanlarının hepsi gerekli elemanlarsa ve “Definition”da yer alıyorsa “kutlama.dtd” şöyle görünecekti :

<!ELEMENT kutlama(kime,ileti)>
<!ELEMENT kime (#PCDATA)>
<!ELEMENT ileti (#PCDATA)>

EÄŸer “Declaration” kullanmasaydık ve “Definition”larımızı XML belgesinin içine gömmeye kalksaydık , bunu belgeye ÅŸu satırları ekleyerek saÄŸlamak zorundaydık.

<!DOCTYPE kutlama[
<!ELEMENT kutlama(kime,ileti)>
<!ELEMENT kime (#PCDATA)>
<!ELEMENT ileti (#PCDATA)>
]>


b) Document Type Definition


XML gerçekten de çok esnek bir dildir. Bir XML belgesinde istediğimiz özelliklere sahip herhangi bir elementi dilediğimiz şekilde kullanabiliyoruz. Bu, çok büyük bir güç getirmekle birlikte büyük bir düzensizlik ve dağınıklık potansiyeline de sahiptir.

Hatırlayacağımız gibi XML teknolojisinin öncelikli amacı iki bilgisayar arasındaki bilgi alışverişini uygun biçimde sağlamaktı. Anlaşılacağı üzere bu bilgi iletişimindeki ufak bir dağınıklık kilitlenmelere ve verilerin güvensiz bir biçimde değişimine sebep olabilir.

Çok sayıda eleman içeren bir XML uygulamasının kilitlenmesini kontrol altına alabilmek için, XML belgelerinde yer alabilecek bazı mantıksal ve pratik kısıtlar koyarak, bu esnekliği dizginlemek akıllıca olacaktır.

Bir DTD, XML 1.0 ‘da tanımlanmış XML’i kısıtlama mekanizmasıdır. Bir DTD, kendisini kullanan XML belgesinin örneklerinin yapısını kısıtlar veya tanımlar.

İyi yazılmış bir DTD, kullanılan yapıdan türemiÅŸ bir XML belgesinden, XML iÅŸleyicisinin çıkaracağı aykırı durumların tanımlanmasını saÄŸlar. EÄŸer belge içerisinde birkaç kez geçen bir eleman, DTD içinde yoksa, uygun bir düzeltme iÅŸleminin gerçekleÅŸmesi için uyarı oluÅŸturulur. Bir baÅŸka hata olasılığı ise DTD’de bulunan bir verinin XML belgesinde hiç geçmemesidir.

ÖrneÄŸin DTD’miz bu ÅŸekilde olsun.

<!ELEMENT kutlama(kime,ileti,kimden)>
<!ELEMENT kime (#PCDATA)>
<!ELEMENT ileti (#PCDATA)>
<!ELEMENT kimden (#PCDATA)>

Bu DTD’yi kullanan XML belgesi de şöyle olsun :

<?XML version=”1.0”?>
<!DOCTYPE kutlama SYSTEM “kutlama.dtd”>
<tebrik>
<kime> Birisne</kime>
<ileti> Doğum Günün Kutlu Olsun </ileti>
</tebrik>

Bu örnekte, <tebrik> elemanı, XML belgesinde bulunmasına rağmen, DTD içinde tanımlı değil. Bu bize XML işleyicisinden hata gelmesine yol açar. Diğer hata ise, DTD içinde tanımanmış <kimden> elemanı, XML belgesinde kullanılmamış. Bu da bir başka hatadır.

DTD’ler, XML belgelerine modülerlik katar. ÖrneÄŸin elimizde çok büyük bir XML kütüğü olduÄŸunu farzedelim. EÄŸer DTD olmazsa bu belgeye göz atmak çok zor ve sıkıcı olabilir. Bu ÅŸekilde, belgenin anlamıyla ilgisiz, uzun metinler içerisinde belgenin genel yapısı hakkında fikir edinmekle uÄŸraşılır. Bunun yerine iyi hazırlanmış bir DTD’yi kısa bir süre inceleyerek çok daha etkin bir görüşe sahip olabiliriz. Sonuç olarak bir DTD, ele alınan XML belgesi hakkında bize açık ve hızlı bir resim çizer.

Ayrıca, hazırlanan XML belgelerinin amacı hakkında da kesin bir fikir sahibi olabilmek için DTD’ler yararlı olacaktır.

XML’in yazılış amacını öğrenmek ve içeriÄŸini anlamak önemlidir. Bunun için, XML belgesiyle DTD’sinin uyumlu olması gerekir. İşte bu uyumu denetlenmek amacıyla “parser” adı verilen araçlar kullanılır.

Bir DTD Yaratmak

Bir DTD oluÅŸturmak için öncelikle XML’in temel özelliklerini bilmeliyiz. Bir DOCTYPE bildirimi, DTD ile XML belgesini birbirine baÄŸlar. DOCTYPE bildirisi XML belgesinin giriÅŸine yazılır ve herhangi bir elemandan önce gelir. Bu bildiriden önce XML bildirisi yer alır. Bundan baÅŸka iÅŸleyici komutları, yorum satırları da olabilir.
.
Diyelim ki genel bir kutlama mesajını, XML kullanarak geliştirmek istiyoruz. Hangi yapıları tanımlamaya ihtiyacımız var? İçinde <ileti> ve <kime> elemanlarını bulunduran <kutlama> elemanına ihtiyacımız var. Tanımladığımız <kime> elemanı ilk çocuk olmalıdır ve <ileti> elementi onu izlemelidir. Bu iki elementin babası <kutlama> olmalıdır. <ileti> ve <kime>, başka elementler barındırmamalı ve sadece metin (karakter) bilgisi içerebilir. Karakter bilgisi, XML işlemcisi tarafından parse edileceği için, Parsed Character DATA anlamına gelen PCDATA sözcüğüyle ifade edilir.


DTD’demizi iç DTD olarak tanımlarsak ÅŸu kodu yazmalıyız:

<!DOCTYPE kutlama[
<!ELEMENT kutlama(kime,ileti)>
<!ELEMENT kime (#PCDATA)>
<!ELEMENT ileti (#PCDATA)>
]>

Åžimdi bu DTD’yi satır satır inceleyelim.

<!DOCTYPE kutlama [
Bu satırda <kutlama> adında bir kök elementi bulunan DOCTYPE bildirisi yapılıyor. Köşeli sol parantez ([) , bir iç DTD alt kümesinin başladığını gösterir. Eğer bir dış DTD de bulunsaydı, bu paramtezden önce dış DTD referansı yer alacaktı.

<!ELEMENT kutlama (kime,ileti)>
Bu satır ise <kutlama> elementinin, bir <kime> elementi ve bir de <ileti> elementi içerdiğini, bunlardan sadece birer tane olabilceğini ve <kime> elementinin <ileti> elementinde önce gelmesi gerektiğini anlatıyor.

Şimdi sözdizime biraz daha yakından bakalım :

Parantezler <kutlama> elementinin izin verilen içeriÄŸini tutar. Element isimleri arasındaki “virgül” <kime> ‘nin <ileti> ‘den önce gelmesi gerektiÄŸini anlatır.

<!ELEMENT kime (#PCDATA)>
<!ELEMENT ileti (#PCDATA)>
Bu satırlar bize <kime> ve <ileti> elementlerinin her birinin “parsed character” verisi tuttuÄŸunu fakat herhangi bir çocuk element içermediÄŸini belirtir.

“]>” satırı, DOCTYPE bildirisinin iç alt kümesinin tamamlandığını belirtir.

Uygulamada iç DTD’ler pek kullanılmaz. XML belgesine eklenen her DTD saklama ihtiyaçları doÄŸurur. Çok sayıdaki XML belgelerinin temel aldığı bir dış DTD’nin bakımı bütün XML belgelerindeki iç DTD’lerin bakımından daha kolaydır. Dikkat edilecek olursa, iç DTD’deki <!ELEMENT ‘le baÅŸlayan satırlar , XML belgesi içinde bir eleman bildirimi yapacağımızı belirtmektir.

Daha geniş bir örnekle yolumuza devam edelim :

<?xml version=’1.0’?>
<!DOCTYPE kitap SYSTEM “kitapyapisi.dtd”>
<kitap>
<isim>Bazı Yemek Tarifleri</isim>
<yazarlar>
<yazar>Falan Filan</yazar>
<yazar>Filankes Mevankes</yazar>
<yazar>Adamın Biri</yazar>
</yazarlar>
<onsoz>
</onsoz>
<yayınevi>
<!—Yayınevi hakkında ayrıntılar buraya yazılır-->
</yayınevi>
<isbn>
<!-- ISBN numarası buraya yazılır -->
</isbn>
<bolumler>
<!--baslangıc bolumleri -->
<bolum>
<bno>9
</bno>
<badi>Etli Yemekler
</badi>
<!--Diğer konu adları -->
<konu>İçli Köfte
</konu>
<!--Başka konu adları -->
</bolum>
<!--Sonraki bölümler -->
</bolumler>
<ekler>
<!—DiÄŸer ekler -->
<ek> Lavaş yapımı </ek>
</ekler>
<dizin>
<!—Buraya dizin yazılabilir -->
</dizin>
</kitap>

<kitap> elementinin , element bildirimi ÅŸu ÅŸekildedir :

<!ELEMENT kitap (isim,yazarlar*,onsoz?,yayınevi,isbn?,
bolumler+,ekler*,dizin?)>

isim yerine geçebilecek herhangi bir sembol ne eksik ne fazla sadece bir kez görünmeli , <title> elementinin bildirimi şu şekildedir :

<!ELEMENT title (#PCDATA)>

Åžimdi bir bolum’ü nasıl tanımladığımıza bakalım:

Her bölüm’ün sadece bir numarası ve bir baÅŸlığı olması gerekir. Bunula beraber konu’ların sayısı birden fazla olabilir. Böylece konu elementinin şöyle tanımlayabiliriz:

<!ELEMENT bolum (bno,badi,konu+)>

Bu tanımla, bno ve badi elemanı yalnızca bir kez geçmesi gerekirken , konu elemanı birden çok kez görünebilir.

Sırada <yazarlar> elemanı var. Her kitabın bir yazarı vardır. Fakat bazı kitapların birden çok yazarı da olabilir. Birden çok yazar olması ihtimalini ve hiç yazar olmaması ihtimalini göz önünde bulundurmak için aşağıdaki tanım yapılır:

<!ELEMENT yazarlar(yazar*)>

Anlaşıldığı üzere, bildiri <yazarlar> elemanını tanımlıyor ve bu elemanın <yazar> adlı hiç veya pekçok özelliğe sahip olabilecek bir çocuk elemanına sahip olduğunu * kullanarak tanımlıyor.

Sıradaki eleman <onsoz>, dikkat edecek olursak bu elemanın sonunda bir “?” olduÄŸunu görürüz. Nesnenin gerçekteki özelliklerine bakılırsa, bir kitabın bir önsöz bölümü olur ya da olmaz. Veya biz bunu veri tabanımıza katmak isteriz ya da istemeyiz. Bu durumda elemanın belge içinde bulunma sayısı 0 veya 1 olabilir. İşte baÅŸta söz ettiÄŸimiz “?” nesnenin bu özelliÄŸini belirlemeye yarar.

Yaptığımız açıklamalar sonucunda verdiÄŸimiz XML belgesinin “kitapyapisi.dtd” isimli dış DTD’si ÅŸu ÅŸekilde görülecektir :

<!ELEMENT kitap (isim,yazarlar*,onsoz?,yayınevi,isbn?,
bolumler+,ekler*,dizin?)>
<!ELEMENT isim (#PCDATA)>
<!ELEMENT yazarlar (yazar*)>
<!ELEMENT yazar (#PCDATA)>
<!ELEMENT onsoz (#PCDATA)>
<!ELEMENT yayınevi (#PCDATA)>
<!ELEMENT isbn (#PCDATA)>
<!ELEMENT bolumler (bolum+)>
<!ELEMENT bolum (bno,badi,konu+)>
<!ELEMENT bno (#PCDATA)>
<!ELEMENT badi (#PCDATA)>
<!ELEMENT konu (#PCDATA)>
<!ELEMENT ekler (ek*)>
<!ELEMENT ek (#PCDATA)>
<!ELEMENT dizin (#PCDATA)>

Bu örneklerde gördüğümüz PCDATA, XML iÅŸleyicisi tarafından “parse” edilen karakter verilerdir. “XML parser”ı tarafından hiç bir “parse” iÅŸleminin yapılmadığı CDATA gibi bölümlerde (section) bulunur.
PCDATA verisinin yetersiz kaldığı yön ise, hiç bir zaman tür kontrolünün yapılamamasıdır. Bu belge tabanlı XML ile ilgilendiğimizde büyük bir eksikliktir.

Åžimdiye kadar DTD’lerin eleman tanımladığı örneklere baktık. Bunun dışında DTD’de bir eleman için atanabilir özellikleri de tanımlayabiliriz. Åžu XML örneÄŸinin ele alalım:

<?xml version=’1.0’?>
<belgeciktisi>
<kagitrengi renk=”beyaz”>kaliteli kuÅŸe kağıt
</kagitrengi>
<murkrengi renk=”siyah”> Süper ÅŸahane mürekkep
</murkrengi>
</belgeciktisi>

Burada , <kagitrengi> ve <murkrengi> elemanları mevcuttur ve her birinin renk özelliği vardır. Eğer sadece siyah-beyaz kağıt ve siyah-beyaz mürekkep kullancağımız gözönüne alınırsa özellik bildirimimiz şu şekilde olacaktır :

<!ELEMENT belgeciktisi (kagitrengi,murkrengi)>
<!ELEMENT kagitrengi (#PCDATA)>
<!ATTLIST kagitrengi renk (siyah|beyaz) #REQUIRED>
<!ELEMENT murkrengi (#PCDATA)>
<!ATTLIST murkrengi renk (siyah|beyaz) #REQUIRED>

Söz dizimden de görüldüğü gibi, renk özelliği siyah-beyaz değerlerinden birini almak zorundadır(#REQUIRED).

DTD Yapıları :

Şimdiye kadar sadece ELEMENT ve ATTLIST bildirirmlerine göz attık. Bu bölümde de mümkün olan bütün geçerli bildirimleri kısaca tanımlayacağız :

Dtd Yapısı | İşlevi

ELEMENT => XML eleman tipi bildirimi.

ATTLIST => Belirli bir ELEMENT tipine bağlanabilecek özelliklerin ve bu özelliklerin alabileceği değerlerin bildirimi.

ENTITY => Yeniden kullanılabilir içerik bildirimi

NOTATION => “Parse” edilmeyecek dış içeriÄŸin (örneÄŸin ikil ya da resim kütükleri) biçiminin bildirimi.

Özellikler(Attributes) İle Çalışmak

Şimdi bir DTD içinde özellik tanımlarken kullanabileceğimiz yapıları da gözden geçirelim. Özellikler, özellik bildirim listesi(attribute declaration list) denilen bir liste içinde aşağıda belirtilen şekilde tanımlanır:

<!ATTLIST ElementName AttrName AttrType Default>

Görüleceği gibi bir özellik; isim(AttrName), tip(AttrType) ve öndeğer(default) olmak üzere üç bileşenden oluşmaktadır.Bir özellik bildirimi sırasında kullanılabilecek olan dört öndeğeri vardır:

• #REQUIRED
• #IMPLIED
• #FIXED
• default

#REQUIRED değeri özelliğin eleman için mutlaka gerekli olduğunu belirtir. #IMPLIED değeri özelliğin seçimsel olduğunu ve eleman için kullanımının zorunlu olmadığını belirtir. #FIXED değeri özelliğe atanacak değerin sabit olacağını ve bunun da özelliği, bir bilginin sabit bir parçası durumuna getireceğini belirtir.

XML 10 tane farklı özellik tipini desteklemektedir:

• CDATA :Parse edilmemiÅŸ karakter verisi
• Enumerated :Bir dizi deÄŸer
• NOTATION TD içinde herhangi bir yerde tanımlanmış olan notasyon
• ENTITY: Dışsal bir binary entity
• ENTITIES Birden fazla dışsal binary entity ler
• ID : Biricik bir tanımlayıcı
• IDREF: DTD içinde tanımlanmış olan bir ID ye referans edilen deÄŸer
• IDREFS: DTD içinde birden fazla ID lere refere edilen deÄŸerler
• NMTOKEN: XML token deÄŸerlerini içeren isim
• NMTOKENS:XML tone karakterlerini içeren isim boÅŸlukları

“String Attribute”ları

“String attribute”lar CDATA tarafından gösterilen ve en çok kullanılan özellik tipidir. CDATA tipi özelliklerin bir metin “string”ini içereceÄŸini belirtir.AÅŸağıdaki örnekte CDATA tipi ile beraber oyuncu elementinin kullanılışı gösterilmiÅŸtir:

<!ATTLIST oyuncu takim CDATA #REQUIRED>

Bu örnekte oyuncu‘nun ait olduÄŸu takim, oyuncu elemanının bir özelliÄŸidir.Bu özellik, oyuncu elemanı için gerekli olan bir karakter verisi tipinde olmalıdır. Bu takim özelliÄŸini seçimsel hale getirmek isteseydik:

<!ATTLIST oyuncu takim CDATA #IMPLIED> şeklinde kullanmamız gerekirdi.

“Enumerated Attribute”lar

Bu tür özellikler daha önceden tanımlanmış bir metin dizisinin listesini içerirler. “Enumerated” tipi CDATA tipine benzemektedir ancak bu veri tipinde kabul edilebilir özellik deÄŸerleri, özellik listesi bildirimi içinde saÄŸlanmaktadır.Åžimdi, oyuncu elemanına “enumerated” bir özellik deÄŸeri olan pozisyon bilgisini de ekleyelim:

<!ATLIST oyuncu pozisyon (ortasaha | forvet | savunma | kaleci)
"ortasaha">

Bu örnekte pozisyon deÄŸerinden birini seçebilmekteyiz. EÄŸer hiçbir ÅŸey seçmezsek “default” deÄŸer olan “ortasaha” devreye girer.

Admin, 06.05.07


Konu ile ilgili haberler