17 Ağustos 2007 Cuma

XML'i Öğrenmek

XML'i Öğrenmek


[Illustration: xml]


Özet:

Bu yazı, XML'in oldukça kısa bir tanıtımı olacaktır. Meta kedi Eddy, XML yazım polisi, ve bazı DTD'lerle tanışacaksınız. Endişelenmeyin, açıklayacağız ;-)

_________________ _________________ _________________



Giriş


2001 yazında, bazı LinuxFocus editörleri LSM sırasında Bordeaux'da biraraya geldiler. LSM'nin özel-ilgi-grubu dokümanlarındaki konuşmalar ve tartışmalar aynı konuyu işaret etmekteydi: XML. Uzun (ve eğlenceli) saatler, XML tam olarak nedir, ne için iyidir ve nasıl kullanılır sorularını açıklamaya yetti. Eğer ilgiliyseniz, bu makalenin de tartışmaya çalışacağı konular tam olarak bunlar olacaktır..


Egon Willighagen ve Jaime Villate'e beni XML'le tanıştırdıklarından dolayı teşekkür etmek istiyorum. Bu makale, bir şekilde Jaime'nin makalelerindeki bilgilere dayanmaktadır ve bunları aşağıdaki bağlantılarda bulabilirsiniz.



XML Nedir


Dokümantasyonla ilgilenen bizler, aşağı yukarı XML'in ne olduğunu biliyorduk. Her şeyden önce, sözdizimi HTML'e çok benzemekte ve o da SGML ve (yine) HTML gibi başka bir markup dili, değil mi? Doğru. Fakat daha fazlası var.
XML'in hemen hemen her şey için onu yararlı bir data formatı yapan bazı özellikleri var. Bir çok karmaşık şeyi açıklar gözükür, ve hala kolay okunurluğunu korur, ve programlar için ayrıştırılması kolaydır. Bu nasıl olabilir? Şimdi bu garip dili inceleyelim.


Eddy, meta kedisi


İlk önce, XML bir markup dilidir. Markup diliyle yazılan dökümanlar temel olarak iki şey içerir: veri, ve metaveri. Verinin tam olarak ne olduğunu biliyorsunuz, bundan sonra metaveriden ;) bahsedelim. Basitçe; metaveri verinin kendisine içerik veya anlam katan bir ek bilgidir. Basit bir örnek verirsek: bir cümle ele alalım 'Kedimin adı Eddy'dir'. Bir insan 'kedi'nin bir hayvan türünün, ve 'Eddy'nin de kedinin ismi olduğunu bilir.Fakat, bilgisayar programları, insan değildir ve bütün bunları bilemez.Bu yüzden bilgiye anlam katmak için metaveri kullanırız (Tabii ki XML sözdizimi ile!):



Benim kedi min adı Eddydir.


Şimdi bir bilgisayar bile 'kedi'nin bir tür, ve 'Eddie'nin de onun ismi olduğunu bilir. Eğer bütün isimlerin mavi, bütün türlerin kırmızı yazıldığı bir döküman elde etmek istersek, XML bunu bizim için gerçekten çok kolay hale getirir. Aşağıdaki sonucu elde ederiz:


Benim kedimin adı Eddydir.


Şimdi teorik olarak, biçim bilgisini (bu durumda renkler) sitil dosyası denilen ayrı bir dosyaya koyabiliriz. Bunu yaptığımızda, biçim bilgisini içerikten ayırmış oluruz, Holy Grail'in Web Tasarımı TM'de bahsettiği gibi. Şimdiye kadar özel hiçbirşey yapmadık, metaveri eklemek markup dillerinin tasarım nedenidir. Öyleyse XML'i bu kadar özel yapan nedir?


Sözdizimi Polisi


