随笔-88  评论-77  文章-48  trackbacks-0
元素和标签是WML的主要语法,它们决定了WML编程的基本原则。本章我们将从WML的元素、标签、属性等方面详细讲解WML的编程方法。学习本章知识之前,读者应当了解WML元素与标签的区别。WML的元素通常有一个首标签、内容、其它元素及一个尾标签组成。也就说,单独的标签是一个元素,成对出现的标签与其包含的内容也构成一个元素。由于元素牵涉及标签,标签又涉及属性。 
3.1 卡片、卡片组及其属性

我们前面介绍了WML的卡片与卡片组,主要从概念和相互关系的角度进行了分析。我们这里则从卡片、卡片组的组成、相关元素、标签技术性等编程角度进行分析和讲解。 3.1.1 共有属性

WML元素的共有属性主要有3个:id、class和xml:lang属性。

WML的所有元素都有两个核心属性,即标示(id)和类(class)属性。它们主要用于服务器方的信息传输。其中,id属性用于定义元素在卡片组中的唯一标示,即它的名称;class属性用于给当前元素定义一个或更多的类(class)。与卡片组一样,类(class)也是有名字的,而且多个元素可以使用一个类(class)名。具有相同类名的单一卡片组中的所有元素均可被看作相同类的一个部分。类名是区分大小写的。如果在class属性列表中,一个元素多个唯一的类名,那么该元素可以看作这些类中的一部分。具有同一属性的多个类名必须用两个以上的空格间隔,WML程序执行时将忽视其中多余的类名及其属性。

另外,在WML程序,所有包含文本的元素均具有“xml:lang”属性。该属性用于指定当前元素及其属性所用的描述语言,如英国英语、美国英语、法语、德语等,并可以为用户浏览器选择显示文本的语言提供依据。

3.1.2 WML程序的文件头

合法的WML卡片组均属合法的WML文件,因此它必须包含WML的声明及文件类型的声明。典型的WML程序的文件头包括我们前面多次提到的以下两行程序:

<?xml version=\"1.0\"?>
<!DOCTYPE wml PUBLIC \"-//wapforun//DTD WML 1.1//EN\" \"http://www.wapforum.org/DTD/wml_1.1.xml\">

编写WML程序时,我们必须写入这两行程序,并放在程序的开始处。其中\"-//wapforun//DTD WML 1.1//EN\"是标准通用标记语言SGML的公共标示;\"http://www.wapforum.org/DTD/wml_1.1.xml\"是WML程序文档类型的标示。文档类型标示也可以是\"text/vnd.wap.wml\"或“application/vnd.wap.wmlc”,其中前者制定WML的原文类型,后者贫╓ML程序编译后代码类型。

3.1.3 WML元素

WML的WML元素用于定义一个卡片组,并通过<wml>与</wml>标签包含和封装该卡片组中的所有卡片及信息。它的语法格式如下:

<wml xml:lang=\"lang\">
内容(content)
</wml>

其中xml:lang=\"lang\"用于指定文档所用语言(前面已有介绍),语言\"lang\"的值属于NMTOKEN型数据。

wml元素中包含的内容(content)中除了文本、图像等信息之外,还可以包含head、template及card元素。其中head、template元素如果包含的话则只可包含一次,而card元素必须至少包含一次。有关这些元素的用法我们后面介绍。

3.1.4 template元素

template元素用于为当前卡片组中的所有卡片定义一个模板,同一规定卡片的某些参数。模版中的事件处理功能则可将这些参数自动应用于同一卡片组中的所有卡片。不过,我们也可以是其中某个或某几个卡片不采用模板规定的形式,方法是在该卡片中定义一个同名的事件来替代模板块中相应的事件。template元素通过<template>和</template>标签含所需内容(content)而实现模板功能的,其语法格式如下:

<template oneterforward=\"href\" onenterbackwared=\"href\" ontimer=\"href\">
内容(content)
</template>

template元素包含的内容中,除了卡片的一般参数外,还可以包含任意多次的do元素和onevent元素。template元素属性的功能及用法说明如下:

1)oneterforward。当用户在浏览器中进入当前卡片时,该属性将指定超链(href)的URL地址,浏览器将据此打开URL指定的卡片或事件。

2)oneterbackward。与上一属性类似,该属性也可以指定其相应卡片或事件的URL地址。如果用户浏览时执行prev任务,那么浏览器就会定位到该属性所指定超链(href)的URL地址,并打开URL指定的卡片或事件。

3)ontimer。当指定时间timer过期的时候,用户浏览器就根据ontimer属性指定的URL打开相应的卡片。

3.1.5 card元素

