Bölüm 2

Generik HTML

Sayfa 1


Generik HTML'e Giriş

HTML Dilinin Genel Niteliği

HTML dili, SGML dilinin bir alt türevidir. Bu dillerin kullanım amacı bir belgenin soysal (generic) kodlarlarla bilgisayar ortamına geçirilip olabildiğince geniş bir okuyucu kitlesi tarafından okunabilmesidir.

SGML de belge içeriğinin yapılandıılması hedeflenmiştir. HTML de ise belgenin yapılandırması yanında görünümü de gözönüne alınmışr. Dolayısı ile HTML , SGML temel felsefesini tam olarak aksettirmez. Yine de bu iki dil birbirleri ile yakın ilşki içindedir ve aynı prensipleri paylaşırlar. Belgenin HTML dilinde kodlanmasından sonra, bu kodlar *.html veya *.htm uzantılı dosyalarda saklanır. Bunlara, HTML  sayfaları adı verilir. HTML dosyaları, basit metin dosyalarıdır ve basit metin editörleri kullanılarak hazırlanabilirler. Birbiri ile ilişkili tüm dosyalardan oluşan bir sisteme Web adı verilir. Bir Web normal olarak bir ana klasör altında organize edilmiş çeşitli alt klasörlerden oluşur. Ana klasördeki bir ana sayfa, bir tür indeks dosyası gibi hareket ederek diğer dosyaların çağrılabilmesini sağlayan bağlantılar (link) içerir. Bu bağlantılardan yararlanarak dosyalar arasında dolaşmaya, navigasyon adı verilir. HTML dosyaları, istendiğinde yerel depolama ortamından yani kullanıcının bilgisayarından, istendiğinde kilometrelerce uzaktaki bir Web sunucusundan indirilerek, belge çözümleyici (salt görsel ortamlarda çalışan belge çözümleyiciler Belge çözümleyici olarak adlandırılırlar) adı verilen "parser" programları yardımı ile okunurlar. Belge çözümleyicilerin en çok kullanılanları, Microsoft Internet Explorer, Netscape Navigator ailesinden Mozilla, Firefox, ve bağımsız bir belge çözümleyici olan ve eski bir W3C ağır topu olan Hakon Wium Lie ' nin anayurdu olan Norveç'e dönerek gelişiimine katıldığı Opera'dır. HTML dosyalarının içerdiği kodlar, belge çözümleyiciler tarafından yorumlanarak belgenin hedeflenen ortamda çözümleme sonuçları oluşturulur. Eğer hedeflenen ortam görüntü ortamı ise çözümleme sonuçları kullanıcının bilgisayar ekranında görüntülenir.

Aynı kodların indirildiği iki ayrı bilgisayarda aynı belge için iki farklı görüntü elde edilebilir. Bu farklar bazen farkedilmeyecek kadar az, bazen de hissedilecek kadar çok olabilir. Bu görüntü farkları, yazılım veya donanım farklarından kaynaklanır. Örnek olarak, kullanıcılar farklı belge çözümleyiciler kullanabilir, hatta aynı belge çözümleyicinin farklı sürümleri bile farklı görüntüler üretebilirler. Belgede kullanılan yazıtipi (font) cinsi her bilgisayar sisteminde mevcut olmayabilir veya belge çözümleyicisinin kullanılan sürümü, HTML belgesinde belirtilen teknikleri tümüyle desteklemeyebilir, kullanıcının monitorü HTML belgesinde bulunan resim çözünürlüklerini görüntülemekte yetersiz kalabilir veya bunlara benzer çeşitli başka nedenler görüntü farklılıklarına neden olabilir. Bazen ileri tekniklerlerle donanmış bir HTML belgesi, fiziksel engelli bir kullanıcı tarafından algılanamayabilr. Bazen resim içeren Web sayfaları, salt metinleri değerlendirebilen ve hiç bir resmi gösteremeyen Lynx gibi bir belge çözümleyici kullanan bir kullanıcı tarafından okunmaya çalışılabilir. W3C fiziksel engelli kullanıcıların bilgiye ulaşabilmelari için, gerekli düzenlemeleri HTML spesifikasyonlarına dahil edtmiştir. Bir HTML yazarının da, yazdığı sayfanın engelli okuyucular dahil her türlü kullanıcı ortamında değerlendirilebileceğini düşünerek, spesifikasyonun öngördüğü, engelliler için gerekli önlemlerin alınmış olduğu kodları üretmeye özen göstermesi gerekir.

HTML dilinin programlama öğelerini öğrenmek kolaydır. Önemli olan, bu öğelerin anlamının özümlenmesidir. Herşeyden önce, unutulmaması gereken en önemli nokta, HTML dilinin, temel SGML dilinin bir uygulaması olmasıdır. HTML dilinin SGML diline göre tanımı, Ek-4 Sayfa 1 de verilmiştir. HTML dilinin kodlama felsefesi, SGML dilinin temel felsefesini tam olarak yansıtmaktadır ve programcıların da bu düşünceye uygun bir yönelimde olmaları gerekir. HTML dilinin tüm öğeleri, DTD (Document Type Definition) adı verilen SGML yönergeleri ile belirtilmektedir. DTD ler Ek-5 de geniş olarak tanıtılmıştır.

SGML belgenin içeriğini ön plana çıkaran bir dildir ve basit bir kelime işlem programı gibi düşünülmemesi gerekir. Burada temel yaklaşım, belge içeriğinin iyi sınıflandırılmasına yöneliktir. HTML dilinde belge içeriği, bu dilin kısıtlı olanakları elverdiği ölçüde kısımlara ayrılabilir. İşaretlenmiş kısımların bir başlık mı, bir sıralı bir liste mi, bir paragraf mı oldukları, HTML kodlarında açıkça belirtilir. Belgenin HTML kodlarının hazırlanmasında, bu sınıfların olabildiğince ayrıntılı olarak düzenlenmesi, gerektiğinde yeterli görüntü sağlayacak mekanizmaların oluşturulması büyük önem taşır. Bu ayrıntılı kodlar, belgenin hiyerarşik olarak yapılandırılmasını sağlar ve ayrıntılı bir hiyerarşik yapılanma belgenin iletilmesine, değerlendirilmesine, algılanmasına, ve görüntülenmesine temel oluşturur.

