tarafından Floris Lambrechts <floris(at)linuxfocus.org>
Yazar hakkında:
Yıllardır LinuxFocus/Hollanda'nın baş editörlüğünü yapmaktayım.Leuven,
Belçika'da 'elektronikte endüstri mühendisliği' çalışmaktayım ve zamanımı
Linux, PHP, XML ve LinuxFocus ile uğraşarak geçirmekteyim
, aynı zamanda Stephen Hawking ve Jef Raskin (şu anda -'Uygarlık Arayüzü')
gibi yazarların kitaplarını okuyorum.
Türkçe'ye çeviri:
Ayşegül Kurşunlu <akursunlu(at)be.itu.edu.tr>
İçerik:
|
XML'i Öğrenmek
Ö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!):
<sentence>
Benim <animal>kedi</animal>
min adı <name>Eddy</name>dir.
</sentence>
Ş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 <etiket> bir kapanış
</etiket>ine sahiptir. [ Not: Aralarında hiçbirşey olmadığında
<etiket></etiket>
yazmak çok anlamsız olacağından <etiket /> 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:
<B> Koyu yazı <I>Koyu ve
italik yazı </B> italik yazı </I>
Sözdizimi kuralları </I> etiketini </B> 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
<sentence> 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'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.
(<sadece_bir_etiket> diye bir Docbook etiketi olduğunu varsayalım):
<dbk:sadece_bir_etiket> sadece bazı kelimeler
</dbk:sadece_bir_etiket>
İ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 Description 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
Bu yazı için görüş bildiriminde bulunabilirsiniz
Her yazı kendi görüş bildirim sayfasına sahiptir. Bu sayfaya yorumlarınızı yazabilir ve diğer okuyucuların yorumlarına bakabilirsiniz.
2002-09-23, generated by lfparser version 2.31