Herşeyden önce, XML çok kesin bir sözdizimine sahiptir. Örneğin, XML'de her bir kapanış ine sahiptir. [ Not: Aralarında hiçbirşey olmadığında yazmak çok anlamsız olacağından de yazabilirsiniz ve hayatınızdan birkaç dakikayı tasarruf etmiş olursunuz.]
Bir başka kural da etiketleri karıştıramazsınız. Etiketleri açtığınız sıranın ters sırasında kapatmak zorundasınız. Şunun gibi birşey geçerli değildir:


Koyu yazı Koyu ve italik yazı italik yazı


Sözdizimi kuralları etiketini etiketinden önce kapatmamız gerektiğini söyler.
Ve dikkat, XML dökümanındaki her eleman etiketler arasında olmalıdır (en dıştaki iki etiket hariç tabii!). Bu nedenle, üstteki örnekte bir cümlenin çevresine etiketleri koyduk. Bunlar olmadan, cümledeki bazı sözcükler etiketler arasında olmayacaktı, ve bu da, bir çok şey gibi XML sözdizimi polisini gerçekten çok kızdıracaktı.
Mozilla screenshot


Mozilla'nın sözdizimi polisi iş başında...

Fakat, güçlü bir polis gücünün avantajları vardır: düzeni sağlarlar. XML çok kesin sözdizimi kurallarına sahip olduğundan, programlar tarafından okunması çok kolay olur. Ayrıca XML dökümanlarındaki bilgiler oldukça yapısaldır, bu da insanlar tarafından okunup yazılmasını kolaylaştırır.
XML'in 'teorik' varlıklarının pratikte çok da fark edilmediği not edilmelidir. Örneğin, en güncel XML ayrıştırıcıları hızlı olmaktan çok uzaktır ve genellikle çok büyüktür. Bu yüzden görünen odur ki XML'in yazılım tarafından okunması çok kolay değildir. Burada şunu da söyleyelim ki sadece yapabildiğiniz için *herşeyi* XML'de yapmak hiç de iyi bir fikir değildir. İçinde birçok tarama yapmanız gereken dökümanlarda veya gerçekten çok büyük dökümanlara sahip olduğunuz uygulamalarda XML genellikle doğru seçim değildir. Fakat bu, bu durumlar için XML'i kullanmanın imkansız olduğu anlamına gelmez.
XML'in gücünü, aynı zamanda yavaşlığını gösteren güzel bir örnek, içinde veri tabanı yazabileceğiniz gerçeğidir. (bir de HTML'le deneyin! :p). Bu tam olarak Egon Willighagen'in Alman LinuxFocus bölümü için yaptığıdır, bu sistemle ilgili makalesi bu sayfanın sonundaki bağlantılarda bulunabilir. Hızın ötesinde, homebrew dosya formatının esnekliği ve genişletilebilirliği tercih edilmiştir ( mySQL).
XML'in kesin sözdizimini dikkate alınarak: sözdizimi denetçileriyle iyi arkadaş olursanız, o zaman polise sizin işinizin bir kısmını yaptırmanızın bazı yolları olabilir. Eğer böyle birşey yapmak istiyorsanız DTD kullanmanız gerekir. ...



DTD


Yukarıdaki 'Eddy meta-kedi' örneğinde, XML etiketlerini keşfettik. Tabii ki, böyle yaratıcı bir davranış polis güçleri tarafından hoş karşılanmaz! 'Mavi giysili adamlar' neyi, nasıl, ne zaman (eğer mümkünse) neden yaptığınızı bilmek isterler. Hiç sorun değil, DTD ile her şeyi açıklayabilirsiniz...


DTD yeni etiketler icat etmenize izin verir. Gerçekten de XML, XML sözdizimini takip ettiğiniz sürece yeni diller yaratmanıza izin verir.
DTD ( Document Type Definition), bir XML dilinin tanımını içeren bir dosyadır. O gerçekten, bütün olası etiketler, onların olası özellikleri ve bileşimlerinin listesidir. DTD, XML dilinde neyin mümkün olup, neyin mümkün olmadığını tarif eder. Bu yüzden 'XML dili'nden bahsederken, gerçekte belli bir DTD'den bahsediyor oluruz.


