当前位置:文档之家› WAP教程

WAP教程

[WAP教程 / 未知 著 ]
书香中文网 出品作品Txt版阅读,阅读作品更多请访问:https://www.doczj.com/doc/0a6432131.html,

书籍介绍:
WAP教程

------章节内容开始-------

第一卷 第一章
书香中文网 更新时间:2007-1-12 23:35:14 本章字数:2239

??????
WML的基本情况 [TOP]
用于WAP的标记语言就是WML(Wireless Markup Language)。
WML的语法跟XML一样,WML是XML的子集。
HTML、XML和WML的文件有很多相似之处,这样网页开发者在过去10年中所学的东西今天依然适用。
WML页面文件的后缀是 *.WML,就象HTML的 *.HTML后缀。
XML规定定义了一个规范的XML文件的规格。任何违反这个规定的WML文件会出错。WML文件通常使用XML解释器起来解释。
建立网页制作环境 [TOP]
WML文件本身就是文本文件,所以编辑不成问题,顺手的编辑器都可以用。
当然,由于目前的浏览器还都不能显示WML页面,而我们又不能总在手机上进行测试(速度太慢),所以需要模拟器。现在象NOKIA、ERICSSON、MOTOROLA等手机制造商都生产了相应的产品,你只要下载就行了。当然除了模拟器以外,还需要图形制作转换器(用来制作WAP格式的图形文件)、字符转码器(汉字〈-〉UNICODE)等等。
WML文件结构 [TOP]
WML的页面通常叫做桌面(DECK),由一组互相链接的卡片(CARD)组成。当移动电话访问一个WML页面的时候,页面的所有CARD都会从WAP服务器下载到设备里。CARD之间的切换由电话内置的计算机处理,不需要再到服务器上取信息了。CARD里可以包含文本、标记、链接、输入控制、任务(TASK)、图像等等。CARD之间可以互相链接。
文档的实体包含在标记中,然后实际的文字段落则包含在
...标记中。
简单例子:
"https://www.doczj.com/doc/0a6432131.html,/DTD/wml_1.1.xml">
 Hello world!
显示结果如下:
------ HELLO ------
Hello World!
DECK里面各个组成部分的具体解释在本教程的其他部分有说明。
WML字符集 [TOP]
WML是XML的子集,继承了XML的字符集设置。WML文档缺省的字符集是UTF-8。
要显示中文,有两种办法。最简单的办法就是在文档头使用encoding,即把第一行改为:
然而令人丧气的是,这种方法有些手机和模拟器并不支持(将来会的),所以目前第2种方法更普遍:不改变字符集设置,但是在写中文的时候采用UNICODE代表中文字符,如:
代表:
通讯录
WML元素:标记(Tag)和属性 [TOP]
WML的主要内容是文本,由于标记会降低与手持设备的通讯速度,所以WML标准里仅仅使用了很少一

部分。用于表格和图像的的标记几乎都被排除了。
与XML一样,在WML语言中,所有元素都放在符号""中,并且包含一个开始标志、一个结束标志和一个内容标志,或者使用自身结束的控制标记。就象这样:
例如:
Hello world!

例如:

WML同样支持在标志中标出属性。属性是标志的附加信息,与元素的内容不一样,它并不在屏幕上显示出来。属性通常在元素的开始标志后指定。如上面最后一个例子。
由于WML是XML的一种应用,因此所有的WML标记和属性都是大小写敏感的(完全不同),而且所有的标记都必须正确地结束。WML要求属性的值必须放在双引号或单引号内。单引号可放在属性标志内或双引号内。字符亦可作为属性的值。
WML注释 [TOP]
XML支持这样的注释格式:
这些注释在浏览器中并不显示出来。
WML不支持嵌套元素注释。
链接(URL)[TOP]
WML外部引用方式跟HTML相同
https://www.doczj.com/doc/0a6432131.html,/great.wml 或
https://www.doczj.com/doc/0a6432131.html,/great.wml#login
内部引用,如果next是当前DECK中的一个CARD时,可以用这种方式:
#next
提供链接功能的WML元素有2个:(参见事件)。
CDATA [TOP]
XML支持CDATA的概念,以显示不需要解释的文本。下面的例子使用CDATA元素在WML页面中显示WML命令文本。
浏览器窗口将显示如下内容:
this is data





