- WML 教程
- WML - 首頁
- WML - 概述
- WML - 環境
- WML - 語法
- WML - 元素
- WML - 註釋
- WML - 變數
- WML - 格式化
- WML - 字型
- WML - 圖片
- WML - 表格
- WML - 連結
- WML - 任務
- WML - 輸入
- WML - 提交資料
- WML - 伺服器指令碼
- WML - 事件
- WML - 定時器
- WML - 模板
- WML - DTD
- WML2 教程
- WML 參考
- WML - 實體
- WML - 標籤參考
- WML 有用資源
- WML 快速指南
- WML - 有用資源
- WML - 討論
WML 快速指南
WML - 概述
WAP(無線應用協議)架構的最頂層由WAE(無線應用環境)組成,WAE包含WML和WML指令碼語言。
WML代表**W**ireless **M**arkup **L**anguage(無線標記語言)
WML是XML的一種應用,它在文件型別定義中定義。
WML基於HDML,並進行了修改,以便可以與HTML進行比較。
WML考慮了小螢幕和低頻寬傳輸。
WML是WAP規範中定義的標記語言。
WAP網站是用WML編寫的,而網站是用HTML編寫的。
WML與HTML非常相似。它們都使用標籤,並以純文字格式編寫。
WML副檔名為“.wml”。WML的MIME型別為“text/vnd.wap.wml”。
WML支援客戶端指令碼。支援的指令碼語言稱為WMLScript。
WML版本
WAP論壇釋出了最新版本WAP 2.0。WAP 2.0中定義的標記語言是XHTML Mobile Profile (MP)。WML MP是XHTML的子集。還引入了一種名為WCSS(WAP CSS)的樣式表。WCSS是CSS2的子集。
大多數釋出的新款手機型號都支援WAP 2.0。因為WAP 2.0向後相容WAP 1.x,所以支援WAP 2.0的移動裝置可以顯示XHTML MP和WML文件。
WML 1.x是較早的技術。但這並不意味著它沒有用,因為許多僅支援WML 1.x的無線裝置仍在使用。WML的最新版本是2.0,它是為了向後相容性而建立的。因此,WAP網站開發人員無需擔心WML 2.0。
WML 卡組和卡片
HTML和WML之間的一個主要區別在於,HTML的基本導航單元是頁面,而WML的基本導航單元是卡片。一個WML檔案可以包含多個卡片,它們構成一個卡組。
當從手機訪問WML頁面時,頁面中的所有卡片都將從WAP伺服器下載。因此,如果使用者轉到同一卡組的另一張卡片,移動瀏覽器無需向伺服器傳送任何請求,因為包含該卡組的檔案已儲存在無線裝置中。
您可以將連結、文字、影像、輸入欄位、選項框和許多其他元素放在卡片中。
WML程式結構
以下是WML程式的基本結構
<?xml version="1.0"?> <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN" "http://www.wapforum.org/DTD/wml12.dtd"> <wml> <card id="one" title="First Card"> <p> This is the first card in the deck </p> </card> <card id="two" title="Second Card"> <p> Ths is the second card in the deck </p> </card> </wml>
第一行文字說明這是一個XML文件,版本為1.0。第二行選擇文件型別並給出文件型別定義(DTD)的URL。
一個WML卡組(即頁面)可以包含一個或多個卡片,如上所示。我們將在後續章節中詳細瞭解WML文件結構。
與HTML 4.01 Transitional不同,文字不能直接包含在<card>...</card>標籤對中。因此,您需要像上面那樣在<p>...</p>中放入內容。
WAP網站設計注意事項
無線裝置的顯示屏和鍵盤尺寸有限。因此,在設計WAP網站時務必考慮到這一點。
在設計WAP網站時,您必須確保保持簡潔易用。您應該始終記住,沒有標準的微型瀏覽器行為,並且資料鏈路可能相對較慢,約為10Kbps。但是,使用GPRS、EDGE和UMTS,根據您的位置,這種情況可能不會持續很久。
以下是設計服務時應牢記的一些一般設計技巧
將WML卡組和影像大小保持在1.5KB以下。
保持文字簡短且有意義,並儘可能預先編碼選項,以最大限度地減少使用者資料輸入的痛苦體驗。
保持URL簡短且易於記憶。
最大限度地減少選單級別,以防止使用者迷路並減慢系統速度。
使用標準的佈局標籤,例如<big>和<b>,並以邏輯方式組織您的資訊。
不要過度使用圖形,因為許多目標裝置可能不支援它們。
WML - 環境
要開發WAP應用程式,您需要以下內容
**支援WAP的Web伺服器:**您可以啟用Apache或Microsoft IIS來處理所有WAP客戶端請求。
**WAP閘道器模擬器:**這是與WAP伺服器互動所必需的。
**WAP手機模擬器:**這是測試WAP頁面和顯示所有WAP頁面所必需的。
您可以使用以下語言編寫WAP頁面
- 無線標記語言 (WML) 用於開發WAP應用程式。
- WML指令碼用於增強WAP應用程式的功能。
配置Web伺服器
在普通的Web應用程式中,MIME型別設定為text/html,表示普通的HTML程式碼。另一方面,影像可以指定為image/gif或image/jpeg等。透過此內容型別規範,Web瀏覽器知道Web伺服器返回的資料型別。
要使您的Apache與WAP相容,您無需做太多事情。您只需要新增對下面列出的MIME型別和副檔名的支援。
| 副檔名 | MIME型別 |
|---|---|
| WML(.wml) | text/vnd.wap.wml |
| WMLScript(.wmls) | text/vmd.wap.wmlscript |
| WMLScriptc(.wmlsx) | application/vnd.wap.wmlscriptc |
| WMLC(.wmlc) | application/vnd.wap.wmlc |
| WBMP(.wbmp) | image/vnd.wap.wbmp |
配置Apache Web伺服器以支援WAP
假設您已經在計算機上安裝了Apache Web伺服器。現在,我們將告訴您如何在Apache Web伺服器中啟用WAP功能。
因此,找到Apache的httpd.conf檔案(通常位於/etc/httpd/conf中),並將以下幾行新增到該檔案中,然後重新啟動伺服器。
AddType text/vnd.wap.wml .wml AddType text/vnd.wap.wmlscript .wmls AddType application/vnd.wap.wmlc .wmlc AddType application/vnd.wap.wmlscriptc .wmlsc AddType image/vnd.wap.wbmp .wbmp
在動態應用程式中,必須動態設定MIME型別,而在靜態WAP應用程式中,必須適當地配置Web伺服器。
配置Microsoft IIS以支援WAP
要配置Microsoft IIS伺服器以提供WAP內容,您需要執行以下操作
- 開啟Internet服務管理器控制檯,並展開樹以檢視您的網站條目。您可以將WAP MIME型別新增到整個伺服器或各個目錄。
- 透過右鍵單擊相應的伺服器或目錄,然後從選單中選擇“屬性”,開啟“屬性”對話方塊。
- 在“屬性”對話方塊中,選擇“HTTP標頭”選項卡,然後選擇右下角的“檔案型別”按鈕。
- 對於前面表格中列出的每個MIME型別,提供帶點或不帶點的副檔名(它將自動為您新增),然後單擊“屬性”對話方塊中的“確定”以接受您的更改。
安裝WAP閘道器模擬器
網際網路上有許多WAP閘道器模擬器可用,因此下載其中任何一個並安裝到您的PC上。您需要在啟動WAP手機模擬器之前執行此閘道器。
WAP閘道器將接收您的請求,並將其傳遞給Web伺服器,從Web伺服器接收到的任何響應都將傳遞給手機模擬器。
您可以從諾基亞網站下載它
諾基亞WAP閘道器模擬器 - 下載諾基亞WAP閘道器模擬器。
安裝WAP手機模擬器
網際網路上有許多WAP模擬器可用,因此下載其中任何一個並安裝到您的PC上,您將將其用作WAP客戶端。以下是下載模擬器的常用連結
**注意:**如果您有支援WAP的手機,則無需安裝此模擬器。但在開發過程中,使用模擬器更方便經濟。
WAP模型
我只是為了您的參考提供本節內容,如果您不感興趣,可以跳過本節。
下圖顯示了WAP程式設計模型。請注意它與Internet模型的相似之處。如果沒有WAP閘道器/代理,這兩個模型實際上將是相同的。
WAP閘道器/代理是連線無線域和Internet的實體。您應該注意,從無線客戶端傳送到WAP閘道器/代理的請求使用無線會話協議(WSP)。本質上,WSP是HTTP的二進位制版本。
無線標記語言(WML)已被採用以開發最佳化的WAP應用程式。為了節省無線網路中的寶貴頻寬,WML可以編碼為緊湊的二進位制格式。編碼WML是WAP閘道器/代理執行的任務之一。
WAP模型的工作原理?
在實際使用中,WAP的工作方式如下
使用者選擇其移動裝置上的一個選項,該選項分配有包含無線標記語言 (WML) 內容的URL。
手機透過電話網路使用二進位制編碼的WAP協議將URL請求傳送到WAP閘道器。
閘道器將此WAP請求轉換為指定的URL的常規HTTP請求,並將其傳送到Internet。
相應的Web伺服器接收HTTP請求。
伺服器處理請求,就像處理任何其他請求一樣。如果URL引用靜態WML檔案,則伺服器將交付該檔案。如果請求CGI指令碼,則會對其進行處理,並照常返回內容。
Web伺服器將HTTP標頭新增到WML內容並將其返回給閘道器。
WAP閘道器將WML編譯成二進位制形式。
然後,閘道器將WML響應傳送回手機。
手機透過WAP協議接收WML。
微型瀏覽器處理WML並在螢幕上顯示內容。
WML - 語法
WML程式通常分為兩部分:文件序言和正文。請考慮以下程式碼
以下是WML程式的基本結構
<?xml version="1.0"?> <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN" "http://www.wapforum.org/DTD/wml12.dtd"> <wml> <card id="one" title="First Card"> <p> This is the first card in the deck </p> </card> <card id="two" title="Second Card"> <p> Ths is the second card in the deck </p> </card> </wml>
WML文件序言
第一行文字說明這是一個XML文件,版本為1.0。第二行選擇文件型別並給出文件型別定義(DTD)的URL。引用的DTD在WAP 1.2中定義,但此標題會隨WML的版本而更改。必須精確複製標題,以便工具包自動生成此序言。
序言元件不是WML元素,不應關閉,即不應為它們提供結束標籤或以/>結束它們。
WML文件正文
主體內容包含在`
Deck(牌組)
Card(卡片)
要顯示的內容
導航指令
與HTML 4.01 Transitional不同,文字不能直接包含在<card>...</card>標籤對中。因此,您需要像上面那樣在<p>...</p>中放入內容。
測試您的程式
將以上程式碼放入名為test.wml的檔案中,並將此WML檔案儲存在本地硬碟上,然後使用模擬器檢視。
這是開發和測試WML檔案的最高效方式。但是,由於您的目標是開發一項將提供給WAP手機使用者的服務,因此您應該在本地開發完WML檔案後將其上傳到伺服器,並透過真實的網際網路連線進行測試。當您開始開發更復雜的WAP服務時,這就是您識別和糾正效能問題的方法,否則這些問題可能會導致您失去網站訪問者。
將test.wml檔案上傳到伺服器時,您將測試WML模擬器的外觀和行為,並檢查Web伺服器是否已正確設定。現在啟動您的模擬器並使用它訪問test.wml的URL。例如,URL可能如下所示:
http://websitename.com/wapstuff/test.wml
注意:訪問任何URL之前,請確保WAP閘道器模擬器正在您的PC上執行。
下載WAP程式後,您將在手機上只看到第一張卡片。以下是諾基亞手機瀏覽器4.0上上述示例的輸出。這款手機支援水平滾動。您可以透過按下“左”或“右”按鈕檢視螢幕外的文字。
按下右按鈕後,第二張卡片將可見,如下所示:
WML - 元素
WML由一組元素定義,這些元素指定WML牌組的所有標記和結構資訊。元素由標籤標識,每個標籤都包含在一對尖括號中。
與HTML不同,WML嚴格遵守XML層次結構,因此,元素必須包含起始標籤;任何內容,例如文字和/或其他元素;以及結束標籤。元素具有以下兩種結構之一:
`
` 內容 ` `:此形式與HTML相同。`
`:當元素不能包含可見內容或為空時使用,例如換行符。WML文件的序言部分沒有任何具有結束元素的元素。
下表列出了大部分有效的元素。所有這些元素的完整詳細資訊在WML標籤參考中給出。
Deck & Card 元素
| WML 元素 | 用途 |
|---|---|
| `` | 定義WML註釋 |
| ` |
定義WML牌組(WML根) |
| `` | 定義頭部資訊 |
| `` | 定義元資訊 |
| ` |
定義牌組中的一張卡片 |
| ` |
定義關於牌組訪問控制的資訊 |
| `` | 為牌組中的所有卡片定義程式碼模板 |
文字元素
| WML 元素 | 用途 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ` ` |
定義換行符 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ` ` |
定義段落 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
`
文字格式化標籤
影像元素
錨元素
事件元素
任務元素
輸入元素
變數元素
WML - 註釋與大多數程式語言一樣,WML也提供了一種在程式碼中放置註釋文字的方法。 開發人員使用註釋來記錄程式碼中的程式設計決策,以便更容易維護程式碼。 WML註釋使用與HTML註釋相同的格式,並使用以下語法: <!-- This will be assumed as a comment --> 多行註釋可以如下給出: <!-- This is a multi-line
comment -->
WML作者可以在任何地方使用註釋,使用者代理不會將其顯示給使用者。如果註釋放在XML序言之前,一些模擬器可能會報錯。 請注意,註釋不會被編譯或傳送到使用者代理,因此不會影響編譯後牌組的大小。 WML - 變數因為一個牌組中可以包含多個卡片,所以需要一種機制來儲存資料,以便使用者在卡片之間切換。這種機制是透過WML變數提供的。 WML區分大小寫。解析WML牌組時不執行大小寫摺疊。所有列舉屬性值都區分大小寫。例如,以下屬性值都不同:id="Card1"、id="card1"和id="CARD1"。 可以使用幾種不同的方法建立和設定變數。以下是兩個示例: `
|
| 屬性 | 值 | 描述 |
|---|---|---|
| name | 字串 | 設定變數的名稱 |
| value | 字串 | 設定變數的值 |
| class | 類資料 | 為元素設定類名。 |
| id | 元素ID | 元素的唯一ID。 |
以下元素將建立一個名為a、值為1000的變數:
<setvar name="a" value="1000"/>
輸入元素
變數也透過任何輸入元素(如input、select、option等)設定。會自動建立一個與輸入元素的命名屬性對應的變數。
例如,以下元素將建立一個名為b的變數:
<select name="b"> <option value="value1">Option 1</option> <option value="value2">Option 2</option> </select>
使用變數
變數擴充套件在執行時在微瀏覽器或模擬器中發生。這意味著它可以與其他文字連線或嵌入。
變數用前面的美元符號引用,WML牌組中的任何單個美元符號都被解釋為變數引用。
<p> Selected option value is $(b) </p>
WML - 格式化
本節將介紹WML的基本文字格式化元素。
換行符
`
` 元素定義換行符,幾乎所有WAP瀏覽器都支援換行符標籤。
`
` 元素支援以下屬性:
| 屬性 | 值 | 描述 |
|---|---|---|
| xml:lang | 語言程式碼 | 設定元素中使用的語言 |
| class | 類資料 | 為元素設定類名。 |
| id | 元素ID | 元素的唯一ID。 |
以下示例顯示`
`元素的用法。
<?xml version="1.0"?> <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN" "http://www.wapforum.org/DTD/wml12.dtd"> <wml> <card title="Line Break Example"> <p align="center"> This is a <br /> paragraph with a line break. </p> </card> </wml>
這將產生以下結果:
文字段落
`
` 元素定義一段文字,WAP瀏覽器總是換行渲染段落。
需要`
`元素來定義WML中的任何文字、影像或表格。
`
` 元素支援以下屬性:
| 屬性 | 值 | 描述 |
|---|---|---|
| align |
| 用於更改段落的水平對齊方式。 |
| mode |
| 設定段落是否應換行。 |
| xml:lang | 語言程式碼 | 設定元素中使用的語言 |
| class | 類資料 | 為元素設定類名。 |
| id | 元素ID | 元素的唯一ID。 |
以下示例顯示`
`元素的用法。
<?xml version="1.0"?> <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN" "http://www.wapforum.org/DTD/wml12.dtd"> <wml> <card title="Paragraph Example"> <p align="center"> This is first paragraph </p> <p align="right"> This is second paragraph </p> </card> </wml>
這將產生以下結果:
WML表格
`
| `一起用於在WML中建立表格。WML不允許巢狀表格。
`
以下示例顯示`
以下示例顯示` `元素的用法。
以下示例顯示了 ` <?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"
"http://www.wapforum.org/DTD/wml12.dtd">
<wml>
<onevent type="onenterbackward">
<go href="#card3"/>
</onevent>
<card id="card1" title="Card 1">
<p>
<anchor>
<go href="#card2"/>
Go to card 2
</anchor>
</p>
</card>
<card id="card2" title="Card 2">
<p>
<anchor>
<prev/>
Going backwards
</anchor>
</p>
</card>
<card id="card3" title="Card 3">
<p>
Hello World!
</p>
</card>
</wml>
WML - 定時器前一章描述了使用者如何觸發事件以及我們如何使用事件處理程式來處理它們。 有時,你可能希望某些事情發生,而無需使用者顯式啟用控制元件。是的,WML 提供ontimer事件來處理此問題。 當卡片的計時器從一倒計時到零時,將觸發 ontimer 事件,這意味著如果計時器初始化為零超時,則不會發生此事件。 你可以使用 ` <onevent type="ontimer"> A task to be performed. </onevent> 這裡,任務可以是 ` WML `
|
| 屬性 | 值 | 描述 |
|---|---|---|
| name | 文字 | 為元素設定名稱。 |
| value | 數字 | 指定計時器過期後的時間。超時以十分之一秒為單位指定。 |
| class | class_data | 為元素設定類名。 |
| id | 元素ID | 元素的唯一ID。 |
以下示例顯示了 `
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"
"http://www.wapforum.org/DTD/wml12.dtd">
<wml>
<card id="splash" title="splash">
<onevent type="ontimer">
<go href="#welcome"/>
</onevent>
<timer value="50"/>
<p>
<a href="#welcome">Enter</a>
</p>
</card>
<card id="welcome" title="Welcome">
<p>
Welcome to the main screen.
</p>
</card>
</wml>
載入此程式時,它會顯示以下螢幕
如果你沒有選擇給定的Enter選項,則 5 秒後,你將被定向到Welcome頁面,並將自動顯示以下螢幕。
WML - 模板
`` 用於將 `
可以透過在 WML 卡片中定義另一個具有相同 `name` 屬性值的 `
`` 元素支援以下屬性
| 屬性 | 值 | 描述 |
|---|---|---|
| onenterbackward | URL | 當用戶使用“prev”任務導航到卡片時發生 |
| onenterforward | URL | 當用戶使用“go”任務導航到卡片時發生 |
| ontimer | URL | 當“timer”超時時發生 |
| class | 類資料 | 為元素設定類名。 |
| id | 元素ID | 元素的唯一ID。 |
以下是顯示 <go> 元素用法的示例。
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.3//EN"
"http://www.wapforum.org/DTD/wml13.dtd">
<wml>
<template>
<do name="main_menu" type="accept" label="Chapters">
<go href="chapters"/>
</do>
<do name="menu_1" type="accept" label="Chapter 1">
<go href="#chapter1"/>
</do>
<do name="menu_2" type="accept" label="Chapter 2">
<go href="#chapter2"/>
</do>
<do name="menu_3" type="accept" label="Chapter 3">
<go href="#chapter3"/>
</do>
<do name="menu_4" type="accept" label="Chapter 4">
<go href="#chapter4"/>
</do>
</template>
<card id="chapters" title="WML Tutorial">
<p>
Select One Chapter:<br/>
<anchor>
<go href="#chapter1"/>
Chapter 1: WML Overview
</anchor><br />
<anchor>
<go href="#chapter2"/>
Chapter 2: WML Environment
</anchor><br />
<anchor>
<go href="#chapter3"/>
Chapter 3: WML Syntax
</anchor><br />
<anchor>
<go href="#chapter4"/>
Chapter 4: WML Elements
</anchor><br />
</p>
</card>
<card id="chapter1" title="WML Tutorial Ch1">
<p>
<em>Chapter 1: WML Introduction</em><br/>
...
</p>
</card>
<card id="chapter2" title="WML Tutorial Ch2">
<p>
<em>Chapter 2: WML Environment</em><br/>
...
</p>
</card>
<card id="chapter3" title="WML Tutorial Ch3">
<p>
<em>Chapter 3: WML Syntax</em><br/>
...
</p>
</card>
<card id="chapter4" title="WML Tutorial Ch4">
<p>
<em>Chapter 4: WML Elements</em><br/>
...
</p>
</card>
</wml>
這將生成以下選單,現在你可以瀏覽所有章節
WML - DTD
這是從 W3.org 獲取的完整 DTD。有關最新的 DTD,請檢視本教程的 WML 有用資源部分。
<!--
Wireless Markup Language (WML) Document Type Definition.
WML is an XML language. Typical usage:
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"
"http://www.wapforum.org/DTD/wml12.dtd">
<wml>
...
</wml>
Terms and conditions of use are available from the WAP Forum
Ltd. web site at http://www.wapforum.org/docs/copyright.htm.
-->
<!ENTITY % length "CDATA">
<!-- [0-9]+ for pixels or [0-9]+"%" for
percentage length -->
<!ENTITY % vdata "CDATA">
<!-- attribute value possibly containing
variable references -->
<!ENTITY % HREF "%vdata;">
<!-- URI, URL or URN designating a hypertext
node. May contain variable references -->
<!ENTITY % boolean "(true|false)">
<!ENTITY % number "NMTOKEN">
<!-- a number, with format [0-9]+ -->
<!ENTITY % coreattrs "id ID #IMPLIED
class CDATA #IMPLIED">
<!ENTITY % ContentType "%vdata;">
<!-- media type. May contain variable references -->
<!ENTITY % emph "em | strong |b |i |u |big |small">
<!ENTITY % layout "br">
<!ENTITY % text "#PCDATA | %emph;">
<!-- flow covers "card-level" elements,
such as text and images -->
<!ENTITY % flow "%text; | %layout; | img | anchor |a |table">
<!-- Task types -->
<!ENTITY % task "go | prev | noop | refresh">
<!-- Navigation and event elements -->
<!ENTITY % navelmts "do | onevent">
<!--================ Decks and Cards ================-->
<!ELEMENT wml ( head?, template?, card+ )>
<!ATTLIST wml
xml:lang NMTOKEN #IMPLIED
%coreattrs;
>
<!-- card intrinsic events -->
<!ENTITY % cardev
"onenterforward %HREF; #IMPLIED
onenterbackward %HREF; #IMPLIED
ontimer %HREF; #IMPLIED"
>
<!-- card field types -->
<!ENTITY % fields "%flow; | input | select | fieldset">
<!ELEMENT card (onevent*, timer?, (do | p | pre)*)>
<!ATTLIST card
title %vdata; #IMPLIED
newcontext %boolean; "false"
ordered %boolean; "true"
xml:lang NMTOKEN #IMPLIED
%cardev;
%coreattrs;
>
<!--================ Event Bindings ================-->
<!ELEMENT do (%task;)>
<!ATTLIST do
type CDATA #REQUIRED
label %vdata; #IMPLIED
name NMTOKEN #IMPLIED
optional %boolean; "false"
xml:lang NMTOKEN #IMPLIED
%coreattrs;
>
<!ELEMENT onevent (%task;)>
<!ATTLIST onevent
type CDATA #REQUIRED
%coreattrs;
>
<!--================ Deck-level declarations ================-->
<!ELEMENT head ( access | meta )+>
<!ATTLIST head
%coreattrs;
>
<!ELEMENT template (%navelmts;)*>
<!ATTLIST template
%cardev;
%coreattrs;
>
<!ELEMENT access EMPTY>
<!ATTLIST access
domain CDATA #IMPLIED
path CDATA #IMPLIED
%coreattrs;
>
<!ELEMENT meta EMPTY>
<!ATTLIST meta
http-equiv CDATA #IMPLIED
name CDATA #IMPLIED
forua %boolean; "false"
content CDATA #REQUIRED
scheme CDATA #IMPLIED
%coreattrs;
>
<!--================ Tasks ================-->
<!ELEMENT go (postfield | setvar)*>
<!ATTLIST go
href %HREF; #REQUIRED
sendreferer %boolean; "false"
method (post|get) "get"
enctype %ContentType; "application/x-www-form-urlencoded"
accept-charset CDATA #IMPLIED
%coreattrs;
>
<!ELEMENT prev (setvar)*>
<!ATTLIST prev
%coreattrs;
>
<!ELEMENT refresh (setvar)*>
<!ATTLIST refresh
%coreattrs;
>
<!ELEMENT noop EMPTY>
<!ATTLIST noop
%coreattrs;
>
<!--================ postfield ================-->
<!ELEMENT postfield EMPTY>
<!ATTLIST postfield
name %vdata; #REQUIRED
value %vdata; #REQUIRED
%coreattrs;
>
<!--================ variables ================-->
<!ELEMENT setvar EMPTY>
<!ATTLIST setvar
name %vdata; #REQUIRED
value %vdata; #REQUIRED
%coreattrs;
>
<!--================ Card Fields ================-->
<!ELEMENT select (optgroup|option)+>
<!ATTLIST select
title %vdata; #IMPLIED
name NMTOKEN #IMPLIED
value %vdata; #IMPLIED
iname NMTOKEN #IMPLIED
ivalue %vdata; #IMPLIED
multiple %boolean; "false"
tabindex %number; #IMPLIED
xml:lang NMTOKEN #IMPLIED
%coreattrs;
>
<!ELEMENT optgroup (optgroup|option)+ >
<!ATTLIST optgroup
title %vdata; #IMPLIED
xml:lang NMTOKEN #IMPLIED
%coreattrs;
>
<!ELEMENT option (#PCDATA | onevent)*>
<!ATTLIST option
value %vdata; #IMPLIED
title %vdata; #IMPLIED
onpick %HREF; #IMPLIED
xml:lang NMTOKEN #IMPLIED
%coreattrs;
>
<!ELEMENT input EMPTY>
<!ATTLIST input
name NMTOKEN #REQUIRED
type (text|password) "text"
value %vdata; #IMPLIED
format CDATA #IMPLIED
emptyok %boolean; "false"
size %number; #IMPLIED
maxlength %number; #IMPLIED
tabindex %number; #IMPLIED
title %vdata; #IMPLIED
accesskey %vdata; #IMPLIED
xml:lang NMTOKEN #IMPLIED
%coreattrs;
>
<!ELEMENT fieldset (%fields; | do)* >
<!ATTLIST fieldset
title %vdata; #IMPLIED
xml:lang NMTOKEN #IMPLIED
%coreattrs;
>
<!ELEMENT timer EMPTY>
<!ATTLIST timer
name NMTOKEN #IMPLIED
value %vdata; #REQUIRED
%coreattrs;
>
<!--================ Images ================-->
<!ENTITY % IAlign "(top|middle|bottom)" >
<!ELEMENT img EMPTY>
<!ATTLIST img
alt %vdata; #REQUIRED
src %HREF; #REQUIRED
localsrc %vdata; #IMPLIED
vspace %length; "0"
hspace %length; "0"
align %IAlign; "bottom"
height %length; #IMPLIED
width %length; #IMPLIED
xml:lang NMTOKEN #IMPLIED
%coreattrs;
>
<!--================ Anchor ================-->
<!ELEMENT anchor ( #PCDATA | br | img | go | prev | refresh )*>
<!ATTLIST anchor
title %vdata; #IMPLIED
accesskey %vdata; #IMPLIED
xml:lang NMTOKEN #IMPLIED
%coreattrs;
>
<!ELEMENT a ( #PCDATA | br | img )*>
<!ATTLIST a
href %HREF; #REQUIRED
title %vdata; #IMPLIED
accesskey %vdata; #IMPLIED
xml:lang NMTOKEN #IMPLIED
%coreattrs;
>
<!--================ Tables ================-->
<!ELEMENT table (tr)+>
<!ATTLIST table
title %vdata; #IMPLIED
align CDATA #IMPLIED
columns %number; #REQUIRED
xml:lang NMTOKEN #IMPLIED
%coreattrs;
>
<!ELEMENT tr (td)+>
<!ATTLIST tr
%coreattrs;
>
<!ELEMENT td ( %text; | %layout; | img | anchor |a )*>
<!ATTLIST td
xml:lang NMTOKEN #IMPLIED
%coreattrs;
>
<!--============ Text layout and line breaks =============-->
<!ELEMENT em (%flow;)*>
<!ATTLIST em
xml:lang NMTOKEN #IMPLIED
%coreattrs;
>
<!ELEMENT strong (%flow;)*>
<!ATTLIST strong
xml:lang NMTOKEN #IMPLIED
%coreattrs;
>
<!ELEMENT b (%flow;)*>
<!ATTLIST b
xml:lang NMTOKEN #IMPLIED
%coreattrs;
>
<!ELEMENT i (%flow;)*>
<!ATTLIST i
xml:lang NMTOKEN #IMPLIED
%coreattrs;
>
<!ELEMENT u (%flow;)*>
<!ATTLIST u
xml:lang NMTOKEN #IMPLIED
%coreattrs;
>
<!ELEMENT big (%flow;)*>
<!ATTLIST big
xml:lang NMTOKEN #IMPLIED
%coreattrs;
>
<!ELEMENT small (%flow;)*>
<!ATTLIST small
xml:lang NMTOKEN #IMPLIED
%coreattrs;
>
<!ENTITY % TAlign "(left|right|center)">
<!ENTITY % WrapMode "(wrap|nowrap)" >
<!ELEMENT p (%fields; | do)*>
<!ATTLIST p
align %TAlign; "left"
mode %WrapMode; #IMPLIED
xml:lang NMTOKEN #IMPLIED
%coreattrs;
>
<!ELEMENT br EMPTY>
<!ATTLIST br
%coreattrs;
>
<!ELEMENT pre (#PCDATA | a | br | i | b | em | strong |
input | select )*>
<!ATTLIST pre
xml:space CDATA #FIXED "preserve"
%coreattrs;
>
<!ENTITY quot """> <!-- quotation mark -->
<!ENTITY amp "&"> <!-- ampersand -->
<!ENTITY apos "'"> <!-- apostrophe -->
<!ENTITY lt "<"> <!-- less than -->
<!ENTITY gt ">"> <!-- greater than -->
<!ENTITY nbsp " "> <!-- non-breaking space -->
<!ENTITY shy ""> <!-- soft hyphen (discretionary hyphen) -->
WML2 教程
WML2 是一種擴充套件以下內容的語法和語義的語言
- XHTML Basic [XHTMLBasic]
- CSS Mobile Profile [CSSMP]
- WML1.0 的唯一語義 [WML1.0]
WML2 針對在行動電話和其他無線移動終端等能力有限的裝置上指定簡報和使用者互動進行了最佳化。
本教程詳細介紹了無線標記語言 (WML) 版本 2。本教程將 WML 的 2.0 版本稱為 WML2。
W3C 定義的 XHTML Basic 是 XHTML 的一個適當子集,XHTML 是 HTML 在 XML 中的重新制定。
WML2 的基本目標
WML2 有五個主要目標
向後相容性:WML2 應用程式也應該在舊裝置上執行。
與現有和不斷發展的網際網路標準融合:XHTML Basic [XHTMLBasic] 和 CSS Mobile Profile [CSSMP]
最佳化從小巧、有限的裝置訪問:支援 WAP 的裝置通常很小且電池供電,並且記憶體和 CPU 能力相對有限。因此,WML2 應該足夠最佳化才能在這些裝置上執行。
允許建立不同的使用者介面:WAP 允許建立具有最大靈活性和廠商增強使用者體驗能力的人機介面 (MMI)。
體系結構的國際化:WAP 針對國際使用常見的字元程式碼。這包括供終端使用者使用的國際符號和象形圖集,以及供內容開發者使用的本地使用字元編碼。
WML2 願景
WML2 的願景是建立一種語言,該語言使用 WML1 的唯一語義擴充套件 XHTML Basic 和 CSS Mobile profile 的語法和語義。使用者不應知道如何實現 WML1 相容性。
WML2 語言結構
WML2 是一種具有以下元件的新語言
(1) XHTML Basic
此元素組用於 W3C 融合。對於某些元素,添加了 WML 擴充套件屬性以實現 WML1 功能。
(1a) XHTML Basic 元素
a abbr acronym address base blockquote br caption cite code dd dfn div dl dt em form h1 h2 h3 h4 h5 h6 head kbd label li link object ol param pre q samp span strong table td th title tr ul var
(1b) 帶有 WML 擴充套件屬性的 XHTML Basic 元素
body html img input meta option p select style textarea
(2) XHTML 模組化元素
此元素組由 XHTML 模組中未包含在 XHTML Basic 中的選定元素組成。大多數元素都包含在內,用於與 WML1 向後相容。包含一個元素作為適合有限手機功能的增強功能。
(2a) 用於與 WML1 向後相容的 XHTML 模組化
b big i small(來自簡報模組)u(來自舊版模組)fieldset optgroup(來自表單模組)
(2b) 用於功能增強的 XHTML 模組化元素
hr
(3) WML 擴充套件元素
一些元素來自 WML1,因為 XHTML Basic 或 XHTML 模組化中沒有提供等效的功能。包含一個元素是為了增強 WML1 功能。
(3a) WML 擴充套件元素(用於 WML1 相容性)
wml:access wml:anchor wml:card wml:do wml:getvar wml:go wml:noop wml:onevent wml:postfield wml:prev wml:refresh wml:setvar wml:timer
(3b) WML 擴充套件元素(用於功能增強)
wml:widget
WML 文件結構模組
結構模組中的以下元素用於指定 WML2 文件的結構
- body
- html
- wml:card
- head
- title 屬性
body 元素
wml:newcontext 屬性指定載入文件時瀏覽器上下文是否初始化為明確定義的狀態。如果 wml:newcontext 屬性值為“true”,則瀏覽器必須在此卡片導航時重新初始化瀏覽器上下文。
html 元素
xmlns:wml 屬性引用 WML 名稱空間,例如:http://www.wapforum.org/2001/wml。
wml:use-xml-fragments 屬性用於指定使用者代理如何解釋片段識別符號。有關在 go 任務和 prev 任務中使用 wml:use-xml-fragments 的詳細資訊。
wml:card 元素
wml:card 元素指定文件正文的一部分。多個 wml:card 元素可以出現在單個文件中。每個 wml:card 元素代表與使用者的單個簡報和/或互動。
如果 wml:card 元素的 newcontext 屬性值為“true”,則瀏覽器必須在此卡片導航時重新初始化瀏覽器上下文。
head 元素
此元素保留文件的標題資訊,如 meta 元素和樣式表等。
title 元素
此元素用於設定文件標題
注意:WML 開發人員可以使用 XHTML 文件樣式(即主體結構),也可以使用卡片集合。使用主體結構時,文件使用 body 元素構建。body 元素包含文件的內容。使用卡片集合時,文件使用一個或多個 wml:card 元素構建。
WML2 任務
WML2.0 中定義了以下任務。這些任務與 WML1.0 非常相似。
- go 任務
- prev 任務
- noop 任務
- refresh 任務
WML2 事件
WML2 中定義了以下事件型別
內在事件:由使用者代理生成的事件,包括以下與 WML1.0 相似的事件。
- ontimer
- onenterforward
- onenterbackward
- onpick
外在事件:由某些外部代理傳送給使用者代理的事件。WML 2 規範未指定任何外在事件類別。WML 外在事件類別的一個示例可能是 WTA 事件。
WML2 文件型別
WML2 文件由 MIME 媒體型別“application/wml+xml”標識。“application/xhtml+xml”型別可用於標識來自任何基於 XHTML 的標記語言(包括 XHTML Basic)的文件。
DOCTYPE 宣告可以包含 XHTML Basic 正式公共識別符號,也可以包含 XHTML Basic DTD 的 URI,如下所示。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.0//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd">
WML2 與樣式表
樣式表可用於設定 WML2 文件的樣式。樣式資訊可以透過三種方式與文件關聯。
外部樣式表
可以使用特殊的 XML 處理指令或 link 元素將外部樣式表與文件關聯。也可以使用 XML 處理指令。
在以下示例中,使用 XML 處理指令來關聯外部樣式表“mobile.css”。
<?xml-stylesheet href="mobile.css"
media="handheld" type="text/css" ?>
在以下示例中,使用 link 元素關聯外部樣式表“mystyle.css”。
<html> <head> <link href="mystyle.css" type="text/css" rel="stylesheet"/> ... </head> ... </html>
內部樣式表
可以使用 style 元素在文件中定位樣式資訊。此元素與 link 元素一樣,必須位於文件頭部。
以下是內部樣式表的示例。
<html>
<head>
<style type="text/css">
p { text-align: center; }
</style>
...
</head>
...
</html>
內聯樣式
可以使用style屬性為單個元素指定樣式資訊。這稱為內聯樣式。
在以下示例中,內聯樣式資訊應用於特定的段落元素。
<p style="text-align: center">...</p>
WML2 預設樣式表
這是一個 WML 2.0 的樣式表示例。
body, card, div, p, center, hr, h1, h2, h3, h4, h5, h6,
address, blockquote, pre, ol, ul, dl, dt, dd,
form, fieldset, object { display: block }
li { display: list-item }
head { display: none }
table { display: table }
tr { display: table-row }
td, th { display: table-cell }
caption { display: table-caption }
th { font-weight: bolder; text-align: center }
caption { text-align: center }
h1, h2, h3, h4, h5, h6, b, strong { font-weight: bolder }
i, cite, em, var,address { font-style: italic }
pre, code, kbd, pre { white-space: pre }
big { font-size: larger}
small { font-size: smaller}
hr { border: 1px inset }
ol { list-style-type: decimal }
u { text-decoration: underline }
WML2 元素
這是一個指向所有 WML2 元素完整列表的連結。大多數元素都可以在 XHTML 規範中找到,除了少數以WML:開頭的元素。這些元素是 WML 特有的。
所有具有相同含義的元素在這裡與它們在 XHTML 規範中的含義相同。
WML2 標籤參考總結
我們可以得出結論,如果您瞭解 XHTML 和 WML1.0,那麼您無需學習 WML2.0。
如果您有興趣進一步閱讀,您可以在此處找到WAP2.0 和 WML2.0的完整規範。
WML - 實體
WML 實體用於表示難以鍵入或在 WML 中具有特殊含義的符號。
例如,如果您將 < 字元正常地放入文字中,瀏覽器會認為它是標籤的開始;然後,當找不到匹配的 > 字元來結束標籤時,瀏覽器會報錯。
下表顯示了 WML 中實體的三種形式。命名實體可能是您從 HTML 中熟悉的:它們看起來像 & 或 <,它們透過助記名錶示單個命名字元。實體也可以以兩種數字形式(十進位制或十六進位制)輸入,允許您將任何 Unicode 字元輸入到 WML 中。
| 命名實體 | 十進位制實體 | 十六進位制實體 | 字元 |
|---|---|---|---|
| " | " | " | 雙引號 (") |
| & | & | & | 和號 (&) |
| ' | ' | ' | 撇號 (') |
| < | < | < | 小於號 (<) |
| > | > | > | 大於號 (>) |
| |   |   | 不換行空格 |
| ­ | ­ | ­ | 軟連字元 |
請注意,所有實體都以和號 (&) 開頭,以分號 (;) 結尾。這個分號非常重要:有些網頁忘記了這一點,並導致希望獲得正確 HTML 的瀏覽器出現問題。WAP 瀏覽器也可能對這類錯誤更嚴格。
WML - 標籤參考
下表列出了所有有效的 WML 元素。點選連結以瞭解更多關於該元素的詳細資訊。
Deck & Card 元素
| WML 元素 | 用途 |
|---|---|
| `` | 定義WML註釋 |
| <wml> | 定義WML牌組(WML根) |
| `` | 定義頭部資訊 |
| `` | 定義元資訊 |
| ` |
定義牌組中的一張卡片 |
| ` |
定義關於牌組訪問控制的資訊 |
| `` | 為牌組中的所有卡片定義程式碼模板 |
文字元素
| WML 元素 | 用途 | |||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ` ` |
定義換行符 | |||||||||||||||||||||||||||
| ` ` |
定義段落 | |||||||||||||||||||||||||||
`
文字格式化標籤影像元素
錨元素事件元素
任務元素輸入元素變數元素WML - WAP 模擬器無需安裝完整的 WAP SDK,您可以安裝 WML 模擬器。模擬器只需讓您檢視 WML 檔案的內容,就像它們在支援 WAP 的裝置螢幕上顯示一樣。 雖然模擬器做得很好,但它們並不完美。嘗試幾個不同的模擬器,您很快就會決定哪個最適合您。當需要開發真實的(商業)WAP 網站時,您需要進行更多測試,首先使用其他 SDK/模擬器,然後使用您計劃支援的所有支援 WAP 的裝置。 以下是列出的一些免費提供的 WAP 模擬器。
WML 驗證器驗證 WML 內容將 WML 內容複製並貼上到下面的框中,然後單擊驗證 WML以檢視此頁面底部的結果。 驗證 WML 檔案輸入您的 WML 頁面 URL,然後單擊驗證 WML以檢視此頁面底部的結果。 廣告
© .
All rights reserved.
|