具体实施方式
首先参看图1A和1B,说明现有技术中用户与web网站的网页一种交互方式。
图1A示意性表示某个网站(网站1)的一个网页。假设网站1是一个网上书店,用户访问网站1时,可以了解各种书籍的详细介绍。例如,用户在某个网页上输入表示类别的信息,表示想了解该类别的书籍的信息,于是用户浏览器上显示该类书籍的一个书名列表,供用户浏览;如果用户点击一个书名,浏览器上显示一个如图1A所示的网页,该网页上显示该书的详细信息,例如书名(Title)“Learning Java Programming Step by Step”、国际标准图书编号(ISBN)“1234567891011”、简介(Description)“A good bookfor entry-level...snippets”等等。
参看图1B,图1B示意性表示另一个web网站(网站2)的一个网页。假设网站2提供书本目录管理功能,用户访问网站2,通过提供书名、ISBN和简介三项内容,就可以建立自己的书本目录。网站2提供如图1B所示的网页作为书本信息录入界面,该录入界面提供Book Title(书名)、ISBN和Description(简介)三个输入域,供用户输入书名、ISBN和简介三项内容。
为了建立书本目录,用户首先访问网站1,获得所感兴趣的书本的书名、ISBN和简介,例如将书名、ISBN和简介记录下来。然后,用户访问网站2,在图1B所示的录入界面输入所获得的书名、ISBN和简介,然后进行其它操作,建立书本目录。
上述过程中,用户先要手动记录网站1的网页上显示的书名、ISBN和简介三项内容,然后才能在网站2的网页上手动输入这三项内容。虽然用户能通过分别与网站1的web应用的交互和与网站2的web应用的交互来实现建立书本目录这个特定任务,对于用户来说,这两种web应用也是分离的。
按照本发明提出的用于整合多个web应用方法,可以用一个整合应用来实现上述特定任务。在整合应用的执行过程中,无需用户手动记录这两个web应用之间的共享数据,即书名、ISBN和简介这三项内容。
本发明的方法,可以用图3所示的示意性流程图来概括,如图3所示,该方法包含以下步骤:
步骤210,调用多个web应用中的一个第一web应用,其中,第一web应用包括一个或多个web网页;
步骤220,显示第一web应用的网页,提示用户选择网页上的数据;
步骤230,响应用户对网页上的数据的选择,抽取所选择的数据,并存储所抽取的数据;
步骤240,调用多个web应用中的一个第二web应用,向第二web应用的网页输入所存储的数据。
为了便于说明,可以将上述步骤划分成一个整合应用的两个任务:第一任务Task1包括步骤210-230,其功能是从第一web应用输出网页数据,例如访问网站1,选择感兴趣的书本的信息;第二任务Task2包括步骤240,其功能是向第二web应用的网页输入数据,例如访问网站2,将用户所选择的书本的信息自动录入到目录系统中,并显示书本目录。
第一任务Task1可以用程序示例如下。
<basic:TaskModel>
<process type=″logic:Sequence″>
<action type=″browser:BrowserOpen″
url=″http://www.examplewebsite1.com″/>
**打开指定网页**
<action type=″browser:BrowserInput″
instruction=″BrowserInput″>
<position> /body/div/div[2]/form/input
</position>
<text type=″basic:StaticObject″Name=“BookName″/>
</action>
**在网页指定的位置输入内容**
<action type=″browser:BrowserClick″>
<position> /body/div/div[2]/form/input[2]
</position>
</action>
**在网页指定的位置点击**
<action type=″data:CreateObject″name=“book″type=
“BookInfo″/>
**创建一个类型为“BookInfo”的数据对象book**
<action type=″browser:BrowserDataExtraction″
target=″book.Name″>
<position>/body/...</position>
</action>
**从网页指定的位置提取数据,保存到book.Name中**
<action type=″browser:BrowserDataExtraction″
target=“book.ISBN″>
<position></position>
</action>
**从网页指定的位置提取ISBN内容,保存到book.ISBN中**
<action type=″browser:BrowserDataExtraction″
target=“book.Description″>
<position></position>
</action>
**提取并保存网页上的Description内容**
</process>
</basic:TaskModel>
下面对上面的程序例作简单介绍。首先,打开网站1的指定网页http://www.examplewebsite1.com。需要指出的是,该网页可以是网站1的首页,也可以网站1的其它网页。
用户可以与网页进行交互。例如,在网页上指定的位置输入内容(″browser:Browser Input″)。所属技术领域的技术人员应当了解,此时输入的位置由position中的XPath指定,输入的内容由<text>指定,例如在本例中,输入的内容“BookName”表示书籍类别的信息,表示想了解该类书籍的信息,指示网站1在一个网页(例如图1A所示的网页)上显示一系列书本名称及其对应的ISBN和简介。于是用户浏览器上显示该类书籍的一个书名列表,供用户浏览。
如果用户看到感兴趣的书本,则在网页上指定的位置点击鼠标,其中,该位置由<position>参数中的XPath指定。例如用户可以直接点击图1A中的书名“Learning Java Programming Step By Step”,表示选择该书名。
所属技术领域的技术人员理解,可以有各种方式,向用户提示web网页上所显示的数据或信息供用户先选择。后文将结合对图2A、2B和2C的描述,说明可以通过在用户的鼠标移动到书名上时,显示菜单选项,明确地提示用户进行选择。
任务Task1响应用户的点击,创建一个类型为“BookInfo”的数据对象book,按照预先的定义,BookInfo类型的数据对象包括三个数据项:书名(Name)、国际标准图书编号(ISBN)和简介(Description),将数据类型定义保存起来。
按照本发明的一个实施例,可以将数据类型定义保存在一个上下文管理器中,这将在后文作进一步说明。
Task1从网页指定的位置提取书名“Learning Java ProgrammingStep By Step”,将其保存到数据实例book.Name中并存储起来。
类似地,当用户点击网页上的ISBN的内容“1234567891011”时,网页上显示的ISBN的内容“1234567891011”被自动提取并保存到数据实例book.ISBN中并存储起来;当用户点击网页上的Description的内容时,该内容被提取并保存到book.Description中并存储起来。同样,可以用不同的方式向用户提示选择网页上所显示的ISBN的内容和Description的内容。
所属技术领域的技术人员应当理解,书名、ISBN和简介在网页中的位置,由position中的XPath指定。以上对网页上书名、ISBN和简介的内容的提取和保存,都是自动执行的。
按照本发明的一个实施例,所提取的网页上显示的内容,被保存保存上下文管理器中,这将在后文作进一步说明。。
按照本发明的一个实施例,整合应用在第一任务Task1之后,紧接着执行第二任务Task2。下面是表示第二任务Task2的程序示例。
<basic:TaskModel>
<process type=″logic:Sequence″>
<action type=″browser:BrowserOpen″
ur1=″http://www.examplewebsite2.com″/>
**打开指定网页**
<action type=″browser:BrowserInput″>
<position>
/body/div[2]/center/form/table/tbody/tr/td/input[1]
</position>
<text type=″basic:StaticObject″name=“book.Name″/>
</action>
**在网页指定的位置输入book.Name*
<action type=″browser:BrowserInput″>
<position>
/body/div[2]/center/form/table/tbody/tr/td/input[2]
</position>
<text type=″basic:StaticObject″name=“book.ISBN″/>
</action>
<action type=″browser:BrowserInput″>
<position>
/body/div[2]/center/form/table/tbody/tr/td/input[3]
</position>
<text type=″basic:StaticObject″name=
“book.Description″/>
</action>
<action type=″browser:BrowserClick″>
<position>
/body/div[2]/center/form/table/tbody/tr/td/input[4]
</position>
</action>
**在网页指定的位置点击提交**
<action type=″browser:BrowserClip″target=“InputResults″>
<position>/body/div[3]</position>
</action>
</process>
</basic:TaskModel>
首先,TAKS2打开网站2的指定网页(http://www.examplewebsite2.com)。然后,TAKS2自动在网页上指定的位置输入或填充书名的内容(″browser:BrowserInput″)其中,输入的位置由position中的XPath指定,输入的内容由<text>指定,这里是book.name,即在执行第一任务Task1时所保存和存储的book.name。
然后,以同样的方式在网页上指定的位置输入国际标准图书编号的内容book.ISBN,在网页上指定的位置输入简介的内容book.Description。
需要指出的是,本发明并不限于以上述方式自动填充书名等内容,而是可以有更多的其它方式。后文在说明图2C所示实施例时,将表明还可以通过在不同的输入域上显示菜单,供用户选择,在用户点击菜单选项后自动地在相应的输入域填充菜单选项所对应的内容。
在书名、ISBN和简介的内容被填充到网页上的相应位置后,用户在网页上指定的位置点击鼠标,例如点击图1B(或图2C)中所示网页上的<submit>按钮,表示提交所填充或输入的数据。响应用户的点击,将book.Name、book.ISBN、book.Description的内容自动录入到目录系统中。
在录入book.Name、book.ISBN、book.Description后,用户可以进一步与网站2互动,由网站2创建目录并显示结果。至于网站2如何利用自动录入的书本信息来创建书本目录,这不在本发明讨论的范围之内,在此不作赘述。
由上可见,上述整合应用顺序执行第一任务Task1和第二任务Task2,第一任务Task1自动输出和保存第一Web应用(网站1)的网页上的内容book.Name、book.ISBN、book.Description,第二任务Task2在第二Web应用(网站2)的网页上指定的位置自动填充所保存的book.Name、book.ISBN、book.Description。
在相同的发明构思下,本发明还提出一种用于整合多个web应用的Web应用集成器。
图4表示本发明的一种体系结构,其核心是一个Web应用集成器。Web应用集成器接收执行整合应用的请求,通过任务引擎,按照整合应用中所规定的顺序,执行整合应用中所包含的涉及不同web应用的任务。
如图所示,Web应用集成器包含上下文管理器和任务引擎。
上下文管理器用于存储来自Web应用的网页上的数据。
任务引擎包含以下部件:指令解释器;浏览器模拟器;数据提取器;数据填充器。
指令解释器,用于解释整合应用的任务中的指令,根据指令的
不同功能,将指令交由不同部件去处理。
浏览器模拟器,用于在浏览器上显示Web应用的网页。
数据提取器,用于从一个网页中抽取数据,将所抽取的数据放入一个目标中。
按照本发明的一个实施例,数据提取器可以从Web应用的网页上提取数据,作为数据对象实例放入上下文管理器,供由其它Web应用使用。
数据填充器,用于从一个源获得数据,将所获得的数据填充到Web应用的网页上的一个位置。
按照本发明的一个实施例,数据填充器可以从上下文管理器中取得作为一个共享数据的数据对象实例。
如上所述,Web应用集成器接收执行整合应用的请求,通过任务引擎,按照整合应用中所规定的顺序,执行整合应用中所包含的涉及不同web应用的任务。在执行任务时,Web应用集成器通过上下文管理器,存储一个Web应用的网页上的数据,以及在另一个Web应用的网页上应用所存储的数据。
以下结合上文所例示的任务Task1和Task2,说明Web应用集成器的部件的功能。
首先看Task1,对于指令<actiontype=″browser:BrowserOpen″....../>,指令解释器判定该指令是要在浏览器上显示网页,于是将该指令交由浏览器模拟器去处理。
浏览器模拟器根据该指令中的统一资源定位器url(例如http://www.examplewebsite1.com),在用户的显示器上显示相应的网页。
当指令解释器遇到一个提取(Extraction)指令时,将提取指令交由数据提取器。例如,对于Task1中的指令
<action type=″browser:BrowserDataExtraction″ target=″
book.Name″>
<position>/body/...</position>
</action>
数据提取器从网页上由<position>指定的位置提取数据,保存到book.Name中。按照本发明的一个实施例,数据提取器将book.Name作为数据对象实例放入上下文管理器中,该对象实例将作为共享数据,被其它Web应用共享。
当指令解释器遇到一个输入(Input)指令时,将输入指令交由数据填充器。例如,对于Task2中的指令
<action type=″browser:BrowserInput″>
<position>
/body/div[2]/center/form/table/tbody/tr/td/input[1]
</position>
<text type=″basic:StaticObject″name=“book.Name″/>
</action>
按照本发明的一个实施例,数据填充器从上下文管理器中获得数据book.Name,将其填充到网页上的由参数position指定的位置。
通过使用本发明的Web应用集成器来执行整合应用的请求,可以容易地实现本发明的整合多个Web应用的方法。
在执行整合应用之前,要生成用于完成特定功能的整合应用。上文所述实施例中包括两个任务Task1和Task2,然而在实践中整合应用完全可以包括更多的任务。整合应用的程序可以通过手工编程生成,也可以利用专门工具,通过用户演示而自动生成。对于本领域的普通技术人员而言,这属于现有技术的范畴,在此不作赘述。
按照本发明的一个实施例,在生成整合应用时,可以定义要在不同Web应用之间共享的数据对象。例如在生成上文所述实施例的第一任务Task1和第二任务Task2时,也定义了一个类型为“BookInfo”的数据对象book,该数据对象book有三个数据项book.Name、book.ISBN和book.description。该定义被存储在上下文管理器中。
按照本发明的一个实施例,上下文管理器还可以管理数据对象的共享范围,例如通过一个指示来标明Task1的第一Web应用输出的数据对象book的三个数据项可以被Task2的第二Web应用共享。
下面以上文关于图1A和1B所述的特定任务为例,结合图2A、2B和2C,说明根据本发明方法来运行一个整合应用、通过网站1和网站2录入书本目录信息的过程的一个实施例。
整合应用运行时,首先访问网站1。用户以与上文结合图1所述的相同方式,使用户浏览器上显示一个如图1A所示的网页,网页上显示一个书本的目录信息Title“Learning Java Programming Stepby Step”、ISBN“1234567891011”和Description。
用户用鼠标选中网页上显示的书名“Learning Java ProgrammingStep By Step”,点击鼠标右键,则图1A所示的网页,变成图2A所示的那样,该网页与图1A所示的网页所显示的内容相同,只是多出一个弹出式菜单。该菜单提示用户可以提取和存储在网页上显示的书名内容“Learning Java Programming Step By Step”,并将其存储起来。
用户在图2A所示的网页上,点击菜单选项<Extract textto>/<book>/<Name>,则书名“Learning Java Programming Step By Step”被从网页上提取并自动地保存起来。
接着,用户以类似的方式对网页上显示的ISBN内容进行操作(如图2B所示),则ISBN“1234567891011”被从网页上提取并自动地保存起来;接着,以类似的方式对网页上显示的Description内容进行操作,则Description内容被从网页上提取并自动地保存起来(图中未予示出)。
然后,整合应用打开网站2,网站2提供如图1B所示的网页作为书本信息录入界面,包括Book Title(书名)、ISBN和Description(简介)三个输入域。
当用户选择输入域Book Title,点击鼠标右键时,如图1B所示的网页变成如图2C所示的那样,即网页上弹出一个菜单。该菜单允许用户选择已经存储的数据作为该输入域的输入。
用户点击菜单选项<Input text from>/<book>/<Name:...>,则在访问网站1的网页时所存储的书名内容“Learning Java Programming StepBy Step”,被填充或输入到输入域Book Title。
用户以类似的方式,将在访问网站1的网页时所存储的ISBN内容和Description内容,分别输入到输入域ISBN和输入域Description。
输入完成后,点击<submit>(提交)按钮,所输入的数据将被保存网站2上,供作进一步处理,例如编排书本目录。
以上实施例中,通过显示菜单选项,提示用户进行选择。所属技术领域的技术人员理解,可以有各种其他方式用于在web网页上提示用户进行选择。例如,可以在可供选择的网页上的数据旁边加上选择框,用户点击该框即表示选择对应的数据,如此等等。
从上述过程中可以看出,按照本发明,来自不同web网站(例如网站1,网站2)的不同网页流被重新混合,共享数据,形成一个新的整合应用,执行该整合应用能够实现新的特定功能,而又无须对已有的web网站或Web应用的服务作任何改变。
本发明在整合应用包含更多的web应用时,或者在需要从整合应用包含的web应用中抽取大量的网页数据时,效果尤为显著。
应当注意,为了使本发明更容易理解,说明书附图和上文的描述省略了对于本发明的实现可能是必需的、而对本领域的技术人员来说则是公知的一些技术细节。
还应当注意,说明书中对具体实施例的描述,是为了说明本发明的原理,这种描述不是穷举性的,不应理解为是对本发明的形式的限制。对本领域的普通技术人员而言,在具体实施例基础上的许多修改和变更都是显而易见的,因而属于本发明的一部分。
例如,在前文所述的实施例中,整合应用只包含对两个Web应用的调用,然而,这个整合应用实施例仅仅是示例性的,对本领域的普通技术人员而言,完全可以实现在整合应用中包含更多Web应用的实施方式。当有多个web应用时,上下文管理器根据预先定义,将来自作为数据源的web应用的网页的数据标识为可被作为数据目标的web应用共享。
又例如,尽管在对上述实施例的描述中,在从作为数据源的第一web应用的一个网页上抽取并存储网页数据后,就调用作为数据目标的第二web应用,但是,完全可以先访问第一web应用的多个不同网页并输出网页数据,然后再调用第二web应用。
本领域的普通技术人员根据说明书的实施例的描述,在现有技术的基础上不难实现这些或其它替代或扩展方式,它们也应属于本发明的一部分。
因此,选择并描述实施方式是为了更好地解释本发明的原理及其实际应用,并使本领域普通技术人员明白,在不脱离本发明实质的前提下,所有修改和变更均落入由权利要求所限定的本发明的保护范围之内。