Bölüm 3

Blokdüzey Elementler

sayfa 3


<object>, <param>, <applet> ve <script> Elementleri

 

<object> Elementi

 

<object> Elementi, HTML sayfasına gömülü bir nesneyi belirtir. Bu nesne, bir resim, Active X denetimi, bir başka belge, bazı uygulamalar olabilir. Bu element daha önceleri, <img>, <map>, <applet> gibi çeşitli farklı elementler tarafından yürütülen nesne tanımlama işlevinin tümünü kendi üzerinde toplamıştır. Bu karakteri ile, <object> elementi, bir soysal gömülü içerik tanımlayıcısı rolünü oynamaya adaydır. HTML 4.01 kesin spesifikasyonunda, <applet> elementinin değeri, <object> elementi lehine kaybettirilmiştir.

<object> Elementinin DTD deki tanımının incelenmesi, bu element için ilk bilgilerin alınmasını sağlayacaktır:

 

DTD deki tanımına bakıldığında, <object> elementinin boş bir element olmadığı ve başlangıç ile bitiş imlerinin kullanımının zorunlu olduğu görülür. İçerik modelinden, bu elementin mutlaka herhangibir içeriğinin olması gerekmediği anlaşılır. <object> Elementinin içeriği hiç olmayabileceği gibi, istendiği kadar parametre elementi veya da akış grubu elementlerinden birisi olabilir. Parantezin dışındaki yıldız işareti, bu elementlerin her birinin hiç kullanılmayabileceğini veya istendiği kadar tekrar edilebileceğini göstermektedir.

<object> Elementi sadece parametre elementini içermesi halinde belgenin <head> kısmında bulunabilir. Bu durumda, <object> elementinin belgeye ekleyeceği nesne, bir Java appleti, bir Python appleti, bir ActiveX kontrolu gibi doğrudan görüntülenmeyen bir nesne olacaktır. Burada, parametre elementinin işlevi, değişkenlerin başlangıç değerlerinin verilmesidir.

<object> Elementinin akış grubu elementlerinden bir, veya birkaçını içermesi durumunda, belgenin <body> kısmında kullanılması gerekir. Çünkü, bu tip elementler, doğrudan görüntülenebilen elementlerdir. <object> Elementi özellikle, resim ve resim haritaları gibi nesnelerin, tümleşik olarak sadece bir tek element kullanılarak görüntülenebilmesi amacı ile oluşturulmuştur. <object> Elementinin akış elementleri içine dahil olması nedeni ile, <object> elementi, içiçe <object> elementlerini içerebilir. <object> Elementi, bir nesneyi değerlendiremezse, içeriğini değerlendirmeye çalışacaktır. Bu durumda, en dış halka en önce çözümlenmeye çalışılır ve başarılı olunursa, iç halkalar işlem görmez. Yani, bir tür alternatif işlem şeklinde bir yapılanma sağlanır. Eğer bir <object> elementinin içeriği olarak düz bir metin parçası verilirse, belge çözümleyicisinin <object> elementi ile tanımlanan nesneyi değerlendirememesi halinde bu metin parçasını görüntülenir. Bu durumda, <object> elementinin alt niteliğininin bulunmamasının nedeni anlaşılabilir, çünkü bu elementin metin içeriği bir alternatif nesne niteliği taşır. Örnek olarak, iç içe <object> elementi yapılanması ile, önce bir Java appleti çalıştırılmaya çalışılır, bu başarılı olmazsa iç <object> elementinin belirtiği resim görüntülenmeye çalışılır, bunların hepsi başarısız olursa, en iç içerik olan metin parçası görüntülenir. Bu konuda bir uygulama, b3s2uygulama3.htm de incelenebilir.

DTD deki tanımına göre, <object> elementinin sözdizimi :

<object       (Başlangıç imi: Gerekli)

Ortak Temel Nitelikler   (Çekirdek Nitelikler, Uluslarasılaştırma Nitelikleri, Script Yazılabilecek Olaylar)

declare = (Nesneyi sadece belirt) [YZ]

classid=" URI" (program yer bilgisi)  [TB] 

codebase=" URI" (archive, classid ve data verileri için temel düzeyi dosyalama yeri bilgisi)  [TB] 

data=" URI" [nesne(object) veri yer bilgisi]  [TB] 

type=" İçerikTipi" [YZ]

codetype=" İçerikTipi" [YZ]

archive=" URI" (program yer bilgileri listesi)  [TB] 

standby=" metin" (nesne yüklenirken görüntülenecek bilgi niteliği) [YD]

height="uzunluk" (nesne(object) yüksekliği) [YN]

width= "uzunluk"(nesne(object) genişliği) [YN]

usemap="URI" (istemci-tarafı görüntü haritası yer bilgisi)  [TB] 

name=" cdata" (nesne(object) ismi) [YZ]

tabindex=" sayı" (nesne(object) tab öncelik sayısı) [YN]

           >

           İçeriği : İlk önce <param> (varsa) ardından akış elementleri (en az bir içerik gereklidir)

</object>         (Bitiş imi: Gerekli)

<object> Elementini içerebilecek Elementler : <head>, satıriçi ve blokdüzey elementler (<pre> hariç).

şeklindedir.

<object> Elementinin Nitelikleri

Ortak Temel Nitelikler     (Çekirdek Nitelikler, Uluslarasılaştırma Nitelikleri, Script Yazılabilecek Olaylar)      (Daha önceden incelenmiştir)

declare (declare) [YZ]

Bu nitelik, nesnenin oluşturulması, fakat o anda başlatılmaması için kullanılır. Bu nesne kendi id değeri verilerek ileride başlatılabilir. Bu özellik bir tür forward tipi deklarasyon olarak düşünülebilir. Çok sık kullanılan bir özellik değildir ve belge çözümleyicilerce nekadar desteklendiği de fazla açık değildir.

classid="nesne tipi: URI[TB] 

Bu nitelik, nesnenin bir URI bilgisi yardımı ile tanıtılması amacı ile kullanılır. Tanıtılan nesne tipine bağlı olarak, classid niteliği  data niteliği ile beraber veya  ona alternatif olarak kullanılabilir fakat, şu anda sadece Java appletleri gibi kod içeren nesneler için classid niteliği, resim tipi nesneler için ise data niteliği kullanılmaktadır. Tanıtılan nesne, tipine bağlı olarak <object> elementinde her birisi başka bir türün tanıtıldığı birden fazla classid niteliği olabilir. Fakat, aynı türden sadece bir tane classid tanıtımı yapılabilir. Yani, aynı <object> elementi içinde iki tane Java sınıfı çalıştırılamaz. classid Niteliği, biri nesne türü diğeri de nesnenin bulunduğu yeri belirten iki bilgiden oluşur:

örnek : classid="java:fphover.class"

Bu örnekte birinci bilgi, bir Java appletinin çalıştırılacağıdır. İkinci bilgi de bu appletin bulunacağı yer ve appletin sınıf dosyasının adıdır. classid Niteliğindeki URI bilgisi açık (explicit) bir bilgi değil kapalı bir ifadedir. Bu bilginin sadece nesnenin bulunduğu dosya adı açık olarak belirtilebilir. classid Niteliği ile belirtilen dosya adı, codebase ve <base> bildirimleri gözönünde tutularak full URI bilgisi oluşturulur.