HTML 4.01 ile Gelen Yenilikler

HTML 4 spesifikasyonu, uzun zaman çalışılmış bir teknolojinin, iyice olgunlaşmış halidir. HTML 4 de ufak bazı sorunlar düzeltilerek, HTML 4.01 kesin spesifikasyonuna ulaşılmıştır. W3C, HTML 4.01 kesin spesifikasyonunda, salt DTD ile açıklanamayan bazı yazılım karakteristikleri olduğunu belirtmektedir. HTML 4.01 sürümü ile, büyük bir olasılıkla, artık HTML ile sağlananabilecek olanakların sonuna gelinmiş olduğu hissedilmektedir. Bu yeni spesifikasyon ile getirilen yenilikler arasında, özün görünümdan iyice soyutlanması ve bu kapsamda, stil sayfalarının rolünün arttırılması, stil sayfaları dışında, görüntü sağlanması amacına yönelik elementlerin hemen hepsinin kullanımına son verilmesi, evrensel karakter kodlarının (UCS) kullanımı ile daha geniş dil desteği, yeni script dillerinin kullanımı ile daha geniş programlama desteği, fiziksel özürlülere daha fazla destek sağlanmasına yönelik yeni yöntemlerin oluşturulması sayılabilir.

HTML Elementleri

HTML programlama dilinin temel öğesi, HTML elementi olarak adlandırılan temel bildirim türüdür. Tam bir HTML elementinin anatomisi, aşağıdaki şekilde görülmektedir.

                                       Anatomy of an HTML Element

                         Şekil 2.1 : Bir HTML Elementinin Temel Anatomisi

HTML elementleri HTML dilinin temel bildirim şeklidir. Her HTML elementi, şekil 2.1 de görülen öğelerin tümünü içermeyebilir. HTML elementleri, atomal halde, bir tek elementten oluşan bildirimler olabilir. Örnek olarak,<br> (break),  <hr> (horizontal ruler) gibi elementler atomal halde kullanılırlar. Bunlara boş element adı verilir. Boş elementlerin içerikleri ve bitiş imleri yoktur. HTML elementlerinin büyük çoğunluğunun ise, bir başlangıç ve bir bitiş imi arasında belirli bir içeriği bulunur. İçeriği olabilen her HTML elementinin içeriğinin türü, HTML DTD 'si tarafından önceden belirlenmiştir ve buna elementin içerik modeli adı verilir.

HTML elementlerinin çeşitili nitelikleri bulunur. Nitelikler elementin uygulanmasına daha açıklık getirirler. Örnek olarak <ol style="list-style-type:upper-roman"> bildirimi, belgenin belirtilen kısmının, sıralı liste (ordered list) niteliğinde ve liste elemenlarının büyük harf romen rakkamları atanmış tipte olduğunu bildirir. Her HTML elementinin sahip olabileceği nitelikler, sayfanın uyması gereken DTD de önceden kesin olarak belirtilmiştir. Kullanıcılar elementlerin DTD de belirtilmiş niteliklerinden kullanılması zorunlu olanların dışındakileri, gerekli olduğu kadarını belirtmekte veya hiçbirini belirtmemekte özgürdürler. Belirtilmesi zorunlu olmayan niteliklerden belirtilmemiş olanların, belge çözümleyicileri tarafından, önceden belirtilmiş başlangıç değerleri (default values) varsa bu başlangıç değerleri alınır, başlangıç değerleri de yoksa, bu belirtilmeyen niteliklerin değerleri, belge çözümleyiciler tarafından önceden belirlenmiş, fakat çoğunlukla kullanıcılara açık olmayan bir senaryo gereğince değerlendirilirler.

HTML dili, belge kodlamasını çözümlerken (parsing) küçük/büyük harf ayrımı yapmaz. Yani, <BR> (break) yazılımı ile <br> yazılımı aynı etkiyi yapar. Bugüne kadar, genel olarak elementlerin belge içeriğinden ayrımını farkettirmek için elementlerin yazımında büyük harflerin kullanılması tercih edilmiştir. Bu eğilime uygun olarak, kullanılan birçok HTML yazım araçları (authoring tools) otomatik olarak elementleri büyük harflerle oluşturmaya yatkın olarak düzenlenmiştir. Bugün ise artık HTML'in sınırına gelinmiştir ve belgelerin XHTML diline dönüştürülmesi gündemdedir. XHTML ise daha kesin bir dildir, element isimlerinin küçük harflerle yazılımını koşul saymakta ve yazılımda küçük/büyük harf ayrımı yapmaktadır. Bu nedenle, HTML kodlamasında elementlerin yazılımında bugünden küçük harfler kullanılması, kodlanmış belgenin ileride XHTML' e dönüştürülmesini kolaylaştıracaktır.

Elementler ve elementlerin nitelikleri hakkındaki tüm bilgiler, HTML anayasası olarak düşünülebilecek DTD lerin değerlendirilmesi ile elde edilir. Bu nedenle, iyi bir HTML programcısının DTD okumayı bilmesi gereklidir. Ek-5 de DTD yazılımlarının değerlendirilmesi konusunda temel bilgiler verilmiştir. Çalışmalarımızda, DTD lerin özümsenmesine büyük önem verilmiş ve konular DTD deki belirtilme şekilleri dikkate alınarak incelenmişlerdir. Bu şekilde, öğrencilerin temel kuramsal bilgileri kazanmaları, kendi kendilerine kod yazabilecek yetenek sahibi olmaları ve kod yazıcılara aşırı bağlı olmamaları sağlanmaya çalışılmıştır.

