源码网,源码论坛,源码之家,商业源码,游戏源码下载,discuz插件,棋牌源码下载,精品源码论坛

 找回密码
 立即注册
查看: 776|回复: 18

[XML/RSS] WML语言的基本情况

[复制链接]

7万

主题

861

回帖

32万

积分

论坛元老

Rank: 8Rank: 8

积分
329525
发表于 2007-3-14 00:00:00 | 显示全部楼层 |阅读模式
[TR]
[TD]用于WAP的标记语言就是WML(Wireless Markup Language)。
  WML的语法跟XML一样,WML是XML的子集。
  HTML、XML和WML的文件有很多相似之处,这样网页开发者在过去10年中所学的东西今天依然适用。
WML页面文件的后缀是 *.WML,就象HTML的 *.HTML后缀。
XML规定定义了一个规范的XML文件的规格。任何违反这个规定的WML文件会出错。WML文件通常使用XML解释器起来解释。
建立网页制作环境
  WML文件本身就是文本文件,所以编辑不成问题,顺手的编辑器都可以用。
当然,由于目前的浏览器还都不能显示WML页面,而我们又不能总在手机上进行测试(速度太慢),所以需要模拟器。现在象NOKIA、ERICSSON、MOTOROLA等手机制造商都生产了相应的产品,你只要下载就行了。当然除了模拟器以外,还需要图形制作转换器(用来制作WAP格式的图形文件)、字符转码器(汉字UNICODE)等等,本站工具及论坛页面均有说明。
WML文件结构
  WML的页面通常叫做桌面(DECK),由一组互相链接的卡片(CARD)组成。当移动电话访问一个WML页面的时候,页面的所有CARD都会从WAP服务器下载到设备里。CARD之间的切换由电话内置的计算机处理,不需要再到服务器上取信息了。CARD里可以包含文本、标记、链接、输入控制、任务(TASK)、图像等等。CARD之间可以互相链接。
  文档的实体包含在...标记中,文档里每个CARD又包含在...标记中,然后实际的文字段落则包含在...
标记中。
简单例子:
[TR]
[TD]



 
 Hello world!
 


[/TD][/TR]

显示结果如下:
[TR]
[TD]------ HELLO ------
Hello World! [/TD][/TR]

DECK里面各个组成部分的具体解释在本教程的其他部分有说明。
WML字符集
  WML是XML的子集,继承了XML的字符集设置。WML文档缺省的字符集是UTF-8。
要显示中文,有两种办法。最简单的办法就是在文档头使用encoding,即把第一行改为:
[TR]
[TD][/TD][/TR]

  然而令人丧气的是,这种方法有些手机和模拟器并不支持(将来会的),所以目前第2种方法更普遍:不改变字符集设置,但是在写中文的时候采用UNICODE代表中文字符,如:
[TR]
[TD]通讯录[/TD][/TR]

代表:
[TR]
[TD]通讯录[/TD][/TR]

WML元素:标记(Tag)和属性
  WML的主要内容是文本,由于标记会降低与手持设备的通讯速度,所以WML标准里仅仅使用了很少一部分。用于表格和图像的的标记几乎都被排除了。
  与XML一样,在WML语言中,所有元素都放在符号""中,并且包含一个开始标志、一个结束标志和一个内容标志,或者使用自身结束的控制标记。就象这样:
[TR]
[TD]内容 例如:Hello World!


例如:
和 [/TD][/TR]

  WML同样支持在标志中标出属性。属性是标志的附加信息,与元素的内容不一样,它并不在屏幕上显示出来。属性通常在元素的开始标志后指定。如上面最后一个例子。
  由于WML是XML的一种应用,因此所有的WML标记和属性都是大小写敏感的(跟完全不同),而且所有的标记都必须正确地结束。WML要求属性的值必须放在双引号或单引号内。单引号可放在属性标志内或双引号内。字符亦可作为属性的值。
WML注释
  XML支持这样的注释格式:
[TR]
[TD][/TD][/TR]