classid Niteliği ile belirtilen dosya adının aranacağı yerin belirtilmesi içi ilk incelenecek olan nesnenin codebase bildirimidir. Eğer codebase bildirimi, mutlak bir URI ifadesi ise, nesnenin aranacağı dizin bu bilgi ile oluşturulur. Yukarıdaki örnekte, eğer codebase ="http://xyz.com" olarak belirtilmişse, nesnenin aranacağı tam URI ifadesi, "http://xyz.com/fphover.class" olarak değerlendirilir. Bu bilgi, sadece sözkonusu nesnenin yerinin bulunması için geçerlidir, nesne arandıktan sonra geçerliliğini kaybeder ve sayfanın varsayılan yer bilgisi yeniden geçerlilik kazanır. Eğer codebase ="./applets/" şeklinde bir bağıl URI tanımı yapılmışsa bu bilgi, sayfanın varsayılan yer bilgisine eklenerek değerlendilir. Yukarıdaki örnekte, bu "sayfanın bulunduğu yerin URI değeri/applets/fphover.class" şeklinde çözümlenir. "sayfanın bulunduğu yerin URI değeri" inin belirlenmesi için <base> bildirimi yapılmışşsa, bu bildirimin belirttiği yer bilgisi geçerli olur. Yukarıdaki örnekte eğer <base href="hhtp://www.seyirdefteri.com"> şeklinde bir bildirim yapılmışsa, codebase niteliğindeki bildiriminin de bu bilgiye eklenmesi ile nesnenin aranacağı tam URI bilgisi "http://www.seyirdefteri.com/applets/fphover.class" şeklinde oluşturulur. Nesnenin aranması tamamlanınca, sayfanın geçerli yer bilgisi yine <base> bildirimi ile belirtilmiş olan "http://www.seyirdefteri.com" değeri olur. Eğer hiç bir <base> bildirimi yapılmamışşsa veya <base> bildiriminde bir bağıl URI bildirimi yapılmışsa, bu bildirim dikkate alınmaz ve sayfanın varsayılan URI değeri olan sayfanın bulunduğu yerin URI değeri geçerli olarak kabul edilerek, codebase bildirimi ile birleştirilerek, nesnenin aranacağı bağıl URI değeri, "./applets/fphover.class" olarak değerlendirilir. Bu konuda, b3s2uygulama1.htm uygulamasının incelenmesi ile daha açıklayıcı bilgi edinilebilir. Bu uygulamada, <base >, codebase ve classid bildirimleri değiştirilerek sonuçlar incelenmelidir.

classid Niteliği ile, tanıtılan nesne türlerinin çözümlenmesini desteklemek için, koşul olmamasına karşın codetype niteliği kullanılarak, çözümlenmesi istenen nesne tipinin belge çözümleyiciye bildirilmesi iyi bir uygulama stili olacaktır.

codebase=" URI"  [TB] 

Bu nitelik, mutlak veya göreli yer referanslarının, temel düzeyinin belirtilmesi amacı ile kullanılır. Her türlü mutlak ve göreli URI değerleri kullanılabilir. Bu nitelik belirtilmemişse, temel düzey, geçerli belgenin bulunduğu dizindir.

codebase Niteliği, <applet> elementinin code niteliğine benzer ve sadece kod içeren nesnelerin URI değerlerinin bulunması için kullanılır. Resim tipi nesneler için, data niteliği kullanılır. Kod tipi nesneleri destekleyen tüm güncel belge çözümleyiciler, codebase niteliğini sorunsuz desteklemektedir

codebase Niteliği ile yapılan yer bildirimi sadece belirtilen nesnenin bulunması ile sınırlıdır ve nesnenin bulunması işlemi tamamlandıktan sonra, sayfanın varsayılan yer bilgisi yeniden geçerl olur.

codebase Niteliği sorunlu bir niteliktir ve son derece dikkatli kullanılmalıdır. Her şey bir Web'in dosya düzeni ile ilgilidir. Kesin bir zorunluluk olmamasına rağmen, bir Web de en üst dizin ana sayfanın bulunduğu dizin olmalıdır. Bu ana dizin altındaki dizinler, birer alt Web (sub Web) olarak da adlandırılır. Bu alt Web'lerden biri de, Java sınıf dosyasını çağıran sayfanın bulunduğu dizindir. Eğer Java sınıf dosyası başka bir dizinde ise, bunu codebase ile belirtmek gerekir. W3C bu niteliğin, sadece sayfanın bulunduğu dizinin alt dizinleri ile sınırlandırılmasını tavsiye etmiştir. HTML 4.01 kesin spesifikasyonu bu önlemin güvenlik nedenleri ile alındığını ve uyulma zorunluğunu açıkça ifade etmektedir fakat belge çözümleyicilerin bazıları bu kısıtlamayı gözetmemekte ve codebaseURI değerleri istendiği gibi seçilebilmektedir. Bu sorunlar, <object> elementinin belge çözümleyicilerdeki desteğinin henüz yeterli olmamasından kaynaklanmaktadır ve zaman içinde düzeltileceği umulmaktadır.

codebase Niteliği ile ilgili uygulama örnekleri, classid niteliği incelenirken de verilmişti. Örnek olarak: <base href ="http/pegasus/"> ve <object data="button1.png" codebase="./images/" type="image/png"></object> ise, resmin aranacağı full URI değeri, "http://pegasus/images/button1.png" olarak tanımlanacaktır. Bu konuda, b3s2uygulama1.htm ve b3s2uygulama2.htm uygulamaları dikkatle incelenmeli ve benzer uygulamalar ve bağıl URI değerleri kullanılarak belge çözümleyicilerin desteği gözlenmelidir.

Uygulamalarda, taşınabilirliğin sağlanması için bağıl URI değerlerinin kullanımı tercih edilmelidir.

data=" URI" [nesne(object) veri yer bilgisi]  [TB] 

data Niteliği, < img> elementinin src (source=kaynak) niteliğine benzer, prensip olarak her tür nesne için kullanılabilmesine karşın şu anda sadece resim nesneleri için kullanılmaktadır. <object> Elementi, aslında, değerlendirmesi gereken nesne türünü algılama yeteneğine sahip olmalıdır. Buna rağmen uygulamada, belirtilen nesnenin tipinin kolay tanınması için dataverileri için type,program (applet) verileri için codetype niteliklerinin belirtilmesi yararlı olacaktır.

type="İçerikTipi" [YZ]

data Niteliği ile belirtilen medya türlerinin niteliğinin belirtilmesi için kullanılır. Şu anda sadece resim tipi verilerin MIME tiplerini belirtmek için kullanılmaktadır. Örnekler için b3s2uygulama2.htm ve b3s2uygulama2.htm uygulamaları incelenebilir. Sık kullanılan içerik tipleri olarak, "image/gif" , image/png", "image/jpeg" sayılabilir. İçerik tiplerinin en geniş listesi  ek 3 sayfa 3 de verilmiştir.

codetype="İçerikTipi" [YZ]

Bu nitelik aslında isteğe bağlıdır, fakat classid niteliği belirtilmişse, yani bir program nesnesine işaret ediliyorsa, bu niteliği de belirtmek yararlıdır, çünkü ilgisiz nesne tiplerinin indirilmesine gerek bırakmayarak, sayfanın yüklenmesini hızlandırır. Bu  nitelik açıkça belirtilmediğinde, varsayılan değeri typeniteliğinin değeri olarak kabul edilir. En çok kullanılanılan, "uygulama/java" tipidir.

archive="URI" (program yer bilgileri listesi)  [TB] 

Bazı, yardımcı dosyaların sıkıştırılmış olarak indirilmeleri, yüklemede zaman kazandırır fakat pratikte gerekli olacak dosyalar, çok az durumda önceden bilinebilir. Arşiv dosyaları, boyutları küçültülmüş olan sıkıştırılmış veri dosyalarıdır. archive Niteliği, birbirinden boşlukla ayrılmış arşiv dosyalarının, mutlak veya codebase değerine göre göreli URI değerleridir. Java dosyaları için, standart sıkıştırma tipi *.jar dosyalarıdır. Bu dosyaların üretilebilmesi için, Java Development Kit 1.1 ve üzeri sürümlerde gerekli araçlar bulunmaktadır. archive Niteliği fazla kullanılan bir nitelik değildir ve belge belge çözümleyicilerce yeterince desteklenmemektedir. Bu nedenle kullanımında dikkatli olunması ve kodların iyi denenmesi gereklidir.

standby="metin" [YD]

Nesnenin indirilmesi sürerken bir uyarı mesajı görüntülenmesi istenirse, standby niteliğinin değeri olarak verilebilir.

height=" uzunluk" (nesne yüksekliği) [YN] width= " uzunluk"(nesne genişliği) [YN]

