摘要:基于XML的移动终端网络浏览方案是在传统客户/ 服务器浏览模式中插入中间层,中间层在后台服务器上运行,接收客户端服务请求,并与WEB 服务器通讯以获取需要的HTML 文件。并按照规范过滤此文件,重新组织XML 格式的文件,通过无线网络传入客户端。客户端平台采用嵌入式Linux,根据需要自由裁减,经XML 解析后,调用GUI 函数显示网页。
关键词:嵌入式浏览器;移动终端;XML;解析器
引言
移动终端受移动性和便携性的制约,CPU 主频及计算能力较小,存储器容量、显示屏和输入设备大小也受到限制。同时,无线数据网带宽、连接可靠性及网络可预测性相对较低, 网络时延比有线网大。如果将移动终端通过无线方式直接接入Internet,技术实现有困难。近年业界提出:一是重写现有Internet 协议,使其与现有协议兼容,让移动设备透过微浏览器( Micro-Browser) 能通过无线网络使用Internet 上所提供的针对WAP 特别定制的资讯及服务。另是将移动终端当作功能简化的PC,并内置HTML 浏览器,虽可自由访问现有网络, 但由于现有Internet 网站网页大量采用Flash、Shockwave 等技术,导致其体积庞大, 无线传输中耗时长,还要求移动终端具有较强运算能力,硬件投入较高。为此,对上述方式进行改进, 使其既可满足无线网络传输中数据量小的要求, 又可让用户获取现有网络上的绝大部分资源。
基于XML 的移动终端网络浏览模型
模型概述
基于XML 的WEB 浏览方案是在传统的客户/服务器浏览模式中插入中间层。中间层接收客户端的服务请求,并与WEB 服务器通讯以获取所需要的HTML 文件,将此文件按一定规范进行过滤,去掉客户端不需要的标签及内容,重新组织成XML格式文件通过无线网络传送给客户端。经由XML解析器以后,调用GUI 图形接口函数将网页显示在用户界面上。客户端浏览器的控制部分负责响应用户的请求,并处理与用户的交互。其结构如图1。
在无线网络浏览中使用XML 的优缺点
可扩展标记语言(XML: eXtensible MarkupLanguage) 是用来描述其它语言的元语言,定义了应用间传递数据的结构, 是能用任何编辑器读取的文本。利用这种机制,程序员可制定底层数据交换的规范,并在此基础上开发整个系统的各个模块,模块间传输符合既定规则的数据,适合计算机间传送结构化数据。
每种浏览器内置的文档解析器是最核心的部分之一,影响浏览器的运行效率和空间效率。由于XML 统一定义了其文档解析器的标准接口规范——DOM( Document Object Model),即文档对象模型,使得应用程序可按需选择、更换合适的解析器,无须对程序本身做大的改动。在浏览模型中, 将HTML 解析等计算量大的任务交由中间层服务器完成, 客户端进行较为简单的XML 解析, 符合瘦客户机/ 服务器的信息应用体系模式。当前使用XML 最大的问题是支持XML 的应用程序还不多, 许多具体应用还需要开发人员自行设计。
中间层实现的机制和原理
选择VC++ 6.0 为中间层的集成开发环境,中间层运行在后台服务器上, 采用模块化的设计。每个模块作为一个常规动态链接库( Regular DLL )单元, 由后台服务器需要时动态加载。
(1) 数个无线MODEM通过多串口卡连接在后台服务器上构成无线MODEM 池,为多个移动终端用户提供服务。客户端与服务器建立连接时, 先申请MODEM 池中的空闲资源并建立与后台服务器连接, 发送客户端浏览器服务请求,任务完成后释放MODEM 资源。如没有可用资源,等待一定时间后重新申请。
(2) 后台服务器通过有线网络接入Internet,使用标准WWW 协议栈(HTTP、TCP/IP 等)。与WEB 服务器通讯时主要使用CInternetSession,CHttpConnection 和ChttpFile 等3 个MFC 类。核心代码如下:
C I n t e r n e t S e s s i o n s e s s i o n ;
C H t t p C o n n e c t i o n * p S e r v e r = N U L L ;
C H t t p F i l e * p F i l e = N U L L ;
AfxParseURL(pURL,…);
初始化完成后, 将客户端的服务请求转化为标准统一资源定位符( URL : Uniform ResourceLocator ), 并调用全局函数AfxParseURL 分析映射此URL。
pServer = session.GetHttpConnection();
pFile = pServer->OpenRequest();
pFile->AddRequestHeaders();
pFile->SendRequest();
打开客户端请求特定HTTP 连接,向WEB 服务器发送相应HTTP 请求消息。
pFile->ReadString();
WEB 服务器返回响应消息, 调用CHttpFile类ReadString 函数取得返回数据, 完成与WEB 服务器通讯。
(3) 选择Dillo project 浏览器中的解析引擎作为解析过滤和组装模块的核心, 流程如图2。
HTML 解析部分对输入的HTML 数据流按HTML 语法特点逐字符分解成三类:
① Space 数据类型: 所有ASCII 码值在0x09- 0x0d 或0x20 的字符代表空格或占位信息。经Space_proces 部分处理,以确定其长度。为保持HTML 排版格式基本不变,此类数据全部保存在生成的XML 文件中。
② Tag 数据类型: 表示HTML 数据流中的所有标签。由于HTML 语法规则的限制,必须检查标签的有效性,例如<input> 标签必须存在于<form>标签之中。为此建立一堆栈存放标签信息,堆栈中的所有元素构成了当前HTML 文本处的现场信息。遇到新标签,首先按照HTML 语法规则将新标签与当前状态信息进行比较,确认有效后,将当前标签信息( 包括标签名及属性)入栈,在标签结束处将此信息出栈,此过程由Tag_process 部分完成。同时建立一数组保存需要保留的标签名, 数组具体元素可根据用户需要进行增减。将每个经检验有效的标签与数组中元素进行逐个对比以确定标签是否加入XML 文件中,通过这样的筛选, 来减小无线传输量。
③ Word 数据类型:需要显示的文本信息。此部分信息经Word_process 处理后,全部加入到XML 文件中。
④ 最后将XML 文件通过无线网络传输给客户端浏览器。由于无线通讯环境数据传输的不确定性和不稳定性,定义了HTML 转换模块通讯子模块-PDA:
协议格式:FramHead(0x01)+ASCII 数据长度( 6bytes) 指令+ 空格+ ASICII 数据+ FramTail(0x02)
支持指令OK FAIL
其中第一个字段表示数据帧头第二个字段表示数据总长度以10 进制表示最大不超过999999字节指令字段表示中间层服务器工作状态成功则返回OK 最后为帧尾通过检验帧头和帧尾来确定数据传输的完整性和准确性。
经测试经过中间层过滤掉Java Script 和一些动态图片并保留了网页的主要信息前提下网页体积只有原来的10%左右适宜在GSM 等低速无线网络上传输。
客户端浏览器的实现机制
客户端平台采用嵌入式Linux 工作流程如下
(1) 浏览器启动后首先初始化XmlBrowser结构此结构包括浏览器当前URL 显示结构入口指针及保存已浏览的历史URL 成员结构体等初始化后通过客户端通讯模块向中间层发送请求消息其通讯子模块中间层服务器通讯子模块格式如下:
协议格式FramHead(0x01) 总长度(4bytes)指令空格URL 字符串? [POST DATA]
FramTail(0x02)支持指令GET POST HEAD前两个字段分别表示帧头和数据长度后四个字段遵循HTTP 协议支持标准HTTP 三种指令最后为帧尾。
(2) 浏览器收到中间层返回数据后先检验数传中无数据丢失后将此XML 数据流送入XML解析器选择可为Gnome Linux 主要窗口管理环境之一提供XML 支持的XML Library 中的XML解析器它遵循标准DOM 接口可将DOM 看作标准的连接文档和应用程序或脚本语言的结构体系其提供给用户一个接口以装载定位操作和序列化XML 文档基于DOM 的XML 解析器将XML 文档转换成对象模型的集合通常为树状结构通过遍历整棵树来访问XML 文档任意处的内容和结构信息。
(3) 从XML 解析到XML 文本的显示步骤
从流程图图3 可见底层GUI 接口调用和上层显示模块是分开的显示模块完成对全部具体元素的显示信息的计算后向底层GUI 接口形函数发出服务请求底层GUI 对服务请求进行响应完成屏幕绘制采用该结构应用程序开发员无需了解底层图形引擎的实现机理和技术细节只要保持两者间的接口不变系统底层图形函数库的升级将不会影响现有软件。
进入显示的DOM 数据流元素分为两类一类是在屏幕显示区域上显示的对象如输入框<input> 链接<a>和文本等元素另类为Container容器如表格行<tr> 表格单元<td> 等元素不显示在屏幕上每个显示对象都处在特定Container中以此来确定它与其它显示对象间的相对位置关系整个屏幕显示区域视为最外层的容器包含了实际显示对象和下层容器以此类推构成了整个显示结构显示结构完成后计算每个元素的实际显示位置通过遍历整个显示结构依据显示区域长宽计算每个显示对象的坐标超出显示区域长度的部分使用滚动条来访问。
(4) 浏览器与用户交互的管理
该管理由浏览器的虚拟控制器完成浏览器的整个屏幕除了页面显示区域外还分为滚动条和系统区域系统区域上为用户提供了一些定制的功能如前进后退页面刷新等通过点击滚动条区域可以上下移动屏幕。
结束语
基于XML 的移动终端网络浏览方案既考虑到现有网络数据结构以HTML 为主的现状又可满足未来网络向XML 方向发展的趋势并已在我所自行研发的移动终端上运行成功满足了流动性很强的特殊行业对信息浏览和查询的需要。