專(zhuān)利名稱(chēng)::包裝器的生成方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及一種Web頁(yè)面的包裝器的生成方法。
背景技術(shù):
:Internet已經(jīng)有20多年的歷史了,近幾年才出現(xiàn)了Internet熱,這主要應(yīng)歸功于Web。Internet提供了世界范圍內(nèi)網(wǎng)絡(luò)互連和通信功能,Web則是一個(gè)環(huán)球信息資源庫(kù)。Web由無(wú)數(shù)的頁(yè)面(Homepage主頁(yè))組成,頁(yè)面上的信息包羅萬(wàn)象,而且時(shí)時(shí)在增加,天天在更新。用戶(hù)只要打開(kāi)瀏覽器就能得到他們感興趣的資料。Web的易用性使千家萬(wàn)戶(hù)都能共享Internet上巨大的信息資源。時(shí)下,人人都在談?wù)揥eb和主頁(yè),翻開(kāi)報(bào)紙或新聞雜志,幾乎每天都要提到Web和主頁(yè)。從一個(gè)小商店到一個(gè)大公司,從研究機(jī)關(guān)到學(xué)校,無(wú)不驕傲地向他人顯示著自己的主頁(yè)和Web地址。Web和主頁(yè)已經(jīng)成為計(jì)算機(jī)和通信領(lǐng)域乃至全社會(huì)的熱點(diǎn)。由于Web上的數(shù)據(jù)絕大多數(shù)是通過(guò)HTML語(yǔ)言來(lái)展現(xiàn)的。HTML語(yǔ)言的特點(diǎn)就是任何組織或個(gè)人都可以很容易地在Web上發(fā)布內(nèi)容多樣、形式各異的信息,結(jié)果使得Web上的數(shù)據(jù)處于雜亂無(wú)序的狀態(tài),數(shù)據(jù)集成性非常差,給Web應(yīng)用的建立造成了極大的困難。下面對(duì)HTML及XML作以簡(jiǎn)單介紹。HTML來(lái)自StandardGeneralizedMarkupLanguage,即標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言,簡(jiǎn)稱(chēng)SGML。早在Web未發(fā)明之前,SGML就早已存在。正如它的名稱(chēng)所言,SGML是一種用標(biāo)記來(lái)描述文檔資料的通用語(yǔ)言,它包含了一系列的文檔類(lèi)型定義(簡(jiǎn)稱(chēng)DTD),DTD中定義了標(biāo)記的含義,因而SGML的語(yǔ)法是可以擴(kuò)展的。由于SGML十分龐大,既不容易學(xué),又不容易使用,在計(jì)算機(jī)上實(shí)現(xiàn)也十分困難。鑒于這些因素,Web的發(fā)明者——?dú)W洲核子物理研究中心的研究人員根據(jù)當(dāng)時(shí)(1989年)計(jì)算機(jī)技術(shù)的能力,提出了HTML語(yǔ)言。HTML只使用SGML中很小一部分標(biāo)記,例如HTML3.2定義了70種標(biāo)記。為了便于在計(jì)算機(jī)上實(shí)現(xiàn),HTML規(guī)定的標(biāo)記是固定的,即HTML語(yǔ)法是不可擴(kuò)展的,它不需包含DTD。HTML這種固定的語(yǔ)法使它易學(xué)易用,在計(jì)算機(jī)上開(kāi)發(fā)HTML的瀏覽器也十分容易。HTML是Web顯示數(shù)據(jù)的通用方法HTML著重描述Web頁(yè)面的顯示格式。XML同HTML一樣,都來(lái)自SGML。XML是一個(gè)精簡(jiǎn)的SGML,它將SGML的豐富功能與HTML的易用性結(jié)合到Web的應(yīng)用中。XML保留了SGML的可擴(kuò)展功能,這使XML從根本上有別于HTML。XML要比HTML強(qiáng)大得多,它不再是固定的標(biāo)記,而是允許定義數(shù)量不限的標(biāo)記來(lái)描述文檔中的資料,允許嵌套的信息結(jié)構(gòu)。HTML只是Web顯示數(shù)據(jù)的通用方法,而XML提供了一個(gè)直接處理Web數(shù)據(jù)的通用方法。HTML著重描述Web頁(yè)面的顯示格式,而XML著重描述的是Web頁(yè)面的內(nèi)容。模式文件通過(guò)一系列可嵌套的合法單元定義了合法的XML文件的結(jié)構(gòu)。這樣使得XML文件本身具有了結(jié)構(gòu)化的部分特征,也使得計(jì)算機(jī)程序可以進(jìn)行處理,而不是像HTML一樣無(wú)法直接被計(jì)算機(jī)程序處理。從實(shí)例中也可以看出XML頁(yè)面信息是帶有結(jié)構(gòu)化信息的,有些與數(shù)據(jù)庫(kù)結(jié)構(gòu)類(lèi)似,因而更具訪(fǎng)問(wèn)性,其檢索結(jié)果更有針對(duì)性、更準(zhǔn)確。并且,XML精簡(jiǎn)了一大片SGML難得用一次的功能。正如幾十萬(wàn)漢字中常用的只不過(guò)八千,SGML常用的部分只占20%,XML拋棄了SGML中不常用的部分,使它一下就精簡(jiǎn)了80%??傊?,XML使用一個(gè)簡(jiǎn)單而有靈活的標(biāo)準(zhǔn)格式,為基于Web的應(yīng)用提供了一個(gè)描述數(shù)據(jù)和交換數(shù)據(jù)的有效手段。HTML描述了顯示全球數(shù)據(jù)的通用方法,而XML提供了直接處理全球數(shù)據(jù)的通用方法。由于HTML自身的特點(diǎn),就產(chǎn)生了Web包裝器。包裝器的任務(wù)就是負(fù)責(zé)將HTML格式(具有固定標(biāo)記)的數(shù)據(jù)抽取并轉(zhuǎn)化為具體結(jié)構(gòu)化的數(shù)據(jù)。包裝器是Web數(shù)據(jù)集成系統(tǒng)的重要組成部分之一。另外,由于Web的動(dòng)態(tài)性和不穩(wěn)定性,使得Web上的HTML文檔經(jīng)常發(fā)生各種改變,比如頁(yè)面結(jié)構(gòu)上發(fā)生了變化等。面對(duì)內(nèi)容龐雜、動(dòng)態(tài)變化的Web信息資源,人們很可能身陷信息的海洋而無(wú)所適從。獨(dú)立的各個(gè)企業(yè)或組織的應(yīng)用程序需要轉(zhuǎn)變?yōu)檫m應(yīng)Web的應(yīng)用(Web-EnabledApplications),諸如數(shù)字圖書(shū)館、電子商務(wù)、企業(yè)的門(mén)戶(hù)等等,Web應(yīng)用越來(lái)越多。舉例來(lái)說(shuō),某一用戶(hù)想要去紐約出差,想要了解當(dāng)?shù)芈玫甑膬r(jià)格狀況,從而找出最適合自己的旅店。那么要做的是登錄紐約各個(gè)旅館的網(wǎng)站并查詢(xún)價(jià)格及各方面服務(wù)的情況。對(duì)于眾多的網(wǎng)站,用戶(hù)要一一瀏覽并查詢(xún),而且要將查詢(xún)結(jié)果記下來(lái)以和其他結(jié)果相互比較。再例如,用戶(hù)關(guān)心各個(gè)影院的電影放映情況,同時(shí)又想要了解劇情及其演員導(dǎo)演等介紹情況。這樣就需要登錄各個(gè)網(wǎng)站去找電影放映信息,然后再去IMDB(http//www.imdb.com/)查找劇情、演員和導(dǎo)演的狀況。顯然,這種方法非常的麻煩。解決辦法之一是對(duì)上述所需的數(shù)據(jù)進(jìn)行集成。數(shù)據(jù)集成系統(tǒng)用于支持訪(fǎng)問(wèn)多個(gè)Web數(shù)據(jù)源的應(yīng)用,它將各個(gè)Web數(shù)據(jù)源的數(shù)據(jù)集成起來(lái),為用戶(hù)提供統(tǒng)一的查詢(xún)接口。開(kāi)發(fā)Web應(yīng)用系統(tǒng)首先要進(jìn)行Web數(shù)據(jù)源的集成。而通常的兩種數(shù)據(jù)集成的模式數(shù)據(jù)倉(cāng)庫(kù)模式、中間層模式都需要用到數(shù)據(jù)抽取這一步工作,也就是說(shuō)如何從Web上取得數(shù)據(jù)用于進(jìn)一步的操作,這正是包裝器所需要解決的問(wèn)題。Web數(shù)據(jù)的利用一直以來(lái)都是很重要但同時(shí)有很困難問(wèn)題。其中的關(guān)鍵在于Web數(shù)據(jù)的多樣性、復(fù)雜性、半結(jié)構(gòu)化以及不穩(wěn)定性。多樣性體現(xiàn)在Web數(shù)據(jù)幾乎覆蓋了所有領(lǐng)域各個(gè)方面,同時(shí)各領(lǐng)域的數(shù)據(jù)通常具有極大的差別,無(wú)論在形式上還是在內(nèi)容上;復(fù)雜性則是體現(xiàn)在兩個(gè)方面1、內(nèi)容即使是同一領(lǐng)域內(nèi)的數(shù)據(jù),也存在大量的不同,比如在數(shù)據(jù)表達(dá)方式上的不同,同名異義、異名同義等語(yǔ)義上的不同;2、形式由于Web數(shù)據(jù)通常通過(guò)HTML來(lái)表現(xiàn),但是由于構(gòu)造HTML文檔的極大的隨意性,使得Web上的HTML文檔極其復(fù)雜。半結(jié)構(gòu)化體現(xiàn)在HTML與XML最大的區(qū)別在于語(yǔ)義性。由于HTML本身缺乏語(yǔ)義信息,使得應(yīng)用程序很難利用Web上的數(shù)據(jù)。而且Web上的數(shù)據(jù)本身就具有極大的不穩(wěn)定性,無(wú)論是內(nèi)容、形式還是結(jié)構(gòu)。例如內(nèi)容上體現(xiàn)為對(duì)數(shù)據(jù)的更新、修改、刪除等等;形式上表現(xiàn)為網(wǎng)頁(yè)結(jié)構(gòu)的重新調(diào)整等;結(jié)構(gòu)上表現(xiàn)為可能出現(xiàn)新的網(wǎng)頁(yè),或者原有的內(nèi)容或者結(jié)構(gòu)被刪除等等。包裝器的目的在于能夠?qū)eb上的數(shù)據(jù),特別是HTML數(shù)據(jù),包裝成具有語(yǔ)義信息的XML數(shù)據(jù)或者關(guān)系數(shù)據(jù)。從數(shù)據(jù)意義上來(lái)說(shuō),包裝器所起到的作用是屏蔽了Web應(yīng)用程序和Web頁(yè)面中包含的數(shù)據(jù)的直接關(guān)系。使得應(yīng)用程序能夠以統(tǒng)一的形式來(lái)訪(fǎng)問(wèn)所需要的數(shù)據(jù)。從包裝器角度來(lái)說(shuō),包裝器需要在考慮語(yǔ)義的前提下將HTML文檔中的Web數(shù)據(jù)轉(zhuǎn)換成相關(guān)XML或者關(guān)系數(shù)據(jù)。如圖1所示。目前,常用的包裝器的生成方法主要分為三類(lèi)包裝器程序語(yǔ)言方法,機(jī)器學(xué)習(xí)方法,受指導(dǎo)的交互式包裝器生成方法。下面簡(jiǎn)單介紹之。包裝器程序語(yǔ)言方法中,包裝器是用手工的方法編寫(xiě)程序來(lái)實(shí)現(xiàn)的,其抽取過(guò)程是基于過(guò)程化的程序,但是,抽取結(jié)果依賴(lài)于文檔的結(jié)構(gòu)。通常,所有手工的包裝器生成方法對(duì)生手來(lái)說(shuō)都很難使用,因?yàn)槭止ぞ帉?xiě)包裝器需要有極強(qiáng)的計(jì)算機(jī)背景,并且非常了解HTML知識(shí)和包裝器的工作,這大大限制了其推廣,不利于傳播。機(jī)器學(xué)習(xí)的方法是通過(guò)機(jī)器學(xué)習(xí)的方式來(lái)生成包裝器。該方法需要從大量的Web頁(yè)面中的正例和反例中學(xué)習(xí)。機(jī)器學(xué)習(xí)方法的弊端在于包裝器表達(dá)能力有限,而且需要大量的例子頁(yè)面,因此生成包裝器的過(guò)程一般都極其繁瑣。受指導(dǎo)的交互式包裝器生成方法是采用一種更友好的交互方式生成包裝器。其模式定義表達(dá)能力較強(qiáng),并且用戶(hù)不必了解HTML的細(xì)節(jié)和包裝器的知識(shí)即可對(duì)其隨便使用。近年來(lái)發(fā)展較快,但由于技術(shù)的不成熟,沒(méi)有統(tǒng)一的較理想的包裝器。
發(fā)明內(nèi)容針對(duì)上述現(xiàn)有包裝器的問(wèn)題和不足之處,本發(fā)明提出了一種可根據(jù)用戶(hù)目的或者興趣導(dǎo)向等抽取網(wǎng)頁(yè)中的數(shù)據(jù)并可轉(zhuǎn)化成結(jié)構(gòu)化的或者半結(jié)構(gòu)化的有語(yǔ)義的XML數(shù)據(jù)的包裝器的生成方法。本發(fā)明是這樣實(shí)現(xiàn)的一種包裝器的生成方法,包括以下步驟(1)將Web的HTML文檔格式通過(guò)XMLDOM接口解析為HTML樹(shù)結(jié)構(gòu);(2)使用DTD去匹配HTML文檔中具體實(shí)例,計(jì)算出其所有匹配關(guān)系;(3)對(duì)于步驟(2)中得到的匹配關(guān)系,得出一條能夠覆蓋所有HTML文檔中對(duì)應(yīng)實(shí)例的路徑,并搜索該路徑所表示的HTML樹(shù)中的子樹(shù)是否具有相似地位的子樹(shù),如果存在,則用能夠覆蓋所有這些相似的子樹(shù)的路徑來(lái)代替該初始的路徑;(4)以步驟(3)中得到的路徑為基礎(chǔ)生成相應(yīng)的信息抽取規(guī)則;(5)利用步驟(4)中得到的抽取規(guī)則在其他Web的HTML文檔中抽取需要的數(shù)據(jù),若所述其他HTML文檔與前述結(jié)構(gòu)有差別,則重新生成抽取規(guī)則;(6)對(duì)所有的抽取規(guī)則合并,生成能夠包含上述所有抽取規(guī)則所有情況的綜合的抽取規(guī)則;(7)將步驟(6)中得到的抽取規(guī)則導(dǎo)出,以使該抽取規(guī)則可單獨(dú)應(yīng)用,即生成了所述包裝器。優(yōu)選地,所述DTD匹配HTML文檔具體的匹配關(guān)系包括datavalue、HTMLpath和schemapath。優(yōu)選地,所述Web的HTML文檔為多個(gè)。優(yōu)選地,所述步驟(3)還包括,若模式樹(shù)中具有子節(jié)點(diǎn),則重復(fù)利用步驟(3)對(duì)其進(jìn)行操作,直到所有的子節(jié)點(diǎn)均處理完畢。優(yōu)選地,所述步驟(5)重新生成抽取規(guī)則即是通過(guò)學(xué)習(xí)對(duì)抽取規(guī)則進(jìn)行動(dòng)態(tài)維護(hù)。優(yōu)選地,所述抽取規(guī)則具體為標(biāo)準(zhǔn)的XQuery表達(dá)式。優(yōu)選地,所述DTD具體為一個(gè)或多個(gè)XML文件的模板,DTD中定義了XML文件中的元素、元素的屬性、元素的排列方式/順序、元素能夠包含的內(nèi)容。優(yōu)選地,所述抽取規(guī)則具體為根據(jù)HTML樹(shù)的結(jié)構(gòu)特征及其相應(yīng)有限的標(biāo)識(shí)提取對(duì)應(yīng)的數(shù)據(jù)。優(yōu)選地,所述步驟(1)中對(duì)HTML文檔解析時(shí),對(duì)HTML文檔本身固有的問(wèn)題(比如格式不正確,HTML標(biāo)簽不匹配)同時(shí)進(jìn)行修正。本發(fā)明提供了一種模式導(dǎo)航的包裝器生成系統(tǒng)。該系統(tǒng)能夠通過(guò)與用戶(hù)交互半自動(dòng)地生成包裝器,該包裝器可以從HTML文檔抽取數(shù)據(jù)并轉(zhuǎn)換為滿(mǎn)足用戶(hù)定義模式的XML文檔。系統(tǒng)和用戶(hù)之間的交互主要通過(guò)選擇的例子頁(yè)面來(lái)建立模式中的成員和HTML頁(yè)面中的數(shù)據(jù)項(xiàng)之間的對(duì)應(yīng)關(guān)系,之后系統(tǒng)可以自動(dòng)根據(jù)用戶(hù)所標(biāo)記的例子片段自動(dòng)的推導(dǎo)出抽取規(guī)則,并可將該抽取規(guī)則單獨(dú)輸出,以用于之后從該類(lèi)頁(yè)面上抽取所需要的數(shù)據(jù)。本發(fā)明可依使用者喜好彈性選取網(wǎng)頁(yè)內(nèi)容以滿(mǎn)足Web信息系統(tǒng)以及個(gè)性化的對(duì)于Web數(shù)據(jù)的需求,突破了現(xiàn)有瀏覽器(比如IE,Mozilla等)的無(wú)法直接提供結(jié)構(gòu)化的數(shù)據(jù)的限制,也為獲取和有效利用Web上的數(shù)據(jù)提供了一種新的手段。本發(fā)明提供了用于生成包裝器的一個(gè)可行的技術(shù)和流程,為獲取和有效利用Web網(wǎng)頁(yè)上的數(shù)據(jù)提供了一種新的實(shí)現(xiàn)方法。本發(fā)明具有強(qiáng)大的模式定義表達(dá)能力,用戶(hù)不必了解HTML的細(xì)節(jié)和包裝器的知識(shí)即可對(duì)其直接使用。本發(fā)明降低了網(wǎng)頁(yè)數(shù)據(jù)抽取的難度,使用者可以通過(guò)圖形界面上的簡(jiǎn)單的拖拉操作即可建立一個(gè)健壯的包裝器用于從網(wǎng)頁(yè)中抽取數(shù)據(jù)。本發(fā)明提高了網(wǎng)頁(yè)數(shù)據(jù)抽取的正確度,使之能夠真正適用于企業(yè)等大型應(yīng)用。具體而言,本發(fā)明有以下優(yōu)點(diǎn)1、通過(guò)用戶(hù)提供的模式,可以更精確的定義用戶(hù)的需求,以及更好的描述頁(yè)面所包含的數(shù)據(jù)的語(yǔ)義信息。而且通過(guò)用戶(hù)給予的模式,本發(fā)明可能處理更復(fù)雜的內(nèi)容表達(dá)形式;2、本發(fā)明所有的匹配關(guān)系以及抽取規(guī)則中用到的路徑表達(dá)式都使用標(biāo)準(zhǔn)XPath表示,這使得系統(tǒng)具有了極好的標(biāo)準(zhǔn)性、可擴(kuò)展性以及靈活性;3、本發(fā)明采用了抽取規(guī)則和最終形成的包裝器文件分開(kāi)的策略,使得生成的包裝器能夠非常容易的被包含進(jìn)其他的應(yīng)用程序中,特別是Web應(yīng)用系統(tǒng)中。本發(fā)明給出了一套實(shí)用、簡(jiǎn)潔并且有效的用于Web頁(yè)面數(shù)據(jù)抽取的技術(shù)流程,這套系統(tǒng)方法也很容易和企業(yè)的Web信息系統(tǒng)結(jié)合起來(lái);比如用于建立價(jià)格對(duì)比信息系統(tǒng),從多個(gè)電子商務(wù)網(wǎng)站中找出某一商品的最低價(jià)格的服務(wù)等。降低了建立這些查找系統(tǒng)的成本,從而帶來(lái)經(jīng)濟(jì)上更好的效益。下面結(jié)合附圖對(duì)本發(fā)明作出詳細(xì)說(shuō)明。圖1為現(xiàn)有包裝器的應(yīng)用流程示意圖;圖2為本發(fā)明的總體流程示意圖;圖3為本發(fā)明的詳細(xì)流程示意圖;圖4為本發(fā)明應(yīng)用示意圖。具體實(shí)施例方式為了更容易理解本發(fā)明,現(xiàn)將相關(guān)概念進(jìn)行說(shuō)明。包裝器即是能夠?qū)虢Y(jié)構(gòu)的或者無(wú)結(jié)構(gòu)的數(shù)據(jù)源中的數(shù)據(jù)包裝成結(jié)構(gòu)化的或者有模式的半結(jié)構(gòu)化的數(shù)據(jù)。對(duì)于Web包裝器來(lái)說(shuō),則是將半結(jié)構(gòu)化無(wú)模式的HTML頁(yè)面中的數(shù)據(jù)抽取出來(lái)得到有模式的半結(jié)構(gòu)化的XML數(shù)據(jù)。模式(Schema)指定了可以在文檔中存在的元素、元素可以具有的屬性、數(shù)據(jù)類(lèi)型,在元素內(nèi)部元素的層次結(jié)構(gòu)以及元素在整個(gè)文檔中出現(xiàn)的順序。它能夠?qū)?biāo)記編制文檔,加強(qiáng)標(biāo)記參數(shù)內(nèi)部的一致性以及使XML語(yǔ)法分析器能夠確認(rèn)文檔。在本發(fā)明中,用DTD來(lái)描述用戶(hù)所要抽取的網(wǎng)頁(yè)中的數(shù)據(jù)以及最終從包裝器中得到的結(jié)果XML文檔的格式。Schema文檔本身也是XML文檔,而不是像DTD一樣使用自成一體的語(yǔ)法。這就方便了用戶(hù)和開(kāi)發(fā)者,因?yàn)榭梢允褂孟嗤墓ぞ邅?lái)處理XMLSchema和其他XML信息,而不必專(zhuān)門(mén)為Schema使用特殊工具。Schema簡(jiǎn)單易懂,懂得XML語(yǔ)法、規(guī)則的人都可以立刻理解它。DTD實(shí)際上可以看作一個(gè)或多個(gè)XML文件的模板,這些XML文件中的元素、元素的屬性、元素的排列方式/順序、元素能夠包含的內(nèi)容等,都必須符合DTD中的定義。XML文件中的元素,即所創(chuàng)建的標(biāo)記,是根據(jù)應(yīng)用的實(shí)際情況來(lái)創(chuàng)建的。想要?jiǎng)?chuàng)建一份完整性高、適應(yīng)性廣的DTD是非常困難的,因?yàn)楦餍懈鳂I(yè)都有他們自己的行業(yè)特點(diǎn),所以DTD通常是以某種應(yīng)用領(lǐng)域?yàn)槎x的范圍,如醫(yī)學(xué)、建筑、工商、行政。DTD定義的元素含蓋范圍越廣泛,那么就越復(fù)雜。HTML樹(shù)HTML文檔可以通過(guò)XML解析器解析成具有樹(shù)形結(jié)構(gòu)的DOM模型,DOM模型具有樹(shù)形結(jié)構(gòu)特征,其中HTML文檔中的每一對(duì)標(biāo)記(tag)對(duì)在DOM樹(shù)中對(duì)應(yīng)于一個(gè)節(jié)點(diǎn)。DOM樹(shù)即HTML樹(shù)。抽取規(guī)則用于從HTML文檔中定位相關(guān)需要抽取的信息。抽取規(guī)則同時(shí)也是包裝器的基礎(chǔ),它規(guī)定了HTML文檔中哪些節(jié)點(diǎn)需要抽取出來(lái),并且如何抽取,比如有的可能只需要抽取一個(gè)節(jié)點(diǎn)的值的一部分。Xpath,一種針對(duì)XML的查詢(xún)語(yǔ)言,用于定位XML文檔中的部分內(nèi)容,操作字符串,操作數(shù)字,操作布爾數(shù)和匹配XML文檔中的一組節(jié)點(diǎn)(Nodes)。XPath表達(dá)式的輸出結(jié)果可以是以下四種對(duì)象中的一種,即節(jié)點(diǎn)集(NodeSet)、布爾值、數(shù)字和字符串。在本發(fā)明中,因?yàn)橐呀?jīng)將HTML文檔解析成為DOM模型,因此用戶(hù)所要抽取的每個(gè)數(shù)據(jù)項(xiàng)都有一條基于XPath的抽取規(guī)則用于表示該數(shù)據(jù)項(xiàng)在HTML文檔中的位置。XPath表達(dá)式的簡(jiǎn)單例子/authors/author[@period=″classical″]含義是在根節(jié)點(diǎn)為“authors”的XML文檔中,查詢(xún)period屬性(attribute)值為classical的author元素(element)。Xquery,XML文檔本質(zhì)上講就是一個(gè)以順序和層次為主要結(jié)構(gòu)單元的輪廓。XQuery正是基于XML的這種結(jié)構(gòu)的,它使用這種結(jié)構(gòu)來(lái)為同樣范圍內(nèi)的XML存儲(chǔ)的數(shù)據(jù)提供查詢(xún)能力。更為精確地說(shuō),XQuery是以XQuery1.0以及XPath2.0數(shù)據(jù)模型的形式定義的[XQ-DM],并將XML文檔的分析結(jié)構(gòu)描述為有序的、已做上標(biāo)記的樹(shù),樹(shù)上的每一個(gè)節(jié)點(diǎn)都有一個(gè)不同的身份并可能具有簡(jiǎn)單的或者復(fù)雜的類(lèi)型。XQuery能夠被用于對(duì)沒(méi)有任何模式(schema)的XML數(shù)據(jù)進(jìn)行查詢(xún),也可以對(duì)由WorldWideWebConsortium(W3C)XML模式或者由文件類(lèi)型定義(DTD)來(lái)管理的數(shù)據(jù)進(jìn)行查詢(xún)。需要注意的是XQuery所使用的數(shù)據(jù)模型與古典的關(guān)系模型截然不同,在XQuery沒(méi)有層的概念,順序在這里也不是很重要,并且不支持身份(Identity)。XQuery的每一個(gè)查詢(xún)都是一個(gè)待求值的表達(dá)式,并且表達(dá)式之間可以進(jìn)行非常靈活的組合來(lái)創(chuàng)建一個(gè)新的表達(dá)式。在本發(fā)明中,通過(guò)一個(gè)XQuery表達(dá)式來(lái)抽取一個(gè)頁(yè)面中所有需要抽取的數(shù)據(jù)(對(duì)應(yīng)于該頁(yè)面數(shù)據(jù)的模式),其中的每一個(gè)數(shù)據(jù)項(xiàng)分別對(duì)應(yīng)于一個(gè)子X(jué)Query查詢(xún)表達(dá)式。如圖2所示,本發(fā)明屬于模式導(dǎo)航的包裝器生成系統(tǒng)。本發(fā)明首先基于用戶(hù)預(yù)定義的模式,并將Web頁(yè)面的HTML文檔格式通過(guò)XMLDOM接口解析為HTML樹(shù)結(jié)構(gòu),并比較模式與HTML樹(shù)中的匹配關(guān)系,并生成抽取規(guī)則,并采用與用戶(hù)交互的方式最終通過(guò)包裝器生成器生成包裝器,該生成的包裝器可從該頁(yè)面中抽取數(shù)據(jù)并生成滿(mǎn)足模式定義的XML文檔。本發(fā)明的包裝器生成過(guò)程有學(xué)習(xí)的過(guò)程。為了抽取一個(gè)網(wǎng)頁(yè)中的數(shù)據(jù),用戶(hù)必須首先提供一個(gè)模式用于提供所需要抽取的語(yǔ)義信息,同時(shí)從包裝器輸出的XML文檔也將按照這個(gè)模式來(lái)構(gòu)造。如圖3所示,首先選擇網(wǎng)站,并選擇相應(yīng)的例子頁(yè)面,用戶(hù)提供相應(yīng)的數(shù)據(jù)模式。其中,在系統(tǒng)的內(nèi)部處理中,HTML文檔通過(guò)XMLDOM接口解析為HTML樹(shù)。在解析的同時(shí),HTML文檔本身固有的一些問(wèn)題也被修正。前面已經(jīng)提到的,HTML具有很大的隨意性,同時(shí)也不能夠嚴(yán)格遵守XML的標(biāo)準(zhǔn),比如HTML文檔中一個(gè)很普遍的現(xiàn)象就是標(biāo)記(tag)左右不匹配等。同時(shí)模式(在本發(fā)明中使用DTD)也被解釋為模式樹(shù)。XML文件中的元素,即所創(chuàng)建的標(biāo)記,是根據(jù)應(yīng)用的實(shí)際情況來(lái)創(chuàng)建的。在元素設(shè)置中,如果元素包含多個(gè)子元素,如<!ELEMENT書(shū)籍(名稱(chēng),作者,價(jià)格)>這種含多個(gè)子元素的聲明,那么“名稱(chēng)”、“作者”、“價(jià)格”這些標(biāo)記在XML文件中必須以上面排列的順序出現(xiàn),每個(gè)標(biāo)記必須而且只能夠出現(xiàn)一次。如果在設(shè)定元素時(shí),按照<!ELEMENT書(shū)籍ANY>,這樣在元素下就可以包含任意被設(shè)定過(guò)的元素,出現(xiàn)的次數(shù)和順序也不受限制,并且在該元素下,除了可以包含子元素以外,還能夠包含一般的文字。有時(shí)候,在XML文件中,一個(gè)標(biāo)記可能多次出現(xiàn)(或者不出現(xiàn)),那么除了在它們的父元素中用ANY關(guān)鍵字之外,還可以在元素的旁邊加上特定的符號(hào)來(lái)控制標(biāo)記出現(xiàn)的次數(shù)。可見(jiàn),XML具有相當(dāng)清晰的結(jié)構(gòu)。用戶(hù)在GUI上確定兩者的匹配關(guān)系之后,系統(tǒng)會(huì)自動(dòng)計(jì)算其匹配關(guān)系。一個(gè)匹配關(guān)系在本發(fā)明中表現(xiàn)為一個(gè)三元組,Mapping(datavalue,HTMLpath,schemapath)。其中datavalue表示用戶(hù)選取的這個(gè)模式成員的實(shí)例的值(在HTML樹(shù)中表現(xiàn)為一個(gè)或者多個(gè)textnode的值);HTMLpath表示這個(gè)(或者多個(gè))文本節(jié)點(diǎn)在HTML樹(shù)中的路徑,用于在HTML樹(shù)中定位該節(jié)點(diǎn);schemapath表示該模式成員在模式樹(shù)中從根到葉的路徑,用于在模式樹(shù)中定位該成員。下面顯示了一個(gè)匹配關(guān)系的例子。M4(D“DavidFlanagan”,HP.../td[3]/table/tr[5]/td/a/b[contains(/parent/parent/parent/preceding-sibling/nobr/b∷text(),“Author”)]/text();SPBookList/Book/Author);可以看出HP的表達(dá)表示完全符合XPath標(biāo)準(zhǔn),其中謂詞[contains(...)]則是標(biāo)示了注釋信息。需要注意,用戶(hù)通過(guò)GUI只能夠給出有限個(gè)例子。這一步的目的是能從通過(guò)用戶(hù)給出的例子得到的匹配關(guān)系中推導(dǎo)能夠覆蓋整個(gè)頁(yè)面中所有需要抽取的數(shù)據(jù)的抽取規(guī)則。大多數(shù)的包含大量數(shù)據(jù)的HTML頁(yè)面中(比如從搜索引擎得到的頁(yè)面),通常在一個(gè)頁(yè)面中包括多個(gè)完整的數(shù)據(jù)實(shí)例塊。這里指的數(shù)據(jù)實(shí)例塊指的是恰好能夠符合一個(gè)模式所定義的數(shù)據(jù)實(shí)例的組合。觀(guān)察以及試驗(yàn)結(jié)果證明,在HTML樹(shù)結(jié)構(gòu)中,這樣一個(gè)數(shù)據(jù)實(shí)例塊通常表現(xiàn)為一棵子樹(shù)。同時(shí),一個(gè)頁(yè)面中多個(gè)這樣子樹(shù)通常表現(xiàn)為具有相似地位的多棵子樹(shù)。本發(fā)明的關(guān)鍵步驟為從用戶(hù)給出的數(shù)據(jù)實(shí)例塊出發(fā),通常在一個(gè)數(shù)據(jù)實(shí)例塊中就可以得到多個(gè)數(shù)據(jù)項(xiàng)的匹配關(guān)系。事實(shí)上,如果只有一個(gè)匹配關(guān)系,則問(wèn)題已經(jīng)被大大簡(jiǎn)化了。對(duì)于其中的每個(gè)匹配關(guān)系,本發(fā)明首先比較他們的schemapath,例如得到的匹配關(guān)系中的schemapath的路徑如下BookList/Book/Title;BookList/Book/Author;BookList/Book/ListPrice等,則第一步為從三者的HTMLpath中找出或者概括一條路徑能夠覆蓋這三者中的BookList在HTML文檔中對(duì)應(yīng)的實(shí)例,同時(shí)繼續(xù)搜索這個(gè)路徑所表示的HTML樹(shù)中的子樹(shù)是否具有相似地位的子樹(shù),如果存在,則用能夠覆蓋所有這些相似的子樹(shù)的路徑來(lái)代替初始的路徑;而B(niǎo)ookList在模式樹(shù)中具有子節(jié)點(diǎn),但是對(duì)于BookList的每一個(gè)子節(jié)點(diǎn)來(lái)說(shuō),情況其實(shí)都是一樣的,本發(fā)明采取同樣的算法來(lái)得到能夠得到能夠覆蓋這些子樹(shù)的路徑,因此只需要遞歸的執(zhí)行該算法即可,直到所有的schemapath都已經(jīng)被處理完畢。這樣,本發(fā)明即得到的抽取規(guī)則被表達(dá)為標(biāo)準(zhǔn)XQuery表達(dá)式。為說(shuō)明問(wèn)題,下面給出一段抽取規(guī)則的形式表達(dá)的例子。該例子是XQuery形式的必然,不是人為規(guī)定。{LET$blist=document($d)RETURN<Booklist>{FOR$bIN$blist/body/table/tr[2]/td/table[1]/tr/td[2]table/tr/td/table/trRETURN<Book>……</book>}</booklist>}其中FOR和LET語(yǔ)句分別對(duì)應(yīng)于模式(這里考慮DTD)中“+/*”與其他的所有情況,前者表示一個(gè)模式成員可能對(duì)應(yīng)于多個(gè)數(shù)據(jù)實(shí)例,后者表示只有一個(gè)數(shù)據(jù)實(shí)例。本發(fā)明從一個(gè)HTML文檔中得到滿(mǎn)足用戶(hù)需求的抽取規(guī)則。當(dāng)然,這個(gè)抽取規(guī)則并不是只能用于這個(gè)單一的頁(yè)面。在實(shí)際應(yīng)用中,同一個(gè)網(wǎng)站中存在大量具有類(lèi)似結(jié)構(gòu)的實(shí)例,但是含有不同內(nèi)容的頁(yè)面,比如,從同一個(gè)搜索引擎中得到的頁(yè)面通常還有類(lèi)似的結(jié)構(gòu)。因此,這樣產(chǎn)生的抽取規(guī)則同樣也適用于這種具有類(lèi)似結(jié)構(gòu)的網(wǎng)頁(yè)。通過(guò)抽取規(guī)則的抽取HTML頁(yè)面中的數(shù)據(jù)的過(guò)程是用這個(gè)XQuery表達(dá)式去查詢(xún)HTML文檔,返回XML的結(jié)果即用戶(hù)要抽取的數(shù)據(jù)。當(dāng)然,同一個(gè)抽取規(guī)則面對(duì)的頁(yè)面雖然具有相似的結(jié)構(gòu),但是可能存在細(xì)微的不同,比如某一數(shù)據(jù)上是否含有鏈接等。本發(fā)明支持用戶(hù)從多個(gè)頁(yè)面生成多個(gè)抽取規(guī)則,最后由系統(tǒng)來(lái)自動(dòng)生成能夠包含這些抽取規(guī)則的所有情況的綜合的抽取規(guī)則。該抽取規(guī)則能夠適用于更多的情況,也就具有更大的通用性。至此,本發(fā)明得到的只是系統(tǒng)內(nèi)部用XQuery表示的抽取規(guī)則,但是這個(gè)抽取規(guī)則還不能獨(dú)立于系統(tǒng)外運(yùn)行。因此,最后的工作是導(dǎo)出抽取規(guī)則,使得其能夠隨時(shí)單獨(dú)地在系統(tǒng)之外運(yùn)行這個(gè)抽取規(guī)則。這也是真正應(yīng)用開(kāi)發(fā)中的需要。本發(fā)明開(kāi)發(fā)了能夠根據(jù)這個(gè)XQuery表達(dá)式的抽取規(guī)則生成相應(yīng)的java程序的技術(shù)。當(dāng)執(zhí)行整個(gè)java程序的時(shí)候,我們可以從中還原出XQuery表達(dá)式的抽取規(guī)則,然后從HTML文檔中抽取出所需要的數(shù)據(jù)。本發(fā)明使得包裝器能夠脫離包裝器生成系統(tǒng),能夠真正為應(yīng)用程序方便地使用。如圖4所示,本發(fā)明主界面以靠左的豎線(xiàn)為界可分為兩個(gè)區(qū)域,左邊為一個(gè)內(nèi)嵌的瀏覽器,右邊為相關(guān)的模式信息以及相關(guān)的顯示和操作。要從HTML頁(yè)面中生成一個(gè)包裝器,首先,用戶(hù)需要在A(yíng)處輸入該HTML頁(yè)面所在的URL,回車(chē)之后B處就顯示了所要抽取的HTML頁(yè)面。接著根據(jù)要抽取的頁(yè)面,用戶(hù)需要選擇或者定制模式信息,在C處顯示了用戶(hù)所定制的模式(顯示為DTD樹(shù))。然后用戶(hù)在選定模式中的一個(gè)數(shù)據(jù)項(xiàng)之后,在左邊的頁(yè)面中標(biāo)示出相應(yīng)的HTML文檔中的一個(gè)實(shí)例,系統(tǒng)會(huì)自動(dòng)取出該實(shí)例在HTML樹(shù)中的路徑,顯示在D處。同時(shí),如果該實(shí)例有相關(guān)的描述信息,這個(gè)信息也將被記錄下來(lái),同樣顯示在B處。所謂描述信息,例如“ListPrice$11.11”,這里“ListPrice”解釋了這個(gè)價(jià)格信息,同時(shí),這個(gè)信息能夠準(zhǔn)確的表明之后的信息是關(guān)于這個(gè)價(jià)格的。當(dāng)已經(jīng)做好模式中的一個(gè)數(shù)據(jù)項(xiàng)和HTML頁(yè)面中的實(shí)例之后,用戶(hù)需要點(diǎn)擊E中的選項(xiàng)生成一個(gè)匹配規(guī)則(其中還需要處理匹配關(guān)系中的字符串處理方法)。這樣,采取類(lèi)似的操作,用戶(hù)可以為模式中的每一個(gè)數(shù)據(jù)項(xiàng)都建立起一條匹配規(guī)則。最后,通過(guò)E中的選項(xiàng),用戶(hù)可以生成一個(gè)抽取規(guī)則,用于從HTML頁(yè)面中抽取所有模式中已經(jīng)定義的數(shù)據(jù),并且可以進(jìn)行測(cè)試,如果發(fā)現(xiàn)結(jié)果比較滿(mǎn)意,則選擇輸出包裝器(事實(shí)上為一段獨(dú)立的java代碼)到本地文件系統(tǒng);否則可以回到主界面選擇更多的實(shí)例以達(dá)到更好的效果。權(quán)利要求1.一種包裝器的生成方法,包括以下步驟(1)將Web的HTML文檔格式通過(guò)XMLDOM接口解析為HTML樹(shù)結(jié)構(gòu);(2)使用DTD去匹配HTML文檔中具體實(shí)例,計(jì)算出其所有匹配關(guān)系;(3)對(duì)于步驟(2)中得到的匹配關(guān)系,得出一條能夠覆蓋所有HTML文檔中對(duì)應(yīng)實(shí)例的路徑,并搜索該路徑所表示的HTML樹(shù)中的子樹(shù)是否具有相似地位的子樹(shù),如果存在,則用能夠覆蓋所有這些相似的子樹(shù)的路徑來(lái)代替該初始的路徑;(4)以步驟(3)中得到的路徑為基礎(chǔ)生成相應(yīng)的信息抽取規(guī)則;(5)利用步驟(4)中得到的抽取規(guī)則在其他Web的HTML文檔中抽取需要的數(shù)據(jù),若所述其他HTML文檔與前述結(jié)構(gòu)有差別,則重新生成抽取規(guī)則;(6)對(duì)所有的抽取規(guī)則合并,生成能夠包含上述所有抽取規(guī)則所有情況的綜合的抽取規(guī)則;(7)將步驟(6)中得到的抽取規(guī)則導(dǎo)出,以使該抽取規(guī)則可單獨(dú)應(yīng)用,即生成了所述包裝器。2.如權(quán)利要求1所述的包裝器的生成方法,其特征在于,所述DTD匹配HTML文檔具體的匹配關(guān)系包括datavalue、HTMLpath和schemapath。3.如權(quán)利要求1所述的包裝器的生成方法,其特征在于,所述的同一個(gè)包裝器能夠抽取一系列具有相似結(jié)構(gòu)的HTML文檔。4.如權(quán)利要求1所述的包裝器的生成方法,其特征在于,所述步驟(3)還包括,若模式樹(shù)中具有子節(jié)點(diǎn),則重復(fù)利用步驟(3)對(duì)其進(jìn)行操作,直到所有的子節(jié)點(diǎn)均處理完畢。5.如權(quán)利要求1所述的包裝器的生成方法,其特征在于,所述步驟(5)重新生成抽取規(guī)則即是通過(guò)學(xué)習(xí)對(duì)抽取規(guī)則進(jìn)行動(dòng)態(tài)維護(hù)。6.如權(quán)利要求1所述的包裝器的生成方法,其特征在于,所述抽取規(guī)則具體為標(biāo)準(zhǔn)的XQuery表達(dá)式。7.如權(quán)利要求1至6中任一權(quán)利要求所述的包裝器的生成方法,其特征在于,所述DTD具體為一個(gè)或多個(gè)XML文件的模板,DTD中定義了XML文件中的元素、元素的屬性、元素的排列方式/順序、元素能夠包含的內(nèi)容。8.如權(quán)利要求1所述的包裝器的生成方法,其特征在于,所述抽取規(guī)則具體為根據(jù)HTML樹(shù)的結(jié)構(gòu)特征及其相應(yīng)有限的標(biāo)識(shí)提取對(duì)應(yīng)的數(shù)據(jù)。9.如權(quán)利要求1所述的包裝器的生成方法,其特征在于,所述步驟(1)中對(duì)HTML文檔解析時(shí),對(duì)HTML文檔本身固有的問(wèn)題同時(shí)進(jìn)行修正。全文摘要本發(fā)明公開(kāi)了一種包裝器的生成方法,將HTML文檔格式解析為T(mén)ML樹(shù)結(jié)構(gòu);使用DTD匹配HTML文檔中具體實(shí)例,計(jì)算匹配關(guān)系;得出一條能夠覆蓋所有HTML文檔中對(duì)應(yīng)實(shí)例的路徑,并搜索HTML樹(shù)中的子樹(shù)是否具有相似的子樹(shù),如果存在,則用能夠覆蓋所有相似的子樹(shù)的路徑來(lái)代替初始路徑;以得到的路徑為基礎(chǔ)生成相應(yīng)的信息抽取規(guī)則;利用抽取規(guī)則在其他HTML文檔中抽取需要的數(shù)據(jù),若其他HTML文檔與前述結(jié)構(gòu)有差別,則重新生成抽取規(guī)則;對(duì)所有的抽取規(guī)則合并,生成能夠包含上述所有抽取規(guī)則所有情況的綜合的抽取規(guī)則;將抽取規(guī)則導(dǎo)出即生成了包裝器。本發(fā)明使得包裝器能夠脫離包裝器生成系統(tǒng),真正為應(yīng)用程序方便地使用。文檔編號(hào)G06F17/30GK1588371SQ20041007454公開(kāi)日2005年3月2日申請(qǐng)日期2004年9月8日優(yōu)先權(quán)日2004年9月8日發(fā)明者孟小峰,谷明哲,王海燕,胡東東,于峻濤,易蕾,李宇申請(qǐng)人:孟小峰,谷明哲,王海燕,胡東東,于峻濤,易蕾,李宇