Nesne bir resimse, orijinal boyutları vardır ve belge çözümleyiciler, orijinal boyutları algılayarak resimleri ölçeklendirerek en iyi şekilde gösterebilmek için çalışırlar. Nesne tanımı ile birlikte height ve width niteliklerinden yararlanarak uyulması gereken genişlik ve yükseklik değerlerinin açık olarak belirtilmesi, belirtilen değerlere öncelik sağlar ve belge çözümleyiciler bu zorlanmış değerlere göre ölçekleme yapmaya çalışırlar. Burada dikkat edilmesi gereken konulardan birisi, oluşturulan görüntünün her ekran çözünürlüğünde her monitor ve ekran kartı ile aynı sonucu vermeyebileceğidir. Diğer bir dikkat edilecek nokta da, resimlerin orijinal boyutlarının değiştiği zaman görüntülerinin de bozulabileceğidir. Bu durumda, bir resmin boyutlarının değişmesi gerektiği zaman, belki de en doğru davranış, resmi oluşturan grafik programının kullanılması ile istenilen boyutlarda yeni bir resmin oluşturulmasıdır. Metin şeklinde görüntü veren Java appletleri boyut değiştirilmesinden daha az etkilenirler. Yine de alınacak sonuçların geniş olarak denenmesinde her zaman yarar bulunmaktadır.

usemap="URI" (istemci-tarafı görüntü haritası yer bilgisi)  [TB] 

Bu nitelik yerel bir URI değeridir ve bu değer, bir <map> ( Görüntü Haritası) elementinin belge içindeki yerine bağlantı sağlayacaktır. Görüntü haritaları, üzerinde belirli koordinatları olan ve bağlantı amacı ile kullanılan resimlerdir. Bu niteliğin kullanılması, tanıtılan nesnenin bir resim olması anlamına gelmektedir.

name="cdata" (isim) [YZ]

Bu nitelik, element tanımı için bir ismi belirtir. Bu isim tüm belge için tek (eşşsiz=unique) olmalıdır. Stil sayfaları veya script programları bu isimden yararlanarak elemente erişim sağlayabilirler. Bu nitelik sadece geriye doğru uyum amacı ile konulmuştur ve kullanıcılar artık element tanımı için sadece "id" değerini kullanmalıdırlar.

tabindex="sayı" (tab öncelik sayısı) [YN]

Bir sayfada nesneler arasında, tab tuşuna basılarak hareket edilebilir. Tab tuşunun basılması ile belirli bir sıra ile nesnelere odaklanılır. Bu tab tuşunun basılması ile nesnelere odaklanma sırası tabindex niteliğinde kullanılacak bir tamsayı değeri ile değiştirilebilir. Tab sıra sayısı 0-32767 arası bir sayı olabilir, fakat bir sayfada sınırlı sayıda nesne bulunabildiğinden gerçekçi değerler fazla yüksek olamaz.

<object> Elementinin İçeriği ve <param> Elementi

<object> Elementi belgenin <body> kısmında kullanıldığında, bazı elementlerin içeriği olabildiği gibi, tek başına da kullanılabilir ve çeşitli akış grubu elementlerini içerebilir. <object> Elementinin içerdiği elementler arasında, varsa ilk sırayı nesnenin parametrelerini belirleyen <param> elementi almalıdır.

 

<param> Elementi

 

DTD de <param> elementi :

 

şeklinde tanımlanmıştır. Bu bilgilere göre, <param> elementi boş bir elementtir ve sadece Başlangıç imi zorunludur. <param> Elementi boş bir element olduğundan içeriği yoktur, Bitiş iminin kullanımı yasaklanmıştır ve sadece nitelikleri ile işlevini sağlayacaktır. <param> Elementinin söz dizimi :

<param       (Başlangıç imi: Gerekli)

          id="isim" [YD]

          name="cdata"  [TB] 

          value="cdata"  [TB] 

          valuetype=("data|ref|object") ("data" veya "ref" veya "object") [YZ]

          type="içerikTipi" [YZ]>

          İçeriği: Yok, <param> elementi, boş elementtir.

                      (Bitiş imi: Yasak)

<param> Elementini içerebilecek Elementler :<applet>, <object> Elementleri.

şeklindedir. <param> Elementinin tek işlevi, <object> ( ve devam ettirilmeyen <applet>) elementi için başlangıç değerlerinin sağlanmasıdır.

<param> elementinin nitelikleri

id = "isim" [YD]

Parametre nesnesine tüm belge boyunca geçerli olacak, tek ve eşsiz bir isim vermek için kullanılır.

name="cdata"

Name niteliği, <param> elementini veri sağlayacağı <object> elementine bağlar. Bu nitelik değerinin yazılışa duyarlı ( büyük/küçük harf yazılışı farklı etki yapan) olması, <object> nesnesinin ( ve devam ettirilmediği halde, geniş ölçüde kullanılan <applet> elemanının) içerdiği program türüne bağlıdır.

value="cdata"

Bu niteliğin değeri ve yazılışa duyarlılığı, HTML dili ile değil, <object> (veya <applet>) nesnesinin programlama dili ile ilgilidir. Bu değerler, nesnenin bir tür başlangıç değerlerine getirilmesi ( initialisation) görevini yaparlar.

valuetype=("data|ref|object") ("data" veya "ref" veya "object") [YZ]

Bu nitelik, üç tane değer alabilir. Muhtemel değerler:

type="içerikTipi" [YZ]

Bu nitelik değeri, sadece valuetype niteliği ref olarak bildirilmişse kullanılır. Bu durumda, type niteliğinin değeri, belge çözümleyiciye, URI değeri ile bildirilen lokasyonda, bulunacak belgelerin türünü belirtir.

<object> Elementinin Uygulanması

<object> Elementinde, <param> ve <object> Elementini takip edebilen akış grubu elementlerinin kapsamı çok geniştir. Bu elementler, tüm blok ve metin düzey (satıriçi) elementleri kapsamaktadır.

<object> Elementinin, Java Appletlerini çalıştırma yeteneğini sınamak amacı ile, aşağıda görülen örnek bir program yazılarak, b3s2uygulama1.htm adı ile kaydedilmiştir :

Bu örnekte, Sun Java 1.4 SDK içinde bulunabilen clock.class adlı bir Java sınıfı dosyası çalıştırılmak istenmektedir. Sayfanın temel URI değeri, <base> ile belirtilmiştir. codebaseNiteliğinin değeri olan bağıl URI, temel URI değerinden sonraki yol değerini belirtmektedir. Tarayıcıların, <object> elementinin tanımladığı nesneyi değerlendirememeleri durumunda, görüntülenecek bir alternatif metin de <object> elementinin içeriğine eklenmiştir. classid Niteliği, Java sınıf dosyasının adından başka, hiçbir URI değeri kabul etmemektedir. Yani, tüm URI bilgilerinin,<head> kısmındaki <base> ve <object> elementinin codebaseniteliğinden yararlanılarak tanımlanması zorunlu olmaktadır. Uygulama sayfası, en son sürüm belge çözümleyiciler, Internet Explorer 6.02 SP1, Netscape 7.02, Mozilla 1.5 ve Opera 7.23 ile denenmiştir. Alınan sonuçlar, Internet Explorer 6.02 SP1 dışında tüm programlarda hiçbir sorun olmadığını ve desteğin tam olduğunu göstermiştir. Tüm bu belge çözümleyiciler güzel bir analog saat görüntülemişlerdir. Internet Explorer 6.02 SP1 ise appleti çalıştıramamış ve alternatif metni görüntülemiştir. Bu durumda, çağıran sayfanın bulunduğu dizinin dışında bulunan bir Java sınıf dosyasının, <object> elementi kullanılarak çalıştırılması için belge çözümleyicilerden ortak destek sağlanamamıştır.

İkinci denemede, gerek Java sınıf dosyasının, gerekse çağıran sayfanın aynı dizinde olduğu bir uygulama denenmiştir. Bu deneme dosyası b3s2uygulama2.htm olarak kaydedilmiştir. Bu dosya birinci uygulama ile tamamen aynıdır, fakat dosyanın yeri clock dizininde olduğundan,

olarak değiştirilmiştir. Sonuçlar yine IE 6.02 dışında başarılıdır.