HTML Kodlarının Yazılım Yöntemleri

HTML belgeleri, yapılandırılmış belgelerdir. Yani, belgeler, başlık, alt başlık, bölümler, paragraflar gibi içiçe yapı taşlarına ayrılarak hiyerarşik bir yapılandırma sistemi oluşturulur. HTML sayfaları, klasik ASCII metin dosyaları halinde kodlanır ve saklanırlar. HTML kodlarının, Notebook gibi basit ASCII metin editörleri kulanılarak  yazılması ve saklanması esastır ve iyi bir programcılık uygulaması da bunu gerektirir. Bu çalışmalarda da hedeflenen bu yöndeki yeteneğin geliştirilmesidir.  Bu şekilde bir doğrudan yazım yöntemi, aslında biraz zahmetlidir ve biraz programcılık bilgisini de gerektirir. Bu zorluğun aşılması ve hiç yazılım deneyimi olmayan kişilerin de Web sayfaları hazırlayabilmeleri için çok sayıda yazım araçları (authoring tools) geliştirilmiştir. Hatta, MS FrontPage, Macromedia Dreamweaver MX gibi, otomatik  Web sayfası düzenleyicileri olarak adlandırılabilecek bazı yazım araçları,  bir Web sayfasının görsel ortamda hazırlanarak,  HTML kodlarının otomatik olarak oluşturulmasını sağlayabilmektedirler. Bu konuda, bir uyarıda bulunulması gerekli olabilir. Bu programların otomatik olarak ürettiği Web sayfalarındaki kodlar, çok dağınık ve bazı öğeleri geçerli güncel standartların gerisinde olan kodlar olabilirler. Bunlarda önce görüntü, sonra kod sistemi geçerli olmaktadır. Halbuki bilinçli bir çalışmanın, önce kod sonra görüntü prensibine göre yürütülmesi esastır. Bu sayfalarada geliştirilmiş çalışmaların amacı da biliçli Web programlayıcılarının yetiştirilmesidir. Bu nedenle, yazarlık programlarının sunduğu kolaylıklardan yararlanılmalı fakat sayfaların görsel ortamda hazırlanıp kodlarının otomatik olarak üretilmesi kolaycılığından uzak durulmalıdır. Standartlara uygun, derli toplu kodların, artık az veya çok bir programcı niteliği taşıması zorunluğu olan sayfa yazarı tarafından, şahsen ve otomatik yazarlık araçları kullanılmadan yazılmasında büyük yarar bulunmaktadır. Bu konuda Macromedia Dreamweaver veya Homesite 5 gibi, kod yazımına daha çok yönelik ücretli yazarlık araçları yanında HTML Kit gibi ücretsiz yazım programları kullanılabilir.

HTML programlarının başında, programın uyacağı yazım kurallarını belirten açık bir yapılandırma yöntemi DTD (Document Type Definition=Belge Tipi Tanımı) bildirimi yapılmalıdır. DTD bildirimi HTML 4.01 spesifikasyonu için zorunlu sayılmamıştır. Herhangibir DTD bildirimi yapılmadığı hallerde de bir DTD bildirimi yapılmış olduğu varsayılarak belgenin çözümlenmesi devam eder yani açık (explicit) bir DTD bildirimi olmadığı hallerde bile, belge çözümleyicinin varsaydığı bir DTD bildirimine göre değerlendirilir.

HTML 4.01 spesifikasyonu ile açık (explicit) DTD tanımı zorunlu olmasa bile, açık DTD bildirimini ihmal etmemekte büyük yarar vardır. DTD bildirimi, belgenin yapılandırılmasında hem programcıya, hem de kullanıcıya belgenin kodlanmasında uyulması gereken kuralları açıkça ortaya koyacaktır. Bir HTML belgesi, DTD ler dışında bazı özel işaretleme (markup) etiketleri (tag) da içerebilir. W3C tarafından tanımlanmış olan HTML 4.01 spesifikasyonunun kesinleşmiş olmasına karşın, birçok belge çözümleyici, W3C spesifikasyonları dışında, özellikle görüntü sağlamak amacı ile, birçok özel elementi ve niteliği de desteklemektedir. Bu özel kodları kullanmak, kodlanan belgenin genel desteğinin baştan kaybedilmesi anlamına gelecektir. Günümüzde ise, genel eğilim, bir belgenin olabildiğince çok platformda desteklenebilecek şekilde kodlanmasıdır. Belge çözümleyiciler değerlendirmedikleri kodları gözardı edeceklerdir fakat bu durumda istenilen özel etki sağlanamamış olacaktır. SGML programlama dili, bir belgenin olabildiğince farklı ortamlarda, olabildiğince çok kullanıcı tarafından okunmasının sağlanması amacı ile geliştirilmiştir. İstemcilerin serbestçe çağırabileceği, kamuya açık HTML sayfalarına sadece belirli belge çözümleyicilerinin değerlendirebileceği özel uygulamalar yazılması, genel SGML ve dolayısı ile HTML felsefesine uygun olmayacaktır. Bu düşüncenin ışığı altında, HTML kodları yazılırken, salt belirli bir belge çözümleyiciye özgü kodlardan kaçınılması yerinde olacaktır. Ne yazık ki günümüzde, dinamik HTML sayfaları oluşturmak uğruna, onlarca özel eklenti (plug-in) kullanan, belge çözümleyicilerin sadece bazılarında çalışabilen çeşitli script dilleri içeren sayfalara rastlanabilmektedir.

