帳號:
密碼:
最新動態
產業快訊
CTIMES / 文章 /
ICP必讀─WML技術探討與實務操作
 

【作者: 陳維哲】   2000年02月01日 星期二

瀏覽人次:【4854】

前言

上期(編按︰第68期76頁)我們已把WAP(Wireless Application Protocol)整體架構做一完整性的描述,接下來便是針對WAP網站Content部份的建置方法,以及WML(Wireless Markup Language)相關的語法做一完整介紹。讀者若已有建置WWW網站的經驗,可以由此篇文章輕輕鬆鬆的建構屬於自己的WAP Homepage。


WML建構在XML之上

WML是類似HTML的標籤語言,不同的是WML基礎是XML(Extensible Markup Language),而非HTML的基礎SGML(Standard Generalized Markup Language)。但其實XML也正是SGML的變形;本文我們不討論SGML與XML的差異,只說明撰寫WML所需要的XML基礎知識。


在所有的WML檔案的第一行,我們看到的描述是:



<?xml version="1.0"?>



這就是XML的宣告(Declaration),又叫作引言(Prolog)。其中version註明XML的版本,而現有的手機皆以Unicode當作文字編碼的原則,故這邊不需像Web網頁一般加上encoding=”Big5”的屬性,加了還會被手機當作是多此一舉而發生錯誤唷。以「<」與「>」所構成的語法,是WML的基本文法,而以<標籤>開頭,包含內文,再以</標籤>結束的格式,我們稱之為標籤─Tag,WML的基本元素;它是大小寫有別的,並且大部份的標籤名稱是以小寫為主,因此<card>不等於<Card>,您也不能以<card></card>構成一個標籤元素。而所有的標籤,若無成對,也就是只有開頭的單對標籤,必須以<標籤/>格式,表示自已是開頭也是結尾,例如HTML中的<BR>在WML就必須是<br/>。


既然稱標籤為元素,標籤就如同細胞,集合而構成WML文件,再構成WAP軟體系統,而XML的地位就如同DNA一般,定義了所有元素的基本可能型式。首先我們先來談談WML的DNA─XML的概念。在XML中標籤是由一個名稱構成,例如<card>,我們就稱之為card標籤,視它為一個基本單位─元素,而每個標籤開頭與結尾之間,我們稱之為內文;內文之中,可能包含兩種基本常見的元素─標籤與字串;利用標籤中能再包含標籤或字串的特性,雖然簡單,但卻可以構成許多複雜的XML文件,如同細胞雖簡單,但卻構成了複雜的人體一般。雖然標籤如同細胞,同類的細胞大致相同,但是為了能有彈性的特色變化,XML語法中允許您利用屬性值(attribute)給予標籤更細節的說明,例如例子<標籤 屬性甲=”某屬性“ 屬性乙=”某屬性“>中的標籤,便使用到了「屬性甲」與「屬性乙」兩個屬性值;所以您應該很容易了解標籤屬性值的語法便是在開頭標籤的「<」與「>」內部指定,以空白做為格的「鍵名─鍵值」(key-value)對構成,鍵值必須以雙引號或單引號左右包括起來以示區別;在WML規範中,標籤中的某些屬性值是必須的,否則是錯誤的文法,例如go標籤的href屬性。不要將HTML中允許簡化而不在鍵值左右加上引號的壞習慣帶來,這在XML文法中是不允許的。


XML雖然規範了標籤的組合方式,但是WML規格會給允每個具有義意的標籤一定的規格,也就是說什麼樣的標籤有什麼樣的意義,標籤能包含什麼樣的標籤,都有其規範存在,而不是雜亂無章的。我們稱這些規範為DTD( Document Type Definition),也就是對某種XML文件在格式上的定義。在使用WML時,我們使用wapforum.org這個由世界各地相關產業超過100個公司所組成的組織所制定的DTD標準。我們抽取其中制定WML標籤的部份來看:



<!ELEMENT wml ( head?, template?, card+ )>



XML的文件構成,如果以分析的角度來看,便如同一個樹狀的資料結構,如(圖一):



《圖一 XML樹狀的資料結構》
《圖一 XML樹狀的資料結構》