WML的卡片组是由一个或多个卡片(card)构成的,每个卡片都包含有一套用户和浏览器交互操作的配置及模式。用户对交互操作的需求是多样性的,所以卡片定义时也必须是多样性的。为此,WML提供了card元素,通过<card>和</card>标签定义一个卡片的各种属性、包含内容。它的语法格式如下:

<card id=\"name\" title=\"label\" newcontext=\"boolean\" ordered=\"true\" onenterforward=\"href\" onenterbackward=\"href\" ontimer=\"href\">
内容(content)
</card>

card元素中包含的内容(content)中除了文本、图像信息之外,还可以包含onevent、timer、do和p元素。其中,timer元素只可使用一次,其余3种可使用多次。而且,如果card元素包含onevent元素或timer元素的话,那么onevent元素必须放在最前面,timer元素放在onevent元素的后面,随后才可以使用do或p元素。这个优先顺序是不能乱的。

card元素属性的功能及用法介绍如下:

1)id。用于指定card的名字。改名字是程序导航定位的依据,可以用作程序段锚点,比如<go href=\"#cardname\"/>。其中的cardname便是由id指定的卡片名。

2)title。用于为卡片制订一个简单的标题或说明信息。

3)newcontext。用于指定WAP手机浏览当用户重新进入的时候是否需要初始化卡片中所有的内容。它有true和false两种选择,当指定newcontext=\"ture\"时,卡片的所有内容在用户重新进入时将进行初始化,也不清除历史纪录;否则,指定newcontext=\"false\"时,将不进行初始化设置,也不清除历史纪录。默认状态下的设置值为false。另外,newcontext仅当作为go任务的一部分时才可被执行。

4)ordered。用于向用户手机的浏览器指明卡片内容的组织形式,以便让浏览器根据自身特点及卡片内容组织及时安排显示布局。它有两种布尔值得设置,即true和false。

当ordered=\"true\"时,浏览器将按照线性顺序显示卡片各区域的内容。这个线性顺序通常是大多数用户所习惯采用的信息浏览顺序,比如发送E-mail信息时,我们依次需要E-mail首件人地址、主题及E-mail内容,这个逻辑顺序就数线性顺序。

当ordered=\"flase\"时,浏览器将根据用户选择或指定的顺序来显示内容。这种情况主要是用于显示用户选项、无序组建或用户输入的简单数据纪录等。

5)onenterforward。onenterforward事件仅当用户使用go任务或类似于go的任务位和浏览卡片时才可发生,即如果用户执行go任务,则浏览器就会定位<go>标签中指定超链(href)的URL指定的卡片。card元素中的onenterforward属性是onevent元素的一个简单格式,用于直接指定onenterforward事件的URL地址。

6)onenterbackward。该属性可以指定其响应时间的URL地址。如果用户浏览时执行prev任务,那么浏览器就会定位到该属性所制定超链 (href)的URL地址,并打开URL指定的卡片。onenterbackward属性也属于onevent元素的一个简单格式。

7)ontimer。当指定时间timer过期的时候,用户浏览器就根据ontimer属性指定的URL打开相应的卡片。它也属于onevent元素的一个简单格式。

3.1.7 access元素

access元素是由一个单独的的标签<access>标签实现的元素。用于定义WML整个卡片组的操作权限,即访问控制参数。access元素必须在head元素内和其它的meta信息一起声明,而且每个卡片组只能有一个access元素。其语法格式如下:

<head>
<access domain=\"domain\" path=\"path\">
...
</head>

access元素属性的功能及用法如下:

1)domain。用于指定对卡片组进行操作的URL域,默认域是当前卡片组所在的域。domain的目的是限制访问,用户浏览时浏览器将根据domain值所规定的值来得出与值匹配的地址,并访问该地址对应的卡片或事件。 2)path。用于指定卡片组操作的其它卡片组所在的根目录。默认目录是“/”,即当前卡片组所在的根目录。默认目录的规定使得所有在domain域下的卡片组都可以操作当前卡片组。path的值是访问时需要匹配的路径,它的工作原理与domain十分相似,需要与路径的每个子路径相匹配,否则均属无效。

3.1.8 meta元素

meta元素用于定义WML卡片组相关的通用meta信息。该元素是由一个单独的标签即<meta/>标签实现的元素,其语法格式如下:

<meta name=\"name\"|http-equiv=\"name\" content=\"value\" forua=\"true|false\" scheme=\"format\"/>

其中,name属性和http-equiv属性只能选择使用一个;content属性是必选的,其值根据属性而定;scheme属性目前尚不支持;forua属性为可选属性。各属性功能及用法说明如下:

1)content。该属性用于指定meta信息的性质的值,是不必选的。

2)name。用于指定meta信息性质的名称。用户浏览器通常忽略已经命名meta数据,网络服务企业拒绝发送包含该属性所指定meta数据名称的内容。