这些注释在浏览器中并不显示出来。
WML不支持嵌套元素注释。
链接(URL)
WML外部引用方式跟HTML相同
[TR]
[TD]http://www.itsalon.net/index.wml 或
http://www.itsalon.net/index.wml#login [/TD][/TR]

内部引用,如果next是当前DECK中的一个CARD时,可以用这种方式:
[TR]
[TD]#next[/TD][/TR]

提供链接功能的WML元素有2个:(参见任务)和(参见事件)。
CDATA
  XML支持CDATA的概念,以显示不需要解释的文本。下面的例子使用CDATA元素在WML页面中显示WML命令文本。
[TR]
[TD]
] ]>[/TD][/TR]

浏览器窗口将显示如下内容:
[TR]
[TD]this is data
[/TD][/TR]
[/TD][/TR]
[TR]
[TD]
  有了上面的基础,相信大家已经能够做不少事情了。现在我们来深入一下,看看如何提高性能和网络传输效率。首先,需要介绍一下http 1.1(RFC2616)的基础知识。当然,如果你已经很熟悉了,可以跳过第一部分。
一、HTTP 1.1的简要介绍
  HTTP 1.1是一个基于文本的互联网实体信息交互主流协议,这里的实体可以是WAP兼容浏览器之类的用户终端,可以是WAP网关之类的代理服务器,也可以是Java servlet之类的源服务器程序。它们之间的交互信息就是两大类:客户端对服务器端的请求(request)和服务器端对客户端的响应(response)。一次完整的交互包括一个请求和对它的响应。
所有的请求和响应都采用[RFC822]中定义的标准互联网消息格式,框架如下:
  * 消息定义
  * 没有或多个消息头
  * CRLF(空行回车)
  * 可选的消息本体
  其中消息定义不分指定了发送消息的类型。请求和响应都可以包含多个消息头,用来进一步或者重新定义用户终端和服务器之间的交互。CRLF仅仅用来将信息定义和消息本体分开。
1、请求
  在消息定义部分可以这样定义请求: 请求类型 URL HTTP/1.1
其中请求类型可以是下面的一种:
  ①. OPTION:返回请求者和相应者之间可以使用的通信选项,主要用来检测服务器处理能力;
  ②. GET:获得以URL标示的文件内容或者程序执行结果。服务器根据文件名后缀判断服务内容,比如该URL是静态文本还是一个程序;
  ③. HEAD:除了不返回响应的信息本体以外,得到的是跟GET一样的信息。一般用来测试链接的有效性、可达性和近期修改;
  ④. POST:把消息本体中的消息发送到一个URL或者其他类似的服务器端定义行为。通常用来提交一个HTML表单或者一些数据操作活动;
  ⑤. PUT:把消息本体中的消息发送到一个URL,跟POST类似,但不常用;
  ⑥. DELETE:删除URL指定的资源;
  ⑦. TRACE:调用一个远程应用层请求消息回路。发出这个消息的用户终端除了收到原来的消息内容以外,还得到消息在Internet上的传送路径。
  最常用的请求类型--也是我们在处理WAP应用时最关心的--是GET和POST。假设有一个WML文档,我们用UP的浏览器去浏览的话,就会向服务器发出如下GET请求:
GET www.itsalon.com/wap/index.wml HTTP/1.1
[B]accept-charset:[/B] UTF-8
[B]accept-language:[/B] ch
[B]accept:[/B] text/vnd.wap.wml, */*, image/bmp, text/html
[B]user-agent:[/B] UP.Browser/3.1-UPG1 UP.Link/3.2
[B]host:[/B] www.itsalon.net
……
其中粗体的部分是HTTP消息头,这里我们忽略了一些与我们关系不大的消息头。
[B]accept-charset:[/B] 用户终端支持的字符集
[B]accept-language:[/B] 用户终端目前使用的语言
[B]accept:[/B] 用户终端可以接受的MIME文件类型
[B]user-agent:[/B] 用户终端供应商提供的终端描述信息
[B]host:[/B] 请求信息发送到的域名
2、响应
  响应的消息定义部分一般是这样的:HTTP/1.1 状态码状态描述在[RFC2616]中定义了近40种不同的状态码(分成5组)。其中最常见的是3个:
200 OK
401 Unauthorized
404 Not Found
继续上面那个例子,如果该URL合法的话,服务器的响应会是这样的:
HTTP/1.1 200 OK
[B]Server:[/B] www/5.0
[B]Date:[/B] Fri, 26 Oct 2000 12:15:23 GMT
[B]Connection:[/B] Keep-Alive
[B]Content-Length:[/B] 1211
[B]Content_Type:[/B] text/vnd.wap.wml
[B]Last-Modified:[/B] Mon, 22 Oct 2000 18:19:24 GMT
……
其它内容
……
  这个响应信息里包括了响应的数字代码和文本描述,然后是一组消息头。在一个换行符以后就是消息本体,在这里,消息本体就是www.itsalon.net/index.wml的源代码。
[B]Server:[/B] 发出响应的服务器
[B]Date:[/B] 响应发出的时间
[B]Connection:[/B] 指示用户终端保持连接
[B]Content-Length:[/B] 响应信息的长度,从DECK的第一个"[/B][B][/B]。定义URL保存在设备缓存中的最长时间。时间到了以后,这个实体会从缓存中清除;
  * [B]Expired:[/B] 。指定URL在缓存中存放的最后日期期限。[RFC1123]定义了日期的格式,通常是这样的:Expires: Sun, 29 October 2000 17:30:47 GMT
在写一个WAP应用的时候,你要先假设用户终端会尽量最大化缓存以便使向内容服务器获取信息的动作减少到最少。下面做些解释:
1、永久缓存URL
WAP用户终端通常会尽量长地在它的缓存中保存存取过的URL,这个"尽量长"在Phone.com浏览器中的定义是大约30天。不过,也许你会想把一个URL的缓存时间尽量延长,比如你公司的LOGO,这样每次打开页面的时间就会减少。用下面两种方法能够很简单地实现:
  * 指定一个离现在很远的过期日,比如:Expires: Tue, 01 Jan 2002 00:00:00 GMT;
  * 指定一个很大的缓存时间,如:Cache-Control: max-age=3153600。这个例子可以让URL缓存一年。用户终端允许的最大整数是2,147,483,647,所以你可以让一个URL保存超过68年之久。当然,到那个时候,你的手机早就那报废了。
2、指定对URL的缓存时间
  通常的情况是对一个URL你只需要缓存一段时间。比如股票报价系统,网页可能需要5分钟更新一次,那么你只要在DECK的HEAD部分指定Cache-Control: max-age=300就行了。 如果用户在5分钟以内再次检索该页面,看到的还是缓存里的网页。如果在5分钟以后,就会到服务器上获取最新的数据。
  另外一种控制缓存时间的方法是使用前面提到过的Expires,不过这种方法只能告诉用户终端:只要过了指定时间,无论什么时候访问页面都要刷新。如果你下次要控制时间,只能改变Expires里的时间值。
3、禁止对URL的缓存
  对于快速变化的内容,一般都会希望每次都得到最新的数据。所以这个时候要完全禁止对相关网页的缓存。方法有三种:
  * 设定Cache-Control: no-cache;
  * 设定最大缓存时间为0,Cache-Control: max-age=0;
  * 设定缓存到期日为一个早就过去的日期,Expires: Mon, 1 Jan 1990 00:00:00 GMT。
实际上,后两种不是最好的选择。首先这样会多占用终端的处理时间,因为当碰到这个DECK时,终端需要计算一下过期时间。其次,这样会多占用一些字节,而且在表达上也不够清楚。
三、验证(validation)和历史堆栈(History Stack)
  在HTTP1.1中对缓存进一步提出了验证的概念。验证的目的就是检验缓存项目是否在有效期内。由于历史堆栈的存在,WAP终端上的验证过程变得有点复杂。
  WAP标准规定所有的WAP设备都至少要有可以容纳10-个项目的历史堆栈。当用户按下由或其他转向指令的定义的前行(forward)链接时,URL被推(push)入堆栈。如果按下由定义的后退(backward)链接,URL被弹(pop)出。
  一般情况下,所有的前行链接都会被验证,而后退链接则不会,因为它已经在cache里了。可是我们有时候还是希望当用户按下后退键时依然能够得到最新的数据。如果终端总是不予验证的话,那用户只好找到主菜单再重新进入那个页面。
  幸运的是,我们用Cache-Control:must-revalidate就可以强迫用户终端在用户按back时对URL进行验证。当然,进行验证并不是说该页面会立刻重新读取,而是根据他是否过期来决定。如果没有过期,验证的结果仍然是显示缓存中的页面。
  如果你需要每次back都重新读取页面,用Cache-Control:must-revalidate, no-cache可以实现。另外,把 no-cache换成max-age=300就可以在back时对已缓存了300秒的页面进行刷新。
四、HTTP头与meta元素
  到这里,大家已经知道HTTP消息头的在WAP页面的作用了。不过要在WML文档里设置这些消息头,就要用到meta元素,它只能出现在WML文档段里。下面是几个消息头和它们的表示形式:
  Expires: Mon, 10 Jan 2000 00:00:00 GMT
  Cache-Control: max-age=300
  Cache-Control: no-cache
  
  
  
  当网关在WML文档中扫描到元素时,就会把它们转换成WSP等效的HTTP消息头,然后用户终端就可以据此对缓存进行控制了。[/TD][/TR]
回复

使用道具 举报

0

主题

1万

回帖

0

积分

中级会员

Rank: 3Rank: 3

积分
0
发表于 2022-9-12 14:42:37 | 显示全部楼层
撒旦撒旦撒擦擦擦擦
回复 支持 反对

使用道具 举报

0

主题

2万

回帖

66

积分

注册会员

Rank: 2

积分
66
发表于 2022-12-3 16:47:40 | 显示全部楼层
这个源码还可以
回复 支持 反对

使用道具 举报

2

主题

506

回帖

631

积分

高级会员

Rank: 4

积分
631
发表于 2023-2-1 16:35:13 | 显示全部楼层
挺不错的东西
回复 支持 反对

使用道具 举报

6

主题

1万

回帖

174

积分

注册会员

Rank: 2

积分
174
发表于 2023-5-5 14:37:46 | 显示全部楼层
飞飞飞飞飞飞飞飞飞飞飞飞飞
回复 支持 反对

使用道具 举报

6

主题

2万

回帖

425

积分

中级会员

Rank: 3Rank: 3

积分
425
发表于 2023-6-24 02:17:11 | 显示全部楼层
额风风风微风微风违法
回复 支持 反对

使用道具 举报

0

主题

2万

回帖

0

积分

中级会员

Rank: 3Rank: 3

积分
0
发表于 2023-11-9 01:06:47 | 显示全部楼层
的vgdsvsdvdsvdsvds
回复 支持 反对

使用道具 举报

0

主题

2万

回帖

61

积分

注册会员

Rank: 2

积分
61
发表于 2023-11-23 12:29:52 | 显示全部楼层
来看看怎么样
回复 支持 反对

使用道具 举报

11

主题

2万

回帖

300

积分

中级会员

Rank: 3Rank: 3

积分
300
发表于 2024-3-17 04:02:38 | 显示全部楼层
啦啦啦啦啦啦哈哈哈
回复 支持 反对

使用道具 举报

3

主题

2万

回帖

294

积分

中级会员

Rank: 3Rank: 3

积分
294
发表于 2024-3-18 03:49:54 | 显示全部楼层
554411515451555
回复 支持 反对

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

手机版|小黑屋|网站地图|源码论坛 ( 海外版 )

GMT+8, 2024-11-24 18:15 , Processed in 0.086422 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表