简介:我们先根据WAP的WML来介绍WML的基本规范,然后将尽可能结合实例提供实际的指南。在第一节中我们介绍WML的语法和核心数据类型,由于WML是XML的应用之一,因此只要有XML的基础掌握WML应该不在话下,关键是要再结合WMLScript做一些实际的开发。
在后面的内容中,我们还将介绍WML中的事件和导航、状态模型、WML Deck、用户代理语义等,然后在介绍WMLScript,最后想分享编写和开发WAP应用的实际经验。
建议您到www.wapforum.org中下载相关的文档(WAP Wireless Markup Language Specification Version 1.1和WAP White Paper、WAP Architecture Specification);还可以到Ericcson和Nokia的网站下载免费的SDK或IDE Tools。请你不吝分享你的知识和经验,加强技术的交流。
一.WML语法
WML从XML继承了大多数的语法构造。因此掌握了XML了语法也就非常容易掌握WML。其中包括实体、元素、属性、注释、字符数据段(CDATA)、处理指令(PI)等,我们对变量做一些介绍:
变量
一个WML文档由一个牌局组成,而其中有多个卡片,在显示时以卡片为单元。WML的卡片(Card)和牌局(Deck)能用变量来表示参数。要将一个变量代入一个卡片和牌局,可以采用下面的语法:
$identifier
$(identifier)
$(identifier:conversion)
如果空白域不表示变量的结束,就需要用圆括号把变量括起来(象第二、第三中形式)。在WML中,变量的优先级最高,即任何变量语法合法处的'$'字符就表示一个变量替换。在任何PCDATA(已析数据)中和任何由vdata实体类型标识的属性值中,变量引用都是合法的。如果要表示一个美元$记号可以用两个连续的$(即$$)来表示。
另外由于XML是一个大小写敏感的语言,而WML继承了该特色,包括所有的WML标签(tag)和属性包括枚举值都是大小写敏感的。
二.WML核心数据类型
1.字符数据
WML中的所有字符数据都根据XML数据类型来定义。总的来说有:
CDATA-字符数据,可以包含数字和命名字符实体的文本。CDATA只在属性值中使用。
PCDATA-已析字符数据,可以包好数字和命名字符实体的文本。该文本可以包含标签。PCDATA只在元素中使用。
NMTOKEN-命名标记,包含任何命名字符的混合,在XML标准中有详细的说明。
2.长度
<!ENTITY 1.209191e-269ngth "CDATA">
长度类型是一个整数,表示canvas(显示屏或纸)的象素个数或者是垂直或水平的可用空间的百分比。因此,值"50"表示五十个象素;"50"在宽度中表示水平可用空间的一半。长度类型只能在属性值中使用。
3.Vdata
<!ENTITY vdata "CDATA">
<!-- attribute value possibly containing
variable references -->
vdata类型代表可能包含变量引用的的字符串。该类型只能在属性值中使用。
4.流
<!ENTITY ayout "br">
<!ENTITY 0.000000low "text; | ayout; | img | anchor | a | table">
流类型代表了"卡片层次"("card-level")的信息。通常流可以在任何通用标记存在的地方使用。
5 HREF
<!ENTITY HREF "vdata;">
指明超文本接点的URI、URL或URN ,可以包含变量引用。HREF类型可以指向相对或绝对的统一资源定位符(URL)[RFC2396]。
6.布尔类型
<!ENTITY boolean "(true|false)">
7.数字类型
<!ENTITY number "NMTOKEN">
数字类型代表大于或等于零的整数。
8.xml:lang
xml:lang属性规定了元素或其属性的自然或正式的语言。其值是遵照RFC1766的语言种类的代码。该属性向用户代理(user agent)说明了可能呈现给用户的文本(即一个元素的内容和属性值)。用户代理应根据规定的语言种类来尽力呈现数据。内嵌的元素的语言可以假定为其父亲元素的语言或用另一种语言。当一个元素呈现给用户的内容既有文本内容又有基于文本的属性值时,作者必须对两者采用相同的语言。vdata中的变量值应该匹配包含元素的语言。一个元素的语言要根据下面的优先级原则(优先级从高到低)来决定:
1.根据元素规定的xml:lang属性;
2.根据最近的父亲元素的xml:lang属性;
3.根据包含在传输和文档元数据的任何语言信息;
4.根据用户代理的缺省参数。
9.id和class属性
所有的WML元素有两个核心属性: id和class。它们能够在完成服务器端转换任务时使用。id属性表示一个元素在牌局(deck)中唯一的名称;class属性使一个元素属于一个或多个类(class)。可以给多个元素指定同一个类名。在一个牌局中有同一类名的所有元素认为是同一个类的部分。类名是大小写敏感的。如果一个元素在其class属性中列出多个唯一的类名,它可以是多个类的部分。在一个属性中的多个类名要用空格相隔。在不同类名之间的冗余类名和无关紧要的空白可以去除。WML用户代理应该忽略这些属性。