3)http-equiv。该属性用于替代name属性,可将meta数据转为WSP或HTTP协议的响应头。

4)forua。该属性用于指定那些开发者希望传送值用户浏览器的性质。它有ture和fales两个取值,如果取false,则卡片组在发送往客户端以前必须用中间代理去除meta元素信息,这是因为传输的协议可能改变;若取值为true,则meta数据必须如实送往用户的浏览器。默认的状态下,该属性的值为false。

5)scheme。该属性用于指定解释meta信息性质值的形式或结构。具体的形式或结构因meta数据的类型不同而不同。

3.2 任务及其元素

WML允许我们在程序中指定一些任务,当某些特定的事件激活时,即可执行这些任务,从而完成需要的操作。例如,我们可以设定任务,当用户按下相应的功能键时,浏览器就可以打开指定的卡片组或卡片。目前,WML提供了4个任务元素,即go、prev、noop和refresh,它们主要与do元素和onevent元素中指定的事件相响应。本节我们就对任务的这些元素做一详细介绍。

3.2.1 go任务

go任务是通过go元素来声明的,而go元素是通过<go>和<go/>标签进行定义的。go元素主要用来定义浏览器需要导航的URL地址。如果该地址是一个WML卡片或卡片组的名字,则浏览器就会打开并显示相应的卡片、卡片组;否则,浏览器就会执行该URL指定的任务或事件等。在历史推栈中,go任务执行的是一个“推进(push)”操作,也就是说,它执行时浏览器浏览的URL地址将送入历史纪录列表中,以被它用。

go元素中可以包含任意次的setvar元素或postfield元素。postfield元素前面已有介绍,这里不再重述,setvar元素我们后面介绍。

go任务的语法格式如下:

<go href=\"href\" sendreferer=\"false|true\" method=\"get|post\" accept-charset=\"charset\">
内容(context)
<go/>

其中属性的功能及用法介绍如下:

1)href。该属性用于指定目标URL地址,比如让浏览器显示的卡片的地址即名称等。属性是必选的,其它属性为可选。

2)sendreferer。该属性用于指定是否传递调用href所指定的URL的卡片的URL,也是当前页的URL,即HTTP头中HTTP_REFERER。有两种选择:true或false。其中,默认值为false。

3)method。与HTML中的表单FORM的method属性一样,该属性用于指定表单是以GET的方式还是post的方式递交,以便通用网关接口CGI处理。默认值为get,但如果没有指定method属性,而<go>和<go/>之间存在postfield元素,则WAP手机浏览器会自动以post方式传递。

4)accept-charset。当web服务器处理来自浏览器的输入信息时,该属性可指定服务器进行数据编码时必须采用的字符集列表。也就是说,该属性指定的字符集替代HTTP头里指定的字符集,以便作为服务器选用字符集的标准。

3.2.2 prev任务

prev任务是由prev元素实现的。该元素通常是一个单独的标签<prve/>,不过有时也可由<prev>和</prev>一对标签进行定义。它用于指定将浏览器导航至历史推栈中的前一个URL地址。在浏览器操作的历史推栈中,prev任务执行的是“取出”操作,将前一个URL地址取出,并把当前URL地址推进历史推栈。如果历史推栈中没有前一个URL地址,即prev/元素不执行任何任务。

prev任务的语法格式为:

<prev/>
或<prev> 内容(content) </prev>

在后一语法格式中,prev元素包含的内容里面一般是setvar元素,该元素的含义前面已有介绍,这里不再重述,具体的用法随后介绍。

3.2.3 refresh任务

refresh任务由refresh元素声明,它用于刷新当前的卡片,对卡片内指定的变量进行更新。其语法格式为:

<refresh>
内容(context)
</refresh>

其中包含的内容(content)中一般有setvar元素,其语法格式为<setvar name=\"name\" value=\"value\"/>,它可指定更新的变量名name,即更新的变量值value。另外,refresh元素也可以不包含setvar元素。而通过时间限制(timer元素)对卡片进行刷新。

3.2.4 noop任务

noop任务由noop元素进行声明,表示什么也不做,是一个空操作,在替代卡片组级的do元素是十分有用。该元素是一个单独的标签,即 <noop/> 标签。其语法格式如下:

<nnop/>

noop元素没有属性,下面的简单程序中就包含了noop元素实现得空任务操作:

<card id=\"card1\">
<do type=\"options\" name=\"dome\">
<noop/>
</do>
...
</card>

3.3 时间及其元素