Bu sonuçlardan görüldüğü gibi, Java appletlerinin çalıştırılması için, <object> elementi henüz tüm belge çözümleyicilerde tam olarak desteklenmemektedir. Şu an için Java sınıf dosyalarının çalıştırılmasında, HTML 4.01 kesin spesifikasyonu ile değeri kaybettirilmiş da olsa, <applet> elementinden yararlanılması zorunluğu devam etmektedir. Bu durumda, zorunlu olarak HTML geçici DTD sine düşülmüş olunacaktır. Yine de, geçici DTD altında sadece <applet> elementi kullanılmalı ve değeri kaybolmuş başka hiç bir elementin kullanımına gidilmemelidir. Ancak bu şekilde, ileride XHTML kurallarına kolay uyum sağlayabilecek sayfaların oluşturulması sağlanabilir.

Bir başka deneme, <object> elementinin, çalıştıracak Java sınıf dosyasını bulamadığı takdirde, alternatif bir resim çalıştırmasının, o da çalıştırılamazsa, son bir seçenek olarak, bir metin görüntüleme yeteneğinin sınanması amacı ile yapılmıştır. Bu şekilde, sürümü ne kadar eski olsun, tüm belge çözümleyiciler en azından metin görüntüleme yeteneğine sahip olduklarından, sayfa hangi belge çözümleyici ile açılırsa açılsın, en az bir metin görüntüsünün elde edilebileceği düşünülmektedir. Bunun için, aşağıda görülen b3s2uygulama3.htm sayfası Web içinde bir dizine yerleştirilmiştir.

Aynı dizine, Nojava.png isimli bir resim de yerleştirilmiştir. Sayfanın bulunduğu dizinde bulunması gereken Java sınıf dosyası, bulunmaz.class dizine konulmamıştır. Bu durumda, belge çözümleyiciler Java sınıf dosyası bulamayacaklarından, alternatif resmi göstermeleri, eğer bu resim de görüntülenemiyorsa, en son seçenek olan olan metin içeriğini görüntülemeleri gerekir. Bunun nedeni, <object> elementinin nesnesini tanıyamayan belge çözümleyicilerın, bu nesneyi pas geçerek içeriği görüntülemeleri gereğidir. Gerçek durumda ise Internet Explorer 6.02 SP1 resmi görüntüleyememiş, sadece mesajı vermiştir. Diğerleri ise ne resim, ne de mesajı görüntüleyememişlerdir. Bu durumda, içiçe <object> yapılanması ve alternatif metin görüntülenmesi uygulamalarından da şimdilik uzak durmak gerekmektedir.

<object> Elementinin, <img> ve <map> ile belirtilebilen resim ve resim haritaları ile <applet> elementinin belirttiği appletleri henüz yeterince desteklenmemesi, W3C tarafından belirlenen spesifikasyonlara belge çözümleyicileri üreten ticari şirketlerin uymakta yetersiz hatta bazen de isteksiz olduklarının açık ve üzücü bir göstergesidir. W3C bu sorunu aşabilmek için, dünyadaki birçok bilimsel kuruluş ile ortak olarak Amaya adlı bir belge çözümleyici oluşturmaya çalışmaktadır. Amaya henüz başlangıç aşamasındadır ve şimdilik hiçbir script dilini desteklemediği için, kullanımdaki ticari belge çözümleyicilere alternatif olabilme niteliğini henüz kazanamamıştır. Gelecekte, Amaya'nın yeterince gelişmesi ile, spesifikasyonlar ve uygulamadaki belge çözümleyiciler arasındaki uyum sorunları temelinden giderilmiş olacaktır. Bu iki element de HTML 4.01 kesin spesifikasyonu ile şimdilik devam ettirilen, değeri kaybolmamış elementlerdir ve bu elementlerin kullanılması, <applet> gibi, HTML 4.01 katı kuralcı DTD den vazgeçmeyi gereketirmez. Ancak, <object> elementi bir ilerleme ve bir tümleştirici elementtir. Bu elementin başarıya ulaşması, şu anda, <applet>, <img>, <map> gibi üç değişik elementle yapılabilen çalışmaların bir tek <object> elementi ile yürütülebilmesini sağlayacaktır. Bu nedenle, yeteğinin sınanmasında yarar bulunmaktadır. <object> Elementinin <img> elementinin işlevini üstlenip üstlenemeyeceğinin saptanması amacı ile aşağıdaki program yazılmış ve b3s2uygulama4.htm olarak kaydedilmiştir.

Bu program, Internet Explorer 6.02 SP1 SP1, Netscape 7.02, Mozilla 1.5, Opera 7.23 ile denenmiş, Internet Explorer 6.02 SP1 dışındaki tüm belge çözümleyicilerde sorunsuz olarak resim görüntüsü alınmış, Internet Explorer 6.02 SP1 ile başarılı bir sonuç alınamamıştır. Bu durumda, resim görüntülerinin oluşturulması için, henüz <object> elementinin, Internet Explorer 6.02 SP1 daki desteğinin yeterli olmadığı ve resim görüntülenmesi amacı ile, <object> elementinin kullanımı durumunda, oluşturulacak Web sayfalarının belge çözümleyicilerın tümünde görüntü sağlayamayacağı anlaşılmaktadır. Resimlerin görüntülenmesi için, şu anda <img>, resim haritalarının görüntülenmesi için de <<<!-- #BeginDate format:Ge1m -->16.09.2005 23:45nımına devam edilmesinden başka bir yol bulunmamaktadır. <img> Elementi de HTML 4.01 kesin spesifikasyonuna göre tanımlı ve devam ettirilen bir satıriçi (inline) element olduğundan, katı kuralcı DTD altında bu elementin kullanımını engelleyecek bir neden bulunmamaktadır. Sonuç olarak, belge çözümleyicilerın tümünde desteklendiğinden dolayı, resimlerin gösterimi için, <img>, resim haritalarının gösterimi için <map>, appletlerin çalıştırılması için de <applet> elementlerinin kullanımına devam edilmesinde yarar olduğu görülmektedir.

Bu konuda özellikle Internet Explorer'in yeni sürümlerinde <object> elementi desteğinin geliştirileceği umulmaktadır.

 

<applet> Elementi

 

Applet elementi, Java programlama dili kullanılarak oluşturulmuş ve *.class şeklinde derlenmiş programların belge çözümleyicilerde çalıştırılması amacı ile kullanılır. Bu yöntem, prensip itibarı ile bir dinamik HTML (DHTML) olayıdır ve klasik (statik) HTML dili ile ilgili değildir. Applet olayı, klasik HTML kodifikasyonuna bir tür eklentidir ve bu nedenle Java Appletlerini çalıştırmak için, HTML bilgisinin yanında, Java Programlama Dili bilgisinin de olması gerekir. Bir appletin çalıştırılması, her zaman için sorunlu, incelikli ve bilgi isteyen bir işlem olarak nitelendirilebilir.

Bir Java sınıf dosyasının, HTML sayfalarında çalıştırılması için, herşeyden önce bir Java sınıf dosyasının oluşturulması gerekir. Bir Java sınıf dosyasının oluşturulması ise, HTML sayfası oluşturluması çalışmasının dışında, tam olarak bir programlama çalışmasıdır. Bir programlama çalışmasının yürütülmesi için de bilgi ve deneyim sahibi olunması gereklidir. HTML sayfalarında, başkaları tarafından yazılmış Java sınıf dosyaları da çalıştırılabilir. Bu tür Java sınıf dosyalarının çok iyi açıklanmış olması, örnek olarak parametrelerinin değerleri, uygulamada kapsam ve yeteneklerinin iyi bilinmesi gerekir. Çoğunlukla bu bilgiler yeterince elde edilemez ve uygulamada zorluklar yaşanır. İkinci zorluk, Java sınıf dosyasının kullanıldığı HTML sayfalarının belge çözümleyicilerde desteklenmesi sırasında görülür. Şu anda bile Java sınıf dosyalarının W3C ye göre <object> elementi kullanılarak, yazılma zorunluluğunun özellikle Internet Explorer tarafından yeterince desteklenmemesi bir zorluk yaratmaktadır. Bu zorluk, resim ve görüntü haritaları için, şimdilik HTML 4.01 kesin spesifikasyonu tarafından devam ettilen <img> ve <map> elementlerinin kullanımı ile geçici olarak çözümlenmeye çalışılmaktadır. Fakat, Java appletlerinin çalıştırılmasında, tüm belge çözümleyicilerce desteklenen <applet> elementi, HTML 4.01 kesin spesifikasyonu tarafından devam ettirilmemiş durumdadır. Bu konuda, belge çözümleyicilerini üereten şirketlere düşen görev, bir an önce W3C spesifikasyonlarına uymalarıdır. Kullanıcılar ise, tüm belge çözümleyicilerce <object> elementine destek tam ve kusursuz olarak sağlanmadıkça, <img>, <map> ve <applet> elementlerini kullanmaya devam etmek zorunluğunda kalacaklardır.