Üzerinde durulması gereken diğer bir konu da kullanılan HTML kodlarının donanım açısından aşırı özelleştirilmiş öğeler içerebilmesidir. Örnek olarak, bazı ekran çözünürlükleri ve renkler her monitörde gerçekleşemez. Çok özel öğeler içerecek bir şekilde kodlanmış bir belge, yazarın kendi makinesinde verebileceği sonucu, başka bir makinede vermeyebilir. Ortamların hem donanım, hem de yazılım açısından farklı olmaları, aşırı özel kodlarla oluşturulmuş belgelerin, uygulamada hedefledikleri görüntü kalitesini tutturma olasılıklarının yüksek olamayacağı açıktır. Bir belgenin ancak belirli karakteristiklere sahip olan sistemlerde istenileni verebilecek şekilde kodlanması yerine, belgenin görüntüsel isteklerinin, genel olarak ortalama bir kullanıcının bilgisayar sistemine yönelik olarak kodlanması daha gerçekçi olacaktır. Özellikle, kullanımı yaygın olmayan spesifik yazıtiplerinin ve karmaşık renk tanımlarının kullanımından kaçınılması belgenin her ortamda benzer görüntü verme olasılığını arttırabilecek bir yazılım stili olacaktır. Eğer herşeyin kontrol altında olduğu bir Intranet (dışa kapalı bir çevrim içi yayın kanalı) sistemine yönelik kodlar yazılmıyorsa, çok özel cihazlara yönelik kodlarda kesinlikle kaçınmak gerekmektedir. Çünkü, Internet kanalı ile yayınlanmış bir dosyaya ile erişen bir başka kullanıcının bilgisayarında aynı yazıtipleri bulunmayabilir veya kullanıcının monitörü belirtilen tüm renkleri desteklemeyebilir. Bu durumda, belge çözümleyici kendi basit genel tanımlarını kullanacak, ayrıntılı kod oluşturmak için harcanmış olan çaba da, bir ölçüde boşa gitmiş olacaktır.

Önemli bir diğer konu da, Web sayfalarının salt HTML kodlarından oluşmadığıdır. Bir Web sayfası, HTML kodlarının yanında, stil sayfaları, resimler, çeşitli script kodları, dış stil dosyaları gibi öğelerden de oluşabilir. Bu nedenle, istenilen görüntünün sağlanabilmesi için ortamın bütün bu teknikleri desteklemesi gerekmektedir. Bu da, kullanıcıların donanım ve yazılımlarını sürekli yenilemeleri için dayanılmaz bir baskı oluşturmaktadır. Yine aynı bağlamda, bir Web sayfası kopyalanırken, bu sayfanın yararlandığı tüm dosyaların da birlikte kopyalanması gereklidir. Bunun için özel programlara gerek olmaktadır. Web sayfası kopyalanması için, Web Copier veya Web Reaper gibi ticari programların kullanılabilir. Ayrıca Windows XP, Web sayfalarının kaydedilmesinde son derece başarılıdır.

Genel okunabilirliğin sağlanabilmesi için, W3C' ye göre uygulanması gereken güncel yöntem, belge düzenlemesinde sadece katı kuralcı hiyerarşik yapılanma ile sınırlı kalınması ve görüntüye yönelik düzenlemelerin Katlı Stil Sayfaları (Cascading Style Sheets) ile yapılmasıdır. Bu düşünce çok, kısıtlı gibi görülebilirse de geniş belge çözümleyici desteği elde edebileceğinden, çıkabilecek birçok sorun daha baştan oluşturulmamış olur. Sorunları çözümlemek için uygulanabilecek en etkili yöntemin, sorunların oluşmasına olanak verilmemesi olduğu anımsanmalıdır. Tekrar belirtelim, her zaman spesifikasyon dışı element ve niteliklerden uzak durulmasında yarar bulunmaktadır.

Kod yazılımında katı kuralcı spesifikasyon olanaklar ölçüsünde yeğ tutulmalıdır. Bunun çok kısıtlı olabileceğini düşünenler, gevşek kuralcı (geçiş dönemi) belge tipini de benimseyebilirler. Bu durumda, geçiş dönemi spesifikasyonu temel alınarak oluşturulmuş belgelerin belge çözümleyicilerde daha çok denenmesi gerekebilir. Web sayfalarında, gereği olduğunda, en yeni teknoloji olan çerçeve (frame) tekniği de kullanılabilir, fakat çerçeve (frame) içeren HTML sayfalarının kodlamasında çok dikkatli olunmalı ve oluşturulan kodlar, düz HTML kodlarından daha da ayrıntılı olarak denenmelidir. Çerçeve tekniği, HTML programlanmasına yeni olanaklar sağlamasına karşın, dayandığı karmaşık teknolojilerden dolayı oluşturulan sayfalarının uygulamada desteklenmesini daha kritik hale getirmektedir. Bu nedenle, günümüzde çerçeve uygulamasından kaçınma eğiilimi ağır basmaktadır.

Belirli bir DTD belirtildikten sonra, yazılan kodların bu DTD kurallarına uygun olarak yazılması gerekir. Bugün için belge çözümleyiciler, hatalı HTML kodlarını geri çevirmemekte ve hatalı kodları kendi yorumlarına göre değerlendirip her durumda iyi veya kötü bir bir görüntü oluşturmaktadırlar. Sayfanın belge çözümleyicilerde görüntülenmesinde hissedilebilen bir sorun olmayabilirse de, hatalı kodlar, düzeltilmedikçe hatalı olarak kalırlar ve hatalı kodların nerede sorun çıkaracakları önceden bilinemez.

Bir HTML sayfasının hatalarının yayınlanmadan önce düzeltilmesi, temiz ve geçerli kod üretilmesi açısından olağanüstü önem taşımaktadır. Kodların geçerliğinin denenmesini sağlayabilmek için, otomatik kod değerlendiricileri (Code Validators) kullanılabilir. Web sayfalarının HTML kodlarının ve bağlantılarının sınanması için çeşitli kod denetçileri HTML Help ve W3C Kod Değerlendiricileri sitelerinde incelenebilir. Ayrıca, çeşitli yazarlık araçlarında da kod değerlendiricileri bulunmaktadır. Otomatik kod değerlendiricileri, yazılan HTML kodlarının geçerliliğinin denenmesinde, büyük kolaylık sağlarlar. Her HTML sayfasının, tamamlandıktan sonra, kod değerlendiriciler ile kontrol edilmesi çok yararlı olacaktır.