wml標籤包含了head、template與card三個標籤,每個標籤或字串在這資料結構中,被視為一個節點,而身為最頂端的節點─<wml>,即為整個樹狀結構資料的WML文件的根,這是WML文件的第一個標籤開頭。接下來,wml標籤所能包含的內文可以是依順序head、template與card標籤,在DTD中的語法中,您應該很容易了解它的意義與使用方法,在上面的DTD語法中ELEMENT後所接的便是欲描述的標籤,構成的標籤名旁加「?」表示「無或包含一個」,而「+」表示「包含一個或一個以上」,若旁邊沒加任何符號,則表示「正好一個」,您可以參考圖一來了解其間的關係。


WML文件結構

一份WML文件我們稱之為一個Deck,通常一個Deck當中會有card用來在手機上顯示,card很像HTML中的body,但是,card不同於body標籤的地方是html標籤只能包含一個body,而wml標籤卻能包含一個以上的card標籤,這樣設計上的差異主要是WML文件的顯示器通常是行動電話之類的小型顯示幕,受限於顯示空間,而將WML文件(Deck)設計成可以包含多個頁面(card)的格式,如(圖二)。


《圖二 WML文件設計成可以包含多個頁面的格式》
《圖二 WML文件設計成可以包含多個頁面的格式》

這樣的設計格局,顯示出WML文件以數張牌構成,而以將文件的構成稱為一副牌;因此WML的顯示端,同時間只會顯示一個牌面,為了牌面間的外換,WML藉由鏈結來達成,與HTML的內部鏈結切換方式一樣;這樣的設計無非是為了在小型的顯示器上有較好的瀏覽效果。以下是一個範例:



<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
			"http://www.wapforum.org/DTD/wml_1.1.xml">
<!--  Main menu for WML examples  -->
<wml>
  <card id="card1">
    <p>
       Links Demo: 
    </p>
    <p>
      Go to <a href="#card2">card2</a> of this deck.
      <br/>
      Go to another <a href="deck.wml">deck</a>.
    </p>
  </card>
  <card id="card2">
  	<p>
  		Go back to <a href="#card1">card1</a> of this deck.
  	</p>
  </card>
</wml>



執行結果如(圖三),呈現方式與WML顯示器有關,不一定一模一樣:


《圖三 執行結果》
《圖三 執行結果》

a是表示超鏈結的標籤,而其屬性href則是指向超鏈結位置,而以「#card_id」的href值,則表示該deck中的某個id相符的card,選取這個超鏈結便會切換到該card;這樣的切換方式也與HTML類似,所以也不難猜到您可以用href=”url_link#card”來指向某WML中的某個card。


跟據wml_1.1.xml所定義的Tag僅只有三十多個,並不如HTML來得多且複雜,筆者在此假設諸位對於HTML等Markup Language語法有一定的瞭解程度,並隨文後附上WML Quick Reference。礙於篇幅有限,若讀者想要多瞭解WML,請查閱坊間WML相關書籍,若您是HTML高手,別擔心,看完實務操作的部份,您一定能很快的上手。


實務操作

筆者在此,以所任職的威波科技WAP網站為例,將整個WAP網站的架設流程詳細的解說,希冀對諸位有所幫助。首先筆者以Red-Hat Linux 6.1做為提供Content的平台,並使用Apache Web Server來與前端的WAP Gateway做HTTP協定的資料傳輸。當然您亦可使用如NT+IIS或是任何的作業系統搭配任何的Web Server。要讓手機等行動裝置或是WAP Gateway能夠辨識WML等的檔案格式,必須要對Web Server做MIME的相關設定。筆者在此以佔有率最高的Apache為例,以特權使用者root編輯/etc/mime.types檔,加入下列型態,如(表一):



《表一 》
《表一 》

若您是使用動態網頁像是PHP或是ASP,只需在網頁開頭處標明header所要傳送的檔案格式即可,以PHP為例,只需在開頭加上header(“Content-Type:text/vnd.wap.wml”);便能正確無誤的顯示動態產生的WAP網頁。


在設定完Web Server with WML Service之後,您的Web Server將可同時提供Web與WAP兩種型態的網頁服務。接下來您所要做的便是網站內容的建置,筆者在此列上一個簡單的範例,諸位可試著將下列WML範例修改成您所喜愛的格式︰



