Roger Johansson tarafından kaleme alınan XHTML'in tam olarak nasıl kullanılıp sunulması gerektiğini anlatan ve günümüzde sıkça gördüğümüz yanlış kullanımını dile getiren her web profesyonelinin kesinlikle okuması gereken makalenin Türkçe çevirisi.

Geçtiğimiz yaz doğru bir biçimde XHTML kullanımı için dokümanların application/xhtml+xml MIME türü ile sunulması gerektiği konusu ile ilgilenmeden önceki birkaç yılda XHTML kullanıyordum. Öte yandan çalışmalarımda bazı problemler ile karşılaşacağımı da biliyordum. Gerçekten XHTML kullanmaya başlarsanız dışardan basit sorunlar gibi görünen bu problemlerin hayatı nasılda zorlaştırdığını kendiniz de görebilirsiniz.
Bu makalenin XHTML kullanımına karşı bir tartışma başlatmak amacı ile kaleme alınmış olmadığına dikkat çekmek istiyorum. Sadece potansiyel tehlikeleri işaret edip bazı konuları dile getirmekten başka bir amacım yok. Ne kullanacağınız size kalmış tabi; HTML 4.01, tüm tarayıcılar için text/html olarak XHTML 1.0, uyumlu tarayıcılara application/xhtml+xml olarak diğerlerine text/html olarak XHTML sunmak ya da tamamen farklı bir şey.
Makaleyi kaleme almamın bir diğer sebebi ise; bazı durumlarda sorunlara çözüm bulabilmek için ve bilgi edinmek için fazlaca zaman harcayıp başkalarından yardım istemek zorunda kaldığım bu konularda sizlere yardımcı olabilecek ve başlangıçta bilinmesi gereken bilgileri sizlerle paylaşmak istememdir.
Burada bahsettiğim sorunlar sadece application/xhtml+xml MIME türünü tanıyabilen ve bu nedenle XHTML'i XML olarak değerlendiren tarayıcılarda meydana geldiğine dikkat etmelisiniz. Daha önce bu sorunların dile getirilmemesinin en önemli sebebi de bu tür tarayıcıların az sayıda kullanıcı tarafından kullanıyor olması olabilir. Bu nedenle olsa gerek neredeyse kimse XHTML'in text/html olarak sunulmasından rahatsız değildi.
Bugün ise XHTML'i application/xhtml+xml olarak sunmak giderek daha olağan bir hal almış durumda. Ben bunun için iki sebep görüyorum;
text/html olarak sunulduğunda) birçok kez tartışılıp üzerinde kafa yoruldu. Eğer bu tür bir tartışmanın parçası olduysanız ne demek istediğimi daha iyi anlıyorsunuzdur.Eğer sizde benim gibi doğru medya türünü kullanarak XHTML sunmak ve doğru içerik sunumunu yapmak istiyorsanız olası problemler hakkında fikir sahibi olmalı ve bu sorunları aşmanız için neler yapmanız gerektiğini bilmelisiniz. Konu ile ilgili oldukça ilginç ve çok sayıda makale olduğu gibi çeşitli script ler de mevcut. Bunlar arasında şahsi kanaatimce en iyilerinden olan "İçerik yapılandırması" ve "XHTML'i doğru MIME türü ile sunmak" başlıklı makaleleri okumanızı tavsiye ediyorum.
Çevirmenin notu: Makale içerisinde geçen “içerik yapılandırması” sözü, “Content Negotiation” kelimesinin Türkçe’ye çevirisinden gelmektedir. Tarayıcının tanıyabildiği MIME türü bilgilerine göre sayfanın hangi MIME türü ile yayınlanacağını ve içerikte ne gibi değişiklikler yapılacağını belirten bir işlemi ifade etmektedir. Genelde ASP ve PHP gibi sunucu taraflı bir programlama dili ile yapılan ufak scriptlerden oluşur.
XHTML ve HTML arasındaki en göze çarpan farklar, hemen her XHTML dokümanında listelenmektedirler; element isimleri ve parametreleri için küçük harf kullanın, her zaman parametre değerlerini tırnak içine alın, parametre minimalizasyonu kullanmayın, her element etiketinin sonlandırılmış olduğundan ve yanlış sıralanmış element olmadığından emin olun vs... Fakat XHTML'in application/xhtml+xml olarak sunulması gerektiğini söyleyen daha çok doküman olmalıydı.
Dokümanlar iyi yapılandırılmış hatalara ödün vermeyen ve kabul etmeyen XML yapısında olmalıdırlar. Eğer doküman iyi yapılandırılmamış ise tarayıcı (gördüğüm kadarıyla Mozilla, Firefox, Netscape, Camino, Opera, Safari ve OmniWeb gibi birçok tarayıcı – Internet Explorer hariç tabi) ziyaretçiye bir hata mesajı göstererek sayfayı göstermeyi sonlandırıp kullanıcıyı uyarmaktadır.
Diğer taraftan artık daha fazla özel karakterler ile kodlanmamış ampersantlara yer yoktur. (& için & kullanımı gibi)
Çevirmenin notu: Dokümanda geçen "iyi yapılandırılmış" sözü, "well formated" deyişinin çevirisinden gelmektedir ve dokümanın kaynak kodunun standartlara uygun bir biçimde yapılandırılıp geçerli kod yapısı ile hazırlanmasını ifade etmektedir.
Eğer UTF-8 veya UTF-16 dışında bir karakter kodlaması kullanıyorsanız, karakter kodlama bilgisi HTTP başlık bilgisi ile gönderilmedikçe XML deklarasyonları şarttır.
<?xml version="1.0" encoding="iso-8859-9"?>
Sadece beş ön tanımlı kodlanmış özel karakter kümelerinin (<, >, &, ", ve ') desteklendiği garanti edilmektedir. Diğerleri ise desteklenmeyebileceği gibi olduğu gibi de çıktı verilebilmektedir. Eğer XHTML dokümanınız ve ” gibi özel karakterler içeriyorsa Safari karakterleri olduğu gibi bu şekilde çıktı verecektir. Opera "bilinmeyen karakterler" olarak değerlendirecek, Mozilla ailesi ise özel karakterleri tanıyıp HTML içindeymiş gibi gösterecektir. (Eğer doküman tarayıcının sahte DTD katalogunda tanımlı bir genel (public) tanımlayıcı ile ilişkilendirilmiş ise)
UTF-8 karakter kodlamasını kullanmak, özel bir karakter kümesi ile şifrelenmiş ifadeler (entities) kullanmadan ihtiyacınız olan (hemen hemen tüm) karakterleri dokümanınızda yazabilmeniz için en iyi uygulama olarak önerilmektedir.
SGML yorumlarının (HTML tarzı yorumlar; <!-- yorum -->) içeriği script ve style elementleri içinde kullanıldıklarında yorum olarak değerlendirilebilir (değerlendirilir).
Bu tür SGML yorumlar ile script ve style bloklarının içeriklerini bu etiketleri tanımayan ve düz metin olarak görüntüleyen eski tarayıcılardan gizlemek için kullanılırlar.
SGML içerisindeki her şey tarayıcı tarafından göz ardı edilerek yorum olarak değerlendirilir.
Bu style ve script elementlerinin içeriğini eski tarayıcılardan gizlemek için SGML kullanımı doksanların ortalarında alışkanlık halini almıştı. Kişisel deneyimlerime göre; HTML kullanırken tarayıcılar çok ender olarak bu içerikleri güvenli bir biçimde göz ardı etmekteler.
script ve style elementleri PCDATA blokları olup, CDATA (character data) blokları değildirler. Bu nedenle içerdikler XML'e benzeyen her şey XML olarak ayrıştırılır ve iyi yapılandırılmamışlar ise hatalara sebep olabilirler.
Bir script veya style bloğu içerisinde <, &, ve -- ifadelerinin kullanımı için CDATA bölümü olarak sarılmalıdırlar.
<script type="text/javascript">
<![CDATA[
...
]]>
</script>
Bir CDATA kısmı içinde her türlü karakter sıralamasını, XML verisi olarak ayrıştırılmaksızı kullanabilirsiniz (CDATA kısmının sonlandığını belirten ]]> ifadesi dışında).
Gerektiğinde dokümanı text/html olarak güvenli bir biçimde göndermek için, CDATA kısmının açılış ve kapanış etiketleri onları CDATA uyumlu olmayan tarayıcılardan gizleyebilmek için yorum haline getirilmelidirler.
<script type="text/javascript">
// <![CDATA[
...
// ]]>
</script>
<style type="text/css">
/* <![CDATA[ */
...
/* ]]> */
</style>
Eğer eski tarayıcıların gerçekten CDATA kısmının içeriğini görmemesini istiyorsanız Ian Hickson tarafından XHTML'yi text/html olarak göndermenin zararları makalesinde tanımlanmış olan daha kompleks bir metot kullanmalısınız.
<script type="text/javascript">
<!--//--><![CDATA[//><!--
...
//--><!]]>
</script>
<style type="text/css">
<!--/*--><![CDATA[/*><!--*/
...
/*]]>*/-->
</style>
Daha iyi bir çözüm olarak; içerik yapılandırma scriptiniz sayfayı text/html olarak sunmadan önce bütün CDATA kısımlarını silmesi olabilir.
Not: Çalışmalarımda Opera'nın XHTML içerisinde yorum haline getirilmiş CDATA kısımları ile problemleri olduğunu gördüm. Yorum haline getirilmiş CDATA kısmı bir style etiketi içerisinde iken, Opera (7.54 sürümü ile Mac üzerinde test edildi) ilk stil kuralı ile bütün style elementi içindeki @import kurallarını göz ardı etmektedir. Bu davranışı açıklayacak bir Opera böceği (bug) olup olmadığını bilen birisi varsa lütfen bizlerle paylaşsın.
Tabiî ki, en temiz ve güvenli yol bütün CSS ve JavaScript'leri harici dosyalara taşımaktır fakat buda her zaman pratik bir çözüm olmayabilir.
HTML içerisinde bir tablo için tbody elementi kodlarda yer almıyorsa tarayıcı tarafından algılanacaktır. Fakat XHTML de bu olmaz. Eğer açıkça tbody eklemezseniz yapıya dahil edilmeyecektir. CSS seçicilerini yazarken ve JavaScript kodlarken bunu aklınızdan çıkartmamanız gerekmektedir.
XHTML içerisinde JavaScript kullanıldığında, document.write() metodu çalışmayacaktır. Ian Hickson Neden document.write() XML içerisinde çalışmaz? başlıklı makalesinde bu durumun sebebini açıklamaktadır. Bunun yerine document.createElementNS() metodunu kullanarak DOM tabanlı bir çözüm geliştirmeniz gerekmektedir. Experts Exchange forumlarındaki şu başlıktan konu ile ilgili daha fazla bilgi alabilirsiniz.
XHTML içerisinde XML metotlarına uyumlu CSS kuralları tanımlanırken harici CSS dosyası yükleme işlemi için, XML stil dosyası deklarasyonları (XHTML 1.0 ikinci sürüm: XML sunarken stil elementlerinin işaret edilmesi içerisinde; XML stil dosyası deklarasyonu ve XML dokümanına stil dosyası dahil etmek içerisinde; XML stil dosyası işlemleri yönergesi olarak geçmektedir) kullanılmalıdır. Başka bir değişle bir stil elementi kullanırken stil elementlerine işaret etmek için XML stil dosyası deklarasyonları kullanılmalıdır. Bunu yapabilmek için style elementlerine id parametresi ekleyip onları tanımlamalı ve bunu XML stil deklarasyonunda işaret etmelisiniz.
<?xml-stylesheet href="stylesheet1.css" type="text/css"?>
<?xml-stylesheet href="#stylesheet2" type="text/css"?>
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>XML stylesheet declaration</title>
<style type="text/css" id="stylesheet2">
@import "stylesheet2.css";
</style>
</head>
Bunun ne kadar gerekli olduğundan ve XML stil deklarasyonu kullanılmadığında ne gibi hatalar oluşacağından tam olarak emin değilim. Belki birileri beni bu konuda aydınlatabilir.
Çevirmenin notu: Makalenin bu bölümü başta olmak üzere bazı yerlerinde geçen "işaret etme" deyimi "referencing" kelimesinin çevirisi olarak kullanılmaktadır. Makale içerisinde bir dosya ya da elemente doküman içerisinde işaret edilmesi veya doküman ve diğer elementlerle ilişkilendirilmesi anlamındadır.
XHTML içerisinde body elementine uygulanan CSS özelliği tüm görüntü alanına uygulanmayacaktır. Bu bir arka fon resmi veya rengi kullanıldığında oldukça dikkate değer bir hal alabilmektedir. HTML içerisinde ise body elementine bir arka fon özelliği uygulandığında bu bütün sayfayı kapsayacak şekilde uygulanır. Bu nedenle XHTML içerisinde html elementini de stiller ile biçimlendirmelisiniz. Juicy Studio'da yer alan CSS body elementi testi ile bu davranışı daha iyi gözlemleyebilirsiniz.
CSS kurallarındaki element ve parametre isimleri XHTML içerisinde büyük-küçük harf duyarlılığına sahiptir (ve küçük harfle yazılmış olmalıdırlar). HTML, XHTML ve CSS kodlarken bütün element, parametre ve seçici isimlerini küçük harfle yazmak, harf duyarlılığı problemlerinin önüne geçmek için oldukça basit ve etkili bir yöntemdir.
Yetenekli tarayıcılar ile XHTML'i application/xhtml+xml olarak sunmaya karar verdiğimde okuyabileceğim böyle bir makale olsaydı zamanında yaşadığım baş ağrılarım azalabilirdi. Ben şuanda bile HTML 4.01 Strict kullanmayı tercih ederim. Fakat yinede bir şeyler öğrenip deneyim kazandığım için şikayetçi değilim, öğrenmek her zaman iyidir.
Umarım aslında doğru bir biçimde XHTML kullanımının ne olduğu hakkında biraz da olsa bilgi sahibi olmanızı sağlayabilmişimdir ve yine umarım artık hangi yolu seçip seçmeyeceğiniz konusunda artık daha fazla bilgi sahibisinizdir.
Muhtemelen XHTML ve HTML arasında burada bahsedemediğim başka farklar da vardır. Bu nedenle XHTML'i application/xhtml+xml olarak sunarken karşılaştığınız gizli tehlikeleri eklemekten ve herhangi bir hata ve eksik gözünüze çarptıysa bunu belirtmekten çekinmeyin.
Orjinal makale: The perils of using XHTML properly Roger Johansson - 456bereastreet.com
Çeviri / Translation: Orhan Veli Firik Mart 2007

Sitemizden indirdiğiniz eklentileri nasıl yükleyeceğinizi ve kullanacağınızı bilmiyorsanız bu makaleden başlayabilirsiniz. Genel olarak Dreamweaver eklentileri üzerine kısa bir yazı buyrun...
Yorumlar
Henüz hiç yorum eklenmemiş
Yorum ekleyebilmek için öncelikle üye girişi yapmanız gerekmektedir