WML—移动世界的使者
秋实
2001年 29期
移动办公——这是人们的一个梦想,Internet世界无所不有,要是能让移动电话如手机遨游于这信息的海洋那该是一件多么激动人心的事呀新事物的出现,引得人们欲一探其中的奥秘:移动电话是怎么上网的呢?通过移动电话上网的信息与一般的网页有什么区别呢?这些页面又是怎么制作的呢?这些都是令软件开发者以及网页设计者们心动的话题。
#1WAP——连接Internet与移动通信网的桥梁
WAP是Wireless Application Protocol(无线应用协议)的缩写。大家知道,Internet与移动通信并不是在一个网内,而是相互隔离,像手机这类无线终端要连入Internet就有些麻烦了,WAP手机是集移动电话与移动电脑于一身的新型通讯工具,它不仅具有普通手机的功能,而且还有收发电子邮件、传真、浏览新闻、查看股市行情等功能。
WAP手机和一般的手机不同之处在于它内置有微型浏览器(MiniBrowser)、缓存(Cache)和内存(RAM),并支持客户端Cookies和Session。正如电脑上网要用 IE 浏览器 或 NETSCAPE 浏览器,WAP手机上网要用微型浏览器。WAP手机上网也要进行一系列的设置。具体的设置详见WAP手机技术支持。
随着第三代移动通信标准的逐步统一,由爱立信、诺基亚、摩托罗拉与无线行星Unwired Planet在1997年发起并制定了WAP Forum(WAP论坛),由WAP负责将移动通信网与Internet网连接在一起。随着众多全球电信公司的加入,WAP在目前也成为移动终端上网的事实标准。
WAP实际上是一种协议,它规定了一种应用开发和运行环境。在这个环境中,移动终端如手机用WML(Wireless Markup Language:无线标记语言)来显示通过WAP网关转换自Internet上的文字图像数据,这个应用框架可简单地描示如图(^29040504a^)1所示:
WAP包含一系列呈分层结构的协议,对于一般的朋友们来说,我们不需要去了解一些复杂难记的名词术语了,图1中实际指出了典型WAP应用系统包含的三大组成部分:
移动终端:对WAP手机已是耳熟能详了,而掌上电脑、PDA等都可能是WAP应用的终端。就WAP手机来说,在它的存储芯片里,装有微浏览器软件,并利用设备上简单的选择键对浏览器进行操作。
WAP网关:由于WAP的协议为层次结构,各个协议间需要信息转换,并且需要将WAP数据进行压缩编码,对数据进行校正,这些功能都是由WAP网关来实现,形象地说,网关就像一个翻译,处在移动终端与Internet的WEB服务器之间进行信息转换。
源服务器(Original Server):这是提供最终应用服务的服务器,如支持WAP的Web网站,我们平常所说的手机上网,其信息来源就在这些特定的服务器上。
#1WML——WAP世界的通用语言
WML与HTML一样,是一种标记语言,只是它专用于窄带的无线环境而已。它基于XML(Extend Markup Language:扩展标记语言),用来表示文本、超级链接、图像、表格、声音等各种数据并通过微浏览器显示出来。
熟悉网页制作的朋友们还知道,单纯用HTML表示的内容是静态的,与用户的交互功能比较弱,如果遇着要做一些动态的程序效果、用户输入检查、对话框弹出等就需要用JavaScript或VBScript等有程序设计性质的脚本语言。与此类似,WML Script作为WML的一个重要组成部分,为WML网页提供程序功能。
如果你有HTML与脚本语言知识,在了解XML时触类旁通,就可以很快掌握WML,而我的叙述将很多地让你将HTML知识转移到WML上来。
#1从HTML出发迈向WML
HTML显示一个网页涉及到的翻译HTML的浏览器软件、HTML内容,而显示一个WML页面,也需要相关的浏览器软件及相关的WML内容。让我们在HTML与WML之间架设一个桥梁,让你迅速地走进WML世界。
#21.IE浏览器与User Agent
WML文档和WMLScript程序只是规定了WML页面要显示效果与功能,将这些文档与程序“翻译”成我们可以理解的样式就是User Agent——用户终端的事情了,用户终端的功能与IE浏览器的功能是一样的,不过,由于WML涉及到的设备是多样的,真正体现的样式可能是软件(如微浏览器),也可能是特定的设备,实现对WML及其脚本语言“翻译”功能。
#22.WML文档结构
如图(^29040504b^)2所示,怎么样,似曾相识吧?我们简单地了解一下该文档结构。
首先,这种结构看上去和HTML文件很类似,我们称之为deck(牌局),其文件大小最好不要超过1.2K。由于 WML是XML的一个应用分支,作为XML文档,其头部必须先进行以下声明:
<﹖xml version=“1.0”﹖>
<!DOCTYPE wml PUBLIC“-//WAPFORUM//DTD WML 1.1//EN”
“http://www.wapforum.org/DTD/wml_1.1.xml”>
其次,考虑到了手机的小屏幕显示问题,与HTML文件不同的是,每个deck划分成一个个容易定义的用户交互操作的基本单元card,一屏内容对应一个card。每一个deck可以包含多个card,用户可通过在一个或多个WML 文件产生的各个卡之间来回导航来实现对Internet的接入。
另外作为WML的一个标记,与HTML标记一样具有标记属性或标记内容。标记属性表示相关于该标记的一些特性设置如用来唯一表示标记的标识号id、表示提示信息的title、表示图片源地址的src等。由于WML是XML的一个应用分支,语法比HTML严格,它要求每个标记必须有对应的结束标记或结束符。如仅表示回车换行的空标记br在HTML中可以写成
或
,但在WML必须采用加有结束符“/”的
#23.了解WML标记
如果你了解HTML的话,那么许多WML标记与我们已经是老相识了。我简单地介绍一些常用标记。我们可粗略地分为以下几种标记:
1)结构标记
wml:文档的根标记;
card:基本显示单元,对应一屏内容。
2)内容显示标记
P:表示段落 ;
Input:表示用户输入,可以通过type属性设置是输入文本还是密码等;
Select:表示选项列表,可以包含多个option选项标记;
table:表格标记,包含表行标记tr与单元格标记td,典型结构如下:
br:表回车换行;
em、strong、I、b、u、big、small:对字体进行强调显示,其中,em表示强调显示,而strong表示特别强调;I表示斜体显示,b为黑体显示(big为大字体显示)small为小字体显示。
Img:图像元素。
3导航标记
a:链接标记,用法如:<a href=“....”>下一页</a>
anchor:也是一种链接标记,我们可将上面a的用法用anchor表示为:
<anchor>下一页
<go href=“......”>
</anchor>
go:指向一个统一资源标识符URI,如一个特定的card或deck,当指向这个URI时,用户终端下载这个URI所表示的资源并显示。
#24.事件与导航
实际在HTML中我们已经见识过事件,比如一个链接标记<a>,可有点击事件,鼠标移动事件,当事件发生时,就执行相关的程序。事件是一系列的操作动作,事件发生了,就要对它进行处理,这也就产生了相应的处理任务,这个过程称之为导航 ,由此可以得出,事件与任务处理是关联在一起的。card是显示的基本单位,从一个card导航到另一个card就是通过触发事件并执行事件所对应的任务。WML的事件处理是通过相关的标记来实现的,我们可将事件分为基本的两大类:
1)用户触发事件 键盘(包括软硬按钮)输入事件,这类事件用<do>标记来处理,如用户按下:“ACCEPT”或“DELETE”或HELP键。
2)内部事件 在页面内如点击链接,从一个card跳到另一个card等,这类事件用<onevent>标记来处理。
我们举一个例:
<do type=“accept” label=“InputName” name=“do1”>
<go href=“#card01”/>
</do>
上面表示当用户按下ACCEPT键时,跳转到card01执行相关的处理任务。
<select title=“Cities List” name=“city”>
<option title=“Beijing” value=“Beijing”>
<onevent type=“onpick”>
<go href=“#card01”/>
</onevent>Beijing</option>
<option title=“Shanghai” value=“Shanghai” onpick=“#card01”>Shanghai</option>
<option title=“Hongkong” value=“Hongkong” onpick=“#card01”>Hongkong</option>
</select>
上面表示当用户选择了选项“Beijing”时,跳转到card01执行相关的任务,属性type所指的onpick是内部事件中的一种,表示用户对<option>项的选择操作。
以上的讲解是一个粗线条式的,如果要讲详细的话,那可以写成一本书了!实际上,WML与HTML有很多的类似之处,我们学习时,要注意两者之间的异同。
#1WMLScript——让WML更活、更强
纯粹的WML文档只是一系列的文本、图像与表格等数据,但这些内容是静态的,如我们需要检验用户输入是否有效、对设备相关功能的调用,对用户操作进行提示或警告等,这都是WML所不能胜任的,这就需要它的脚本语言来承担这些相对“高级”的功能了。
如果你熟悉JavaScript或C语言,那么WMLScript也就是老朋友了。
#21.变量与数据类型
在WMLScript中,包含整型、浮点型、字符串型、布尔型几种变量,与JavaScript一样,在定义变量时,没有必要为变量指定类型,一个变量在不同的时候可以是不同的类型。
变量的声明:var varName,如: var functionName = “loadPage”;
变量的有效范围(生存周期):在声明的函数内有效。
#22.操作符
在WMLScript中,操作符与一般的语言类同,有赋值、算术、逻辑、字符串操作、比较操作、条件、获得变量类型的typeof、字符串的数组操作,表达式序列或参数之间的逗号等。
#23.语句类型
程序语言的语句类型不外乎几大类:顺序、判断、固定次数循环与条件循环。与javascript在语法与表达方面没有太大差异!
#24.函数
在WMLScript中函数分为两种类型,一种是用户自己定义的函数,一种是WMLScript提供的标准函数库的函数。
1)用户自定义函数
声明:[exten]function 函数名([参数列表)]语句块Block[;],extern表示函数能否被其它脚本文件的函数所调用,如:
extern function toad(a,b){
return a+b
};
如果要调用定义的函数,分两种情况,一种是文件内调用,一种是文件外调用。文件内调用直接写函数名并代入参数即可,如果要调用外部函数,则格式为:
编译单元名#函数名(参数列表)[注:这里所指的编译单元实际上是指一个script文件]
如:
use url scriptLib “http://www.yesky.com/script”;
function drawTable(param){
var lines=scriptLib#countNum(prram);
retrun 3*lines
}
注意在调用外部函数前,一定要用use url为外部编译单元定义一个名字。
2)标准库函数
WMLScript支持的标准函数库有:Lang、Float、String、URL、WMLBrowser和Dialogs,每个库包含一系列的函数。如果了解面向对象编程的话,实际Lang、Float等就是一个个标准对象,对象里定义有许多方法,调用标准库函数就是调用对象的方法。
标准库函数的调用格式为:库名.函数名,如String.elementAt(str,1,””)
当然了,WMLScript的功能是有限的,如果对站点的数据进行检索、动态并批量地生成WML页面,单靠WML与WMLScript就难以实现了,这需要服务器端脚本语言如PHP、ASP、JSP等或服务器端应用程序实现了。
#1WML模拟器——在PC机上模拟WAP世界
讲了这么多,朋友们可能犯嘀咕了,WAP设备价格不菲,怎么设计WML页面或编写脚本程序呢?这就不用担心了,你可以到网上去下载相关的软件模拟器及相关的开发工具。不同的厂商如Ericsson、Nokia等都有针对自己手机的WAP开发工具,工具一般都含有WML编辑器、模拟微浏览器及图形编辑器。你可以到天极或ZDNet等网站去下载相关的模拟品与开发工具。
在此,我推荐一个设计WML网页的工具:Nokia WAP Toolkit(图(^29040504c^)3)。这个软件左边是编辑栏,可以书写WML,右边则是Nokia手机的模拟图及显示的左边WML内容的式样。Nokia的WAP工具包含有图形开发环境,浏览器和WML/WMLScript编译器。Nokia工具包目前只能在Windows NT4.0或Windows 2000上运行,但是要注意的是Nokia WAP Toolkit需要首先运行Java 2 runtime才能使用,所以你需要先到Sun’s Java 网站去下载一个Java 2 SDK或者Java 2 Runtime Environment(JRE)才可以安装使用Nokia WAP 工具包。
为适应WAP潮流,许多站点都开通了WAP功能,从旅游、休闲到金融、教育等各大类应有尽有,例如新浪:http://wap.sina.com.cn、搜狐:http://wap.sohu.com、掌站网:http://wap.byair.com等,令这WAP世界异彩纷呈。
你的手机有WAP功能吗?有,那就去WAP世界冲浪;没有,那就去下载一个模拟器过瘾!