WML提供了几个元素,专门用于处理用户浏览器的导航和事件。利用这些元素用户可以给某任务制定关联事件。那么当事件触发时,浏览器就会执行相应的任务,比如URL导航就是通过事件实现的。而且,事件可以和一个需要完成的任务捆绑在一起。事件捆绑时一般是通过几种元素及其标签声明来实现的,如go、do和onevent等元素。下面我们就讲解WML的事件元素及事件。

3.3.1 do元素

do元素提供了一个通用的事件处理机制,使得用户可以参与当前卡片的事件处理。通过<do>和</do>标签将用户交互和某一个任务联系在一起。用户交互可以是用户按下的功能键、选择的菜单项,也可以是用户的声音提示。当用户激活这些交互功能时,用户浏览器就会执行与do元素相关的任务。其语法格式如下:

<do type=\"type\" label=\"label\" name=\"name\" optional=\"boolean\">
任务(task)
</do>

其中tast是与do元素关联的动作,也是条件激活时浏览器即将执行的内容。在do元素中,用户必须绑定且只能绑定go、prev、noop和refresh四种元素所实现任务中的一个任务(task)。go元素用于定位制定的URL地址,prev元素用于定位并打开前一操作或任务,doop为空操作,refresh用于刷新当前卡片组或任务,有关他们的详细用法我们后面会陆续介绍。

do元素可以用于卡片一级,也可用于卡片组一级。当用于卡片一级时,do元素必须包含在card元素中;而用于卡片组一级时,do元素必须包含在template元素中,由此定义的do元素将同时应用于当前卡片组的所有卡片。此时如果某个卡片不想应用模板中的do元素及其任务,则需采用我们前面介绍的方法,使用同名事件处理来替代模板中的do元素的事件处理。而且,不论事件关联的任务是否相同,当do元素定义的事件名称相同时,卡片的do元素将忽视卡片组一级do元素的影响,及卡片一组的do元素将被优先执行。

另外,含有空操作任务的do元素,不论它是否被激活,它都不会传送或显示到用户的浏览器中,这在一定程度上可以加快浏览器的工作效率,因为服务器端体它抛弃了一些空任务的判断。 do元素各个属性的功能及用法讲解如下:

1)type。用于指定do元素的类型(type),也即需要关联、绑定的用户交互事件,是必选属性。用户浏览器接到这些事件后,就会激活它们并执行相应的操作与处理。如果在一个卡片中定义了多个do元素并拥有同样type,那么用户必须为每个do指定不同的事件名才行,否则就会发生判断混乱的错误。

do元素典型的类型(type)及执行条件介绍如下:

1、accept。当用户选择或按下相应功能键时(accept)、选项、命名或按钮时,浏览器接收或激活当前所作选择。 2、prev。激活prev键时,浏览器将导航到历史记录中的前一个卡片。

3、help。激活HELP功能键或相应按钮、命名时,浏览器显示与当前内容相关的帮助信息。

4、reset。激活reset功能键或相应按钮、命名时,清除或重置当前卡片组或浏览器的状态。

5、options。激活options功能键或相应按钮、命名时,浏览器显示与当前内容有关的选项或附加操作。

6、delete。激活delete功能键或相应按钮、命名时,删除当前项目或选择。

7、unknown。如果给出的类型不能为do元素所识别,则一律按照unknown型处理,相当于类型为空,即type=\"\"。

8、vnd.*。vnd.*及其它不同大小写组合[Vv][Nn][Dd].*。这种类型定义的都是vnd.cotype,用于激活供应商或用户浏览器自定义的某个特定功能,其中co为公司(company)名的缩写。

9、X-*与X-*。扩展类型,目前WML中还没有使用。

2)label。该属性指定的文本字符串可以表示用户的交互事件。例如,当涯骋桓鋈挝癜蠖ㄔ赼ccept键上之后,并设置了label属性,比如label=\"gone\",那么浏览器就会将label的值“gome”显示在屏幕上;如果不指定,浏览器则会显示默认的“ok”字符串。为了保证能在较小的手机上显示出来,label的属性值最多不超过6个字符。不过这可能因WAP手机品牌、型号不同而稍有不同,有的手机最多不能超过5个字符。而且,如果手机浏览器不支持动态标签显示,那么它就会忽视label属性。

3)该属性用于指定do元索所绑定事件的名称。如果多个do元素制定了相同的name,那么他们绑定的事件统属一个。如果卡片一般与卡片组一级中do元素制定了相同的事件名,那么卡片一级的时间将被优先执行,卡片组一级的事件将被忽视。

WML规定,在同一卡片或在同一模板中,不得指定具有相同事件名(name)的两个或两个以上的do元素。

另外,如果name属性值为空,则相当于没有指定name属性,这时do元素执行的事件或操作由type的属性值决定。