Günümüzde, HTML kodlamasının sınırlarına gelindiği ve yeni belgelerin daha ileri SGML uygulamaları ile kodlanmasının gündemde olduğu bilinmelidir. HTML uygulamasının bir sonraki aşaması, XHTML dili olacaktır. XHTML, HTML uygulamalarına göre kategorik olarak daha kesin kuralcı bir SGML uygulamasıdır. kaynaklanmaktadır. XHTML kodları, kesin kuralcı HTML DTD sine uygun kodların hemen hemen aynısıdır. Bundan sonraki aşama, tüm belgelerin daha kesin kuralcı XHTML dili ile kodlanması olacaktır. Bu uygulamalara, halen başlanmış durumdadır. Trend böyle olduğuna göre, yazılacak HTML kodlarının, daha bugünden, katı kuralcı HTML kurallarına, uygun olacak şekilde oluşturulmasında yarar bulunmaktadır. Bunun için, zorunlu olmasa da, belge yazımında, isteğe bırakılan kurallara bile zorunlu gibi uyulması, güncelliği kaybolmuş devam ettilmeyen (deprecated) element ve niteliklerin kullanılmasından kaçınılması, içerik ve görünümün birbirinden kesinlikle ayrılmasının sağlanması için görünümün sadece stil sayfaları teknolojileri kullanılarak düzenlenmesi, geleceğe dönük, iyi bir programlama stili olacaktır. Böyle sağlam bir kodlama yönteminin, bugün için daha iyi yapılandırılmış bir belge kodlaması sağlayacağı, oluşturulan belgelerin, tüm belge çözümleyiciler tarafından daha iyi destekleneceği, gelecekte de gerekirse belgenin XHTML dolayısı ile XML spesifikasyonunlarına daha kolay çevrilmesinin sağlanabileceği açıktır. XML platformu, HTML platformuna göre SGML olanaklarının daha fazla kullanılabilmesi amacı ile oluşturulmuştur. Bu platform içinde kodlama HTML platformuna göre daha zor olacaktır. XML platformu HTML den veri işleme bakımından çok gelişmiştir fakat, salt belge kodlaması amacı ile HTML platformu yerine kullanılacak ve XML platformunun bir alt platformu olan XHTML platformu kullanılmaya devam edilecektir. 27 mayıs 2005 de yayınlanmış olan XHTML 2.0 spesifikasyonun ilk sürümü de bu düşünceyi yansıtmaktadır.

Bu Çalışmada Kodların Oluşturulması İçin Geliştirilecek Yöntem

Bu çalışmada, HTML kodlarının oluşturulması için, katı kuralcı DTD kullanılması ve Katlı Stil Sayfaları (Cascade Style Sheets) Düzey3 (CSS3) yöntemlerinin kullanılması öğretilecektir. Çalışmalarda önce kod sonra görüntü prensibi uygulanacak ve üretilen kodların en son sürüm belge çözümleyicilerin tümü tarafından genel desteğe sahip olması için gerekli genel desteğe sahip olmayan hiç bir öğe incelenmeyecektir. Çalışmalar sonunda, bu kursları takip edenlerin, sadece belirli yazarlık araçlarını değil, basit ASCII editörleri ile bile HTML sayfalarını geliştirme yeteneklerini kazanmaları amaçlanmıştır. Ancak yeterli temel bilgilerle donanımlı kişilerin gelişme için yeni ufuklara açılabilecekleri gerçeği hiçbir zaman unutulmamalıdır.

HTML Yazılım Kuralları

HTML dilinin bir SGML uygulaması olduğu görülmüştü. Bu uygulamanın DTD ler aracılığı ile soyuttan somuta yöneldiği belirtilmiştir. Bu durumda, yazılım kurallarının da kullanılan DTD de belirtilenler ile sınırlı olduğu görülebilir. Bu çalışmada, HTML 4.01 spesifikasyonunun katı kuralcı yazılım kuralları gözetilmiştir. Bilindiği gibi, bu spesifikasyon, en güncel ve en geleceğe dönük HTML DTD si olarak kabul görmektedir. Doğal olarak da uygulanması en zor HTML yazılımı olarak ortaya çıkmaktadır.

Bir HTML elementi, boş bir element değilse, prensip olarak açılan her elementin, açık (explicit) olarak kapatılması gerekir. Bu kurala uyulmazsa, şu anda kullanılmakta olan belge çözümleyicileri herhangibir hata vermez, fakat sayfa kodları kod değerlendiricileri ile denendiğinde hatalar açıkça belirtilir. Açılmış olan ve boş element olmayan element imlerinin, prensip olarak kapatılması gerekir, fakat bazı elementlerin, örnek olarak paragraf elementinin, kapatılması DTD de garip bir şekilde isteğe bağlı bırakılmıştır. Bu konuda, söylenecek söz, bu konuda kesinlikle kolaycılığa kaçılmaması gereğidir. XHTML kuralları, her açılan imin kesinlikle kapatılmasını şart koşar. HTML de ise, kapatılması isteğe bağlı olan birçok element bulunmasının yanında, boş elementlerin de kapatılması yasaklanmıştır. HTML de yazılan sayfaların ileride XHTML'e yükseltilmelerinde zorluk yaşanmaması için, BOŞ ELEMENTLER DIŞINDA, HER ELEMENT İÇİN AÇILAN BAŞLANGIÇ İMi, MUTLAKA BİTİŞ İMİ İLE KAPATILMALIDIR.

Bir HTML elementi içinde birden fazla element içiçe yuvalanmış (nested) olabilir. Bu durumda, son açılan elementin, ilk kapanması gerekir. Bu kurala simetri kuralı adı verilir. Simetri kuralına uyulmazsa, elementler birbiri ile kesişir. Kesişen elementler, HTML belge çözümleyicileri tarafından sorun edilmezler, ama bu bir hatadır ve kod değerlendiricileri, belgeyi iyi oluşmamış belge olarak nitelendirip hata mesajı verirler. Örnek,

