<XML> Giris Dersi

      <XML> Giris Dersi

      XML Nedir?

      XML (Extensible Markup Language), veriyi belli bir yapida tanimlamak için kullanilan bir dildir. Bir verinin belli bir yapida olmasi, o veri içerisindeki bilginin gerektiginde kullanilabilir, degistirilebilir ve baska biçimlere dönüstürülebilir olmasini saglar.

      XML - Düz Metin Karsilastirmasi

      Diyelim ki saklamak istedigimiz veri bir sinavinin sorulari olsun. Sinavi düz metin (plain text) sekilde yazalim :

      Matematik Dersi 2. Ara Sinavi
      Soru 1 : Iki kere iki iki kaç eder?
      a) 22
      b) 3
      c) 4
      d) 5
      Soru 2 : Kendimi kendimden çikarsam kaç kalir?
      a) 1
      b) 2
      c) 0
      d) FD
      Bu metin bir insanin çok rahat okuyabilecegi ve anlayabilecegi bir biçimde yazilmistir. Ama bir bilgisayar programi bu metnin içindeki bilgileri okuyamaz. '1. sorunun ikinci sikki' gibi bir bilgiyi belge içerisinden nasil bulunabilecegini düsünelim. En basit yol metni satirlara bölmek ve 4. satiri almak, sonra da ilk bosliktan sonraki kismi okumaktir. Peki ya sinav adindan sonra bir bosluk eklenirse? Program bu kez yanlis satiri getirecektir. Ya 'b' sikkinda 'b' ile ')' arasina bir bosluk konursa? O zaman sayi yerine bir parantez elde edecegiz! Görüldügü gibi düz metin bir programin veri saklamasi ve erismesi için uygun bir biçim degildir.

      XML - Tablo Karsilastirmasi

      Geleneksel olarak veri tablolarda tutulur. Bir okuldaki ögrenciler

      123 Baris Manço
      234 Cem Karaca
      542 Edip Akbayram
      423 Ersen
      Tablo tarzi veriler düz bir dosya'da (flat file'da) saklanabilir. Her kayit bir satira konur ve bir kayitta her alan arasina bosluk, sekme (tab), noktali virgül (;), virgül(,) gibi ifadeler konur. Olmayan degerler bos geçilir. O zaman bir programin bunlari anlamasi kolay olur. Düz tablolarin gelismesiye veritabanlari dogmustur. Bir veri tabaninda tablolarda hangi alanlarin olacagi ve bu alanlarda bulunabilecek verinin (metin,tamsayi veya kesirli sayi gibi) tipleri belirenir. Bunlara erismek için SQL diye bir dil bulunmaktadir. 542 numarali ögrencinin adini ögrenmek için

      select Name form Student
      seklinde bir 'sorgu' (query) yazilir.

      Zamanla, tablo yapisinin çok kisitli oldugu ortaya çikmistir. Birbirine esdeger maddelerden olusmayan veriler için tablo yapisi yetmez. Basit bir liste bile tablolarla kolay olarak gösterilemez. Bir seyin altinda baska birsey, onun altinda da baska bir sey varsa tablolar gittikçe karmasiklasmaya, düzenli veri saklamak yerine giderek düzensizlesmeye baslar. Bir sinavin sorularini saklamayi düsünelim. Diyelim ki her sinavda bölümler, bölümlerde sorular, sorularda da siklar olsun. Bunun için nasil bir tablo yapmamiz gerekir? Bir tabloda hem soru hem de siklar saklanamaz. Bu yüzden birden çok sayida tablo yapmak zorunda kaliriz ver aralarinda 'iliski' (relation) kurmak gerekli hale gelir. Tablolar Sinav, Bölüm, Soru ve Sik seklinde dört adettir. Üstelik ayni sinavin sorusu bir tabloda sikki baska tablodayken, bir sinavin sorusu ile baska sinavin sorusu ayni tabloda yer alir. Bir sinavdaki sorulari ögrenmek için dört tablodan veri toplanmasi gerekir. Oysa XML ne kadar karmasik yapida olursa olsun veriyi bir arada tutar ve kolayca erisim saglar.

      XML-HTML Karsilastirmasi

      HTML'de veri belli bir yapi içerisinde bulunur. Ancak bu yapi bilginin gerektiginde erisilebilmesini degil, belli bir biçimde ekranda gösterilmesini saglar. HTML içerisindeki veriye kolay kolay erisemezsiniz. Bir yazinin basligini bir kisi H1 etiketini kullanarak gösterir, baska bir kisi H2. Hatta font'u büyük vererek de baslik verilebilir. Bu durumda HTML belgesi içinde belli bir verinin tam olarak nerde oldugunu bulmak mümkün degildir. HTML, veri (data) ile biçim (style)'in iç içe oldugu bir yapidir. Oysa XML'de veri ayri biçim ayri tutulabilir. Ayni biçimle bir çok veri gösterilebilirken ayni veri bri çok biçimde gösterilebilir.

      Basit bir XML örnegi

      Bir sinavi XML olarak belirmek için söyle bir yapi kurmak yeterlidir.

      <exam id="math-3">
      <title>Matematik Dersi 2. Ara Sinavi </title>
      <question number="1">
      <text>Iki kere iki iki kaç eder?</text>
      <option id="a">22</option>
      <option id="b">3</option>
      <option id="c">4</option>
      <option id="d">5</option>
      </question>
      <question number="2">
      <text>Kendimi kendimden çikarsam kaç kalir?</text>
      <option id="a">1</option>
      <option id="b">2</option>
      <option id="c">0</option>
      <option id="d">FD</option>
      </question>
      </exam>
      Burada veri belki daha çok yer kaplar ama artik herhangi bir veriye ulasmak çok basittir. Belki bir kisinin kendi yazigi bir programla bu belgeden veri almasi daha zordur ama en azindan araya bir sey eklenirse veya çikartilirsa program yanlis bilgiye erismez. Dahasi, bir XML belgesinden herhangi bir bilgiyi almak için çesitli olanaklar bulunaktadir. Programci her zaman kendisi bir sey yapmak zorunda kalmaz. Örnegin XPath'le ilk sorunun 2. sikkina erisim için

      /exam/question[number="1"]/option[id="1"]]
      yazmak yeterlidir. Ayni sekilde 2. sorunun metnine

      /exam/question[number="1"]/text
      seklinde erismek mümkündür. XPath olmadan da bir 'parser' programla XML belgesi programlar tarafindan okunmasi için 'document' nesnesine okunabilir.

      XML'in bütün espirisi bir veriyi metin olarak saklamak ve gerektiginde kolayca erismektir. Bu, göründügünden çok daha güçlü özelliktir.

      Temel XML Terimleri

      Her XML birimine document denir. Bu genellike bir dosyaya karsilik gelir. Document'ler element'lerden olusur. Element içerisinde belli bir bütünlük içeren veridir. Bir belge içerisinde herseyi içine alan bir ana element olmalidir ki buna 'root' veya da 'document element' denir. Her element attribute'lerden, child element'lerden ve text'lerden olusur. Attribute bir element hakkinda bilgi veren özelliklerdir. Text'se bir element'in içinde bulunan düz metindir. XML'de element, attribute ve text gibi birimlere node denir. Burda anlatilan yapi sadece XML için degil HTML ve JavaScript gibi DOM standardini destekleyen bütün yapilar için geçerlidir.

      Yazim kurallarina uygun olarak yazilmis bir belgeye 'well-formed' denir. Ancak bu içerisindeki verinin mantiksal olarak dogru yapida oldugu anlaminda gelmez. '<' ile baslayan bir etiketi '>' ile kapatmak gibi kurallara uymak anlamina gelir. Bir XML belgesinin mantikli bir veri içermesi durumunda 'valid' olur. Örnegin sorunun içine sik koymak yerine sikkin içine soru koyarsaniz veri yine well-formed olabilir, ama valid olmaz.

      Temel XML Teknolojileri

      XML'le birlikte bir çok dil ortaya çikmistir. Bir XML document'inde ne gibi element'ler ve attribute'ler oldugunu göstermek için kullanilan dile DTD denir. DTD ile benzer bir islev gören ancak element ve attributelerin degerlerinin geçerlilik kriterlerini belirleme gibi fazladan özellikleri bulunan XSchema diye bir dil daha vardir ki bu dil de aslinda XML'le yazilmistir. Bir XML document'inde belli bir dügümün konumunu belirtmek için XPath kullanilir. Bir XML'i baska bir biçime, yani baska bir XML'e, düz metne veya HTML'e dönüstürmek için XSL kullanilir. XSL'de bir XML dilidir. Bir XML belgesinden diger bir XML belgesine baglanti kurmak için XLink, ayni XML belgesinde bir dügümden digerine isaret etmek için XPointer kullanilir.

      XML'in çok fazla uygulamasi bunmaktadir. XHTML, HTML'in XML versiyonu; MathML matematiksel ifadeleri belirlemek için kullanilan bir dil; SVG iki boyutlu grafikleri metin yoluyla olusturmak için kullanilan bir dil, SMIL multimedya bilesenlerini birlikte kullanmak için kullanilan bir dildir. Ancak XML bunlarla sinrili degildir. Hatta her programcinin kendine bir veya daha fazla dil olusturabilir.



      XML Dosyasi Yaratmak

      Bir metin dosyasina '.xml' uzantisi verilip içerisine well-formed bir XML belgesi yazarsak herhangi bir uygulama tarafindan islenebilecek bir belge olusturmus oluruz. Yapilacak islemleri sirasiyla verirsek :

      Bir klasörde ('C:JavaXm' olsun) bir metin dosyasi yaratip (adi 'test' olsun) uzantisini 'xml' verin
      Bu dosyayi bir metin düzenleyicide (NotePad veya WordPad'te) açin
      Içerisine well-formed XML yazip kaydedin
      XML'i gösterebilen bir programda (örnegin Internet Expolorer) yarattiginiz belgeyi açin.
      Eger yarattiginiz XML dosyasi XML açabilen herhangi bir programda hatasiz açilabiliyorsa XML 'well-formed' demektir. Bu sekilde Java veya herhangi bir programlama ortamina ihtiyaç duymadan XML çalisabilirsiniz.

      XML Dosyasinin Içerigi

      Bir XML belgesinde olmasi gereken tek sey bir root element'tir. Yani

      <exam/>
      seklindeki ifade yeterlidir. Zorunlu olmamakla birlikte 'prolog' denilen giris kismi genellikle konur

      <?xml version="1.0" encoding="ISO-8859"?>
      Bir XML document'inde prolog 'version' ve encoding bilgisi içerebilir. Burada version XML'in versiyonudur, asagida kullanilan herhangi bir xml dilinin degil. Genellikle 1.0 konur. Zaten bu yazinin yazildigi tarih itibariyler sadece 1.1 versiyonu bulunmaktadir ki sadece az kullanilan dillerin karakter kodlamalarini desteklemek gibi çok önemli olmayan degisiklikler içermektedir. Belgelerdeki 'encoding' önemlidir, türkçe karakterle için türkçe encoding (ISO-8859-9)vemek gerekir. Encoding degeri olarak 'UTF-8' de verilebilir.

      Asagidaki metni bir dosyaya kaydedederseniz geçerli bir XML belgesi yazmis olursunuz.

      <exam id="math-3">
      <title>Matematik Dersi 2. Ara Sinavi </title>
      <question number="1">
      <text>Iki kere iki iki kaç eder?</text>
      <option id="a">22</option>
      <option id="b">3</option>
      <option id="c">4</option>
      <option id="d">5</option>
      </question>
      <question number="2">
      <text>Kendimi kendimden çikarsam kaç kalir?</text>
      <option id="a">1</option>
      <option id="b">2</option>
      <option id="c">0</option>
      <option id="d">FD</option>
      </question>
      </exam>


      Sorun olursa ö.m atin