4)optional。指定浏览器是否忽视do元素及其包含的任务。有两个可选值:true和false。如果值为true,则浏览器将忽视当前do元素,即不执行它所绑定的任务。反之,若值为false,则执行do元素。

3.3.2 ontimer事件

ontimer用于指定一个事件。当<timer/> 标签指定的时间到期后,浏览器就执行ontimer所指定的这个事件。ontimer的时间可以是一个URL地址,一个卡片组,一个WML网页,一幅图像或其他符合URL定位的规则的文件。<timer/>标签指定的时间为正整数,单位大小为1/10秒。

ontimer时间只能包含在card元素或template元素的标签中进行定义,其语法形式如下:

<card id=\"name\" title=\"label\" newcontext=\"boolean\" ordered=\"true\" onenterforward=\"href\" onenterbackward=\"href\" ontimer=\"href\">
内容(content)
</card>

或:

<template onenterforward=\"href\" onenterbackward=\"href\" ontimer=\"href\">
内容(content)
</template>

ontimer事件只有一个属性,即ontimer。它用于指定一个超链(href)的URL地址,指定时间timer过期的时候,用户浏览器就会按照超链(href)的URL打开相应的卡片。

3.3.3 onenterforward事件

onenterforward事件仅当用户使用go任务或类似于go任务的任务来定位和浏览卡片时才可发生。设置onenterforward事件后,当用户进入当前卡片组时,浏览器就会定位onenterforward属性或<go/>标签中指定超链(href)的URL地址,并打开URL指定的卡片。

onenterforward事件需要包含在card元素、template元素或onevent元素的标签中进行定义,其语法格式为:

<card id=\"name\" title=\"label\" newcontext=\"boolean\" ordered=\"true\" onenterforward=\"href\" onenterbackward=\"href\" ontimer=\"href\">
内容(content)
</card>

或:

<template onenterforward=\"href\" onterbackward=\"href\" ontimer=\"href\">
内容(content)
</template>

或:

<onevent type=\"onenterforward\">
<go href=\"href\"/>其他任务(task)
</onevent>

前两种格式中,onenterforward事件作为card元素或template元素标签中的一个属性进行定义的,该属性即为onenterforward,它制定了一个超链(href)的URL地址,当用户进入当前卡片时,浏览器就据此打开URL指定的卡片。这种格式制定的任务相当与go任务。

3.3.4 onenterbackward事件

当用户使用prev任务或类似的任务来导航至某一卡片时,onenterbackward事件才可发生。换句话说,当用户从历史堆栈中选取URL地址,并通过浏览器打开这一地址对应的卡片时,onenterbackward事件才可能发生。

与onenterforward事件类似,onenterbackward事件也需要包含在card元素、template元素或onevent元素的标签中进行定义。其具体语法格式如下:

<card id=\"name\" title=\"label\" newcontext=\"boolean\" ordered=\"true\" onenterforward=\"href\" onenterbackward=\"href\" ontimer=\"href\">
内容(content)
</card>

或:

<template onenterforward=\"href\" onterbackward=\"href\" ontimer=\"href\">
内容(content)
</template>

或:

<onevent type=\"onterbackward\">
<go href=\"href\"/>其他任务(task)
</onevent>

前两种格式中,onterbackward事件是作为card元素或template元素标签中的一个属性进行定义的,该属性即为onterbackward,它指定了一个超链(href)的URL地址,当用户使用prev等任务项回到地址时,浏览器就会打开URL指定的卡片。

后一种格式中,onterbackward事件作为onevent元素的一给类型值,并结合<go/>标签指定事件激活时浏览器需要打开的卡片的URL地址。

3.3.5 onpick事件

onpick事件在定义时一般通过onpick属性指定一些项目,当用户选择或取消这些项目时,即可触发onpick事件,执行onpick属性所指定的项目,如打开卡片、卡片组或其他事件等。onpick事件通常在option元素的标签中进行定义,其语法格式如下:

<option value=\"value\" onpick=\"href\">
内容(content)
</opiton>

可以看出onpick时间作为option元素的一个属性来定义具体的动作。这个属性即onpick,它指定了事件触发时浏览器需要定位的超链的URL地址。

3.3.6 onevent元素

onevent元素通过<onevent>和</onevent>标签可以把包含的任务与特定的时间捆绑在一起。当用户激活这一特定事件时,onevent元素所绑定的任务就会被立即执行。onevent元素的语法格式如下:

<onevent type=\"type\">
任务(task)
</onevent>

其中task是与onevent元素关联的动作,也是条件激活时浏览器即将执行的内容。与do元素一样,onevent元素中用户也必须绑定且只能绑定go、prev、noop和refresh四种元素所实现任务中的一个任务,go元素用于定位指定URL地址、prev元素用于定位并打开前一操作或任务,noop为空操作,refresh用于刷新当前卡片组或任务。