第一卷 第二章
书香中文网 更新时间:2007-1-12 23:35:14 本章字数:1315

??????
格式 [TOP]
象HTML一样WML可以定义变量,可以让你的页面设计更简单和富有逻辑性。变量格式如下显示:
$identifier
$(identifier)
$(identifier:conversion)
圆括号在变量带有空格时使用,第3种格式本节后面说明。
变量的优先权最高,所以当出现与变量符号相同的字符时,它将被认为是变量的标志。因此如果想在WML页面中显示$符号时必须在其后面再跟一个$符号。如下例:
You account has $$1650.00 in it.
变量名是由US-ASCII码、下划线和数字组成,并且只能以US-ASCII码开头。变量名大小写敏感。
WML变量没有类型,均表示为字符串。变量没有被赋值的时候,内容为空,即空字符串。可以在运行过程中改变它的值。
创建变量
创建变量最简单的方法是使用元素,语法如下:
name="string"
value="string" />
中使用(具体操作见本教程任务(TASK))。下例定义了一个叫vNAME的变量并赋值为“Jeff”:
另外,还可以在中定义变量,参考本教程(任务(TASK)和数据输入)
替换文本 [TOP]
变量可以用作替换用途,但只能在文本类型(如显示字符、URL等)中使用。任

何元素和属性都不能使用变量来替代。例如:
Hello, $vNAME.
将显示:
Hello, Jeff.
ESCAPE转换 [TOP]
前面说过变量可以用作替换用途,但是在URL中使用时,变量的内容必须遵守[RFC2396]标准。这个标准规定某些特殊字符在URL里使用的时候必须用特殊表示方法,即ESCAPE八进制表示。例如:
list.asp?id=3
在URL中要表示为:
list.asp%3fid=3
所以变量有可能需要标志为是否对其内容进行ESCAPE转换,变量定义就有如下几种特殊方式:
效果 表达方式1 表达方式2 表达方式3
对变量中ESCAPE字符进行转换 $(var:e) $(var:E) $(var:escape)
不进行ESCAPE转换 $(var:u) $(var:U) $(var:unesc)
变量中没有ESCAPE字符 $(var:n) $(var:N) $(noesc)
给变量进行ESCAPE转换是WML的默认方式,特殊字符ESCAPE码请参考本教程字符实体。





第一卷 第三章
书香中文网 更新时间:2007-1-12 23:35:14 本章字数:3114

??????
CARD里可以显示象文本、图像这样的内容。象HTML一样,WML也提供一些标记对内容进行排版。
段落与换行标记 [TOP]
:段落标记,用来对段落进行分段。语法:
aligh="left|right|center"
mode="wrap|nowrap";
xml:lang="STRING" >
aligh:文字对齐方式,左(left)、右(right)、居中(center)。
mode:文字超出屏幕时是否折行,各种终端处理方式不同。
xml:lang:显示语言编码。
:行分隔标记,产生回车效果。语法:
xml:lang="STRING" />
xml:lang:显示语言编码。
段落和换行的例子:
 "https://www.doczj.com/doc/0a6432131.html,/DTD/wml_1.1.xml">
This is a paragraph
This is a another
with a line break
显示结果如下:
------ Paragraphs ------
This is a paragraph
This is another
with a line break
标记 字体样式
粗体
大字体
强调字体
斜体
小字体
加重强调字体
下划线字体
文字样式标记 [TOP]
WML提供了一系列文字样式的标记,如右表所示。不过WML鼓励大家尽量使用标记,因为某些WAP终端会忽略其他标记。
每个文字样式标记语法都一样,都有一个标志语言代码的xml:lang属性。
下面是一个例子:
"https://www.doczj.com/doc/0a6432131.html,/DTD/wml_1.1.xml">
normal
在你的终端上可能会有这样的显示 (不过别太当真,前面说了有的终端会忽略文本样式标记):
list.asp%3fid=3
所以变量有可能需要标志为是否对其内容进行ESCAPE转换,变量定义就有如下几种特殊方式:
----- Formatt