yazılımında, içiçe elementler birbirleri ile kesişmeyerek iyi oluşmuş simetrik bir belge oluştururken,

yazılımında içiçe <p> ve <strong> elementleri, birbirleri ile kesişerek, belgeyi iyi oluşmamış bir belge konumuna düşürür ve bu belge, gerektiğinde XML kodlarına çevrilmesi gerektiğinde, sonuç tam bir felaket olur. Bu konu üzerinde ilerde yeniden durulacaktır.

İçiçe yuvalanmış elementler, SGML prensiplerinin, belgenin yapılandırılmasında öngörülmüş olan, yapılandırılmış içerik modelinden kaynaklanmaktadır. İyi yapılandırılmış belgelerde, birbiri içine yuvalanmış elementlerin birbirlerini kesmemeleri gerekir. Bir metin düzenleyicisi ile, (örnek olarak, Windows işletim sisteminin standart ASCII editörü olan Notebook programı ile) yukarıdaki iki, ifadeyi ayrı ayrı deneyiniz. Bunun için, Notebook ile bu iki satırı yazıp ayrı ayrı kaydediniz ve her ikisini de geçerli belge çözümleyiciler ile okutmak için dosya isimlerini çift tıklayınız. Hangi belge çözümleyici kullanılırsa kullanılsın, birisi hatasız, diğeri hatalı kod içeren her iki yazılımın da belge çözümleyicide aynı sonucu verdiği görülecektir. Fakat bu sonuç, sadece HTML belge çözümleyicilerinın hataya duyarsız (fault tolerant) olduğunu gösterir. Sayfalardan birinin kodları hatalıdır ve bu sayfa iyi oluşmamış bir belgedir. Doğru kodlama, iyi yapılandırılmış belgeler oluşturulmasını hedef alır ve bu amaca yaklaşmanın ilk koşulu kesişen elementlere olanak verilmemesidir.

Element isimleri boşluk içermemelidir. <HTML> yerine <H TML> yazılırsa, belge çözümleyiciler hata vermez ama bunu bir içerik olarak kabul edip ekrana <H TML> yazarlar.

HTML 4.01 spesifikasyonuna göre, nitelik değerleri birden çok sözcük içeriyorlarsa, daima tek veya çift tırnak içine alınmalıdır, fakat  tek sözcükten oluşan nitelik değerlerinin tırnak içine alınması zorunluluğu yoktur. Örnek,

ifadesinde, lang niteliğinin değeri, lang=tr şeklinde yazılabilecek iken, her nitelik değerinin tırnak içine alınması koşulunu koyan XHTML standardına uyum sağlanması amacı ile, lang="tr" şeklinde, tırnak içinde belirtilmiştir.

Nitelik isimleri küçük/büyük harflere duyarlı değildir , fakat nitelik değerleri harf kipine duyarlı olabilir. Örnek olarak, Linux ve bazı diğer işletim sistemlerinde, rosa.gif adlı resim dosyası, ROSA.GIF adlı dosyadan farklı olduğu için,<img src="rosa.gif"> ifadesi,   <img src="ROSA.GIF"> ifadesinden faklı olabilir. Nitelik değerleri incelenirken, hangi niteliklerin küçük/büyük harflerle yazılışa duyarlı olduğu belirtilmiştir. Bu konuda dikkati elden bırakmamakta yarar bulunmaktadır.

HTML sayfalarında, çeşitlli öğeler arasında, aralık açmak amacı ile, birden fazla boşluk bırakılırsa, sadece tek bir boşluk karakteri görüntülenir. Bunun nedeni, belge çözümleyicilerin, birden fazla boşluk karakterini ihmal etmeleri ve tek boşluk karakteri gibi yorumlamalarıdır. Örnek olarak,

şeklindeki iki farklı gibi görünen yazılımların her ikisi de, belge çözümleyiciler tarafından ikinci yazılımdaki,  budanmış (trimmed) şekli ile algılanacaktır. Sonuçlar, aşağıda görüldüğü gibi, tek bir boşluk karakterinin görüntülendiği bir sayfa olacaktır. Birinci yazılım sonucu,

ikinci yazılım sonucu yine aynı,

olmaktadır. Bu kısıtlamanın aşılması için, yatay ve düşey aralık oluşturma yöntemleri geliştirilmiştir. Bu yöntemlerden birisi, HTML kodlarına, belge çözümleyiciler tarafından algılanabilen görüntülenmeyen bir karakter varlığı (character entity) olan bağdaştırıcı boşluk karakter varlığı (&nbsp;) (non breaking space) eklenebilir. Bu konuda bir örnek biraz aşağıdaki örnekte görülmektedir.

Karakter varlıklıkları, çok kullanılan karakterler için düzenlenmiş hatırlatma sözcükleri gibi düşünülebilir. Bu kodlar, HTML DTD lerinde, bir dış dosya referansı olarak belirtilen, W3C tarafından önceden belirlenmiş kodlardır. Karakter varlıkları, karakterin sayısal referansının yerine geçebilecek değerler olarak belirlenmiştir. Karakter varlıkları, Özel Latin-1 karakter varlıkları, Semboller ve Grek harfleri karakter varlıkları,  çeşitli kaynaklardan alınarak Ek-2 de verilmiştir.