onevent元素只有一个属性,即type属性,它是必选属性,主要用于定义特定事件的名称。该属性值的数据类型为CDATA型。

3.3.7 postfield元素

postfield元素用于指定当浏览器接到URL请求时,向原服务器(origin server)传送的域名其域值。传输时,传输域及传输值的实际编码方式主要依赖于浏览器与原服务器的通信方式。postfield元素是通过单独?lt;postfield/>标签进行定义的,其语法格式如下:

<postfield name=\"name\" value=\"value\">

它共有两个属性:name与value,它们的取值均属于VDATA型数据。其中,name属性用于指定传输域的名称,value属性用于定义传输的值。这两个属性均为必选属性。

3.4 变量设置元素与变量设置的有关规定

几乎所有的WML内容都可通过设置参数来实现,这为我们灵活的开发WML程序提供了方便。本节我们先介绍一个变量设置元素,然后再介绍与变量设置有关的一些具体规定。

3.4.1 setvar元素

setvar元素用于指定在当前上下文内容中的变量的值,从侧面影响正在运行的任务。其语法格式如下: <setvar name=\"name\" value=\"value\"/>

它有两个属性:name和value。前者用于指定变量的名称,后者用于指定所需赋给变量的值。这两个属性都是必选的,它们的数据类型均属于VDATA型。如果name属性所规定的变量名不合法或不符合运行环境的要求,那么setvar元素在WML程序运行中将被忽视,不能发挥其应有的作用。

3.4.2 变量设置

WML编程中可以使用变量,变量使用前必须进行定义。变量的命名原则及定义方法我们上一章已经讲过了,这里不再重述。在这里,我们主要介绍WML程序中设置变量的规定。

如前所述,setvar元素可用来设置变量,设置时setvar元素一般需要在go、prev或refresh元素中进行定义。另外,利用input和select元素也可以设置变量。其中前者是将用户输入的文本赋给变量,作为变量的值;而后者则将用户从option元素中选择的value属性的值赋给变量。有关input元素和select元素的语法格式及具体用法我们后面再行介绍。

设置变量时,以下几种情况还应当引起大家注意:

1)可以使用WMLScript的变量值设置WML的变量,反之亦然。也就是说,使用WML及WMLScript编写程序时,它们可以使用同名编程。

2)在WAP开发工具中,通常提供有对变量进行管理和维护的选项卡或对话框,开发人员从中也可以对相应的变量进行设置及编辑。

3)在当前上下文内容中,可以使用card元素的newcontext属性来消除所有的变量值。

3.5 用户输入处理元素

通过WAP手机的按键,用户可以向浏览器显示的卡片中输入数据信息或操作信息。WML为此专门提供了处理用户输入的元素。

3.5.1 input元素

input元素用于定义文本实体对象,包含有对输入文本内容的格式、数据类型、长度、值、变量名等多种属性的具体规定。当用户输入满足input元素的规定时,则接收输入信息,并赋给指定的变量灵活进行相应的操作、处理;否则,就通过浏览器给出具体的处理意见,并进行是单个输入处理或变量初始化操作,比如刷新卡片以让用户重新输入,或给用户指出输入错误所在并等待进一步的处理指令等。input元素是WML编程中处理用户交互活动的重要元素,它通过单独的<input/>标签进行定义,其语法格式如下:

<input name=\"variable\" title=\"label\" type=\"type\" value=\"value\" default=\"default\" format=\"specifier\" emptyok=\"false|true\" size=\"n\" maxlength=\"n\" tabindex=\"n\"/>

其中除了name属性是必选的以外,其他属性都是可选的。这些属性的功能和用法介绍如下: 1)name。该属性用于指定用来保存用户输入文本的变量和名称。定义name属性后WML将根据该属性也即变量名,为即将输入的文本实体对象与之存储空间,以便接收用户输入。

2)title。该属性用于input元素的标签,通常是位于输入框前的提示信息。

3)type。用于指定文本输入区的类型,有text和password两种选择。默认值为text,指定的用户可以输入文本,而且输入的文本会同时逐渐响应并显示在浏览器中。如果选择password,则指定用户输入的文本作为密码文本处理,WML程序按文本实体接收输入的数据,而浏览器上响应用户输入显示时逐渐均为星号(*),由此起到保密的目的。

4)value。该属性用于指定name属性所定义变量的值,它将显示在输入框中。

5)default。该属性用于指定name属性所定义变量的默认值。

6)format。该属性用于格式化输入的数据。

7)maxlength。该属性用于指定用户可输入字符串的最大长度。该属性的上限为256,最多不能超过256个字符。