Internet Explorer 6.02 SP1 <object> elementini desteklemediği için, Java sınıf dosyalarının çalıştırılmaları için bugün için <applet> elementinin kullanılması kaçınılmazdır. Doğal olarak <applet> elementine geri dönüş, katı kuralcı DTD den geçiçi DTD ye düşüşü de gerektirecektir. Tekrar edelim, geçiçi DTD altında bile, sadece <applet> elementi kullanılmalı ve başka değeri kaybolmuş elementlerle çalışılmamalıdır.

<applet> Elementinin HTML 4.01 Geçici DTD sindeki Bildirimi:

 

Bu bildirim ilginç bir şekilde , katı kuralcı DTD deki < object> elementi bildirimi ile örtüşmektedir. Bu örtüşmenin algılanması için <object> elementinin katı kuralcı DTD deki bildirimi ile <applet> elementinin geçici DTD deki tanımlarının karşılaştırılması yeterli olacaktır. Bu iki DTD nin değerlendirilmesi için Ek 5 deki DTD okunması temel bilgilerinden yararlanılabilir. Her iki elementin de DTD deki tanımlarına bakıldığında, temel içerik modellerinin aynı olduğu görülür. Bu içerik modelinden, her iki elementin de boş bir element olmadıkları başlangıç ve bitiş imlerininin zorunlu olduğu belirlenir. Yine içerik modelinden, her iki elementin de mutlaka herhangibir içeriğinin olması gerekmediği anlaşılır. <applet> ve <object> Elementlerinin içerikleri hiç olmayabileceği gibi, istendiği kadar parametre elementi veya akış grubu elementlerini içerebilecektir. Parantezin dışındaki yıldız işareti, parametre elementi veya akış grubu elementlerinin hiç kullanılmayabileceğini veya herhangibirisinin istendiği kadar tekrar edilebileceğini göstermektedir.

Geçici DTD deki bildirimine göre, <applet> elementinin sözdizimi aşağıdaki gibidir:

<applet                                                (Başlangıç imi : gerekli )

Çekirdek Nitelikler   (id, class, style, title)

codebase = "URI" (class dosyaları için temel hipermetin referansı)  [TB] 

archive = "cdata" (virgülle ayrılmış arşiv Listesi)  [TB] 

code = "cdata"  (applet class dosyası adı) [YD]

object = "cdata" (seri hale getirilmiş diğer bir deyimle saklanmış applet dosyası adları) [YD]

alt = "metin"  (Java appletlerini desteklemeyen belge çözümleyicilerın görüntüleyecekleri metin) [YD]

name = "cdata" (appletlerin birbirini bulabilmesi için gerekli isim değeri) [YD]

width = "uzunluk" (başlangıç uzunluğu) [YZ]

height = "uzunluk" (başlangıç yüksekliği) [YZ]

align = "hizalama" (düşey veya yatay hizalama değeri," top | middle | bottom | left | right" ) [YZ] Değeri kaybolmuştur, CSS stil sayfaları kullanımı sağlık verilmektedir.

hspace = "piksel sayısı" (yatay boşluk) [YN]

vspace = "piksel sayısı" (düşey boşluk) [YN]

<applet> Elementinin içerebileceği elementler : (varsa) <param> Elementini takiben Akış Grubu Elementleri(en az bir içerik gerekli) (Eğer <applet> elementine içerik olarak bir metin konulursa, Java dilini desteklemeyen belge çözümleyiciler, bu uyarı mesajını görüntülerler.)

</applet>                                            (Bitiş imi: gerekli )

<applet> Elementini içerebilecek elementler :Blokdüzey  ve satıriçi elementler (<pre> elementi hariç).

<applet> Elementinin Nitelikleri

Çekirdek Nitelikler (id, class, style, title)  (Daha önceden incelenmiştir)

code = "cdata"  (applet class dosyası adı) [YD] :

Appletin çalıştıracağı sınıf dosyasının adını belirtir. Sınıf dosyası, *.class uzantılı bir derlenmiş Java programı dosyasıdır. code Niteliğinin her <applet> elementi bildiriminde bulunması gerekir.

codebase = "URI" (class dosyaları için temel hipermetin referansı)  [TB]  :

Bu nitelik, sınıf dosyasının URI bilgisidir ve bu bilgi her türlü mutlak veya göreli URI bilgisi olabilir. Eğer codebase niteliği verilmemişse, temel URI düzeyinin, sayfanın bulunduğu dizin olacağı varsayılır.

archive = "cdata" (virgülle ayrılmış arşiv Listesi)  [TB] 

Kullanılabilecek sınıf dosyalarının, tek bir sıkıştırılmış arşiv kitaplığı halinde erişimine olanak sağlar ve bu şekilde sınıf dosyalarının indirilmesi süresinin azalması sağlanabilir. Herşeyden önce bu pek olası bir durum olmayabilir. Her Web sayfası, sunucudan indirilirken varsa kendine özgü Java sınıf dosyaları da sunucu üzerinde çalıştırılarak, oluşan sayfa istemci bilgisayarına indirilir. Burada her sayfa için özel sınıf dosyaları söz konusudur ve önceden bilinip bir program kitaplığına alınması ancak şirket Intranetleri gibi özel durumlarda geçerli olabilir. Arşiv dosyaları, bilinen *.zip veya *. jar sıkıştırılmış dosyalarıdır. Zip dosyaları Winzip gibi çok tanınmış bir programdan yararlanılarak oluşturulabilir. *. jar Dosyalarının oluşturulması için ise, Java Development Kit 1.1 ve üzeri sürümlerde gerekli araçlar bulunmaktadır. Eğer arşiv niteliğinde belirtilen sınıf dosyası arşiv içinde bulunamazsa, applet elementi, sınıf dosyasını codebase ile belirtilen URI de arar . Eğer codebase tanımı yapılmamış ise, sayfanın bulunduğu dizinde arar.

object = "cdata" (seri hale getirilmiş diğer bir deyimle saklanmış applet dosyası adları) [YD]

Bu nitelik, henüz açıklık kazanmamıştır ve hiçbir tarayıcı tarafından desteklenmemektedir. Bu niteliğin adı, <object> elementi ile karıştırılmasına neden olabileceği açısından biraz talihsiz sayılabilir.

alt = "metin"  (Java appletlerini desteklemeyen belge çözümleyicilerın görüntüleyecekleri metin) [YD]

Bu niteliğin değeri, applet'in herhangibir nedenle çalışmamaması halinde, tarayıcının vereceği mesaj metni olarak belirlenmiştir. Alt niteliği, sadece Java appletlerini destekleyen belge çözümleyiciler tarafından değerlendilecektir. Bu desteği sağlamayan belge çözümleyiciler zaten hemen hemen hiç yoktur, sadece Microsoft, Internet Explorer de Java desteğini tam olarak vermekte isteksiz davranmaktadır. Internet Explorer in son 6.02 SP1 sürümü Java desteğini tam olarak verebilmektedir.

name = "cdata" (appletlerin birbirini bulabilmesi için gerekli isim değeri) [YD]

Bu nitelik, aynı dizindeki appletlerin birbirlerini bulması ve birbirleri ile iletişime geçebilmesinin sağlanması için kullanılır. Her applete bir çağrı ismi verilmesi yararlıdır. Bu şekilde oluşturulmuş olan appletlerin izlenmesinin kolaylaşacağı gibi, çağrılan appletin çağrı ismi ve çalışma durumu tarayıcının durum bandında görüntülenir.

width = "uzunluk" (başlangıç uzunluğu) [YZ]

Appletin başlangıç yatay uzunluğu. Appletin toplam uzunluğu, appletin çalışma süreci sonunda oluşturacağı sonuç ile belirlenecektir.