İster varlık şeklinde, ister sayısal olsun, W3C tarafından önceden belirlenmiş ve listelenmiş tüm karakter referansları, HTML kesin spesifikasyonunun öngördüğü gibi, belge çözümleyicilerin görüntü oluşturmakta kullandığı UCS karakter setine (Unicode ile eşdeğer) referans verirler. Web sayfaları ise, dosya büyüklüğünün az olması için genel olarak 8-bitlik karakter kodları ile kokdlanmış olarak sunucularda saklanır ve kullanıcı bilgisayarına indirilirler. Dış dosyalar olarak adlandırılan bu dosyalar, kullanıcı bilgisayarına indirildikten sonra, bu dosyaların karakter kodlaması, belge çözümleyiciler tarafından UCS karakter setine çevrilerek görüntülenir. Bu çevirme sırasında, indirilen dış sayfanın karakter kodlaması ne olursa olsun, karakter varlıkları veya sayısal kod referansları zaten UCS olarak ifade edilmiş olduğundan, UCS karakter setine çevrilmeleri gereği kalmaz ve bu şekilde, kod çevrilmesi sırasında üretecekleri karakter görüntüsü (glyph=kılıf) üzerinde hiç bir belirsizlik oluşmaz.

Karakter varlıklarının kullanımına bir örnek olarak, bağdaştırıcı boşluk karakter varlığının (&nbsp;) (non breaking space) kullanımı aşağıda görülmektedir. Boşluk karakter varlığı, görüntülenmeyen bir karakter varlığıdır ve aşağıdaki örnekte olduğu gibi, yatay boşluk oluşturulması için kullanılabilir. Burada,

şeklindeki bir kodlama, istenilen

sonucunu verecektir.

Bir başka örnek olarak, Özel Latin-1 Karakter Varlıkları ekinden alınmış olan, aşağıdaki kodları Notepad ile yazarak b2s1uygulama1.htm adı ile kaydediniz.

 İlk bakışta biraz tuhaf görülebilen bu kaydedilmiş programı, Internet Explorer ile açıp okutunca, sonuç:

olacaktır. Bu kodların oluşturulması ilk bakışta biraz tuhaf gibi görülse de, &Ccedil kodlaması, Fransızca  Ç harfinin okunuşu olan "Cé cédille", Almanca Ö harfinin okunuşu, "O umläut" gözönüne alınırsa, tuhaf gibi gözüken yazılımların aslında anlamlı hatırlatma sözcükleri oldukları görülür. Aynı karakterler, yine Ek-2 de görülebilen eşdeğer ondalıklı veya hex karakter sayısal karakter karşıklarından yararlanılarak, da elde edilebilir. Örnek olarak bir Japon Katagana karakteri Unicode giriş noktası olan, hex ifadesi &#x30C1; ile チ şeklinde görüntülenmiştir.

Belge çözümleyicilerin eski sürümleri, hex kodlarını bazen hatalı değerlendirmekteydi, fakat yeni sürümlerde destek daha iyileşmiştir. Yine de, özellikle hex karakter karşılıkları kullanılmış sayfaların daha dikkatli denenmesi yararlı olacaktır. Özel ve Genel Karakter Varlıkları sayfaları farklı belge çözümleyicilerde açılarak, belge çözümleyicinin özel karakter karşılıklarına desteği belirlenebilir.

Element içeriklerinin kodlama yöntemi #PCDATA şablonu ile belirtilen metin verilerinde, HTML elementlerinin belirtilmesi için, mutlaka özel karakter varlıklarının kullanılması gereklidir. Aksi takdirde, belge çözümleyiciler bu tanımları element sanıp görüntülemezler. 8-bit US-ASCII ayrıcalıklı karakter kodlaması kapsamı dışında kalan, dolayısı ile, ondalıklı 255 den daha büyük sayılar ile ifade edilebilen ve maalesef bazı Türkçe karakter referanslarının da aralarında olduğu, şanssız karakter referansları, HTML 4 ile birlikte UCS ye kesin geçiş sağlandığından, artık Web sayfalarında yazıldığı gibi kullanılabilmektedir. Bu kolaylık, özellikle Türkçe karakterler gibi, 8-bit US-ASCII karakterleri dışında kalan karakterleri içeren Web sayfaları için önemlidir. Buna rağmen, bazı HTML Kod Değerlendicileri (HTML Code Validators) bu olanağın sağlanmasından önce yazıldıklarından, bu özel karakterleri taşıyan sayfaları hatalı kod olarak tanımlayabilmektedir. Aralarında Türkçe sayfaların da bulunduğu, özel karakterleri içeren Web sayfalarının HTML kod değerlendicileri ile sınanmasında, kod değerlendiricilerin, özel karakterleri hata olarak değerlendirmesini engelleyecek filtrelerin kullanılması gerekli olabilir. Günümüzde, bu gibi uyumsuzluk eksiklikleri son derece azalmıştır.

Belge Çözümleyiciler, desteklenmeyen eleman veya nitelikleri gözardı eder, fakat tanımadıkları elemanların içeriklerini düz metin olarak algılarlar. Örnek olarak, b2s1uygulama2.htm dosyasında, bir belgenin <body> kısmında,

şeklinde bir kodlama yapılmıştır. Bu kodlama, bir belge çözümleyicide,

sonucunu verecektir. Bu aslında beklenmeyen bir sonuçtur. Çünkü, HTML 4.01 için belirlenmiş katı kuralcı,geçici ve çerçeve tipi her üç DTD ye göre, <body> elementinin içerik modelinde sadece tanımlanmış elementler bulunabilecektir. Bu kurallara uygun olmayacak şekilde kodlanmış belgeler geçerli HTML belgesi niteliğini taşımayacaklardır. Burada, <dedekorkut> elementi DTD de tanımlanmış bir element olmadığı için, belge geçerli bir HTML belgesi olmayacaktır. Bu durumda içeriğinin de görüntülenmesi beklenmez. Fakat, belge çözümleyiciler, geçerli olmayan HTML belgelerini de bir şekilde çözümleyebilecek şekilde yapılmışlardır. Buna hataya dayanıklı (fault tolerant) yapı adı verilir. Bu örnekte, belge çözümleyiciler, <dedekorkut> ve </dedekorkut> ifadelerini, bir elementin başlangıç ve bitiş imleri kabul edip görüntülememişler, fakat #PCDATA şablonuna uygun bir metin olan içeriğini görüntülemişlerdir. Bu nedenle, belgenin elde edilen sonuç görüntüsünde yasal ve yasal olmayan tüm elementlerin içeriği bulunmaktadır.

