当前位置: 移动技术网 > IT编程>网页制作>XML > WML的简单例子及编辑、测试方法第2/2页

WML的简单例子及编辑、测试方法第2/2页

2017年12月08日  | 移动技术网IT编程  | 我要评论
              &n

2.2.3 wml程序的基本结构
以上我们简单分析了wml的程序结构及组成,由此大家可以对wml程序有个整体上的初步认识。下面我们给出wml程序的基本结构。
<?xml version="1.0"?>
<!doctype wml public "-//wapforum//dtd wml 1.1//en" "http://www.wapforum.org/dtd/wml_1.1xml">
<wml>
<head>
<access/>
<meta..../>
</head>
<card>
some contents...
</card>
<wml> 
该基本结构可以分为以下几个关键部分:
1)声明。wml程序有许多deck组成,对于每一个deck,在其文档开头必须进行xml的声明和文档类型doctype的声明。
xml声明总是在文件的第一行,注意前面最好不要有空格或者还行:
<?xml version="1.0"?>
2)紧跟着是doctype声明,注意声明是字母的大小写不要搞错:
<!doctype wml public "-//wapforum//dtd wml 1.1//en" "http://www.wapforum.org/dtd/wml_1.1xml">
3)<xml>标签。该标签用于包含和定义wml的一个deck。它有一个可选的xml:lang属性来制定文档的语言,比如<wml xml:lang="zh">表示文档语言为中文。
4)<head>标签。该标签用于包含和定义deck的相关信息。<head>标签之间可以包含一个<access>标签和多个<meta>标签。
5)<access/>标签。它的一般形式是<access domain="域" path="/路径"/>,主要用于制定当前deck的访问控制信息,有两个可选的属性。其中,domain用来制定域,默认值为当前域,path用来制定路径,默认值为“/”,即跟目录。由于<access>单独使用,所以要用“/”结尾,后面我们还会系统的讲解wml的各种标签,这里即使看不懂也没关系,主要有些感性的认识就可以了。
6)<meta...>标签。它的一般形式是<meta 属性 content="值" scheme"格式" forua="true|false"/>,用于提供当前deck的meta信息,包括内存数据处理方式,以及数据传输方式和处理方式等。有关该标签的详细内容我们后面会专门给出。
7)<card>标签。一个deck可以包含多个card,每个card的内容可能不止一屏显示。对于每一个card,wml均使用<card>和</card>进行包含和定义。 <card>同时可以包含多个可选的属性,如<card id="name" title="label" newcontext="false" ordered="true" onenterforwand="url" pmemterbackward="url" ontimer="url">。至于这些属性的具体含义及功能,我们将在后面介绍。
2.3 wml语言的基本知识
上一节我们介绍了wml程序的基本结构,接下来我们介绍wml语言的基本知识,主要包括wml的字符集、变量、数据类型及wml程序的基本组成部分等。
2.3.1 wml的字符集及编码
wml使用xml的字符集,即通用字符集iso/iec-1062.,也即统一字符编码标准unicode 2.0。同时,wml还支持其他系列的字符集子集,例如utf-8、iso-8859-1或ucs-2等。其中:
utf-8是指通用字符集ucs(universal character set)的转换格式8(transformation format 8),主要传输国际字符集的转换编码。utf-8采用了ucs字符的8位编码,提供了十分安全的编码格式,可以有效避免数据传输过程中的窃听、截取及非法解密。同时,utf-8与7位acsii码完全兼容,不会影响此类编码实现的程序;它的编码规则十分严格,能够有效避免同步传输错误,而且还会支持其它字符集提供了足够的空间。
iso-8859-1字符集是国际标准化组织iso(international standardization organization)制定的acsii字符集的扩展集,能够表示所有西欧语言的字符。与iso latin-1一样,iso-8859-1与windows环境中普遍使用的美国国家标准协会ansi(american national standards institute)的字符集极为类似,绝大多数情况下无需区分。在不特别指明的情况下,http协议均使用isolatin-1字符集。因此,为了wml页面中表示非acsii(non-acsii)字符,开发人员需要使用相应的iso latin-1编码的字符。
ucs-2是iso 1062.标准中自定义的通用多8位编码字符集(universal multiple-octer coded character set)的2字节(即16位)编码标准,其字符编码值与unicode字符的标准编码值相等。
wml文档可以采用html 2.0规范所定义的任何字符编码标准经编码处理。一般说来,wml文档的字符编码是需要转换为另外的编码格式,以与wap用户的手机浏览器所用字符标准相适应,否则,手机浏览器就无法显示wml页面中的字符。然而,编码转换时可能会丢失一些字符信息,所以,如果在用户端进行wml文档的编码转换,那么就可能导致某些结果信息丢失而不能被用户所浏览。因此,如有必要,我们应当尽量在wml页面传送到用户浏览器之前完成编码转换。
为了解决这一问题,一方面,我们需要为web服务器补充定义wml的数据类型,以让服务器可以准确传输这些数据,另一方面,我们需要制订编码转换的原则。
2.3.2 wml字符使用基本规则
wml是一种比较严格的语言,字符使用必须遵守相应的规则,这些基本规则主要包括以下几个方面:
1)大小写敏感。在wml中,无论是标签元素还是属性内容都是大小写敏感的,这一点继承了xml的严格特性,任何大小写错误都可能导致访问错误。
一般来说,wml的所有标签,属性,规定和枚举及它们的可接受值必须小写,card的名字和变量可大写和小写,但它是区分大小写的。包括参数的名字和参数的数值都是大小写敏感的,例如variable1、variable1和variable1都是不同的参数。 2)空格。对于连续的空字符,程序运行时只需要一个空格。属性名、符号(=)和值之间不能有空格。
3)标签。标签内属性的值必须使用双引号(")或单引号(')括起来。对于不成对出现的标签,必须在大于号(>)前加上顺斜杠(/),比如换行标签必须写成<br/>才正确。
4)不显示的内容。在wml中,不显示的字符主要包括换行符、回车符、空格和水平制表符,它们的8位十六进制内码分别为10、13、32及9。
程序执行时,wml将忽视所有的多于一个以上的不显示字符,即wml会把一个或多个连续的换行、回车、水平制表符及空格转换成一个空个。
5)保留字符。这是wml的一些特殊字符,如小于号(<)、大于号(>)、单引号“'”、双引号“"”、和号(&)。
6)显示汉字。如果希望wml程序执行时能够显示汉字,则只需要程序开头使用encoding指定汉字字符集即可。例如:<?xml version="1.0" encoding="gb2312">。
注意:指定汉字字符集的形式和方法可能因为开发工具或wap手机的不同而不同。
2.3.3 变量
wml编程中可以使用变量,变量使用前必须进行定义。变量一旦在deck中的某一个card上定义过,其他card则可以不必重新定义就能直接调用该变量。
定义变量的语法格式为:
$identifier
$(identifier)
$(identifier:conversion)
其中identifier指变量名,或说变量标示符;conversion指变量的替代。
变量名是由us-acsii码、下划线和数字组成的,并且只能以us-acsii码开头。变量名严格区分大小写,也即,变量名是大小写敏感的。
定义变量的语法在wml中享有最高的解释优先级。
有关变量的使用说明如下:
1)在wml中,变量可以在字符串中使用,并且在运行中可以更新变量的值。
2)当变量等同于空字符串时,变量将处于未设置状态,也就是空(null)。
3)当变量不等同于空字符串时,变量将处于设置状态,也就是非空(not null)状态。
4)在“$identifier”形式下,wml通常以变量名后面的一个空格表示该变量名的结束。如果在某些情况下空格无法表示一个变量名的结束,或者变量名中包含有空格,则必须使用括号将变量名括起来,即采用“$(identifier)”的形式。
wml程序中的变量是可以替代的,我们可以把变量的数值赋给card中的某一文本。有关变量替代说明如下:
1)在wml程序中,只有文本部分才可以实现替代。
2)替代一般在运行期发生,而且替代不会影响变量现在的值。
3)任何标签是按照字符串替代的方式实现的。
4)替代是按照字符串替代的方式实现的。
由于变量在语法中有最好的优先级,包含变量声明字符的字符串将被当作变量对待,所以如果要使程序显示“$”符号,则需要连续使用两个“$”进行说明。例如:<p> your acconut has $$15.00 in it </p>一句显示的结果为:your account has $15.00 in it。
2.3.2. wml核心数据类型
wml的核心数据类型均属于字符型数据,是根据xml的数据类型定义的,共有下述2.掷嘈停?1)cdata型。这种数据类型是wml用得最多的一种,可以是数字、字符串或包含数字的字符串。不过定义时,不论是数字或字符串,都必须以文本的形式定义,及数据用引号引起来。cdata型的数据仅用于属性值。例如"$(value)"或name="value"等。注意,这里的value指cdata型的数据值。
2)pcdata型。这是从cdata中分解出来的一类数据,除了可以是文本形式的数字、字符串或两者的混合串外,还可以是wml的标签。pcdata型的数据只能用于wml的元素表示。
3)nmtoken型。这是一类特殊的数据,凡是包含或部分包含数字、字母及标点符号的数据均属于nmtoken型数据。这种数据可以用标点符号开头,但不用于定义变量名或元素名。
4)id型。专门用于定义wml元素名称的数据类型。
在这2.掷嘈椭校珻data型用起来比较灵活,它可以使变量或数据免于语法检查。这是因为,cdata内的数据内容都会被当作文本来处理,从而可以避免wml的语法检查,直接作为文本显示出来。
2.3.5 wml数据值性质
除了nmtoken型数据外,wml其他3种数据都必须以文本形式即加上引号进行定义。我们关心的问题是,这些类型的数据可以表示哪些数据值呢?或者说,它们所表示的数据值的性质是什么呢?
事实上,wml数据只在性质上可以是长度(length)、宏变量(vdata)、流(flow)、内行(inline)、布局(layout)、文本(text)、超链(href)、布尔值(boolean)、数据(number)或增强方式(emphasis)。
2.3.6 卡片与卡片组
前面我们分析了wml程序的结构时,曾将讲到wml文档的信息是通过卡片集和卡片组集的形式进行组织的。一个deck是一个或多个card的集合。当客户终端发出请求之后,wml即从网络上把deck发送到客户的浏览器,deck是服务器发送信息的最小单位。用户浏览器收到deck后,可以浏览其中包含的所有card。card用于表示或描述一个或多个用户交互单位。
2.3.7 卡片组模板
同一卡片组通常会含有许多卡片,这些卡片的定义、属性或格式通常都大同小异。如果我们逐一定义各个卡片,显然是十分麻烦的。为此,wml提供了卡片组模板的功能,模板内定义了一系列标准和参数,可以应用到同一卡片组的所有卡片中去,从而能够大大地提高我们的编程效率。有关卡片组模板的内容我们后面会专门介绍的。
2.3.8 wml与url、程序段锚点
我们知道,环球网www是各种信息和设备的网络,为保证全球范围内的交互,人们制定了3种规范:其一,统一资源定位器url提供所有网络资源的标准命名方式和定位方式;其二,标准协议,如http协议等,提供www资源的传输方式;其三。标准内容类型,如html、wml,提供www资源的内容形式及标准。wml沿用了这些规范,并扩大了url使用的范围。在wml中,不仅超连接、文件路径及文件名可以作为url处理,卡片名、宏变量名及各种内部资源名等也可作为url处理。
为此,wml改进了html命名资源位置的方式,采用程序锚点(fragment anchor)的形式来处理wml程序中某段程序的地位。程序段锚点根据文档wml规则进行定义,并按照程序段表示符前加井字好(#)的方式书写。使用程序段锚点,wml程序可以在同一卡片组中定位不同的卡片。如果在程序中不指定程序段,那么程序中引用的url名称则指整个卡片组,而且卡片组的名称同时也是本卡片组内的第一个卡片的名称。 2.3.9 浏览器操作历史
为了在浏览器端管理wml程序的执行,wml使用“浏览器前后关系”的功能保存wml程序执行的状态及各种参数、变量等,这样可以用来记录用户的操作情况。同时,wml还提供了一个简单的导航历史模型,以url地址的形式记录了用户浏览时的各种操作,并把这些url地址放入历史推栈。通过推栈,用户即可实现历史浏览的回潮及其它操作。 

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网