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