8)emptyok。用于指定用户是否可以不在输入框内输入内容。

9)size。该属性用于指定输入框的宽度,宽度值为字符个数。

10)tabindex。用于指定多个输入框存在时,类似于HTML中Tab键的具体位置。

3.5.2 select元素

选择列表属于输入元素,允许用户从选项列表中选择需要的项目。WML不仅支持单选列表,及单选项,而且支持多选列表,也就是复选项。select元素允许用户从选列表中选择所需的项目。列表中的选项采用后面我们就要讲到的option元素进行定义,一般是一行格式化的文本。编程时,我们可以使用optgroup元素将option元素的情况项目分成不同级别或层次的选项组,为用户选择提供方便。

select元素是通过<select>和</select>标签进行定义的,语法格式如下:

<select title=\"label\" multiple=\"false|true\" name=\"variable\" default=\"default\" iname=\"index_var\" ivalue=\"default\" tabindex=\"n\">
内容(content)
</select>

其中所有属性都是可选的。select元素各个属性的功能和用法介绍如下:

1)multiple。该属性用于指定选择列表是否可以使用复选框。

2)name。该属性用于指定接收选项值的变量的名称,变量值由value属性预设定。

3)value。用于制定name属性所定义变量的默认值。

4)iname。用于指定包含排序号的变量的名称。

5)ivalue。用于指定选择列表中被选中选项的值,是一个具有排序号性质的值。 6)title。用于指定选择列表的标题。

7)tabindex。用于指定当前选择光标在选择列表中的具体位置,该位置即为当前选择操作将要选择的选项所在的位置。

3.5.3 option元素

option元素用于定义select元素中的一组单选项。它通过<option>和</option>标签进行定义,并可包括事件和单选项的显示文本等信息,其语法格式如下:

<option title=\"label\" value=\"value\" onpick=\"href\">
内容(content)
</option>

option元素的属性均为可选,各属性功能及用法说明如下:

1)value。该属性用于设置键值。当用户选到该选项之后,option元素就会将该值赋给selet元素的name属性所指定的变量。

2)title。用于option元素制定的一个标题,以便提示用户操作。

3)onpick。该属性用于指定用户选到该项并按accept键后所打开卡片组的L。

3.5.4 optgroup元素

optgroup元素用于将多个相关的option元素进行分组,用户浏览器可以借助这种分组来安排选项列表的显示布局,以方便用户选择。optgroup元素是通过<optgroup>和</optgroup>标签进行定义的,其语法格式如下:

<optgroup title=\"label\">
内容(content)
</optgroup>

它所包含的内容中需要包含至少一次option元素或其他的optgroup元素。

optgroup元素只有一个属性,即title属性,用于定义optgroup元素的标题,以便提示用户操作。

3.5.5 fieldset元素

fieldset元素用于设定输入框和相应的说明文本,从而用户就可以利用input元素等借助该输入框输入所需的数据信息。fieldset元素的语法格式如下:

<fieldset title=\"label\">
内容(content)
</fieldset>

由于fieldset元素和输入有关,所以它们的内容中可以包含与输入有关的其他元素。 其语法格式可以看出,fieldset元素只有一个属性,即title属性,用于定义fieldset元素的标题,以便提示用户操作。

3.6 锚、图像、定时器及其元素

本节我们讲解与定位和定时控制有关的3类元素,包括anchor、a、img、timer几种元素。使用它们可以在WML卡片中创建超链接,或在文本流中显示一幅图像,或设置定时器来控制用户操作及卡片显示等。

3.6.1 anchor元素

anchor元素用于创建一个超链接的头部,超链接的其余部分为用户指定的URL地址。当程序运行中用户选中该超链接时,浏览器就会被引入到超连接指定的地址,如其他卡片组或同一卡片组中的其他卡片。

anchor元素由<anchor>和</anchor>标签进行定义,它所包含的超连接必须是真实存在的,而且是能够正确连接的超连接。anchor元素定位超链接时,必须通过相关的任务元素完成定位处理,如go元素、prev元素、refresh元素等。不过,在anchor元素中只能包含1个定位任务,多于一个时会导致WML运行错误。

anchor元素的语法格式如下:

<anchor title=\"label\">
任务
文本
</anchor>

其中的任务需要包含一个进行定位的任务元素。可以看到,anchor元素只有一个属性,即title属性,用于定义fieldset元素的标题,它用于定义即title属性,用于定义fieldset元素的标题,以便提示用户操作。元素的超连接的标题。用户浏览时可利用这一标题来及时了解操作的超连接的名称或者有关提示信息。

3.6.2 a元素

a元素是由anchor元素的简化形式,它内含了anchor元素需要包含的go元素功能爱完成超连接定位,并且不再包含其他任何变量设置。它使用<a>和</a>标签进行定义。

