1. 簡單說WML代表什么?
WML代表“Wireless Markup Language”。WML就是無線標記語言(Wireless Markup Language),內(nèi)置于移動設備中的微型瀏覽器能夠解釋這種標記語言。雖然它和HTML語言很相像,但WML其實是XML的一個應用子集。
2. 什么是WML?
WML代表Wireless Markup Language,就象HTML對普通的Web瀏覽器一樣。有人說它是基于XML,但是更準確地說WML是XML的一個應用。雖然在語法上和HTML相似,但更多的是XML。如果準備從HTML到WML,但是沒有任何的XML知識,將會發(fā)現(xiàn)WML“非常”嚴格。就像HTML,WML被讀取并且通過WAP設備中的瀏覽器解釋,然后顯示在屏幕上。對于WAP設備,瀏覽器,或者用戶代理,通常叫做微型瀏覽器。微型瀏覽器的功能是受到WAP設備的限制的。
為什么使用WML而不是使用廣泛的HTML原因是由于WAP的工作方式以及WAP是為一個“窄小”的無線世界工作的。在Netscape、Opera或者IE上顯示HTML需要更強的計算能力。計算能力某種意義上是移動設備中的電能。由于移動設備中的電能是有限的,所以WML在發(fā)送給WAP設備之前,通常要經(jīng)過轉(zhuǎn)換和壓縮。所以WAP使用的是WML。
讀者也許可能想到WML非常簡單,甚至不能處理HTML中的多媒體類型。這個不是問題。標記語言(WML、HTML等等)沒有操作設備的權限,例如播放聲音或者顯示動畫。仔細地觀察HTML,就會發(fā)現(xiàn)沒有一個HTML標簽能夠顯示動畫或者播放音樂。限制是來自于運行標記語言的瀏覽器。畢竟在大多數(shù)情況下,是談論移動電話。但是這個限制應該隨著無線Internet的發(fā)展而逐漸取消。
3. WML與HTML有什么區(qū)別?
雖然WML看起來十分像HTML,但是在技術上兩者的差別還是很大的。WML是為微型瀏覽器所設計的HTML的一個子集。WML的標準定義是基于XML的。
4. Phone.com的 HDML和WML有什么區(qū)別?現(xiàn)在有電話支持 HDML嗎?
HDML(Hand-held Devices Markup Language)是Phone.com開發(fā)的。它使得Web頁面可以在移動電話上顯示,其標準的公布先于WAP標準。Motorola、 Neopoint、Qualcomm 等等公司的電話使用Phone.com的瀏覽器,它支持HDML。最新的UP.Browser支持HDML和WAP。
5. 為什么使用WML而不是HTML?
首先是WAP協(xié)議要求使用WML??赡芤呀?jīng)有能夠支持HTML的WAP設備,但是那不是真正的。有一些和無線設備很像的WAP設備支持HTML,但它們也不是直接使用HTML(例如:Microsoft Mobile Explorer支持HTML和WML)。MME設備只是將兩個分離的部分做到了一起。當然也有HTML的變種,例如 iMode 瀏覽器使用Compact HTML。簡單的說,如果談論WAP設備,那么標記語言就是WML。
有很多理由說明選擇WML而不是HTML。現(xiàn)在最重要的一個原因就是WML與HTML相比需要很小的帶寬。隨著無線技術的提高,帶寬會越來越寬。這個原因可能不再是主要原因,但是在達到這么高帶寬之前需要許多年的時間。
另外一個就是HTML需要相對來說比較強的處理器。處理器的能力意味著需要更強的能量。在無線設備中能量來自于電池。而一個低處理能力的處理器就意味著電池的使用時間可以更長。
另外,HTML的確需要一個很大的顯示屏幕。移動電話上的屏幕顯然不能滿足要求。當然也許會有一個大屏幕的移動電話,但是這樣它就離移動更遠(也就是說越不像移動電話)。即使iMode支持彩色和一個類似HTML的顯示,它的尺寸已經(jīng)是你可以方便攜帶的最大尺寸。
6. 為什么對于無線設備要專門設計一種特別的語言才能訪問Internet?
許多年來,HTML標記越來越豐富,越來越龐大。此外,瀏覽器對各種HTML標記的支持也大不相同。這種狀況已經(jīng)與當初想建立一個簡單的標準相背離。
移動設備(例如:移動電話)具有小屏幕、內(nèi)存少、缺少方便的輸入設備和帶寬窄的特點。這種狀況驅(qū)使WAP討論組發(fā)展一種新的為無線設備所使用的語言,WML就此誕生了。
7. 無線設備也能支持HTML格式嗎?
從技術的角度上來說答案是肯定的。既然HTML是為普通PC瀏覽器所編寫的,也可以使用微型瀏覽器來瀏覽一個HTML頁面,但是可能沒有效果。因為移動電話不知道如何顯示該文件。這樣通常導致微型瀏覽器出現(xiàn)混亂。并且HTML頁面通常都比較大,它會把移動設備“撐壞”的。
8. 如何將HTML轉(zhuǎn)換成WML?
當考慮轉(zhuǎn)換HTML時,要想到WML是為小屏幕設計的,不可能像HTML那么豐富多采。任何轉(zhuǎn)換都將忽略很多HTML標記和許多內(nèi)嵌的腳本。只有一些簡單的HTML頁面可以被滿意地轉(zhuǎn)換。轉(zhuǎn)換可以使用工具包如:Spyglass Prism,也可以通過在線的WAP網(wǎng)關過濾。
9. 用什么可以瀏覽到WML頁面?
首先需要一個具有WAP功能的手機,例如:Nokia 71110,Ericsson R320等等。用于PC機的桌面WML瀏覽器也很多,例如:WinWap、WapMan等等。
10. 在哪里可以學到更多的關于XML的知識?
可以訪問站點:www.w3c.org/xml。在該網(wǎng)站上有許多關于XML的知識有詳細的講解。
11. WML的一般語法是什么?
WML非常像XML。和HTML相比其語法規(guī)則更加嚴格,從而保證當微型瀏覽器解析和解釋的時候不會有太多的錯誤信息。
和HTML一樣,WML使用“<”和“>”組成的格式化標簽。許多標簽都是以<tag>開頭,以</tag>結(jié)尾。在開頭或者結(jié)尾中包含的部分叫做元素。有些標簽叫做空元素,只有標簽,沒有內(nèi)容,如:<tag/>。
許多元素有屬性來描述應其中還有那些內(nèi)容。屬性名字必須小寫,并且屬性值必須使用雙引號括起來。有些屬性是必須的,有些是可選的。一般的屬性標簽格式就像:<tag attribute1="value">。
變量可以在WML卡片中定義,它們的一般格式是 $(variablename)。
一個WML頁面有一個專門的格式,它必須以XML的文檔聲明為開頭:
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM/DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
所有的頁面中的元素,都必須在<wml>和</wml>標簽之間。
12. 什么是一個“deck”?
一個WML文檔有許多卡片(cards)組成。一個卡片是一系列完整的WML代碼。這些卡片被稱為一個“deck”。卡片和“deck”的概念就有點像HTML中的錨標記<a name="#achor1">和一個HTML頁面。也就是說卡片是“deck”中的一個組成部分。也可以把“deck”稱為WML中的頁面。它們之間的關系可以比做一副撲克牌。整副撲克牌就是deck,而每一張牌就是card。
13. 什么是WML的“deck”?
WML的“deck”或者WML文件是指decks。每個deck包含一個或者更多的card。每個deck都以<wml>開始和結(jié)束。并且每個card都以<card>開頭或者結(jié)束。
當WML微型瀏覽器處理WML文件或者deck的時候,它閱讀整個deck,并且在deck內(nèi)的各個card之間進行導航。當裝入deck的時候,deck里面所有的card都已經(jīng)裝入到內(nèi)存中,直到瀏覽器裝入另外的deck。
如果熟悉 HTML中的<a name>標簽。WML的<card>標簽將是非常類似的:
<wml>
<card id="start_menu">
...some code...
</card>
<card id="purchase">
...some more code...
</card>
</wml>
deck和card可以按照這種方式調(diào)用:[deckname][#cardname]。如果deckname省略,那么瀏覽器就會查找當前內(nèi)存里的cardname名字的card。如果使用了deckname和#cardname,那么瀏覽器將裝入deckname的整個deck,然后跳入到#cardname。這個和HTML的工作方式很像。
14. WML是大小寫敏感的嗎?
是的!要注意WAP 1.1使用小寫的標簽。
15. 如何顯示一個美元符號?
使用兩個在一起的美元符號來表示,即“$$”。
16. 想顯示價格的格式該怎么辦?
“$”是一個特殊的字符,使用“$$”來顯示一個“$”。
例如:
<p>
The price is $$11.20
</p>
17. fieldset標簽有什么作用?
編寫WML頁面的時候要考慮到設備的屏幕很小。如果試圖想把一個大的form在一個屏幕里面顯示,就要指定那些標簽保持在一個屏幕中。那么fieldset標簽將這些標簽捆綁在一個屏幕上。
18. postfield標簽有什么作用?
postfield標簽使允許提交參數(shù)到服務器端。注意有些早期的模擬器還不支持該標簽,這將給開發(fā)工作帶來麻煩!
19. WML有類似HTML的<mailto>標簽嗎?
沒有。但是你可以使用WML表單和服務端腳本來得到同樣的效果。
20. 無法讓<input/>格式正常工作是怎么回事?
至少Nokia WML Reference沒有講清楚有關<input/>標簽的用法。format參數(shù)控制著用戶輸入數(shù)據(jù)的類型和長度。
注意到不是所有的WAP 1.1瀏覽器都接受所有的格式化代碼。例如:Nokia 7110就支持得不是很好。Mitsubishi Trium在處理“*f”代碼的時候有點問題,“*”必須為1或者更大。專門的格式化代碼如下:
A 從A到Z的任何大寫字母,沒有數(shù)字或其他字符。
a 從a到z的任何小寫字母,沒有數(shù)字和其他字符。
N 任何0到9的數(shù)字。
X 從A到Z從0到9的任何字符。
x 從a到z從0到9的任何字符。
M 任何字符,輸入默認從大寫開始。
m 任何字符,輸入默認從小寫開始。
*f (星號)意味著任何數(shù)字(包括0),f是格式的代碼。
nf 意味著恰好要輸入的字符個數(shù)。n從1到9。f是格式代碼。
是轉(zhuǎn)義輸出字符。
格式化字符可以組合使用來表示一種特定的格式輸入。但是強制一定的輸入應當避免在用戶出錯的時候沒有提示信息。如果輸入是不正確的,該填寫的區(qū)域一般仍保持空白,直到讓用戶知道應該輸入什么。如果只想輸入數(shù)字,使用“*N”那么將直接轉(zhuǎn)跳到數(shù)字輸入模式。如果只想輸入大寫的字符,使用“*M”轉(zhuǎn)跳到大寫輸入模式?,F(xiàn)舉一些例子:
“N” 只接受一個數(shù)字字符。
“*N” 接受任何數(shù)字字符。
“NN” 只接受2個數(shù)字字符,不多不少。
“ANN” 接受一個大寫字符(沒有數(shù)字),后面跟著兩個數(shù)字,不多不少。
“X*N” 表示可以接受一個字符(沒有數(shù)字)后面跟著任意多的數(shù)字字符。
“NNN\-NNN\-NNNN”表示接受美國的電話號碼格式,例如:“123-456-1234”。
“2N\:2N\:2N” 表示接受時間格式,例如:“12:02:34”。
“NNNNNNNNN” 表示接受9個數(shù)字字符。
“9N” 同樣表示接受9個數(shù)字字符。
maxlength參數(shù)控制著輸入字符的總個數(shù)。
21. 如何防止一個空的field?
在大多數(shù)情況下需要知道用戶確實是輸入了一些內(nèi)容在field中,不能讓這些內(nèi)容為空。這個可以通過在服務端的檢測來完成,也可以通過WML來完成。
在WML中,這個檢查可以通過合適的格式化代碼來完成,或者使用一個在input標簽中叫做emptyok="false" 的參數(shù)來實現(xiàn)(只有當必須要求用戶輸入的時候才使用)。如果使用了value="something" 或者value="" 用戶仍然可以發(fā)送空的fields。
以下的行將接收任何值到username field, 甚至用戶將整個field清空。另外field中沒有任何東西,也能夠提交form。
<input name="username" type="text" value="things" format="*M"/>
除了用戶將整個field清空,以下的行將接收任何值到username field。如果field是空的,他將不能提交form,。
<input name="username" type="text" value="things" format="M*m"/>
以上的應用是針對大多數(shù)的瀏覽器。在Nokia 7110 ,emptyok參數(shù)可以有同樣的效果:
<input name="username" type="text" value="things" format="*M" emptyok="false"/>
22. 使用option標簽的時候,無法一屏顯示完該怎么辦?
許多WAP電話的顯示屏幕只能顯示三到四個選項。按以下的方法分割option字段就可以輸入更多的選項。
<select title="longselectlist">
<optgroup title="option1">
<option>option1-1</option>
<option>option1-2</option>
<option>option1-3</option>
</optgroup>
<optgroup title="option2">
<option>option2-1</option>
<option>option2-2</option>
<option>option2-3</option>
</optgroup>
<optgroup title="option3">
<option>option3-1</option>
<option>option3-2</option>
<option>option3-3</option>
</optgroup>
</select>
23. 想有一個永久的BACK在屏幕的右下方。有些好像是自動的,若沒有,該怎么做?
可以加入以下代碼。
<do type="prev" label="Back">
</prev>
</do>
更好的是使用template。
……
<template>
<do type="prev" label="Back" name="back">
</prev>
</do>
</template>
……
24. WAP支持列表嗎?
是的,WAP1.1支持列表和相關的標記。
25. 可以在WML中使用表單嗎?
可以。但是Nokia 7110在顯示表單的時候有些問題。
26. WML支持什么樣的表單提交方式?
WML支持GET和POST方式。但是Nokia 7110在處理GET方式的時候有些問題。
27. WML中如何增加參數(shù)到URL字符串中?
和HTML的工作方式很像,如下所示:
……
www.someserver.com/someurl?parameter1=value1&parameter2=value2
……
唯一的不同是將“&”變成“&”。
28. 如何從WML向ASP傳送數(shù)據(jù)?
假設有一個ASP叫做“myasp.asp”,并且有一個WML變量叫做 “wmlvar”。當發(fā)出請求“myasp.asp?wmlvar=something”,可以使用下面的方法得到變量的內(nèi)容。
dim aspvar
aspvar = Request.QueryString("wmlvar")
ASP變量“aspvar”將包含字符串“something”。當然ASP變量也可以與WML變量同名。
29. 如何讓WML頁面自己更新?
有過Web經(jīng)驗的人喜歡使用:
<meta http-equiv="refresh" content="1;http://somewhere.com/">
來強制瀏覽器自動更新。
雖然在WAP中也支持一些META標簽,一個更好的辦法是使用<ontimer>標簽。
以下的代碼顯示了如何自動轉(zhuǎn)跳到另外一個卡片:nextdeck.wml。
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<card id="splashscreen" ontimer="nextcard.wml">
<timer value="40"/>
<p>Please wait for the timer to run out...</p>
</card>
</wml>
下面的代碼將強制瀏覽器在一段時間后重新裝入同一個卡片。這個頁面叫做loop.wml。
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<card id="loop" ontimer="loop.wml">
<timer value="40"/>
<p>This text will be shown over and over again...</p>
</card>
</wml>
注意必須避免瀏覽器可能要使用的cache機制。
30. WML頁面的最大大小是多少?
1397 bytes/deck
31. WML頁面的限制是多少?
由于WAP設備只有很少的內(nèi)存,因此就存在著一個最大的WML deck的界限。這里沒有一個絕對的標準,根據(jù)瀏覽器的不同而不同。表10-5列出了幾種瀏覽器的限制。
注意WML deck的大小是指編碼壓縮成二進制格式下的大小,一個沒有壓縮的WML deck可能很大,但是壓縮后可能比較小。
表10-5 不同瀏覽器的限制
瀏覽器
壓縮后的WML大小限制
UP.Browser 3.2
1492 bytes
UP.Browser 4.x
2048 bytes
Ericsson R320
大約3000 bytes
Ericsson R380
大約3500 bytes
Ericsson MC218
多于8000 bytes
Nokia 7110
1397 bytes
32. 如何防止對WML頁面的非法訪問?
WAP可以防止通過HTTP協(xié)議對文件和目錄的非法操作。注意:有些WAP模擬器和虛擬的WAP瀏覽器可能不支持這個特點。在這個時候是不知道是否有可能使用其他類型的驗證方式。
為了使用這種方式,用戶的HTTP服務器必須支持這個特點,其實大多數(shù)服務器都支持。當一個WAP瀏覽器請求一個URL,它將提醒用戶輸入用戶名和密碼。這些都轉(zhuǎn)換成無法直接閱讀的字符,但不是加密。也就是說如果網(wǎng)絡上有人在使用合適的設備監(jiān)聽,那么用戶名和密碼將被泄露。
這個特點在Apache文檔中有詳細的說明,但是文檔的描述很弱,這里有如何在Apache HTTP服務器上配置的說明:
要保證Apache已經(jīng)配置過,使得一個名叫.htaccess的文件可以覆蓋全局的操作配置。操作配置既可以在每個目錄使用分離的文件,也可以在全局的access.conf中。但是在這個例子中,我們將集中在.htaccess文件上。并且檢查AllowOverride的設置。這個必須設置到AuthConfig,那樣意味著Apache在目錄中尋找.htaccess文件,并且使用該文件中的規(guī)則。記住在配置后要重新啟動Apache服務器。
下一步是在目錄里放置需要保護的文件叫做.htaccess。(注意點代表文件名的開頭)。一個.htaccess文件的基本內(nèi)容如下:
AuthType Basic
AuthName "WAP FAQ Authentication Demo"
AuthUserFile /home/httpd/html/wap-faq/extras/auth/auth.passwd
require valid-user
AuthType設置是指定驗證的類型,AuthName指定領域,AuthUserFile指定口令文件的位置,require指定所想得到的操作。在這個例子中,任何在口令文件中的用戶都有一個正確的口令。
現(xiàn)在需要產(chǎn)生一個口令文件,Apache使用一個叫做 .htpasswd來完成這個特殊格式文件的生成。運行程序如下:
#htpasswd /home/httpd/html/wap-faq/extras/auth/auth.passwd demo
New password:
Re-type password:
Adding password for user demo
注意:在第一次創(chuàng)建文件的時候,必須使用“-c”選項。
現(xiàn)在加入了一個叫做“demo”的用戶,并且輸入了他的密碼兩次。考慮到安全的原因,口令文件不應該放在文件根目錄下。筆者在這里只是做演示。
現(xiàn)在最后就是測試,筆者建議使用HTML瀏覽器。輸入含有想保護的URL目錄的地址,一個對話框就會彈出來詢問用戶名和口令。如果一切順利,就可以使用WAP瀏覽器來測試了。
一個目錄保護的例子在這個服務器上,用戶名是demo,口令是demo??梢允褂肏TML或者WML瀏覽器來做測試。
這個例子同樣可以通過輸入http://wap.colorline.no/demos.html來得到。
或者只要點到保護的區(qū)域:
http://wap.colorline.no/wap-faq/extras/auth/
或者查看.htaccess文件。
最后點擊查看口令文件的內(nèi)容。
33. 怎么使用非拉丁字符?
在文件開頭加上:
encoding="ISO-8859-1"?
或者:
encoding="UTF-8"?
ISO-8859-1和UTF-8編碼支持更多的字符。
34. 一些特殊字符破壞了代碼和連接該怎么辦?
錨/鏈接有時候包含了一些字母和數(shù)字之外的字符。典型的如:“~”(波浪號)和“&”(與號)。如果根據(jù)書編程,就應該告訴WAP瀏覽器使用的是什么字符集。這個在XML定義中可以完成:
<?xml version="1.0" encoding="iso-8859-1"?>
“iso-8859-1”是Latin字符集。這個應該在大多數(shù)場合下能滿足需要。但是,還是需要對那些轉(zhuǎn)義字符進行轉(zhuǎn)義。即使指定了字符集,也是沒有用處的。
字符實體是某些特殊字符的標準名字,例如:“&”就是“&”。
大多數(shù)瀏覽器在反編碼名字實體的時候會出現(xiàn)問題,例如Nokia列出了7個兼容的名字實體:“quot”、“amp”、“apos”、“lt”、“gt”、“nbsp”和“shy”。只有在使用它們的十進制代碼的時候(在上述所說的Link中),瀏覽器可以顯示幾乎所有字符。如果Nokia的瀏覽器接收到無法支持的實體名,它就會崩潰。
通過使用HTML或者WML瀏覽器(在HTML格式下,雖然不是很好),可以操作在線的實體名列表,該列表在http://wap.colorline.no/wap-faq/apps/charentref.html。
這個表同樣有一個例子在:http://wap.colorline.no/demos.html。
第一步,選擇將要使用的字符集,Latin1,Latin1 Mathematical和Greek symbols,最后是Latin1 Markup symbols。注意到列表被分割了,是由于deck的限制。真正的列表顯示了實體名,實體的十進制值和真正的符號。從這里就可以看到哪個字符瀏覽器可以顯示。
注意上面的在線列表,不要設置為“charset=iso-8859-1”(真正的Latin1),那是個XML定義。
35. 可能在WML頁面上顯示一個可選的Link嗎?當用戶選擇后就可以直接撥號?
現(xiàn)在不行。但是一旦支持WTAI的設備出現(xiàn),那么就可能實現(xiàn)。