height="uzunluk" (başlangıç uzunluğu) [YZ]

Appletin başlangıç düşey uzunluğu. Appletin toplam düşey uzunluğu, appletin çalışma süreci sonunda oluşturacağı sonuç ile belirlenecektir.

align = "hizalama" (düşey veya yatay hizalama değeri," top | middle | bottom | left | right" ) [YZ]

Appletin hizalanma özelliği. Bu nitelik HTML 4.01 kesin spesifikasyonu ile devam ettirilmemiştir ve CSS kullanımı sağlık verilmektedir.

hspace="piksel sayısı" (yatay boşluk) [YN]

Appletin yatay kenarlık uzunluğu. width Uzunluğu ile belli olan applet uzunluğundan sonra, hspace (horizontal space) uzunluğu kadar bir boşluk bırakılır ve sonra metin görüntülenir. (Aşağıdaki şemaya bakınız!)

vspace= "piksel sayısı" (yatay boşluk) [YN]

Appletin düşey kenarlık uzunluğu. height Uzunluğu ile belli olan applet yüksekliğinden sonra, vspace (vertical space) uzunluğu kadar bir boşluk bırakılır ve sonra metin görüntülenir. (Aşağıdaki şemaya bakınız!)

 

 

b3s3 image 2

<applet> Elementinin Uygulanması

<applet> Elementi sadece parametre elementini içermesi halinde belgenin <head> kısmında bulunabilir. Bu durumda, <applet> elementinin belgeye ekleyeceği nesne, bir Java appleti, bir Python appleti, bir ActiveX kontrolu gibi doğrudan görüntülenmeyen bir nesne olacaktır. Burada, parametre elementinin işlevi, değişkenlerin başlangıç değerlerinin verilmesidir.

<applet> Elementinin akış grubu elementlerinden bir, veya birkaçını içermesi durumunda, belgenin <body> kısmında kullanılması gerekir. Çünkü, bu tip elementler, doğrudan görüntülenebilen elementlerdir. Belge çözümleyiciler, <applet> elementini değerlendiremezse, içeriğini değerlendirmeye çalışacaktır.

Aşağıdaki örnek bir Java appletinin çalıştırılmasını göstermektedir :

Bu örnek b3s2uygulama5.htm olarak kaydedilmiştir.

Yukarıda verilmiş olan uygulama, çok yararlı bir araç olan, hareketli bir düğmeyi oluşturmaktadır. Oluşturulan bu düğme üzerine mouse gelince düğme şekil değiştirmekte ve bir seçim yapılmak üzere olunduğunu kullanıcıya belli etmektedir. Bu düğme "Hover Button" veya "Rollover Button" olarak adlandırılan bir hareketli düğmedir. Hareketli düğme, bir DHTML (Dynamic HTML) örneğidir. Appletin Java kodları, Microsoft Fronts 2002 ( MS Fronts XP) tarafından otomatik olarak yazılmıştır. Bu Java sınıfı dosyası okunmak istenirse, bir Java Decompiler'den yararlanılarak, reverse engineering yöntemi ile açılıp incelenebilir. Bu işlem yasal değildir ve herhangibir ticari programı kırmanın ağır yasal sorumluluğu vardır. Kullanıcı açısından, bu Java sınıfı dosyasının içeriğinin bilinmesinin gereği yoktur, fakat <param> elementi kullanılarak verilecek ön değerlerin bilinmesi gereklidir. Örnekteki applet'in kullanılması için Front s 2002 programı gerekli değildir, sadece Java sınıfı dosyalarının, codebase ile belirlenen URI de olması yeterlidir. gerekli olan fphover.class ve fphoverx.class Java sınıf dosyalarının sayfa ile aynı dizinde bulunması gerekmektedir. Bu applet'in uygulanması çok basittir ve parametrelerin değiştirilmesi ile değişik görünümde düğmeler elde edilebilir. Bu applet için <param> elementinin, etki (effect) değeri olarak, "Fill", "Average", "Glow", "ReverseGlow", "LightGlow", "BevelIn" (içeriye) ve "BevelOut" (dışarıya) değerlerinden biri seçilebilir. Bu değerler denenerek, güzel görünüşlü ve kullanıcı üzerinde iyi etki yapabilecek olan  düğmeler elde edilebilir.

Java appletlerinin, çalıştırılmasında sorunların azaltılması için, sayfa ve sınıf dosyalarının aynı dizinde tutulmasının yararlı olduğu görülmüştür.

Java appletleri, HTML sayfalarına programlama gücünü sağlamış çok güçlü program parçacıklarıdır. Java programlama dili, nesne yönelimli yapısı ile son derece mantıklı ve modüler bir programlama dili olarak öne çıkmıştır. Son yıllarda Microsoft da benzer C# ( C Sharp) program dilini geliştirmiştir. Her iki programın da öğrenilmesi bir programcı için son derece yararlı olacaktır.

Bu konuda en son gelişme, Windows XP SP2 ile yeni uygulanan güvenlik prosedürlerine göre, Internet Explorer artık Java Appletlerinin doğrudan çalışmasına olanak vermemekte ve ancak can sıkıcı dialoglar sonucunda, kullanıcı Java Appletini içeren sayfayı açabilmektedir. Bu uygulama Web sayfalarında, Java appletleri kullanımını tamamamen engelleyecek gibi görünmektedir. Aslında sadece Java değil, JavaScript ve Perl Script kodları da engellenmektedir. Bu uygulama çok yeni olduğu için sonuçları üzerinde yorum yapmak için henüz erkendir. Fakat bu hali ile son derece can sıkıcı olduğu kuşkusuzdur.

 

<script> Elementi

 

HTML sayfalarına, dinamik etkiler eklenmesi için ilk olarak Netscape tarafından Live Script adı ile bir programlama dili oluşturulmuş, Live Script zamanla JavaScript adını almıştır.  Kısa bir süre sonra bu program diline bir Visual Basic türevi olan Visual Basic Script eklenmiş, bunu takip eden Perl, TCl, Python, ASP, JSP, PHP gibi, çok sayıda yeni scripting dilleri ile HTML sayfaları bugün gerçek bir programlama ortamına dönüşmüştür. Script programları, Java ve C# ( C Sharp) program dillerine göre HTML ile daha yakın ilişkilidirler. Script programlarının adımlarında, HTML elementleri de yer alabilirler. Script sözcüğü Latince yazılı belge anlamına gelen "scriptum" sözcüğünden kaynaklanmıştır. Script sözcüğü, türkçeye betik olarak aktarılmış, fakat bu terim henüz yaygınlık kazanmamıştır.

<script> Elementinin DTD deki bildirimi :

Bu bildirimde, <script> Elementinin Başlangıç ve Bitiş imlerinin zorunlu olduğunu görüyoruz. Bu elementin içeriği ise, sadece script programının adımlarından oluşmaktadır.

DTD deki bilgilere göre, <script> Elementi sözdizimi :

<script            ( Başlangıç imi : Gerekli)

charset=" karakter kodlaması"[YZ]

type=" içerikTipi"[YZ]

src=" URI"  [TB] 

defer="defer" [YZ] ( Belge çözümleyiciye script çözümlemesini geciktirebileceğini belirtir)

event= "cdata" (İleri bir tarihte kullanılabilecek şekilde bugün için saklı sözcük olarak ayrılmıştır)

for="cdata" (İleri bir tarihte kullanılabilecek şekilde bugün için saklı sözcük olarak ayrılmıştır)

language=" cdata" (Script dilinin adı) (devam ettirilmiyor, yerine type niteliği kullanılması destekleniyor) >

içeriği :Program kodları....

</script>      (Bitiş imi: Gerekli)

şeklindedir.

<script> Elementini içerebilecek elementler :Blokdüzey  ve satıriçi elementler (<pre> elementi hariç).

<script> Elementinin Nitelikleri

charset= "karakter kodlaması"[YZ]

Gömülü olmayan dış program kaynak kodu dosyasının karakter kodunu belirtir. RFC[2045] de belirtilen tüm karakter kodlaması değerleri kullanılabilir. Varsayılan değeri , ISO-8859-1 dir. Türkçe için ISO-8859-9 veya windows-1254 değeri kullanılmalıdır.

type="içerikTipi"[ YZ]