Polisi çalıştırmak


Bazen DTD sizi belli bir yerde belli birşey yapmaya zorlar . Örneğin, DTD sizi dökümanın başlığını içeren bir etiket eklemeye zorlayabilir. Bunun güzel tarafı, gerekli etiketleri otomatik olarak yazan bir yazılımın var olmasıdır (örneğin bir emacs modülü).
Bu yolla dökümanın bazı bölümleri otomatik olarak doldurulur. Sözdiziminin çok kesin ve iyi tanımlanmış olması nedeniyle, DTD tüm yazım işlemi boyunca size rehberlik eder. Ve ne zaman yanlış yaparsanız, bir sonlandırma etiketini unutmak gibi, polis sizi uyarır. Sonuçta size çok da kızmazlar; gerçek dünyadaki polislerin 'Sessiz kalma hakkına sahipsiniz' dedikleri gibi, XML polisi size arkadaşça 'Sözdizimi hatası satır xx : '... :) der.
Polis bu işin hepsini sizin için yaparken, tabii ki *siz* içerik üzerinde devam eder ve yoğunlaşırsınız.


Karışım


XML'in çok iyi son bir özelliği de birden fazla DTD'yi bir kerede kullanabilmesidir. Bu birçok değişik veri tiplerini aynı zamanda bir dökümanda kullanabileceğiniz anlamına gelir.


Bu 'karışım' xml isim boşlukları ile yapılır. Örneğin, .xml dökümanınıza Docbook DTD'yi ekleyebilirsiniz (bu örnekte 'dbk' eki kullanılır).
Böylece bütün Docbook etiketlerini dökümanınızda kullanabilirsiniz. ( diye bir Docbook etiketi olduğunu varsayalım):


sadece bazı kelimeler


İsim boşluğu sistemini kullanarak, herhangibir xml DTD'nin herhangibir etiketini ve özelliğini kullanabilirsiniz. Gelecek bölümde de göreceğiniz gibi bu pek çok seçeneğe açıktır...


Mevcut DTDler