#PCDATA şablonu dışındaki ifadelerin görüntülenebilmesi için, ya <pre> (Öntanımlı Metin) elementi kullanılacak, ya da izin verilmeyen karakterler yerine, aşağıda görüldüğü gibi, karakter varlıkları veya sayısal karakter karşılıkları kullanılacaktır. Uygulamada sayısal karakter karşılıkları fazla kullanılmaz. Fakat, karakter varlıkları yaygın olarak kullanılır. Örnek,

Bu kodların sonucunu görmek için b2s1uygulama3.htm dosyasını inceleyiniz.

Belge çözümleyiciler, tanımadıkları nitelikleri de gözardı ederler. Örnek olarak,

ifadesinde, Gökyüzü mavi yerine o anda geçerli olan renkte görüntülecektir. Çünkü "mavi" belge çözümleyicinin tanıdığı bir nitelik değeri değildir, dolayısı ile geçerli renk niteliği olduğu gibi devam edecektir. Fakat,

ifadesinde, renk niteliği tanınan bir değer olduğundan, renk niteliği değerlendirilecek ve içerik, renk niteliğinin belirttiği mavi renkte görüntülenecektir. Eğer bu kod, salt siyah/beyaz bir ekranda görüntülenmeye çalışılırsa, o vakit bir renk niteliğinin değerlendirilmesi beklenemez. Bu kodu Notepad veya benzeri bir ASCII editörü ile yazarak bir belge çözümleyicide deneyiniz.

HTML belgeleri, yorumlar içerebilir. Yorum satırları<!-- ve --> işaretleri arasına konulur. Çok eski belge çözümleyicileri, yorum satırlarını tanımayabilirler. Yorumlar birden çok satır içerebilir. Örnek olarak,

kodlaması ekrana herhangibir yazı yazdırmaz. Yorum satırları arasına, HTML elementleri de konulabilir. Yorum satırları arasına konulmuş olan HTML elementlerini belge çözümleyiciler değerlendirmez. Özelikle, <script> ve <style> bildirimleri, yorum satırları içine yazılarak, bu bildirimleri desteklemeyen eski sürüm belge çözümleyicilerca yanlış yorumların yapılması engellenebilir. Bugün en yeni sürüm belge çözümleyicilerin ücretsiz dağıtıldığı gözönüne alınırsa, artık eski sürüm belge çözümleyici kullanımının geçerli bir nedeninin kalmamış olması gerekir, dolayısı ile kod gizlemenin de mantıklı bir gerekçesi kalmamıştır. Yine de kod okumakta yetersiz kalan eski sürüm belge çözümleyicilerini kullanan kullanıcılar için, kod gizlemesi yararlı bir önlem olabilir.

Programlamada geçerli eğilimin tersine, HTML kodlarının arasına aşırı yorum satırları yerleştirmek iyi bir yöntem sayılmaz. Yazılıma her yorum satırı, belgenin indirilme süresini arttırıcı bir etki yapacağı unutulmamalıdır.

Yazılmış olan Kodların Denenmesi ve Doğrulanması

HTML kodlarının yazımından sonra, ilk aşamada kod ve bağlantı değerlendiricileri ile yazılımiş olan kodların geçerliği sınanmalıdır.

Kod doğrulanması kod denenmesinin ilk aşamasıdır. Kodların spesifikasyonlara uygunluğunu, kod doğrulayıcıları (code validators) belirler. Ticari kod doğrulayıcıları yanında, W3C de bir on-line kod doğrulayıcısı çalıştırmaktadır. Tekrar edelim, HTML kodlamasında, kod doğrulanması çok önemlidir. Belgelerin ileride XHTML platformuna yükseltileceği düşünülerek, belge kodlamasında zorlayıcı bir neden olmadıkça, geçici spesifikasyondan kaçınıp kesin spesifasyona uygun kodlamalar yapılmalı ve her belgenin mutlaka kod geçerliliği doğrulanmalıdır.

Kodlanmış sayfaların, kod geçerliliği doğrulandıktan sonra, gerçek sunucularda yayınlanmadan önce yazıldığı bilgisayar sisteminin yerel sunucusunda denenmelidir. Eğer kodlar salt HTML kodlarından oluşuyorsa, dosyanın bir belge çözümleyicide açılıp görüntülenmesi denenmesi için yeterlidir. Hiçbir belge çözümleyici henüz standartlara tam olarak uyum sağlamadığı için, yeni yazılmış kodların olabildiğince farklı belge çözümleyicilerde denenmesi çok yararlı olacaktır.

Günümüzde, Web sayfalarının çok çeşitli ve çoğu da sunucu tarafında değerlendirilmesi gereken scriptler içeren karmaşık program türleri olduğu gözönüne alınırsa, tüm denemeler için, sadece kullanıcı tarafı scriptlerinin değerlendirilmesi yeterli olmaz. Bu durumda, yerel sunucuların kullanılması gereklidir. Yerel sunucular, Microsoft Personal Web Server (PWS), Microsoft Internet Information Server (IIS) APACHE gibi, kullanıcıların bilgisayarlarında çalışan sunucu programlarıdır. Bu yerel sunucular kurularak, sunucu üzerinde çalışabilen scriptleri içeren Web sayfaları denenir ve eğer kodlarda aksayan bir yön varsa, sayfa gerçek sunucularda yayınlanmadan önce hatalar düzeltilir.

Yerel makinede tüm kontroller, olanakların elverdiği en üst düzeyde tamamlandığında, kodları içeren dosyalar bir FTP programı yardımı ile, sunucuya yüklenir ve genel kullanıma sunulur.

 

 

Son Güncellenme Tarihi : 18.09.2005 18:00  

validate in W3C !Valid HTML 4.01!