Bu nitelik, sayfa yazımında kullanılan script dilini belirtmek için kullanılır. HTML herhangibir script diline dayanmaz. Düşünülenin aksine sadece bir Netscape ticari ürünü olan JavaScript dilinin HTML kodlamasında herhangibir önceliği yoktur. Belge çözümleyiicilerin de sayfa çözümlemesinde kullanacakları script dilinin varsayılan değeri yoktur. Bu nedenle, kullanılacak script dilinin script kodları yazımından önce tipinin belge çözümleyiciye bir şekide belirtilmesi gerekir. Belge çözümleye karşılaşabileceği script dilinin çözümleme yöntemlerinin, önceden bildirilmiş olması gerekir. Belge çözümleyiciler, tanımadıkları, dilleri içeren scriptleri gözardı ederler. type Niteliğinin değeri, "text/Tcl", "text/Jscript", "text/JavaScript", "text/VBScript", "text/VBS" gibi dil bildirimi özelliği olan bir MIME tipidir. Dil bildirimi söz dizininin yazımında küçük/büyük harf kullanımın farketmediğini tekrar ve önemle belirtelim, yani javascript ile JavaScript aynı değer olarak algılanacaktır. Desteklenen script dilleri arasında, JavaScript Nestcape tarafından geliştirilmiştir, Jscript Microsoft'un geliştirdiği JavaScript versiyonunu, VBScript ve VBS Microsoft Visual Basic Scripting Language dillerini belirtir. Kullanılan script dilinin sürümü, type niteliği kullanılarak belirtilemez. Yani aslında, HTML 4.01 kesin spesifikasyonu ile sayfa yazımında kullanılan script dilinin sürüm bilgisinin verilmesi olanağı ortadan kaldırılmıştır. Scipt dilinin sürüm bildirimi, ancak değeri kaybolmuş language niteliği kullanılarak bildirilebilir. Özellikle Internet Explorer'in en son 6.0 sürümünün bile JavaScript 1.5 sürümünü desteklemediğini yeniden hatırlatalım. Internet Explorer den başka hiçbir tarayıcı da VB Script dilini tanımaz.

src = "URI"  [TB] 

Bu niteliğin değeri, dış script programı kaynak kodu dosyasının bulunduğu yeri belirtmen URI değeridir. Eğer program sayfaya gömülü (embedded) ise, src niteliğinin belirtilmesine gerek yoktur.

defer= "defer"  [YZ]

Bu nitelik, script kodunun belgeye birşeyler yazdırmayacağını ve sayfanın tarayıcıya indirilmesi sona erinceye kadar script kodunun çalıştırılmasının durdurulabileceğini bildirir. Bir boolean değişken olan bu nitelik henüz hiçbir tarayıcı tarafından desteklenmemektedir.

language ="cdata" [YZ]

Bu niteliğin değeri kaybolmuşsa da, uygulanacak script dilinin türü ile birlikte dilin sürüm bilgisi de verilmek istenirse, languageniteliğinin kullanımından başka bir çare kalmamaktadır. language Nitelik değeri, küçük/büyük harf ayrımı yapmaz, yani javascript1.1 ve JavaScript1.1 aynı değer olarak kabul edilirler.

Varsayılan Script Dili

Bir sayfanın başlangıç script dili bigisinin kaynağı, ilk aşamada sayfanın indirileceği sunucudan istemci bilgisayarın tarayıcısına yollanan bilgi notları olarak değerlendirilebilecek HTTP başlıklarıdır. Genel olarak -fakat kesinlikle her sunucu tarafından değil-, varsayılan script dilinin JavaScript 1.0 sürümü olacağı belirtilir. Bazı durumlarda da sunucu tarafı scriptler ile sayfada kullanılacak script dilini belirten HTTP başlıkları gönderilebilir. Bunların en sonuncusu geçerli olarak kabul edilip, HTTP başlığı halinde alınan script program dili bilgisi oluşturulur.

Sunucu tarafına gelebilecek ikinci varsayılan script dili bilgisi, sayfada kullanılacak script dilini belirten meta-bilgi bildirimi olabilir. Bu bildirim,

şeklinde yapılır. Bu bildirimlerden birkaç tane varsa, en sonuncusu geçerli olarak kabul edilir. Eğer sayfada bir dil bildirimi meta-bilgisi varsa, varsayılan script dilinin belirlenmesinde ilk önceliği alır ve HTTP başlığı ikinci önceliğe düşer. Bütün bunlara rağmen, uygulamada, sayfanın bir varsayılan bir script dili olmadığı varsayılır ve <script> elementi için uygulanacak script dili, type veya language niteliği ile belirtilir. Script dili bildirimi, sadece belirtilmiş olduğu script elementi için geçerlidir. Aynı sayfada kullanılan her script elementinde, farklı bir script dili kullanılabilir.

Bir HTML Sayfasına Script Programlarının Yüklenmesi

Bir HTML sayfasına script programlarının yüklenmesi üç yöntemle yapılabilir. Bunlar :

olarak belirtilebilir.

İlk olarak gömülü script programlarını inceleyeceğiz. Bir HTML sayfasına script programları, <script> elementinin içeriğine yazılarak gömülebilir. <script> Elementleri belgenin <head> veya <body> kısımlarında bulunabilir. Doğrudan görüntülenecek nesneler içeren <script> elementleri, <head> kısmına yazılırsa, içerikleri sayfada ilk olarak görüntülenir. Eğer <body> kısmına yazılırsa, çözümlenme sırası gelince görüntülenir. Örnek:

Bu program, b3s2uygulama6.htm olarak kaydedilmiştir. Bu örnekte, dikkat edilecek çok şey bulunmaktadır. Script, <body> kısmına gömülmüştür. Sayfa akışında, ilk olarak çesitli metinler görüntülenmekte, sonra sırası gelince script programının çıktısı olan metin görüntülenmektedir. Script programı adımlarına bakılınca, çıktı metninin içine HTML elementleri konulabildiği görülmektedir. Gerçekten script programları, HTML elementleri ile yakın ilişkide, hatta içiçe olan programlardır.  Dikkat edilecek bir başka önemli nokta, script programının, HTML yorum işaretleri içine alınmış olmasıdır. Sadece yorum sonunda, JavaScript yorumu // eklenerek Bitiş //--> haline gelmiştir. Aynı Bitiş , VBScript programları için, '--> halinde olacaktır. Bu yorum satırları, script programını tanımayan belge çözümleyicilerın, program içeriğini metin olarak görüntülemelerinin engellenmesi amacı ile kullanılmaktadır ve son derece yararlıdır.

Gömülü script kodları sayfanın her yerine konulabilir. Fakat, her yere dağılmış kodlarda hataların bulunup düzeltilmesi, programların bakımlarının yapılıp geliştirilmesi sırasında kodların tüm sayfa içinde aranıp bulunması kolay değildir. Ayrıca kodlar yukarıdan aşağıya doğru çözümlenir ve bazı kodlara sayfanın her yerinde gereksinme olabilir. Zorunlu olmamasına rağmen, iyi bir programlama stili gereği olarak Fonksiyon, tanım gibi doğrudan görüntülenmeyen program adımlarını içeren script program modülleri, daima <head> kısmına alınarak, kullanımdaki tüm fonksiyonların daima el altında olmaları sağlanır.

İkinci bir örnekte, Visual Basic Scripting Tool (VBScript) ile yazılmış gömülü bir script programıverilmiştir. Bu örnek, b3s2uygulama7.htm olarak kaydedilmiştir. VBScript dili, son derce yaygın ve kullanılması kolay olan, BASIC dilinin günümüzdeki en gelişkin örneği Visual Basic dilinin bir alt türevidir. Fakat, VBscript dili sadece Internet Explorer tarafından desteklenmektedir. Bu güçlü dilin Netscape Navigator ailesi tarafından desteklenmemesi büyük bir kayıp olarak nitelendirilebilir. Bu yüzden VBScript yaygınlık kazanamamıştır. Bu gün için de kamuya açık belgelerde VBScript kullanılması tavsiye edilmez, çünkü Netscape Navigator, Mozilla, Opera ve diğer belge çözümleyicileri kullanan okuyucular, bu belgelerdeki VBScriptleri çalıştıramaz.

