XML kategorisi blog kayıtları
XML - 1

                Bu makalemiz ile XML  dökümanlarının .NET ile kullanımına değinen makale serimize başlıyor  olacağız. Öncelikle biraz XML Dökümanlarını tanıyalım. XML (Extensible Markup Language) dökümanları yazılım dünyasında artık hatırı sayılır bir yere sahip. Bunun nedenlerine inmek gerekirse, en başta okunabilirlik göze çarpıyor. Eskiden yazılım alanında veri transferi (entegrasyon) işlemleri için txt dosyalar sıklıkla kullanılırdı. Bu dosyaların kullanılmasının sebebi okuma ve yazma kolaylıklarıydı. Ama tabiki bazı sıkıntılarda yok değildi. Sıkıntıların en başında belirli bir formatın olmaması göze çarpıyordu. Ortaya bir mantık koyulmalı ve okuma-yazma işlemleri bu mantığa göre yapılmalıydı. Örnek vermek gerekirse :

 

Müşteri Adı                       Müşteri Soyadı                 Telefonu                             Adresi

Kemal                                  Sunal                                    0212 212 12 12           Şişli

Barış                                     Manço                                 0216 212 12 13          Kadıköy

Adile                                     Naşit                                     0212 212 12 14         Beşiktaş

Şener                                   Şen                                       0212 212 12 15          Nişantaşı

 

gibi bir verinin taşınması gerektiğinde txt döküman içerisinde bilgileri virgül(,) ile veya sabit boşluklarla dökümana yazardık. Dolayısıyla ookuma işlemide buna göre yapılırdı. Bu işlem sonucunda da okuma anında kaydırmalar, yanlış okumalar, Adı sütununu Adres sanmalar gibi problemler çıkardı. Neyse ki artık bu problemlerden ve çözümlerinde bahsetmemize gerek yok. Çünkü artık XML var J

Son yazdığım cümleden XML in hayatımıza yeni girdiği çıkartılmasın. J O halde biraz XML den ve bu sorunları nasıl ortadan kaldırdığını söyleyelim. Yukarıdaki veriyi biraz önce bahsettiğimiz sabit mantıklarla degil de hangi bilginin ne anlama geldiğini söylerek taşısak sanırım bir problem kalmayacağı konusunda hem fikiriz. Yani Kemal müşteri adıdır, Sunal ise müşteri soyadıdır şeklinde her bir kelime için size bilgi verilse sanırım okuma problemi yaşanmayacaktır. Hemen aklınıza ?iyi  güzel de biz her seferinde bunu bu şekilde bildirecekmiyiz, çok uğraşacağız o zaman? cümleleri gelecektir. Hemen konuya açıklık getirelim bir örnek üzerinden:

<Musteriler>

                <Musteri>

                               <Adi>Kemal</Adi>

                               <Soyadi>Sunal</Soyadi>

                               <Telefonu>0212 212 12 12</Telefonu>

                               <Adresi>Şişli</Adresi>

                </Musteri>

                <Musteri>

                               <Adi>Barış</Adi>

                               <Soyadi>Manço</Soyadi>

                               <Telefonu>0216 212 12 13</Telefonu>

                               <Adresi>Kadıköy</Adresi>

                </Musteri>

</Musteriler>

Yukarıdaki belgede çıplak gözle bakıldığında kabul etmemiz gereken bir mantık yok gibi görünüyor.Hangi verinin ne olduğu yukarıda belli ilk etapta karmaşık gibi görünse de yukarıdaki bilgi hem gözle hem de kod tarafından rahat bir şekilde okunaiblmektedir.  Günümüzde artık aktarım işlemlerinin config gibi ayar dosyalarının hepsi XML tabanında konuşmaya başlamıştır. Dolayısıyla XML artık bilinmesi zorunlu hale gelen bir yapıdır. XML in güçlü olmasında ki en büyük etkenlerden biri de text tabanlı olduğu için her ortam tarafından tanınabiliyor olmasıdır.

                XML i biraz daha detaylı incelemeye başlayalım. XML öncelikle veri işaretleme dilidir. Yani taşıdığı veriyi yukarıda görüldüğü gibi işaretlemek ile ilgilenir. Amacı sadece veriyi taşımaktır. Daha sonra ki makaleler de veriyi sunmakla ilgilenen HTML diline yakınlığından bahsediyor olacağız. Veriyi işaretlemek ne demek? Yukarıda ki şekile baktığınız da Kemal bir veridir. <Adi> ise bir etikettir ve amacı Kemal verisinin ne olduğunu anlatmaktır. Dolayısıyla Kemal verisinin bir isim olduğunu onu işaretliyerek anlatmakta. Diğer tüm etiketler üzerlerinde taşıdıkları veriyi işaretlemek ile meşguller. XML belgemizin en üstünde ki <Musteriler> şeklinde yazılmış olan elementi Root Element veya Root Level Element isimleri ile çağırıyoruz.