3.6.3 img元素

img元素用于格式化的文本中防止和显示一幅图像。当然,前提是用户所用的浏览器必须支持图像显示。img元素由单独的<img/>标签进行定义,它不包含其它元素。其语法格式如下:

<img alt=\"text\" src=\"url\" localsrc=\"icon\" aligh=\"alignment\" height=\"n\" width=\"n\" vspace=\"n\" hspace=\"n\"/>

属性中alt和src是必须要有的,其他可选。另外,需要注意的是img元素要放在p元素里
,而不能放在do或option元素里。

img元素各个属性的功能和用法介绍如下:

1)alt。该属性用来指定当手机不支持图像显示用来替代现实的文字文本。

2)src。该属性用于指定图像文件的URL地址。

3)localscr。该属性用来指定显示存在手机ROM的图标文件。

4)align。该属性用来指定图像显示是相对当前文本行的对齐方式。

5)height。用于设定图像显示时的高度。

6)width。与height属性类似,用于设定图像显示时的宽度或宽度百分比。

7)vspace。该属性用于指定图像显示时的上边距和下边距,默认值为0。

8)hspace。与vspace属性类似,该属性用于指定图像显示时的左边距和右边距。

3.6.4 timer元素

timer元素用于设定一个定时器,可以延时显示卡片组、卡片,或实现WML程序的等待操作,或在卡片组和卡片之间实现切换以取得动画效果。

一个卡片只能使用一次timer元素,也即是说只能设置一个定时器。当用户进入还有定时器的卡片时,定时器就会开始工作,其时间值就会逐渐减小。timer元素指定的时间值单位1/10秒。其语法格式如下:

<timer name=\"variable\" value=\"value\"/>

它的两个属性中,value属性是必选的,name属性为可选。name属性用于指定表示时间值的变量的名称,该变量的取值由定时器的时间值决定,时间值减小,该变量的值也相应地减小,并终始保持不变。

value属性用于指定name属性所定义变量的初始值。如果name属性定义的变量在定时器初始化时还没有值,那么该变量就将采用value属性指定的值;否则,改变量就会忽视value属性的值。如果没有定义name属性,也就是说,没有指定时间变量,那么timer元素指定的定时器仍将采用value属性的值进行延时处理。

3.7 文本格式化及其元素

WML程序中,为使显示的文本呈现出丰富的样式,WML提供了一些用于格式化的元素,我们通过这些元素及其相应的标签可以对文本进行标注和控制,从而实现不同的显示效果。

3.7.1 增强元素

增强元素都是一些成对的标签,用于指定文本的增强显示信息。比如b元素通过<b></b>标签可以控制其中的文本按照粗体字进行显示。 3.7.2 br元素

“br”即break,是用于换行的元素,它是使用单独的<br/>标签进行定义的。br元素的作用相当于插入一个回车符。

3.7.3 p元素

“p”即指paragraph,p元素用于划分段落,是当前文本换行并插入一个空白行。p元素可以使用单独的<p/>标签进行定义,也可以使用<p>和</p>标签成对的进行定义。其语法格式为:

<p aligh=\"alignment\" mode=\"wrapmode\"/>



<p aligh=\"alignment\" mode=\"wrapmode\"/>
文本
</p>

1)align。该属性用于设置段落在浏览器中的对齐方式,有left、center和righ三种取值。这三种参数值分别表示p元素当前定义的文本段落及浏览器窗口的左侧、中间和右侧进行对齐。默认值为left,及段落与浏览器窗口的左侧对齐排列。

2)mode。该属性用于指定下一段落的换行方式。

3.7.4 td元素

td元素用于规定表格单元格的内容。其语法格式如下:

<td> 单元格内容 </td>

3.7.5 tr元素

WML中的表格是按照行、列进行组织的。一个表格由若干行组成,每行由若干列组成。tr元素用于定义表格的行。其语法格式如下:

<tr> 单元格内容 </td>
</tr>

3.7.6 table元素

table元素与tr元素、td元素一起,可用来创建能容纳文本和图像的表格,并可设置表格各列中文本和图像的对齐方式。其语法格式如下:

<table align=\"alignment\" title=\"label\" columns=\"n\">



<table align=\"alignment\" title=\"label\" columns=\"n\">
内容
</table>

其中各个属性的功能和用法介绍如下:

1)align。该属性用于指定表各个列中文本和图像的对齐方式。

2)title。该属性用于指定table元素的标题。

3)columns.该属性用于指定表格的列数,该数不能为0。
posted on 2006-04-29 09:42 崛起的程序员 阅读(229) 评论(0)  编辑  收藏 所属分类: 载选文章

只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问