HTML sayfalarına script programlarının yüklenmesinin ikinci yöntemi, bir dış sayfada saklı script programının sayfaya bağlanmasıdır. Bu işlem için <script> elementinin srcniteliğinden yararlanılır. Dış JavaScript kodunun yazılmış olduğu dosyanın adı *.js olmalıdır. Bir örnek olarak, ilk önce Notebook veya bir başka ASCII metin editörü ile aşağıdaki JavaScript program adımları yazılır:

Bu kodlar, Web içindeki dizinlerden birine MerhabaDunya.js adı ile saklanır. Bu dosya standart bir ASCII metin dosyasıdır. Bundan sonra, bu programın bağlanmak istendiği sayfada aşağıda görüldüğü gibi, bir <script> elementinin yardımı ile bağlantı kurulur:

Bu sayfa b3s2uygulama8.htm olarak kaydedilerek tüm belge çözümleyicilerde denemiş ve sorunsuz olarak çalıştığı görülmüştür.

Bir HTML sayfasında kullanılan tüm scriptlerin bir veya birçok dış sayfada toplanması, sayfanın bakım ve geliştirilmesini çok kolaylaştırır. Bu yöntemin sakıncası ise, sayfanın okunurluğunun azalmasıdır. Eğer script kodlarını içeren dosyalar elde yoksa, sayfanın kodlarını inceleyen bir kullanıcının, bu kodları anlaması olanaksızdır.

Bir HTML Sayfasında Birden Fazla Script Dilinin Kullanımı

Bir HTML sayfasında birden fazla script dili kullanılabilir. Bunun için her script dili için ayrı bir <script> elementi bildirimi yapılması yeterlidir. Örnek bir uygulama aşağıda görülmektedir:

Yukarıda verilmiş olan JavaScript 1.3 kodu, b3s2uygulama9.htm olarak kaydedilmiştir. Bu programda, tüm fonksiyon tanımlarının <head> kısmında toplandığına dikkat ediniz. Bu program, IE 6.02 SP1, Netscape 7.02, Mozilla 1.5 ve Opera 7.23 belge çözümleyicilerı ile sorunsuz olarak çalışmaktadır. Scriptin çalışması sonucunda, IE 6.02 dışıda hiçbir tarayıcının VB Script kodlarını çalıştırmadığı görülmektedir. Netscape kullanıcıları, ikinci butonun tıklanmasının sonucunda açılacak mesaj kutusunu göremeyeceklerdir. Yukarıdaki örnekte açılan her <script> elementinin hangi dili içerdiği, type niteliği ile açık olarak belirtilmiş olduğu görülebilir. Yine her açılan<script>elementi ile açık olarak belirtilmiş olan charset niteliği, sadece script içinde bulunacak Türkçe karakterlerin tarayıcıda doğru görüntülenmesinin sağlanması amacını taşımaktadır. <script> Bildirimi içinde tanımlanan charset niteliği henüz tüm belge çözümleyicilerce desteklenmemektedir. Türkçe kodların doğru görüntülenmesi için, ayrıca belge çözümleyicinin kendi karakter kodlamasının da, Türkçe olarak ayarlanması gereklidir.

Script Programlarının Önemi ve Belge Çözümleyicilerinin Desteği

Script dillerinin HTML sayfalarında kullanılması, statik HTML dilini dinamik ve interaktif konuma yükseltebilecek temel araçtır. Günümüzde, bu tür programlama dilleri sürekli gelişmekte ve repertuvara sürekli yeni diller eklenmektedir. Programcıların bu modern programlama yöntemlerine önem vermeleri gerekmektedir.

İyi bir HTML programcısının en az bir script dilini iyi bilmesi kaçınılmazdır. Bu konuda olmazsa olmaz konumundaki script dili JavaScript dilidir. Javascript ilk geliştirilen, en yaygın, uluslararası spesifikasyonları olan, tüm belge çözümleyicilerde desteklenen ve çok gelişmiş bir dildir. Fakat Netscape ve Microsoft uyuşmazlıkları JavaScript dilinin son sürümü olan JavaScript 1.5 sürümünün Internet Explorer tarafından desteklenmesini engellemektedir. Aynı sorunlardan dolayı çok değerli diğer bir script dili olan VBScript dilinin de Netscape ve diğer belge çözümleyicilerce desteklenmemesine neden olmaktadır. Bu konuda, en yeni haberlerden birisi, Netscape'in artık belge çözümleyici platformunda olmayacağı haberidir. Bu durumda bile, VBScript dilinin kullanımının yaygınlaşması beklenmemelidir. Internet Explorer'in kullanım oranı kesin olarak yüzde yüz olmadıkça, kullanıcılar Dinamik HTML olarak da adlandırılan etkileşimli Web sayfaları yapımı içim VBScript kullanımına cesaret edemeyeceklerdir. Fakat, bu Web dışı çalışmalar için bir ücretsiz görsel (visual) programlama platformu olarak, programlama için VBScript görüntüleme için salt Internet Explorer'in kullanıldığı programların yapılmasına bir engel oluşturmaz. Yine de aynı çalışmalar, JavaScript kullanılarak yapılrsa, görüntüleme için her türlü belge çözümleyici kullanılabilir. Burada ikinci alternatif yine daha ağır basıyor, ama programcının da istediği platformu seçmesine bir engel yok, çünkü bu tip programlar bir tür ticari programlar olarak düşünülebilir ve bunlarda hem program hem de kullanıcının çalışma ortamı programcı tarafından belirlenir. Özellikle eğitim ile ilgili uygulamalarda bu ücretsiz ve görsel araçlar açısından zengin ortamın değerlendirilmesi düşünülmelidir.

Belge çözümleyicilerin, belirli bir script dilini destekleyip desteklemedikeri kolay anlaşılabilmesine karşın, bir script dilinin belirli bir sürümününe kadar destekleyen belge çözümleyicilerin bu dil ile ile yazılmiş script kodlarını tam olarak destekleyip desteklemediğini belirlemek kolay olmamaktadır. Çalışması gereken bir fonksiyonun çalışmadığı bazen geç anlaşılabilmektedir. Bu konuda programcıya büyük sorumluluk düşmektedir. Eğer bir Web sayfasında script kodları yazılacaksa, bu kodlar Internet Explorer ve Netscape ailesinden Mozilla ve Mozilla FireFox ayrıca Opera belge çözümleyicilerinin tümünün en son sürümleri tarafından desteklenen script dilleri ve sürümlerinin kullanılması konusunda özen gösterilmelidir. Bu gibi kullanıcı tipi script prograları içeren Web sayfalarında, Netscape ailesi belge çözümleyiciler ve Opera tarafından desteklenmeyen VBscript ile Internet Explorer tarafından desteklenmeyen JavaScript 1.5 kesinlikle kullanılmamalı, kullanıcı tarafı Perl scriptler de iyice denenip, ancak ortak destek konusunda yeterli kanı oluşunca kullanılmalıdırlar. Bunun dışında kullanıcıların da belge çözümleyicilerin en son sürümlerini kullanmak konusunda kesin yükümlülükleri bulunmaktadır.

Günümüzde script dilleri çoğalmakta ve gelişmektedir. Perl , ASP, JSP, TCl, Python, PHP bu yeni dillerden bazılarıdır. Bu dillerin bazılarının belge çözümleyicilerde desteklenmesi için özel çalışmalar yapılması gerekli olmaktadır. Bütün bu yeni diller, HTML programcılarının öğrenme sorumluluğunu arttırmakta fakat Web sayfalarına da olağanüstü bir kapsam ve esneklik sağlamaktadırlar.

Script programları yazımı, çok geniş fakat çok gerekli, yazarlar için statik HTML den, dinamik HTML'e geçiş sağlayacak bir kazanımdır. Web tasarımında ilerlemek için, kesinlikle bu konuda yoğunlaşmak gerekir. Daha fazla bilgi almak için aşağıdaki bağlantılardan yararlanılabilir :

JavaScript Guide

Embedding JavaScript in HTML

JavaScript Reference

JScript Web s

VBScript Web s

 

 

 

Wednesday, October 5, 2005 17:48

 

validate in W3C ! Valid HTML 4.01!