<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
	<template>
		<do type="prev" name="Previous" label="Previous">
			<prev/>
		</do>
	</template>
	
	<card id="WaperTech" ontimer="#home">
	<timer value="100"/>
    	   <p align="center">
           	<img src="logo.wbmp" alt="威波科技"/>
	   </p>	
	
	</card>		
	
	<card id="home" title="歡迎光臨威波科技">
		<p align="center">
		<table columns="1" align="left">
      			<tr><td>
				<a href="discount.wml">今日特價商品</a><br/>
			</td></tr>
			<tr><td>
				<a href="list.wml">列出所有商品</a><br/>
			</td></tr>
			<tr><td>
				<a href="query.wml">商品搜尋</a><br/>
			</td></tr>
			<tr><td>
				<a href="member.wml">加入會員</a><br/>
			</td></tr>
			<tr><td>
				<a href="change.wml">會員資料修改</a><br/>
			</td></tr>
		</table>
		</p>
	</card>
</wml>



若您是熟練的HTML網頁設計者,相信上面的語法難不倒您,其中較需要注意的是WML 1.1對於圖檔只支援wbmp的檔案格式,目前許多的WAP Toolkit皆有附上圖形的轉檔程式,若您跟筆者一樣是死硬派UltraEditor或是記事本的愛用者,您可以參考http://www.teraflops.com/wbmp這個網站所提供的轉檔服務。另外要注意的是中文部份Big5是無法正確的顯示在手機上,筆者在威波科技的網站上寫了一個小程式,提供Big5轉Unicode的服務,網址是http://www.wapertech.com/wap/unicode/bigfive2unicode.php3。上列範例在手機上的顯示如(圖四)所示(因手機不同而有不同的顯示效果)︰


《圖四 執行結果》
《圖四 執行結果》

結語

以全台第一隻銷售支援WAP的手機Nokia 7110來說,設計上須注意其最大的binary deck只能有1397 bytes,也就是說超過1397 bytes的deck會被當成錯誤的WML檔案;另外7110對於WML 1.1並非完全支援,許多版面排起來會有些變樣,諸位千萬別以為自己的設定出了什麼錯,有關手機部份請自行參閱手機製造商的網站,筆者就此停筆,希冀這篇文章能對諸位設計WAP網站有所助益,若有任何的問題,可上威波科技的網站尋求協助。


(作者任職於威波科技)


附錄

WML Quick Reference


(表二)、(表三)、(表四)、(表五)、(表六)、(表七)、(表八)、(表九)


《表二 》
《表二 》
《表三 》
《表三 》
《表四 》
《表四 》
《表五 》
《表五 》
《表六 》
《表六 》
《表七 》
《表七 》
《表八 》
《表八 》
《表九 》
《表九 》
相關文章
Linux核心修補程式讓第五代樹莓派增速18%
線下服務應用與HTML規範發展
多功能嵌入式系統新未來:從Android到Raspberry Pi 3
Type-C 2017行情看漲
Nokia能否重返榮耀?
相關討論
  相關新聞
» 從創新到落地!精誠AGP攜手8家新創搶攻企業AI商機
» 精誠「Carbon EnVision雲端碳管理系統」獲台灣精品獎銀質獎 善盡企業永續責任 賺有意義的錢
» 善用「科技行善」力量 精誠集團旗下奇唯科技榮獲「IT Matters 社會影響力產品獎」
» 工業AI與企業轉向RAG趨勢 將重塑2025年亞太暨日本地區IT業務環境
» PTC 與微軟和Volkswagen集團合作開發生成式Codebeamer AI Copilot


刊登廣告 新聞信箱 讀者信箱 著作權聲明 隱私權聲明 本站介紹

Copyright ©1999-2024 遠播資訊股份有限公司版權所有 Powered by O3  v3.20.2048.3.144.109.147
地址:台北數位產業園區(digiBlock Taipei) 103台北市大同區承德路三段287-2號A棟204室
電話 (02)2585-5526 #0 轉接至總機 /  E-Mail: webmaster@ctimes.com.tw