Kural -1 : Her XML belgesinde maksimum 1 adet Root Level Element bulunabilir. Aşağıdaki gibi bir döküman yanlış bir XML dökümanıdır.

                <Musteri>

                               <Adi></Adi>

                </Musteri>

                <Musteri>

                               <Adi></Adi>

                </Musteri>

                <Musteri>

                               <Adi></Adi>

                </Musteri>

Kural -2 : XML Belgeleri Case-Sensitive yapıya sahiptir, yani küçük büyük harf duyarlıdır. Aşağıdaki gibi bir XML elementi geçersizdir :

<Adi>Kemal</adi>

Kural -3 : XML dökümanlarında açılan her element bir kapanış elementine sahip olmalıdır :

<Adi>Kemal </Adi>       è Doğru

<Adi>Kemal                      è Yanlış

Kural -4 : XML dökümanlarında elementler açıldığı sıra ile kapatılmalıdır :

<Musteri><Adi>Kemal</Musteri></Adi>           èYanlış

<Musteri><Adi>Kemal</Adi></Musteri>           èDoğru

 

                XML dökümanlarında bu tip kurallar ve kolaylıklar dışında kullanılan bir diğer önemli nokta ise Attribute dediğimiz tanımlamalardır. Attribute elementleri birbirinden ayırmak için kullanılır. Bir örnek üzerinden bu konuya eğilelim :

<Musteriler>

                <Musteri Id=?1?>

                               <Adi>Kemal</Adi>

</Musteri>

<Musteri Id=?2?>

                <Adi>Şener</Adi>

</Musteri>

</Musteriler>

 

                Yukarıdaki XML içeriğinde Musteri elementlerinde gördüğünüz Id isimli bölüme ?Attribute? adını veriyoruz. Amaç musteri elementlerini birbirinden ayırmaktır ve makale serimizin devamında göreceğimiz XPATH konusunda çok işe yaradığını göreceğiz. Elementler üzerinde arama yaparken çok fazla işe yaradığı gerçektir.

Kural -5 : Bir element(etiket) içerisinde aynı isme sahip birden fazla Attribute olamaz, yani Musteri elementinde bir Id attribute daha oluşturamazsınız.

Kural -6 : Attribute degerleri çift tırnaklar arasında olmalıdır.

Kural -7 : Element isimleri rakam ya da noktalama işaretleri ile başlayamaz. ?xml? kelimesi ile başlayamaz. Boşluk içeremez.

Kural -8 : Elementlerin taşıdığı değerler içerisinde özel karakterleri olduğu gibi yazamasınız yani :

<Adi> Kemal <>&?? </Adi>

gibi bir element geçersizdir. Eğer element içerisinde bu karakterleri kullanmak istiyorsanız onların özel kodlarını tanıtmanız gerekmektedir.

Kod

işaret

Anlamı

&lt;

Küçüktür

&gt;

Büyüktür

&amp;

&

Ve

&apos;

?

Tek tırnak

&quot;

?

Çift tırnak

 

Son olarak XML belgelerinde ki dil ayarlarından bahsediyor olacağız. XML dökümanları içerisinde kullanılan karakterlerin hangi dil ile yorumlanması gerektiğini söyleyen satır her zaman XML dökümanlarının en üstünde yer alan XML Definition olarak adlandırdığımız satırdır.

<?xml version="1.0" encoding="utf-8" ?>

Genellikle yukarıda ki gibi yer alan satırın ismi XML definition olarak geçer. Amacı XML belgesinin içerisinde hangi encoding in kullanıldığını belirlemektir. ?<?xml version bölümü ? xml dökümanının hazırlandığı version numarasını bildirirken encoding bölümü xml belgesi içerisinde kullanılan karakterlerin hangi charset e dahil oldugunu bildirmektedir. XML döküman içerisinde türkçe karakterler kullanacaksanız encoding bildirimini aşağıdaki gibi yapmalısınız :

<?xml version="1.0? encoding="iso-8859-9" ?>

Bu arada XMl belgesinin bu satırında eğer Ctrl+Space yaparsanız Visual Studio tarafından sağlanan mükemmel bir yardım penceresi açılacak karşınıza yazmak yerine bu listeden karakter kodunu seçmeyi de tercih edebilirsiniz.

 

Yukarıda yer alan kurallar XML dökümanının Well-Formed olmasını sağlar. Daha açık bir ifade ile bu kurallara uymayan bir xml dökümanı well-formed degildir yani geçersizdir. IE gibi tarayıcılar tarafından görüntülenemezler.

Bu makalemizde Well-Formed XML dökümanı mantığı ile XML dökümanlarına giriş yapmış olduk bir sonraki makalemiz de XML konusunu biraz daha ilerleteceğiz. Bir sonraki makale de görüşmek üzere. Hepinize iyi çalışmalar