專利名稱:遠(yuǎn)程xml數(shù)據(jù)更新方法以及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及面向Internet網(wǎng)絡(luò)的XML數(shù)據(jù)庫(kù)系統(tǒng)中,遠(yuǎn)端的數(shù)據(jù)訪問請(qǐng)求方按照數(shù)據(jù)庫(kù)內(nèi)容的變化對(duì)數(shù)據(jù)查詢結(jié)果進(jìn)行數(shù)據(jù)更新的方法,以及用于實(shí)現(xiàn)這種方法的數(shù)據(jù)更新系統(tǒng)。
背景技術(shù):
可擴(kuò)展標(biāo)識(shí)語(yǔ)言(XML語(yǔ)言)已經(jīng)成為事實(shí)上的網(wǎng)絡(luò)數(shù)據(jù)交換標(biāo)準(zhǔn),XML數(shù)據(jù)庫(kù)廣泛地用于實(shí)現(xiàn)Internet網(wǎng)絡(luò)中的數(shù)據(jù)共享。一個(gè)面向Internet網(wǎng)絡(luò)的XML數(shù)據(jù)庫(kù)系統(tǒng)由客戶機(jī)、數(shù)據(jù)服務(wù)器和XML數(shù)據(jù)庫(kù)組成。數(shù)據(jù)訪問請(qǐng)求方從遠(yuǎn)端的客戶機(jī)通過發(fā)送數(shù)據(jù)訪問請(qǐng)求,通過Internet網(wǎng)絡(luò)訪問數(shù)據(jù)服務(wù)器,而數(shù)據(jù)服務(wù)器負(fù)責(zé)響應(yīng)數(shù)據(jù)訪問請(qǐng)求,按照數(shù)據(jù)訪問請(qǐng)求對(duì)后臺(tái)XML數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)查詢,并將XML數(shù)據(jù)格式的數(shù)據(jù)查詢結(jié)果作為數(shù)據(jù)訪問請(qǐng)求的響應(yīng),通過Internet網(wǎng)絡(luò)返回給數(shù)據(jù)訪問請(qǐng)求方。
在這種面向Internet網(wǎng)絡(luò)的XML數(shù)據(jù)庫(kù)系統(tǒng)中,數(shù)據(jù)源提供者經(jīng)常根據(jù)管理和應(yīng)用的需求修改或補(bǔ)充后臺(tái)XML數(shù)據(jù)庫(kù)中的數(shù)據(jù)。當(dāng)后臺(tái)XML數(shù)據(jù)庫(kù)內(nèi)容發(fā)生變化時(shí),為了保證數(shù)據(jù)查詢結(jié)果和后臺(tái)數(shù)據(jù)的一致性,數(shù)據(jù)訪問請(qǐng)求方有必要再次發(fā)出訪問請(qǐng)求,獲取更新后的查詢數(shù)據(jù)。如果后臺(tái)數(shù)據(jù)庫(kù)的內(nèi)容頻繁變化,數(shù)據(jù)訪問請(qǐng)求的頻度較高的時(shí)候,大量數(shù)據(jù)查詢操作結(jié)果將反復(fù)通過Internet網(wǎng)絡(luò)傳送到遠(yuǎn)端的客戶機(jī)。數(shù)據(jù)傳輸量的增加和數(shù)據(jù)傳輸?shù)姆磸?fù)發(fā)生將受到網(wǎng)絡(luò)帶寬的限制,導(dǎo)致XML數(shù)據(jù)庫(kù)系統(tǒng)數(shù)據(jù)處理速度和訪問請(qǐng)求響應(yīng)速度的下降。同時(shí),數(shù)據(jù)訪問頻率的變化也將影響系統(tǒng)的整體性能,進(jìn)而影響基于XML數(shù)據(jù)庫(kù)的Internet網(wǎng)絡(luò)應(yīng)用系統(tǒng)的穩(wěn)定性。
面對(duì)上述問題,現(xiàn)有的數(shù)據(jù)更新方法中通常有選擇地將部分查詢操作結(jié)果保存在客戶機(jī),按照特定的策略根據(jù)后臺(tái)數(shù)據(jù)變化識(shí)別出其中需要更新的部分內(nèi)容,通過部分內(nèi)容的更新來(lái)代替整個(gè)數(shù)據(jù)查詢結(jié)果的更新,從而減少在數(shù)據(jù)更新中的網(wǎng)絡(luò)數(shù)據(jù)傳輸量。但是,這種方法的實(shí)現(xiàn)需要使用專用的數(shù)據(jù)更新協(xié)議,為此要求系統(tǒng)中配置專用的客戶機(jī),不符合目前計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)中主流的面向服務(wù)體系結(jié)構(gòu),不利于Internet網(wǎng)絡(luò)環(huán)境中數(shù)據(jù)共享的實(shí)現(xiàn)。同時(shí),鑒于XML語(yǔ)言事實(shí)上已經(jīng)成為Internet網(wǎng)絡(luò)的數(shù)據(jù)交換標(biāo)準(zhǔn),計(jì)算機(jī)網(wǎng)絡(luò)應(yīng)用中客戶的數(shù)據(jù)訪問請(qǐng)求普遍將采用了標(biāo)準(zhǔn)的XML查詢語(yǔ)言(XQuery語(yǔ)言),對(duì)于這種數(shù)據(jù)訪問請(qǐng)求獲得的數(shù)據(jù)查詢結(jié)果,目前尚缺少有效的方法來(lái)識(shí)別其中需要更新的部分內(nèi)容。
發(fā)明內(nèi)容
本發(fā)明的目的是提供一種XML數(shù)據(jù)庫(kù)系統(tǒng)中的遠(yuǎn)程數(shù)據(jù)更新方法,在數(shù)據(jù)庫(kù)內(nèi)容發(fā)生變化時(shí),根據(jù)數(shù)據(jù)請(qǐng)求方的要求,盡快更新前次查詢到的數(shù)據(jù),保持后臺(tái)數(shù)據(jù)庫(kù)內(nèi)容和前端數(shù)據(jù)查詢結(jié)果的一致性,同時(shí)通過減少數(shù)據(jù)更新中網(wǎng)絡(luò)數(shù)據(jù)傳輸量來(lái)提高系統(tǒng)的響應(yīng)速度以及網(wǎng)絡(luò)應(yīng)用的穩(wěn)定性。
本發(fā)明提供數(shù)據(jù)更新方法,包括下列步驟(1)數(shù)據(jù)請(qǐng)求方從客戶機(jī)發(fā)出首次數(shù)據(jù)訪問請(qǐng)求時(shí),數(shù)據(jù)服務(wù)器訪問后臺(tái)數(shù)據(jù)庫(kù),獲得并返回?cái)?shù)據(jù)查詢結(jié)果,并保存在客戶機(jī)。
(2)數(shù)據(jù)服務(wù)器對(duì)收到的數(shù)據(jù)訪問請(qǐng)求進(jìn)行分解,得到15種數(shù)據(jù)處理指令文檔節(jié)點(diǎn)獲取指令、子節(jié)點(diǎn)獲取指令、后代節(jié)點(diǎn)獲取指令、節(jié)點(diǎn)名獲取指令、節(jié)點(diǎn)構(gòu)造指令、條件查詢指令、序列遍歷指令、序列構(gòu)造指令、序列加工指令、文檔序比較指令、算術(shù)運(yùn)算指令、關(guān)系運(yùn)算指令、邏輯運(yùn)算指令、類型開關(guān)指令和常量構(gòu)造指令,并且按照數(shù)據(jù)訪問請(qǐng)求給定的處理順序,構(gòu)造出數(shù)據(jù)處理指令序列。
(3)數(shù)據(jù)服務(wù)器將所收到的每個(gè)數(shù)據(jù)訪問請(qǐng)求的發(fā)送者信息、請(qǐng)求內(nèi)容、請(qǐng)求時(shí)間及其數(shù)據(jù)處理指令序列保存在網(wǎng)絡(luò)存儲(chǔ)裝置中。
(4)同時(shí),數(shù)據(jù)服務(wù)器監(jiān)聽后臺(tái)XML數(shù)據(jù)庫(kù)的數(shù)據(jù)變化情況,將數(shù)據(jù)變化信息分為節(jié)點(diǎn)刪除、節(jié)點(diǎn)屬性更新、節(jié)點(diǎn)更新、子節(jié)點(diǎn)插入和子節(jié)點(diǎn)添加5類,將數(shù)據(jù)變化的變更位置、變更種類、變更內(nèi)容和變更時(shí)間以數(shù)據(jù)變化日志的形式保存在網(wǎng)絡(luò)存儲(chǔ)裝置中。
(5)數(shù)據(jù)服務(wù)器從同一發(fā)送者再次收到相同的數(shù)據(jù)訪問請(qǐng)求時(shí),則從網(wǎng)絡(luò)存儲(chǔ)裝置中找出該數(shù)據(jù)訪問請(qǐng)求的數(shù)據(jù)處理指令序列以及數(shù)據(jù)變化日志,根據(jù)兩次訪問請(qǐng)求之間發(fā)生的所有后臺(tái)數(shù)據(jù)變化信息,分析數(shù)據(jù)處理指令序列,按照數(shù)據(jù)處理指令序列中順序出現(xiàn)的文檔節(jié)點(diǎn)獲取指令、子節(jié)點(diǎn)獲取指令、后代節(jié)點(diǎn)獲取指令、條件查詢指令和序列遍歷指令所表示的訪問路徑,訪問后臺(tái)數(shù)據(jù)庫(kù)找出數(shù)據(jù)更新的位置信息并構(gòu)造數(shù)據(jù)元素定位指令。
(6)根據(jù)步驟(5)對(duì)數(shù)據(jù)處理指令序列進(jìn)行的分析,以及數(shù)據(jù)更新的位置信息,從數(shù)據(jù)處理指令序列中取出用于描述數(shù)據(jù)加工的節(jié)點(diǎn)構(gòu)造指令、序列遍歷指令、節(jié)點(diǎn)名獲取指令、序列構(gòu)造指令、序列加工指令、文檔序比較指令、算術(shù)運(yùn)算指令、關(guān)系運(yùn)算指令、邏輯運(yùn)算指令、類型開關(guān)指令和常量構(gòu)造指令。
(7)按照步驟(5)得到的數(shù)據(jù)變化信息中的數(shù)據(jù)變更種類分別按照下列步驟(8)到步驟(12)來(lái)生成數(shù)據(jù)更新指令序列。
(8)對(duì)于節(jié)點(diǎn)刪除的情況,用步驟(5)得到的數(shù)據(jù)元素定位指令、數(shù)據(jù)序列元素刪除指令、以及步驟(6)得到的數(shù)據(jù)處理指令構(gòu)造出數(shù)據(jù)更新指令序列。
9)對(duì)于節(jié)點(diǎn)屬性更新的情況,用步驟(5)得到的數(shù)據(jù)元素定位指令、基于數(shù)據(jù)變化信息生成的數(shù)據(jù)屬性設(shè)置指令、以及步驟(6)得到的數(shù)據(jù)處理指令構(gòu)造出數(shù)據(jù)更新指令序列。
(10)對(duì)于節(jié)點(diǎn)更新的情況,用步驟(5)得到的數(shù)據(jù)元素定位指令、基于數(shù)據(jù)變化信息構(gòu)造的節(jié)點(diǎn)構(gòu)造指令和序列元素更新指令,以及步驟(6)得到的數(shù)據(jù)處理指令構(gòu)造出數(shù)據(jù)更新指令序列。
(11)對(duì)于子節(jié)點(diǎn)插入的情況,用步驟(5)得到的數(shù)據(jù)元素定位指令、基于數(shù)據(jù)變化信息構(gòu)造的節(jié)點(diǎn)構(gòu)造指令和序列元素插入指令,以及步驟(6)得到的數(shù)據(jù)處理指令構(gòu)造出數(shù)據(jù)更新指令序列。
(12)對(duì)于子節(jié)點(diǎn)添加的情況,用步驟(5)得到的數(shù)據(jù)元素定位指令、基于數(shù)據(jù)變化信息構(gòu)造的節(jié)點(diǎn)構(gòu)造指令和序列元素?cái)U(kuò)展指令,以及步驟(6)得到的數(shù)據(jù)處理指令構(gòu)造出數(shù)據(jù)更新指令序列。
(13)數(shù)據(jù)服務(wù)器將按照步驟(8)到步驟(12)構(gòu)造的數(shù)據(jù)更新指令序列,按照XQuery語(yǔ)言的格式,返回給數(shù)據(jù)請(qǐng)求方。
(14)數(shù)據(jù)請(qǐng)求方接收步驟(13)產(chǎn)生的XQuery語(yǔ)言表示的數(shù)據(jù)更新指令序列,通過調(diào)用客戶機(jī)上安裝的標(biāo)準(zhǔn)XQuery處理器來(lái)執(zhí)行該指令序列,更新上次獲得的數(shù)據(jù)查詢結(jié)果,獲得更新后的、與后臺(tái)數(shù)據(jù)庫(kù)保持一致的XML數(shù)據(jù)。
本發(fā)明提供數(shù)據(jù)更新系統(tǒng),用于支持上述數(shù)據(jù)更新方法在Internet環(huán)境中的實(shí)現(xiàn)。數(shù)據(jù)更新系統(tǒng)的工作流程如圖1所示,包括有一臺(tái)數(shù)據(jù)服務(wù)器、至少一臺(tái)客戶機(jī)、一臺(tái)網(wǎng)絡(luò)存儲(chǔ)裝置和至少一個(gè)XML數(shù)據(jù)庫(kù)。數(shù)據(jù)服務(wù)器是一臺(tái)提供Internet網(wǎng)絡(luò)服務(wù)的計(jì)算機(jī),通過內(nèi)部網(wǎng)絡(luò)連接后臺(tái)的XML數(shù)據(jù)庫(kù),用于根據(jù)客戶機(jī)發(fā)送的數(shù)據(jù)訪問請(qǐng)求,對(duì)XML數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)查詢和數(shù)據(jù)變化監(jiān)聽,組織并返回?cái)?shù)據(jù)查詢結(jié)果和數(shù)據(jù)更新指令序列。網(wǎng)絡(luò)存儲(chǔ)裝置通過內(nèi)部網(wǎng)絡(luò)連接數(shù)據(jù)服務(wù)器,負(fù)責(zé)數(shù)據(jù)訪問請(qǐng)求及其數(shù)據(jù)處理指令、以及數(shù)據(jù)變化日志的保存。XML數(shù)據(jù)庫(kù)通過內(nèi)部網(wǎng)絡(luò)連接數(shù)據(jù)服務(wù)器,用于管理XML數(shù)據(jù),并提供數(shù)據(jù)變化信息。
數(shù)據(jù)服務(wù)器通過Internet網(wǎng)絡(luò)向客戶機(jī)提供XML數(shù)據(jù)??蛻魴C(jī)具有XQuery語(yǔ)言處理器,用于發(fā)送數(shù)據(jù)訪問請(qǐng)求,獲得數(shù)據(jù)查詢結(jié)果與數(shù)據(jù)更新指令序列,進(jìn)行數(shù)據(jù)查詢結(jié)果的更新;任何連接網(wǎng)絡(luò)的計(jì)算機(jī)只要安裝了標(biāo)準(zhǔn)的XQuery處理器,就可以按照下列步驟訪問數(shù)據(jù)服務(wù)器。
(1)發(fā)出數(shù)據(jù)訪問請(qǐng)求,從數(shù)據(jù)服務(wù)器獲得數(shù)據(jù)查詢結(jié)果,并給予保存。
(2)在應(yīng)用中需要數(shù)據(jù)更新時(shí),再次發(fā)送同一數(shù)據(jù)訪問請(qǐng)求時(shí),從數(shù)據(jù)服務(wù)器獲得XQuery語(yǔ)言表示的數(shù)據(jù)更新指令。
(3)在XQuery處理器上,執(zhí)行得到的數(shù)據(jù)更新指令,對(duì)前次獲得的數(shù)據(jù)查詢結(jié)果進(jìn)行更新。
數(shù)據(jù)服務(wù)器的軟件系統(tǒng)由數(shù)據(jù)訪問請(qǐng)求模塊、數(shù)據(jù)更新指令管理模塊和數(shù)據(jù)庫(kù)監(jiān)聽模塊組成。
數(shù)據(jù)訪問請(qǐng)求模塊接收數(shù)據(jù)訪問請(qǐng)求,對(duì)后臺(tái)XML數(shù)據(jù)庫(kù)進(jìn)行查詢,獲得查詢數(shù)據(jù)結(jié)果,返回給客戶機(jī);并且,將數(shù)據(jù)訪問請(qǐng)求分解成數(shù)據(jù)處理指令序列保存到網(wǎng)絡(luò)存儲(chǔ)裝置。當(dāng)數(shù)據(jù)服務(wù)器再次收到來(lái)自客戶機(jī)的同一數(shù)據(jù)訪問請(qǐng)求時(shí),由數(shù)據(jù)更新指令管理模塊負(fù)責(zé)處理。
數(shù)據(jù)更新指令管理模塊從網(wǎng)絡(luò)存儲(chǔ)裝置獲得本次數(shù)據(jù)訪問請(qǐng)求對(duì)應(yīng)的數(shù)據(jù)處理指令序列以及數(shù)據(jù)變化日志,分析數(shù)據(jù)處理指令序列,向XML數(shù)據(jù)庫(kù)發(fā)出數(shù)據(jù)定位查詢請(qǐng)求,并根據(jù)得到的數(shù)據(jù)定位信息確認(rèn)數(shù)據(jù)更新位置,進(jìn)而根據(jù)兩次訪問請(qǐng)求之間發(fā)生的數(shù)據(jù)庫(kù)變化信息,組裝出采用XML查詢語(yǔ)言表示的數(shù)據(jù)更新指令序列,直接返回給客戶機(jī)。
數(shù)據(jù)庫(kù)監(jiān)聽模塊負(fù)責(zé)監(jiān)聽XML數(shù)據(jù)庫(kù)內(nèi)容的變化情況,將數(shù)據(jù)變化信息的記錄以數(shù)據(jù)變化日志的形式保存到網(wǎng)絡(luò)存儲(chǔ)裝置。
按照上述方法,數(shù)據(jù)請(qǐng)求方從客戶機(jī)再次發(fā)出同一數(shù)據(jù)訪問請(qǐng)求時(shí),得到一個(gè)采用XML查詢語(yǔ)言表示的數(shù)據(jù)更新指令序列,而不是完整的數(shù)據(jù)查詢結(jié)果。數(shù)據(jù)更新指令序列的執(zhí)行代替了重復(fù)的數(shù)據(jù)查詢,數(shù)據(jù)更新指令序列的傳遞代替了大量數(shù)據(jù)查詢結(jié)果的數(shù)據(jù)傳輸。由于數(shù)據(jù)更新指令的數(shù)據(jù)量和數(shù)據(jù)變化的大小成正比,而應(yīng)用系統(tǒng)中后臺(tái)數(shù)據(jù)內(nèi)容的變化量在絕大多數(shù)的情況下都大大小于數(shù)據(jù)查詢結(jié)果的數(shù)據(jù)量,這種方法明顯地減少了數(shù)據(jù)更新中的數(shù)據(jù)傳輸量,有效地提高了XML數(shù)據(jù)庫(kù)系統(tǒng)的響應(yīng)速度。
同時(shí),這種數(shù)據(jù)更新方法的實(shí)現(xiàn)不需要使用專用的客戶機(jī),Internet網(wǎng)絡(luò)中的任何應(yīng)用系統(tǒng)中只要配備了標(biāo)準(zhǔn)的XQuery處理器就可以通過本發(fā)明的數(shù)據(jù)更新系統(tǒng)獲得遠(yuǎn)端XML數(shù)據(jù)庫(kù)提供的數(shù)據(jù),并得到及時(shí)的數(shù)據(jù)更新。這種數(shù)據(jù)服務(wù)方式完全符合計(jì)算機(jī)網(wǎng)絡(luò)應(yīng)用系統(tǒng)中主流的面向服務(wù)體系結(jié)構(gòu),并且通過支持標(biāo)準(zhǔn)的數(shù)據(jù)共享和數(shù)據(jù)交換語(yǔ)言XML以及標(biāo)準(zhǔn)的XML查詢語(yǔ)言XQuery語(yǔ)言,保證了這種方法能夠滿足主流Internet網(wǎng)絡(luò)應(yīng)用開發(fā)及其發(fā)展的需求。
圖1為本發(fā)明的數(shù)據(jù)更新系統(tǒng)的工作流程示意圖;圖2為本發(fā)明的一個(gè)實(shí)施案例的系統(tǒng)結(jié)構(gòu)圖;圖中,11、客戶機(jī),12、數(shù)據(jù)服務(wù)器,13、數(shù)據(jù)訪問請(qǐng)求管理模塊,14、數(shù)據(jù)更新指令管理模塊,15、數(shù)據(jù)庫(kù)監(jiān)聽模塊,16、網(wǎng)絡(luò)存儲(chǔ)裝置,17、XML數(shù)據(jù)庫(kù),21、XQuery處理器,22、數(shù)據(jù)瀏覽器。
具體實(shí)施例方式
本發(fā)明的一個(gè)實(shí)施案例的系統(tǒng)結(jié)構(gòu)如圖2所示。
圖中給出了處于網(wǎng)絡(luò)遠(yuǎn)端的三個(gè)客戶機(jī)11,配備了數(shù)據(jù)瀏覽器22和XQuery處理器21、通過Internet網(wǎng)絡(luò)將數(shù)據(jù)瀏覽器產(chǎn)生的數(shù)據(jù)訪問請(qǐng)求發(fā)送給數(shù)據(jù)服務(wù)器12,其中數(shù)據(jù)訪問請(qǐng)求采用XQuery語(yǔ)言表示。
數(shù)據(jù)服務(wù)器12是一臺(tái)具有Internet網(wǎng)絡(luò)連接的計(jì)算機(jī),同時(shí)通過內(nèi)部網(wǎng)絡(luò)連接網(wǎng)絡(luò)存儲(chǔ)裝置16和XML數(shù)據(jù)庫(kù)17。數(shù)據(jù)服務(wù)器12的軟件系統(tǒng)采用Web服務(wù)的形式,向Internet網(wǎng)絡(luò)客戶提供數(shù)據(jù)查詢操作、數(shù)據(jù)更新操作和數(shù)據(jù)變化通知操作等3個(gè)Web服務(wù)操作。
數(shù)據(jù)服務(wù)器12在接收到來(lái)自客戶機(jī)11的數(shù)據(jù)查詢操作的訪問請(qǐng)求時(shí),按照下列步驟處理(1)將XQuery語(yǔ)言表示的數(shù)據(jù)訪問請(qǐng)求分解為數(shù)據(jù)處理指令序列。
(2)對(duì)于XQuery語(yǔ)言表示中的FLWOR表達(dá)式,分解為序列遍歷指令和條件查詢指令。
(3)對(duì)于XQuery語(yǔ)言表示中的XPath表達(dá)式,分解為文檔節(jié)點(diǎn)獲取指令、子節(jié)點(diǎn)獲取指令、后代節(jié)點(diǎn)獲取指令、序列遍歷指令和條件查詢指令。
(4)對(duì)于XQuery語(yǔ)言表示中的where表達(dá)式和if表達(dá)式,分解為條件查詢指令。
(5)對(duì)于XQuery語(yǔ)言表示中的邏輯運(yùn)算表達(dá)式,分解為邏輯運(yùn)算指令。
(6)對(duì)于XQuery語(yǔ)言表示中的關(guān)系運(yùn)算表達(dá)式,分解為關(guān)系運(yùn)算指令、文檔序比較指令和類型開關(guān)指令。
(7)對(duì)于XQuery語(yǔ)言表示中的算術(shù)運(yùn)算表達(dá)式,分解為算術(shù)運(yùn)算指令。
(8)對(duì)于XQuery語(yǔ)言表示中的序列處理函數(shù),分解為節(jié)點(diǎn)構(gòu)造指令、序列構(gòu)造指令、序列加工指令和常量構(gòu)造指令。
(9)按照步驟(2)到步驟(8)生成的數(shù)據(jù)處理指令序列,訪問XML后臺(tái)數(shù)據(jù)庫(kù),獲得數(shù)據(jù)查詢結(jié)果,返回給客戶機(jī)11。
(10)將所收到的每個(gè)數(shù)據(jù)訪問請(qǐng)求的發(fā)送者信息、請(qǐng)求內(nèi)容、請(qǐng)求時(shí)間及其數(shù)據(jù)處理指令序列保存在網(wǎng)絡(luò)存儲(chǔ)裝置16中。
數(shù)據(jù)服務(wù)器12在接收到來(lái)自后臺(tái)XML數(shù)據(jù)庫(kù)17的數(shù)據(jù)變化通知操作的訪問請(qǐng)求時(shí),獲得數(shù)據(jù)變化信息,將數(shù)據(jù)變化信息分為節(jié)點(diǎn)刪除、節(jié)點(diǎn)屬性更新、節(jié)點(diǎn)更新、子節(jié)點(diǎn)插入和子節(jié)點(diǎn)添加5類,將數(shù)據(jù)變化的變更位置、變更種類、變更內(nèi)容和變更時(shí)間以數(shù)據(jù)變化日志的形式保存在網(wǎng)絡(luò)存儲(chǔ)裝置16中。
數(shù)據(jù)服務(wù)器12在接收到來(lái)自客戶機(jī)11的數(shù)據(jù)更新操作的訪問請(qǐng)求時(shí),按照下列步驟處理(1)從網(wǎng)絡(luò)存儲(chǔ)裝置16中找出該數(shù)據(jù)訪問請(qǐng)求的發(fā)送者信息、請(qǐng)求時(shí)間和數(shù)據(jù)處理指令序列以及數(shù)據(jù)變化日志,識(shí)別出同一個(gè)發(fā)送者的兩次相同數(shù)據(jù)訪問請(qǐng)求之間發(fā)生的所有后臺(tái)數(shù)據(jù)變化信息,按照數(shù)據(jù)處理指令序列中順序出現(xiàn)的、用于描述數(shù)據(jù)訪問路徑的文檔節(jié)點(diǎn)獲取指令、子節(jié)點(diǎn)獲取指令、后代節(jié)點(diǎn)獲取指令、條件查詢指令和序列遍歷指令,訪問后臺(tái)XML數(shù)據(jù)庫(kù)17找出數(shù)據(jù)更新的位置信息并構(gòu)造數(shù)據(jù)元素定位指令。
(2)根據(jù)步驟(1)對(duì)數(shù)據(jù)處理指令序列進(jìn)行的分析,以及數(shù)據(jù)更新的位置信息,從數(shù)據(jù)處理指令序列中取出描述數(shù)據(jù)加工過程的節(jié)點(diǎn)構(gòu)造指令、序列遍歷指令、節(jié)點(diǎn)名獲取指令、序列構(gòu)造指令、序列加工指令、文檔序比較指令、算術(shù)運(yùn)算指令、關(guān)系運(yùn)算指令、邏輯運(yùn)算指令、類型開關(guān)指令和常量構(gòu)造指令。
(3)按照步驟(1)得到的數(shù)據(jù)變化信息中的數(shù)據(jù)變更種類,分別按照下列步驟(4)到步驟(8)來(lái)生成數(shù)據(jù)更新指令序列。
(4)對(duì)于節(jié)點(diǎn)刪除的情況,用步驟(1)得到的數(shù)據(jù)元素定位指令、數(shù)據(jù)序列元素刪除指令、以及步驟(2)得到的數(shù)據(jù)處理指令構(gòu)造出數(shù)據(jù)更新指令序列。
(5)對(duì)于節(jié)點(diǎn)屬性更新的情況,用步驟(1)得到的數(shù)據(jù)元素定位指令、基于數(shù)據(jù)變化信息生成的數(shù)據(jù)屬性設(shè)置指令、以及步驟(2)得到的數(shù)據(jù)處理指令構(gòu)造出數(shù)據(jù)更新指令序列。
(6)對(duì)于節(jié)點(diǎn)更新的情況,用步驟(1)得到的數(shù)據(jù)元素定位指令、基于數(shù)據(jù)變化信息構(gòu)造的節(jié)點(diǎn)構(gòu)造指令和序列元素更新指令,以及步驟(2)得到的數(shù)據(jù)處理指令構(gòu)造出數(shù)據(jù)更新指令序列。
(7)對(duì)于子節(jié)點(diǎn)插入的情況,用步驟(1)得到的數(shù)據(jù)元素定位指令、基于數(shù)據(jù)變化信息構(gòu)造的節(jié)點(diǎn)構(gòu)造指令和序列元素插入指令,以及步驟(2)得到的數(shù)據(jù)處理指令構(gòu)造出數(shù)據(jù)更新指令序列。
(8)對(duì)于子節(jié)點(diǎn)添加的情況,用步驟(1)得到的數(shù)據(jù)元素定位指令、基于數(shù)據(jù)變化信息構(gòu)造的節(jié)點(diǎn)構(gòu)造指令和序列元素?cái)U(kuò)展指令,以及步驟(2)得到的數(shù)據(jù)處理指令構(gòu)造出數(shù)據(jù)更新指令序列。
(9)數(shù)據(jù)服務(wù)器12將按照步驟(4)到步驟(8)構(gòu)造的數(shù)據(jù)更新指令序列,按照XQuery語(yǔ)言的格式進(jìn)行組裝,作為Web服務(wù)的響應(yīng)結(jié)果返回給客戶機(jī)11。
客戶機(jī)11配備一個(gè)數(shù)據(jù)瀏覽器22,作為Web服務(wù)的客戶端,按照下列的步驟工作(1)發(fā)出數(shù)據(jù)訪問請(qǐng)求,激活數(shù)據(jù)服務(wù)器的數(shù)據(jù)查詢操作,獲得返回的數(shù)據(jù)查詢結(jié)果后,保存在本地存儲(chǔ)器。
(2)在本地存儲(chǔ)器已經(jīng)保存了數(shù)據(jù)查詢結(jié)果的情況下,再次發(fā)出同樣的數(shù)據(jù)訪問請(qǐng)求,激活數(shù)據(jù)服務(wù)器的數(shù)據(jù)更新操作,獲得返回的數(shù)據(jù)更新指令序列;(3)調(diào)用本地配置的XQuery處理器21,執(zhí)行得到的數(shù)據(jù)更新指令序列,更新本地存儲(chǔ)器中的數(shù)據(jù)查詢結(jié)果。
網(wǎng)絡(luò)存儲(chǔ)裝置16是一臺(tái)聯(lián)機(jī)的網(wǎng)絡(luò)存儲(chǔ)設(shè)備,用于保存數(shù)據(jù)處理指令序列和數(shù)據(jù)庫(kù)變化日志,為數(shù)據(jù)服務(wù)器軟件系統(tǒng)提供持久性的數(shù)據(jù)存儲(chǔ)。
XML數(shù)據(jù)庫(kù)17是一臺(tái)配置了XML數(shù)據(jù)管理軟件的計(jì)算機(jī),通過內(nèi)部網(wǎng)絡(luò)連接數(shù)據(jù)服務(wù)器,根據(jù)來(lái)自數(shù)據(jù)服務(wù)器12的數(shù)據(jù)訪問請(qǐng)求進(jìn)行數(shù)據(jù)查詢,返回?cái)?shù)據(jù)查詢結(jié)果;同時(shí),當(dāng)數(shù)據(jù)庫(kù)內(nèi)容被改變時(shí),激活數(shù)據(jù)服務(wù)器的數(shù)據(jù)變化通知操作,提交數(shù)據(jù)內(nèi)容的變化信息。
數(shù)據(jù)服務(wù)器的Web服務(wù)軟件系統(tǒng)由數(shù)據(jù)訪問請(qǐng)求管理模塊13、數(shù)據(jù)更新指令管理模塊14和數(shù)據(jù)庫(kù)監(jiān)聽模塊15組成。
數(shù)據(jù)訪問請(qǐng)求管理模塊13負(fù)責(zé)實(shí)現(xiàn)Web服務(wù)的數(shù)據(jù)查詢操作,提供下列4個(gè)功能(1)對(duì)XQuery語(yǔ)言表示的數(shù)據(jù)訪問請(qǐng)求進(jìn)行語(yǔ)法分析和語(yǔ)義分析,分解為數(shù)據(jù)處理指令序列;(2)按照數(shù)據(jù)處理指令序列完成對(duì)后臺(tái)XML數(shù)據(jù)庫(kù)17的查詢;(3)獲得XML數(shù)據(jù)庫(kù)17的查詢結(jié)果,返回給客戶機(jī)11;(4)將請(qǐng)求的發(fā)送者信息、發(fā)送時(shí)間和數(shù)據(jù)處理指令序列保存到網(wǎng)絡(luò)存儲(chǔ)裝置16。
數(shù)據(jù)庫(kù)監(jiān)聽模塊15負(fù)責(zé)實(shí)現(xiàn)Web服務(wù)的數(shù)據(jù)變化通知操作,將數(shù)據(jù)變化的變更種類、變更時(shí)間和變更內(nèi)容保存在網(wǎng)絡(luò)存儲(chǔ)裝置中,形成數(shù)據(jù)變化日志。
數(shù)據(jù)更新指令管理模塊14負(fù)責(zé)實(shí)現(xiàn)Web服務(wù)的數(shù)據(jù)更新操作,提供下列3個(gè)功能(1)從網(wǎng)絡(luò)存儲(chǔ)裝置16保存的數(shù)據(jù)庫(kù)變化日志中獲得數(shù)據(jù)庫(kù)變化記錄,按照數(shù)據(jù)庫(kù)變化信息的種類,生成數(shù)據(jù)更新指令;(2)獲得這種數(shù)據(jù)訪問請(qǐng)求對(duì)應(yīng)的數(shù)據(jù)處理指令序列,根據(jù)其中順序出現(xiàn)的文檔節(jié)點(diǎn)獲取指令、子節(jié)點(diǎn)獲取指令、后代節(jié)點(diǎn)獲取指令和條件查詢指令向后臺(tái)的XML數(shù)據(jù)庫(kù)發(fā)出數(shù)據(jù)定位查詢請(qǐng)求,并根據(jù)得到的位置信息構(gòu)造數(shù)據(jù)要素定位指令;(3)分析數(shù)據(jù)處理指令序列中表示數(shù)據(jù)加工的節(jié)點(diǎn)構(gòu)造指令、序列遍歷指令、節(jié)點(diǎn)名獲取指令、序列構(gòu)造指令、序列加工指令、文檔序比較指令、算術(shù)運(yùn)算指令、關(guān)系運(yùn)算指令、邏輯運(yùn)算指令、類型開關(guān)指令和常量構(gòu)造指令,結(jié)合前2步生成的數(shù)據(jù)更新指令和數(shù)據(jù)元素定位指令,組裝出XQuery語(yǔ)言表示的數(shù)據(jù)更新指令序列,直接返回給客戶機(jī)11。
按照本發(fā)明的數(shù)據(jù)更新方法,數(shù)據(jù)服務(wù)器能夠產(chǎn)生標(biāo)準(zhǔn)的XQuery語(yǔ)言表示的數(shù)據(jù)更新指令序列,直接應(yīng)用于遠(yuǎn)端客戶機(jī)的數(shù)據(jù)更新,避免了重復(fù)進(jìn)行跨網(wǎng)絡(luò)的數(shù)據(jù)庫(kù)查詢,也避免了數(shù)據(jù)查詢結(jié)果的反復(fù)傳送,大大減少了網(wǎng)絡(luò)數(shù)據(jù)傳輸量,從而提高了系統(tǒng)進(jìn)行數(shù)據(jù)更新的效率,也提高了基于XML數(shù)據(jù)庫(kù)系統(tǒng)的網(wǎng)絡(luò)應(yīng)用系統(tǒng)的穩(wěn)定性。同時(shí),數(shù)據(jù)服務(wù)器在數(shù)據(jù)更新過程中對(duì)后臺(tái)XML數(shù)據(jù)庫(kù)的訪問僅限于數(shù)據(jù)定位信息的查詢,使得XML數(shù)據(jù)庫(kù)的工作負(fù)擔(dān)也得以減輕,提高網(wǎng)絡(luò)應(yīng)用的穩(wěn)定性。
以上所述僅為本發(fā)明的較佳實(shí)施例,并非用以限定本發(fā)明的實(shí)質(zhì)技術(shù)內(nèi)容的范圍,本發(fā)明的實(shí)質(zhì)技術(shù)內(nèi)容廣義地定義于權(quán)利要求書中,任何他人所完成的技術(shù)實(shí)體或方法,若是與權(quán)利要求書所定義者完全相同,或是為同等效的變更,均將被視為涵蓋于本發(fā)明專利范圍之中。
權(quán)利要求
1.遠(yuǎn)程XML數(shù)據(jù)更新方法,應(yīng)用于XML數(shù)據(jù)庫(kù)系統(tǒng)中,數(shù)據(jù)請(qǐng)求方通過客戶機(jī)發(fā)送數(shù)據(jù)訪問請(qǐng)求到數(shù)據(jù)服務(wù)器,通過數(shù)據(jù)服務(wù)器來(lái)獲得遠(yuǎn)程XML數(shù)據(jù)庫(kù)內(nèi)的數(shù)據(jù)之后,根據(jù)XML數(shù)據(jù)庫(kù)內(nèi)容的變化來(lái)更新得到的數(shù)據(jù),其特征在于包括下列步驟1)數(shù)據(jù)請(qǐng)求方從客戶機(jī)發(fā)出首次數(shù)據(jù)訪問請(qǐng)求時(shí),數(shù)據(jù)服務(wù)器訪問后臺(tái)數(shù)據(jù)庫(kù),獲得并返回?cái)?shù)據(jù)查詢結(jié)果,并保存在客戶機(jī);2)數(shù)據(jù)服務(wù)器對(duì)收到的數(shù)據(jù)訪問請(qǐng)求進(jìn)行分解,將數(shù)據(jù)訪問請(qǐng)求分解成數(shù)據(jù)處理指令,并且按照數(shù)據(jù)訪問請(qǐng)求給定的處理順序,構(gòu)造出數(shù)據(jù)處理指令序列;3)數(shù)據(jù)服務(wù)器將所收到的每個(gè)數(shù)據(jù)訪問請(qǐng)求的發(fā)送者信息、請(qǐng)求內(nèi)容、請(qǐng)求時(shí)間及其數(shù)據(jù)處理指令序列保存在網(wǎng)絡(luò)存儲(chǔ)裝置中;4)同時(shí),數(shù)據(jù)服務(wù)器監(jiān)聽后臺(tái)XML數(shù)據(jù)庫(kù)的數(shù)據(jù)變化情況,將數(shù)據(jù)變化信息分類,將數(shù)據(jù)變化的變更位置、變更種類、變更內(nèi)容和變更時(shí)間以數(shù)據(jù)變化日志的形式保存在網(wǎng)絡(luò)存儲(chǔ)裝置中;5)數(shù)據(jù)服務(wù)器從同一發(fā)送者再次收到相同的數(shù)據(jù)訪問請(qǐng)求時(shí),從網(wǎng)絡(luò)存儲(chǔ)裝置中找出該數(shù)據(jù)訪問請(qǐng)求的數(shù)據(jù)處理指令序列以及數(shù)據(jù)變化日志,根據(jù)兩次訪問請(qǐng)求之間發(fā)生的所有后臺(tái)數(shù)據(jù)變化信息,分析數(shù)據(jù)處理指令序列,按照數(shù)據(jù)處理指令序列中表示的訪問路徑,通過訪問后臺(tái)XML數(shù)據(jù)庫(kù)來(lái)確定數(shù)據(jù)更新的位置,構(gòu)造數(shù)據(jù)元素定位指令;6)數(shù)據(jù)服務(wù)器按照數(shù)據(jù)變更種類、數(shù)據(jù)更新位置,以及數(shù)據(jù)處理指令序列中表示的數(shù)據(jù)加工要求,來(lái)生成數(shù)據(jù)更新指令序列,返回給數(shù)據(jù)請(qǐng)求方;7)數(shù)據(jù)請(qǐng)求方接收數(shù)據(jù)更新指令序列,按照數(shù)據(jù)更新指令序列來(lái)進(jìn)行數(shù)據(jù)更新。
2.根據(jù)權(quán)利要求1所述的遠(yuǎn)程XML數(shù)據(jù)更新方法,其特征在于數(shù)據(jù)服務(wù)器將數(shù)據(jù)訪問請(qǐng)求分解成以下15種數(shù)據(jù)處理指令文檔節(jié)點(diǎn)獲取指令、子節(jié)點(diǎn)獲取指令、后代節(jié)點(diǎn)獲取指令、節(jié)點(diǎn)名獲取指令、節(jié)點(diǎn)構(gòu)造指令、條件查詢指令、序列遍歷指令、序列構(gòu)造指令、序列加工指令、文檔序比較指令、算術(shù)運(yùn)算指令、關(guān)系運(yùn)算指令、邏輯運(yùn)算指令、類型開關(guān)指令和常量構(gòu)造指令。
3.根據(jù)權(quán)利要求1或2所述的遠(yuǎn)程XML數(shù)據(jù)更新方法,其特征在于數(shù)據(jù)服務(wù)器將數(shù)據(jù)變化信息分為5類節(jié)點(diǎn)刪除、節(jié)點(diǎn)屬性更新、節(jié)點(diǎn)更新、子節(jié)點(diǎn)插入和子節(jié)點(diǎn)添加。
4.根據(jù)權(quán)利要求3所述的遠(yuǎn)程XML數(shù)據(jù)更新方法,其特征在于根據(jù)數(shù)據(jù)處理指令序列中的文檔節(jié)點(diǎn)獲取指令、子節(jié)點(diǎn)獲取指令、后代節(jié)點(diǎn)獲取指令、條件查詢指令和序列遍歷指令來(lái)確定數(shù)據(jù)更新位置的訪問路徑。
5.根據(jù)權(quán)利要求4所述的遠(yuǎn)程XML數(shù)據(jù)更新方法,其特征在于根據(jù)數(shù)據(jù)變化的種類、內(nèi)容,以及數(shù)據(jù)處理指令序列中表示數(shù)據(jù)加工要求的節(jié)點(diǎn)構(gòu)造指令、序列遍歷指令、節(jié)點(diǎn)名獲取指令、序列構(gòu)造指令、序列加工指令、文檔序比較指令、算術(shù)運(yùn)算指令、關(guān)系運(yùn)算指令、邏輯運(yùn)算指令、類型開關(guān)指令和常量構(gòu)造指令來(lái)構(gòu)造數(shù)據(jù)更新指令序列。
6.根據(jù)權(quán)利要求1或5所述的遠(yuǎn)程XML數(shù)據(jù)更新方法,其特征在于數(shù)據(jù)服務(wù)器采用XML查詢語(yǔ)言,即XQuery語(yǔ)言表示數(shù)據(jù)更新指令序列,返回給數(shù)據(jù)請(qǐng)求方數(shù)據(jù)請(qǐng)求方接收XQuery語(yǔ)言表示的數(shù)據(jù)更新指令序列,通過調(diào)用客戶機(jī)上安裝的標(biāo)準(zhǔn)XQuery處理器來(lái)執(zhí)行該指令序列,更新上次獲得的數(shù)據(jù)查詢結(jié)果,獲得更新后的、與后臺(tái)數(shù)據(jù)庫(kù)保持一致的XML數(shù)據(jù)。
7.一種遠(yuǎn)程XML數(shù)據(jù)更新系統(tǒng),其特征在于包括有一臺(tái)數(shù)據(jù)服務(wù)器、至少一臺(tái)客戶機(jī)、一臺(tái)網(wǎng)絡(luò)存儲(chǔ)裝置和至少一個(gè)XML數(shù)據(jù)庫(kù);其中所述的數(shù)據(jù)服務(wù)器通過內(nèi)部網(wǎng)絡(luò)連接網(wǎng)絡(luò)存儲(chǔ)裝置和XML數(shù)據(jù)庫(kù),通過Internet網(wǎng)絡(luò)連接客戶機(jī),用于根據(jù)客戶機(jī)發(fā)送的數(shù)據(jù)訪問請(qǐng)求,對(duì)XML數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)查詢和數(shù)據(jù)變化監(jiān)聽,組織并返回?cái)?shù)據(jù)查詢結(jié)果和數(shù)據(jù)更新指令序列;其中所述的客戶機(jī)用于發(fā)送數(shù)據(jù)訪問請(qǐng)求,獲得數(shù)據(jù)查詢結(jié)果與數(shù)據(jù)更新指令序列,進(jìn)行數(shù)據(jù)查詢結(jié)果的更新;其中所述的網(wǎng)絡(luò)存儲(chǔ)裝置用于存儲(chǔ)數(shù)據(jù)訪問請(qǐng)求、數(shù)據(jù)處理指令序列和數(shù)據(jù)庫(kù)變化日志;其中所述的XML數(shù)據(jù)庫(kù)用于管理XML數(shù)據(jù),并提供數(shù)據(jù)變化信息。
8.根據(jù)權(quán)利要求7所述的數(shù)據(jù)更新系統(tǒng),其特征在于客戶機(jī)具有XQuery語(yǔ)言處理器。
9.根據(jù)權(quán)利要求8所述的數(shù)據(jù)更新系統(tǒng),其特征在于網(wǎng)絡(luò)存儲(chǔ)裝置是一臺(tái)聯(lián)機(jī)的網(wǎng)絡(luò)存儲(chǔ)設(shè)備。
10.根據(jù)權(quán)利要求9所述的數(shù)據(jù)更新系統(tǒng),其特征在于數(shù)據(jù)服務(wù)器具有數(shù)據(jù)訪問請(qǐng)求管理模塊,用于處理來(lái)自客戶機(jī)的數(shù)據(jù)訪問請(qǐng)求;具有數(shù)據(jù)更新指令管理模塊,用于構(gòu)造數(shù)據(jù)更新指令序列;具有數(shù)據(jù)庫(kù)監(jiān)聽模塊,用于構(gòu)造數(shù)據(jù)庫(kù)變化日志。
全文摘要
本發(fā)明提供一種遠(yuǎn)程XML數(shù)據(jù)更新方法以及系統(tǒng),所述方法包括(1)數(shù)據(jù)服務(wù)器將來(lái)自遠(yuǎn)端客戶機(jī)的數(shù)據(jù)訪問請(qǐng)求分解為數(shù)據(jù)處理指令序列,完成XML數(shù)據(jù)查詢;(2)在收到相同數(shù)據(jù)訪問請(qǐng)求時(shí),根據(jù)兩次請(qǐng)求之間發(fā)生的后臺(tái)數(shù)據(jù)變化和數(shù)據(jù)處理指令序列,獲取數(shù)據(jù)更新的定位信息,構(gòu)造并返回XQuery語(yǔ)言表示的數(shù)據(jù)更新指令序列;(3)客戶機(jī)通過執(zhí)行數(shù)據(jù)更新指令序列完成數(shù)據(jù)更新;所述系統(tǒng)包括客戶機(jī)、數(shù)據(jù)服務(wù)器、XML數(shù)據(jù)庫(kù)和用于保存數(shù)據(jù)處理序列和數(shù)據(jù)庫(kù)變化日志的網(wǎng)絡(luò)存儲(chǔ)裝置;本發(fā)明通過減少網(wǎng)絡(luò)數(shù)據(jù)傳輸量來(lái)提高數(shù)據(jù)更新的速度以及應(yīng)用的穩(wěn)定性,客戶機(jī)僅需要配備標(biāo)準(zhǔn)的XQuery處理器。
文檔編號(hào)H04L29/00GK1889557SQ200610089649
公開日2007年1月3日 申請(qǐng)日期2006年7月10日 優(yōu)先權(quán)日2006年7月10日
發(fā)明者廖湖聲, 金雪云, 樊昱, 蘇航, 杜永萍 申請(qǐng)人:北京工業(yè)大學(xué)