Kullanılmakta olan DTD'lerin küçük bir kısmı şunlardır;



  • Docbook-XML
    Docbook kitap ve makale gibi yapısal dökümanlar yazmak için kullanılan bir dildir. Fakat daha farklı görevler için de kullanılır. Docbook, gerçekte SGML DTD'dir (SGML bir markup standartıdır), fakat onun -yaygın- bir XML türü de vardır. Bu en yaygın XML DTDlerinden biridir.


  • MathML
    MathML ( Mathematical Markup Language), matematiksel ifade ve formülleri yazmakta kullanılan bir dildir. Matematik dünyasındaki insanlar için oldukça düzgün bir araçtır. Diğer taraftan kimyacıların matematikçi meslektaşlarını kıskanmaları gerekmez, onlar için de CML (Chemical Markup Language) vardır. Mozilla 1.0'ın şimdi default olarak MathML desteği bulunmaktadır.


  • RDF
    RDF (Resource De******ion Framework). Metaveriyi şifreleme ve tekrar kullanmaya yardım etmek için tasarlanmıştır; pratikte sanaldoku yöreleri tarafından diğer yörelere hangi haberleri gösterdiklerini bildirmek için kullanılır. Örneğin, Alman sanaldoku yöresi
    linuxdot.nl.linux.org diğer sanaldoku yörelerinin RDF dosyalarını onların haber maddelerini göstermek için kullanır. En bilinen haber-yöreleri (Slashdot gibi), onların haber başlıklarını kendi sayfanıza kopyalayabileceğiniz RDF dosyaları bulundurur.


  • SOAP
    SOAP (Simple Object Access Protocol). İşlemlerin birbirleriyle haberleşmek için kullandığı bir dildir (veri değiş-tokuşu ve yöntem çağırma ). SOAP'la, işlemler birbirleriyle uzaktan iletişim kurabilirler, örneğin. http protokolü üzerinden (internet). Sanırım LF'deki Atif bu konuda size daha çok şey söyleyebilir, bağlantılara bakın :-)


  • SVG
    Scalable Vector Graphics. Üç boyutlu PNG, JPEG2000 ve SVG'nin web'deki gelecekteki görüntüleri şekillendireceği tahmin edilmektedir. PNG GIF'in rolünü alacaktır (saydam kayıpsız sıkıştırılmış bitmapler), ve JPEG2000 birgün bugünün .jpg'sinin yerine geçebilir (ayarlanabilir derecede kayıplı sıkıştırılmış bitmapler). SVG bitmap tabanlı değil vektör tabanlı bir görüntü formatıdır, bu da görüntünün piksellerle değil, matematiksel şekillerle temsil edildiği anlamına gelir (çizgiler, kareler,...). SVG'nin yazı yazma ve animasyon gibi işler için de fonksiyonları vardır , bu yüzden onu bir şekilde Macromedia'nın Flash'ı ile kıyaslayabilirsiniz. .svg dosyalarında JavaScript kullanabilirsiniz, ve JavaScript kullanarak, .svg kodu yazabilirsiniz. Gerçekten esnek, değil mi ?
    Fakat svg oldukça yeni; şu anda sadece Adobe'da Windows & Mac platformları için yüksek kaliteli SVG tarayıcı plugini var. Mozilla gömülü SVG göstericisi üzerinde çalışmakta, fakat henüz tamamlanmış değil ve bunu kullanmak için tarayıcının özel bir şekilde derlenmiş versiyonunu indirmeniz gerekiyor.
    NOT: .svg dosyaları oldukça yüklü hale gelebilir, bu da sıklıkla .svgz dosyaları ile karşılaşmanızın nedenidir. Bunlar gzip algoritması ile sıkıştırılmış versiyonlardır.


  • XHTML
    XHTML, HTML sürüm 4.01'in XML versiyonudur. XML'in kesin sözdizimi nedeniyle, bazı değişiklikler vardır - HTML'de XHTML'de geçerli olmayan bazı şeyler yapabiliriz. Fakat diğer yandan, XHTML'de yazdığınız bir sayfa aynı zamanda geçerli bir HTML sayfasıdır. HTML tidy programı mevcut HTML sayfalarınızı XML'e dönüştürebilir.


  • Diğerleri
    Birçok yeni dosya formatı, genellikle .gz or .zip sıkıştırmasıyla birlikte, XML kullanır . Sadece bir örnek: KOffice dosya formatarı XML DTD'leridir. Bu çok yararlıdır, çünkü kullanıcıya değişik uygulamaların fonksiyonelliğini bir dökümanda kullanma izni verir. Örneğin: içine KChart spreadsheet gömerek KWord dökümanı yazabilirsiniz.


Bağlantılar


W3C(World Wide Web Consortium)
XML, MathML, CML, RDF, SVG, SOAP, XHTML .... hakkında bilgiler içeriyor...
www.w3.org


Jaime Villate tarafından yazılmıştır (ilk ikisini okumak için bir online sözlüğe ihtiyaç duyacaksınız:)
XML'e giriş(İspanyolca)
XML'le nasıl HTML oluşturulur(İspanyolca)
LSM-slaytları


HTML tidy, program:
www.w3.org/People/Raggett/tidy


Docbook
www.docbook.org


Mozilla.org SVG projesi
www.mozilla.org/projects/svg


İlgili LinuxFocus makaleleri:
XML ve XSLT 'yi LinuxFocus.org(/Hollanda) kurmak için kullanmak
DocBook ile PDF dökümanları yaratmak

Hiç yorum yok: