第43卷增刊计算机研究与发展Vol.43,Suppl.2006年11月JOURNALOFCOMPUTERRESEARCHANDDEVELOPMENTNov.2006收稿日期:2006-05-25基金项目:本文得到国家自然科学基金(60573117)及国家自然科学基金专项(90412005)的支持一种支持Web信息资源服务化的标记语言及其软件工具杨少华1,2张利永1,2韩燕波11(中国科学院计算技术研究所网格与服务计算研究中心,北京100080)2(中国科学院研究生院,北京100039)(yangshaohua@software.ict.ac.cn)摘要互联网上聚集了大量基于万维网技术的信息资源,随着SOA的流行,如何将信息资源封装成Web服务以便于自动聚合和广泛重用成为倍受关注的问题。文中提出一种Web信息资源服务化标记语言,并基于该语言实现了一个可视化、半自动的服务化工具Web2WS。Web2WS提供友好的操作界面辅助用户定义Web信息资源的访问规则、数据抽取规则,以及到目标Web服务的映射规则,可方便有效地将基于Web的信息资源封装成Web服务。关键词Web服务;资源封装器;Web信息集成;Web资源服务化中图法分类号TP311AMarkupLanguageforGeneratingWebServicesoutofWeb-basedInformationResourcesandSoftwareSupportThereofYangShaohua1,2,ZhangLiyong1,2,HanYanbo11(ResearchCentreforGridandServiceComputing,InstituteofComputingTechnology,ChineseAcademyofSciences,Beijing100080)2(GraduateUniversityofChineseAcademyofSciences,Beijing,100039)AbstractThereexistnumerousWeb-basedresourcesontheInternet.Asservice-oreientedconceptsandarchitectureproliferate,moreandmoreattentionispaidonencapsulatingWeb-basedinformationresourcesintoWebServicesforcompositionandreuse.Amarkuplanguageforthiskindofencapsulationisproposedandavisual,semi-automatictoolcalledWeb2WSisimplemented.Itprovidesauser-friendlyinterfacethatallowsuserstodefineaccessrulesanddataextractionrulesoftheweb-baseinformationresourceandspecifymappingsfromtheinformationresourcetothetargetWebService.Web2WScanhelptogenerateWebServicesfromwebsiteseffectivelyandconveniently.KeywordsWebService;Wrapper;WebInformationIntegration;ServiceEncapsulation今天的互联网聚集了大量基于万维网技术的信息资源,如新闻、天气、股票、交通等等。我们通常使用浏览器访问这些信息,而在应用程序中集成这些信息资源并不容易,具体表现在:1)万维网使用HTTP作为客户端与服务器的通讯协议,处理HTTP协议过于复杂;2)信息嵌入在HTML标记的网页中,标签和数据交织在一起,难以分割,而且HTML的格式比较松散,甚至不要求标签的配对,应用程序很难从中抽取数据以及数据的结构关系。以XML、SOAP、WSDL和UDDI等标准规范和协议为核心的Web服务具有良好的封装性、开放性、松散耦合性、平台独立性等优点。如果以Web服务的形式对基于HTTP和HTML的Web信息资源进行封装,应用程序便可方便地集成此类信息服务。同时,2计算机研究与发展2006年以服务作为基本组成元素的服务组合语言(如BPEL等)及相关工具也已成熟,信息资源的服务化也会给应用集成带来极大的方便。本文借鉴数据库领域Web信息抽取和集成方面的工作,提出一种基于XML语法的Web信息服务化标记语言,并基于该语言实现了一个可视化、半自动的服务化工具——Web2WS(WebSitetoWebService)。利用Web2WS,开发者只需简单的操作便可实现如下功能:1)通过浏览网页的方式定义网页数据抽取规则;2)提供可视化界面定义服务规约说明并建立服务操作接口与Web页面元素的映射规则;3)自动生成Web服务代码、相关部署文件以及客户端调用代码,发布与测试服务。本文首先对相关工作进行比较分析;第二节阐述Web信息资源服务化的原理,详细介绍服务化标记语言;第三节介绍服务化工具的设计与实现;第四节进行试验和评价;最后是结论和下一步工作。1.相关工作数据库领域对Web信息抽取和集成研究进行了大量的工作,出现了一些成熟的技术,典型的有封装器(Wrapper)技术等。封装器特指能从Web站点中自动抽取信息并转化为结构化数据的一类程序[1]。许多封装器生成工具通过学习样本网页的结构以及用户的选择生成封装器。文献[2][3]对此类工具进行了较全面的分析和总结,网站[4]中维护了三十多个封装器开发工具的列表,并进行了一些简要的分析和比较,其中许多工具能够抽取HTML网页中的数据并按一定的格式封装成XML文档。本文实现的服务化工具本质上属于封装器生成工具,但与传统封装器生成工具不同的是本工具生成的封装器是Web服务。生成封装器的关键技术之一是数据抽取与映射规则的定义。许多生成工具提供图形化的交互界面辅助用户定义这些规则,其方式一般有两种:1)基于标记树方式,样本网页以HTML标记树呈现,用户通过选择感兴趣的树结点定义规则,如XWRAP[5];2)基于浏览器方式,样本网页直接在浏览器中显示,如Lixto[6]、SG-WRAP[7]。浏览器方式对用户屏蔽了HTML代码,更加方便易用。在数据抽取规则的表达上,有的使用W3C推荐的XML定位和查询语言XPath/XQuery[8,9],如SG-WRAP;有的则使用自定义的数据抽取脚本程序,如Lixto使用一种自定义的基于逻辑的脚本语言Elog。生成封装器的另一关键技术是网页的获取。获取一个简单的静态网页只需知道网页的URL,而访问动态网页或HTML表单背后的网页需要了解更多的访问细节,如请求方法(GET或POST等)、参数传递及取值方法等。传统的封装器生成工具更多的关注数据的抽取,对于网页获取的支持较弱,用户如果封装HTML表单背后的网页需要查看样本网页的HTML原始代码,增加了对用户背景知识的要求。现有的Web信息资源服务化方法大都基于封装器技术。Pollock系统[10]对Web信息资源的服务化分构造时和运行时两步完成:1)构造时使用现有的封装器生成技术对Web信息源进行封装,同时生成Web服务的WSDL文档,2)运行时将封装器虚拟成Web服务,将基于SOAP的交互与封装器特定的交互进行转换。此方法可以重用已有的封装器生成工具,但是要求用户同时熟悉两套系统,而且已有的封装器生成工具往往从数据源角度而非服务的角度考虑Web信息。Web服务网关[11]是日本东芝公司提出的另一个Web信息资源服务化系统,该系统的特点是提出一个支持多HTML解析器的框架,提供了可视化交互界面完成Web站点到Web服务的封装过程,并可以对生成的Web服务进行基本的管理。但是具体的服务化过程比较繁琐,例如用户需要手工提供网页获取的细节,虽然提供可视化的Web服务封装器描述文档的编辑器,但是相对于边浏览边定义的方式仍较为复杂。2.Web信息资源服务化原理及标记语言2.1服务化基本原理Web信息资源服务化的目标是把网站提供的信息服务封装成Web服务。以列车车次查询为例,用户首先访问网站(如),然后填写车次,提交后转入车次详细信息页面。这个简单实际的例子揭示了获取Web信息的基本过程:访问网页、提交请求、查看结果。将上述过程进行服务化,生成列车车次查询Web服务,它提供一个getTicketInfo操作,该操作返回请求车次ticketno的详细信息TicketInfo,接口如:TicketInfogetTicketInfo(Stringticketno)。目标Web服务需要关心以下几个问题:1)如何获取网页的HTML文档?Web服务需要了解目标文档地址(URL)、获取方法(GET或POST)、请求参数、编码信息等细节。2)如何在网页中抽取有用数据?数据抽取依赖于预定义的数据抽取规则,包括数据的定位和文本的抽取,此过程需要对HTML文档进行解析。3)如何封装抽取的数据作为服务的输出结果?3计算机研究与发展2006年抽取数据的封装依赖于预定义的数据映射规则,它定义了Web信息源的请求参数和抽取的结果数据与Web服务规约说明中的操作的输入输出消息的对应关系。图1揭示了Web信息服务化的基本原理:目标Web服务的输入与输入页面的HTML表单元素建立映射,服务的输出与结果页面中的数据通过XPath表达式建立映射,服务首先使用输入参数“填写”HTML表单或链接参数,提交服务器取得结果页面,然后对页面进行分析,抽取数据并按预定义的数据映射规则进行封装,最后返回结果。XPath是W3C推荐的XML路径语言,HTML文档可以表示为一棵文档对象模型(DOM)树,树结点可以由类似下面的XPath表达式进行定位:/HTML[1]/BODY[1]/TABLE[1]/TR[1]/…/text()。图1Web信息服务化原理WSClientWebServiceHttpClientWebServer2:GetResultPages(TicketNo)3:HttpRequest(TicketNo)4:HttpResponse5:ResultHTMLsDOMParser6:Parse(HTMLs)7:Xml-HTMLs8:Extract(Xml-HTMLs,Xpaths)9:TicketInfo1:getTicketInfo(TicketNo)图2服务运行逻辑图2以车次查询为例详细说明目标Web服务的运行逻辑:第一步服务调用客户端以车次编号TicketNo为参数调用服务操作getTicketInfo(1);第二步服务通过HTTP客户端与远程服务器建立连接,以车次编号为参数发送HTTP请求,取得包含车次信息的原始HTML文档(2,3,4,5);第三步使用HTML解析器将HTML格式化为符合XML语法的Xml-HTML文档(6,7),格式化的过程是将HTML转换成符合W3C的DOM规范的文档,为下一步使用XML定位语言XPath抽取数据作准备;第四步使用XPath引擎从Xml-HTML文档中抽取信息并把结果封装成TicketInfo对象(8,9)。2.2服务化标记语言为了将基于万维网技术的信息服务封装成Web服务,我们提出一种基于XML语法的Web信息服务化标记语言Web2WSML(MarkupLanguage),利用该语言可以表达数据抽取和映射规则,以及生成Web服务的一些细节。使用该语言编写的XML文档称为服务化文档。本节将给出Web信息服务化标记语言核心元素的定义和语法,为了方便表达,这里使用BNF文法说明语言的语法结构。服务化文档包括六部分:Web2WS=(InputPage,OutputPage,XpathTable,OperationSoapServer,Config),语法结构如图3所示,下面对各元素进