本文介紹WML語(yǔ)言的基本知識(shí),主要包括WML的字符集、變量、數(shù)據(jù)類型及WML程序的基本組成部分等。
1、WML的字符集及編碼
WML使用xml的字符集,即通用字符集ISO/IEC-1062.,也即統(tǒng)一字符編碼標(biāo)準(zhǔn)Unicode 2.0。同時(shí),WML還支持其他系列的字符集子集,例如UTF-8、ISO-8859-1或UCS-2等。其中:UTF-8是指通用字符集UCS(Universal Character Set)的轉(zhuǎn)換格式8(Transformation Format 8),主要傳輸國(guó)際字符集的轉(zhuǎn)換編碼。UTF-8采用了UCS字符的8位編碼,提供了十分安全的編碼格式,可以有效避免數(shù)據(jù)傳輸過(guò)程中的竊聽(tīng)、截取及非法解密。同時(shí),UTF-8與7位ACSII碼完全兼容,不會(huì)影響此類編碼實(shí)現(xiàn)的程序;它的編碼規(guī)則十分嚴(yán)格,能夠有效避免同步傳輸錯(cuò)誤,而且還會(huì)支持其它字符集提供了足夠的空間。
ISO-8859-1字符集是國(guó)際標(biāo)準(zhǔn)化組織ISO(International Standardization Organization)制定的ACSII字符集的擴(kuò)展集,能夠表示所有西歐語(yǔ)言的字符。與ISO Latin-1一樣,ISO-8859-1與Windows環(huán)境中普遍使用的美國(guó)國(guó)家標(biāo)準(zhǔn)協(xié)會(huì)ANSI(American National Standards Institute)的字符集極為類似,絕大多數(shù)情況下無(wú)需區(qū)分。在不特別指明的情況下,HTTP協(xié)議均使用ISOLatin-1字符集。因此,為了WML頁(yè)面中表示非ACSII(non-ACSII)字符,開(kāi)發(fā)人員需要使用相應(yīng)的ISO Latin-1編碼的字符。
UCS-2是ISO 1062.標(biāo)準(zhǔn)中自定義的通用多8位編碼字符集(Universal Multiple-Octer Coded Character Set)的2字節(jié)(即16位)編碼標(biāo)準(zhǔn),其字符編碼值與Unicode字符的標(biāo)準(zhǔn)編碼值相等。
WML文檔可以采用Html 2.0規(guī)范所定義的任何字符編碼標(biāo)準(zhǔn)經(jīng)編碼處理。一般說(shuō)來(lái),WML文檔的字符編碼是需要轉(zhuǎn)換為另外的編碼格式,以與WAP用戶的手機(jī)瀏覽器所用字符標(biāo)準(zhǔn)相適應(yīng),否則,手機(jī)瀏覽器就無(wú)法顯示W(wǎng)ML頁(yè)面中的字符。然而,編碼轉(zhuǎn)換時(shí)可能會(huì)丟失一些字符信息,所以,如果在用戶端進(jìn)行WML文檔的編碼轉(zhuǎn)換,那么就可能導(dǎo)致某些結(jié)果信息丟失而不能被用戶所瀏覽。因此,如有必要,我們應(yīng)當(dāng)盡量在WML頁(yè)面?zhèn)魉偷接脩魹g覽器之前完成編碼轉(zhuǎn)換。
為了解決這一問(wèn)題,一方面,我們需要為Web服務(wù)器補(bǔ)充定義WML的數(shù)據(jù)類型,以讓服務(wù)器可以準(zhǔn)確傳輸這些數(shù)據(jù),另一方面,我們需要制訂編碼轉(zhuǎn)換的原則。
2、WML字符使用基本規(guī)則
WML是一種比較嚴(yán)格的語(yǔ)言,字符使用必須遵守相應(yīng)的規(guī)則,這些基本規(guī)則主要包括以下幾個(gè)方面:
1)大小寫(xiě)敏感。在WML中,無(wú)論是標(biāo)簽元素還是屬性內(nèi)容都是大小寫(xiě)敏感的,這一點(diǎn)繼承了XML的嚴(yán)格特性,任何大小寫(xiě)錯(cuò)誤都可能導(dǎo)致訪問(wèn)錯(cuò)誤。
一般來(lái)說(shuō),WML的所有標(biāo)簽,屬性,規(guī)定和枚舉及它們的可接受值必須小寫(xiě),Card的名字和變量可大寫(xiě)和小寫(xiě),但它是區(qū)分大小寫(xiě)的。包括參數(shù)的名字和參數(shù)的數(shù)值都是大小寫(xiě)敏感的,例如variable1、Variable1和vaRiable1都是不同的參數(shù)。 2)空格。對(duì)于連續(xù)的空字符,程序運(yùn)行時(shí)只需要一個(gè)空格。屬性名、符號(hào)(=)和值之間不能有空格。
3)標(biāo)簽。標(biāo)簽內(nèi)屬性的值必須使用雙引號(hào)(")或單引號(hào)(’)括起來(lái)。對(duì)于不成對(duì)出現(xiàn)的標(biāo)簽,必須在大于號(hào)(>)前加上順斜杠(/),比如換行標(biāo)簽必須寫(xiě)成<br/>才正確。
4)不顯示的內(nèi)容。在WML中,不顯示的字符主要包括換行符、回車符、空格和水平制表符,它們的8位十六進(jìn)制內(nèi)碼分別為10、13、32及9。
程序執(zhí)行時(shí),WML將忽視所有的多于一個(gè)以上的不顯示字符,即WML會(huì)把一個(gè)或多個(gè)連續(xù)的換行、回車、水平制表符及空格轉(zhuǎn)換成一個(gè)空個(gè)。
5)保留字符。這是WML的一些特殊字符,如小于號(hào)(<)、大于號(hào)(>)、單引號(hào)“’”、雙引號(hào)“"”、和號(hào)(&)。
6)顯示漢字。如果希望WML程序執(zhí)行時(shí)能夠顯示漢字,則只需要程序開(kāi)頭使用encoding指定漢字字符集即可。例如:<?xml version="1.0" encoding="gb2312">。
注意:指定漢字字符集的形式和方法可能因?yàn)殚_(kāi)發(fā)工具或WAP手機(jī)的不同而不同。
3、變量
WML編程中可以使用變量,變量使用前必須進(jìn)行定義。變量一旦在Deck中的某一個(gè)Card上定義過(guò),其他Card則可以不必重新定義就能直接調(diào)用該變量。
定義變量的語(yǔ)法格式為:
$identifier
$(identifier)
$(identifier:conversion)
其中identifier指變量名,或說(shuō)變量標(biāo)示符;conversion指變量的替代。
變量名是由US-ACSII碼、下劃線和數(shù)字組成的,并且只能以US-ACSII碼開(kāi)頭。變量名嚴(yán)格區(qū)分大小寫(xiě),也即,變量名是大小寫(xiě)敏感的。
定義變量的語(yǔ)法在WML中享有最高的解釋優(yōu)先級(jí)。
有關(guān)變量的使用說(shuō)明如下:
1)在WML中,變量可以在字符串中使用,并且在運(yùn)行中可以更新變量的值。
2)當(dāng)變量等同于空字符串時(shí),變量將處于未設(shè)置狀態(tài),也就是空(Null)。
3)當(dāng)變量不等同于空字符串時(shí),變量將處于設(shè)置狀態(tài),也就是非空(Not Null)狀態(tài)。
4)在“$identifier”形式下,WML通常以變量名后面的一個(gè)空格表示該變量名的結(jié)束。如果在某些情況下空格無(wú)法表示一個(gè)變量名的結(jié)束,或者變量名中包含有空格,則必須使用括號(hào)將變量名括起來(lái),即采用“$(identifier)”的形式。
WML程序中的變量是可以替代的,我們可以把變量的數(shù)值賦給Card中的某一文本。有關(guān)變量替代說(shuō)明如下:
1)在WML程序中,只有文本部分才可以實(shí)現(xiàn)替代。
2)替代一般在運(yùn)行期發(fā)生,而且替代不會(huì)影響變量現(xiàn)在的值。
3)任何標(biāo)簽是按照字符串替代的方式實(shí)現(xiàn)的。
4)替代是按照字符串替代的方式實(shí)現(xiàn)的。
由于變量在語(yǔ)法中有最好的優(yōu)先級(jí),包含變量聲明字符的字符串將被當(dāng)作變量對(duì)待,所以如果要使程序顯示“$”符號(hào),則需要連續(xù)使用兩個(gè)“$”進(jìn)行說(shuō)明。例如:<p> Your acconut has $$15.00 in it </p>一句顯示的結(jié)果為:Your account has $15.00 in it。
2、WML核心數(shù)據(jù)類型
WML的核心數(shù)據(jù)類型均屬于字符型數(shù)據(jù),是根據(jù)XML的數(shù)據(jù)類型定義的,共有下述2.擲嘈停?1)CDATA型。這種數(shù)據(jù)類型是WML用得最多的一種,可以是數(shù)字、字符串或包含數(shù)字的字符串。不過(guò)定義時(shí),不論是數(shù)字或字符串,都必須以文本的形式定義,及數(shù)據(jù)用引號(hào)引起來(lái)。CDATA型的數(shù)據(jù)僅用于屬性值。例如"$(value)"或name="value"等。注意,這里的value指CDATA型的數(shù)據(jù)值。
2)PCDATA型。這是從CDATA中分解出來(lái)的一類數(shù)據(jù),除了可以是文本形式的數(shù)字、字符串或兩者的混合串外,還可以是WML的標(biāo)簽。PCDATA型的數(shù)據(jù)只能用于WML的元素表示。
3)NMTOKEN型。這是一類特殊的數(shù)據(jù),凡是包含或部分包含數(shù)字、字母及標(biāo)點(diǎn)符號(hào)的數(shù)據(jù)均屬于NMTOKEN型數(shù)據(jù)。這種數(shù)據(jù)可以用標(biāo)點(diǎn)符號(hào)開(kāi)頭,但不用于定義變量名或元素名。
4)id型。專門用于定義WML元素名稱的數(shù)據(jù)類型。
在這2.擲嘈橢校珻DATA型用起來(lái)比較靈活,它可以使變量或數(shù)據(jù)免于語(yǔ)法檢查。這是因?yàn)椋珻DATA內(nèi)的數(shù)據(jù)內(nèi)容都會(huì)被當(dāng)作文本來(lái)處理,從而可以避免WML的語(yǔ)法檢查,直接作為文本顯示出來(lái)。
5、WML數(shù)據(jù)值性質(zhì)
除了NMTOKEN型數(shù)據(jù)外,WML其他3種數(shù)據(jù)都必須以文本形式即加上引號(hào)進(jìn)行定義。我們關(guān)心的問(wèn)題是,這些類型的數(shù)據(jù)可以表示哪些數(shù)據(jù)值呢?或者說(shuō),它們所表示的數(shù)據(jù)值的性質(zhì)是什么呢? 事實(shí)上,WML數(shù)據(jù)只在性質(zhì)上可以是長(zhǎng)度(Length)、宏變量(Vdata)、流(Flow)、內(nèi)行(Inline)、布局(Layout)、文本(Text)、超鏈(Href)、布爾值(Boolean)、數(shù)據(jù)(Number)或增強(qiáng)方式(Emphasis)。
6、卡片與卡片組
前面我們分析了WML程序的結(jié)構(gòu)時(shí),曾將講到WML文檔的信息是通過(guò)卡片集和卡片組集的形式進(jìn)行組織的。一個(gè)Deck是一個(gè)或多個(gè)Card的集合。當(dāng)客戶終端發(fā)出請(qǐng)求之后,WML即從網(wǎng)絡(luò)上把Deck發(fā)送到客戶的瀏覽器,Deck是服務(wù)器發(fā)送信息的最小單位。用戶瀏覽器收到Deck后,可以瀏覽其中包含的所有Card。Card用于表示或描述一個(gè)或多個(gè)用戶交互單位。
7、卡片組模板
同一卡片組通常會(huì)含有許多卡片,這些卡片的定義、屬性或格式通常都大同小異。如果我們逐一定義各個(gè)卡片,顯然是十分麻煩的。為此,WML提供了卡片組模板的功能,模板內(nèi)定義了一系列標(biāo)準(zhǔn)和參數(shù),可以應(yīng)用到同一卡片組的所有卡片中去,從而能夠大大地提高我們的編程效率。有關(guān)卡片組模板的內(nèi)容我們后面會(huì)專門介紹的。
8、WML與URL、程序段錨點(diǎn)
我們知道,環(huán)球網(wǎng)WWW是各種信息和設(shè)備的網(wǎng)絡(luò),為保證全球范圍內(nèi)的交互,人們制定了3種規(guī)范:其一,統(tǒng)一資源定位器URL提供所有網(wǎng)絡(luò)資源的標(biāo)準(zhǔn)命名方式和定位方式;其二,標(biāo)準(zhǔn)協(xié)議,如HTTP協(xié)議等,提供WWW資源的傳輸方式;其三。標(biāo)準(zhǔn)內(nèi)容類型,如HTML、WML,提供WWW資源的內(nèi)容形式及標(biāo)準(zhǔn)。WML沿用了這些規(guī)范,并擴(kuò)大了URL使用的范圍。在WML中,不僅超連接、文件路徑及文件名可以作為URL處理,卡片名、宏變量名及各種內(nèi)部資源名等也可作為URL處理。
為此,WML改進(jìn)了HTML命名資源位置的方式,采用程序錨點(diǎn)(Fragment Anchor)的形式來(lái)處理WML程序中某段程序的地位。程序段錨點(diǎn)根據(jù)文檔WML規(guī)則進(jìn)行定義,并按照程序段表示符前加井字好(#)的方式書(shū)寫(xiě)。使用程序段錨點(diǎn),WML程序可以在同一卡片組中定位不同的卡片。如果在程序中不指定程序段,那么程序中引用的URL名稱則指整個(gè)卡片組,而且卡片組的名稱同時(shí)也是本卡片組內(nèi)的第一個(gè)卡片的名稱。
9、瀏覽器操作歷史
為了在瀏覽器端管理WML程序的執(zhí)行,WML使用“瀏覽器前后關(guān)系”的功能保存WML程序執(zhí)行的狀態(tài)及各種參數(shù)、變量等,這樣可以用來(lái)記錄用戶的操作情況。同時(shí),WML還提供了一個(gè)簡(jiǎn)單的導(dǎo)航歷史模型,以URL地址的形式記錄了用戶瀏覽時(shí)的各種操作,并把這些URL地址放入歷史推棧。通過(guò)推棧,用戶即可實(shí)現(xiàn)歷史瀏覽的回潮及其它操作。
(出處:http://www.companysz.com)
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注