ing -----
normal
emphasized
strong
bold
italic
underline
big
small
表格 [TOP]
WML支持简单的表格标记。语法如下:
align="L|R|C"
columns="NUMBER"
TITLE="STRING"
其他列…
其他行…
在WML里定义一个表格必须先指定列数,即columns属性。而在表格里就必须有相应数量的标记对。因该注意的是,align(对齐)属性的内容只能是L(左对齐)、R(右对齐)和C(居中),跟其他标记不同(是不是有点怪?)。
下面的例子演示了表格的基本功能:
"https://www.doczj.com/doc/0a6432131.html,/DTD/wml_1.1.xml">
显示结果(注意WML里没有表格线):
------ SALARY ------
NAME PAYED
Johnson $7810.11
Faye $8912.00
图像 [TOP]
相对于多媒体泛滥的HTML网站,在资源紧张的WAP设备上显示图像就有点奇怪了。但是WML还是提供了图像显示的支持,毕竟一个设计精巧的图像会比一段话表达意思更清楚,或许占用空间更小。
WML支持WBMP(Wireless Bitmap)格式的图像,需要用特殊工具制作。显示图像使用标记,语法如下:
 alt="STRING"
 src="STRING"
 align="top|middle|bottom"
 height="NUMBER"
 width="STRING"
 hspace="NUMBER"
 vspace="STRING"
 localsrc="STRING" />
alt: 图像无法显示时的替换文字。
src: 图像的url。
localsrc: 储存于ROM(或RAM)中图像的名字,各种终端支持不同。
align: 上下对齐方式。
height: 图像显示高度。
width: 图像显示宽度。
hspace: 图像左右的空白,以pixel数或百分比表示。
vspace: 图像上下的空白,以pixel数或百分比表示。
上面的属性只有alt和src是必须的。其他附加属性基本上仅仅用来指示用户终端,大多数情况下会被忽略。下面是个例子:
 "https://www.doczj.com/doc/0a6432131.html,/DTD/wml_1.1.xml">
WAP86, !
下面分别是在支持和不支持图像的终端上的显示结果:
--- Congratulation ---
WAP86, wonderful!





第一卷 第四章
书香中文网 更新时间:2007-1-12 23:35:14 本章字数:3235

??????
由于网络带宽以及某些WAP服务器DECK传输的限制,所以DECK越小越好,最好不要超过1.2K。如果你的需求很复杂,最好分成几个DECK来完成。
完整的WML文档结构如下:
"https://www.doczj.com/doc/0a6432131.html,/DTD/wml_1.1.xml">
.
. 头信息......
.
.
. 模板定义......
.
.
. 内容......
.
.

. 其他card(可有可无)......
.
XML说明 [TOP]
DECK开头必须指明以下的XML类型声明:
"https://www.doczj.com/doc/0a6432131.html,/DTD/wml_1.1.xml">
第一行指出XML版本,紧跟的文档类型(DOCTYPE)声明指出所引用的语言标准定义(wml_1.1.xml的内容可以察看本教程附录中的DTD说明)。
这两句的位置和顺序不可更改,而且中间不能有空行。
[TOP]
语法:
表示文档语言为中文。
[TOP]
标签。
语法:
domain="STRING"
path="STRING" />
标签,指定该DECK的访问控制信息,它的两个属性是可选的。
domain:指定域,默认值为当前域。
path:指定路径,默认值为"/",即根目录。
语法:
http-equiv="STRING" | name="STRING"
forua="true|false"
content="STRING"
scheme="STRING" />
和HTML中提供了该DECK的meta信息。
包括一下三种情况
name="name" UP.Link Server忽略meta数据
http-equiv="name" UP.Link Server将meta数据转为HTTP响应头(同HTML)
user-agent="agent" UP.Link Server直接将meta数据传给手机设备
content属性也是必选的,其内容根据属性而定。scheme属性目前尚不支持。forua为可选属性,指定在该wml文件传到客户端之前,标签是不是被中间代理删除(因为传输的协议可能改变),默认值为false。
目前支持的meta数据:
指定DECK在手机内存缓存中的存储时间段,默认的为30天(除非内存耗尽),在该期间,手机对于访问过的DECK直接从缓存里调用。如果信息是对时间敏感的,可以用max-age指定DECK在缓存里的生存期,最小单位是秒,如果指定为0,则每次都需通过连接服务器来调用该DECK。

[TOP]
声明中的事件处理。
语法: