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