两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

一種通過索引解析xml文檔的方法

文檔序號(hào):6466723閱讀:164來源:國知局

專利名稱::一種通過索引解析xml文檔的方法
技術(shù)領(lǐng)域
:本發(fā)明涉及一種通過索引解析XML文檔的方法,屬于XML信息處理領(lǐng)域。
背景技術(shù)
:由W3C組織提出的XML(extensibleMarkupLanguage)語言,由于其靈活性和自描述性,已經(jīng)成為Web2.0應(yīng)用乃至各種信息處理系統(tǒng)普遍采用的信息組織和描述格式,得到越來越廣泛的應(yīng)用。目前得到較為廣泛應(yīng)用的XML解析器有IBM的XML4J、微軟的MSXML、0racle的XMLParser、Sun的JavaTM、JDOM等。這些解析器所采用的解析方法可分為為DOM禾PSAX兩大類。DOM是W3C提出的一種基于樹結(jié)構(gòu)的解析方法。DOM在解析XML文件時(shí),將文檔中的元素、屬性、注釋、處理指令都看作樹結(jié)構(gòu)的一些節(jié)點(diǎn),并將XML文檔的內(nèi)容組織成一顆樹型信息結(jié)構(gòu)。由于DOM解析方法需要構(gòu)造與擬解析的XML文件對(duì)應(yīng)的樹形結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu),所以它占用的內(nèi)存與文檔大小成正比(一般是2到5倍),因此不適合大型XML文檔。為了提高DOM方法的解析性能,研究人員對(duì)其進(jìn)行了一定的改進(jìn)。主要成果有延遲DOM解析方法(DDOM)和壓縮DOM解析方法(SEDOM)。DDOM對(duì)DOM方法的改進(jìn)體現(xiàn)在DDOM不需要構(gòu)造完整的解析屬,只是在訪問文檔時(shí)根據(jù)需要構(gòu)造DOM樹的部分結(jié)構(gòu)。DDOM主要適用于對(duì)XML進(jìn)行稀疏訪問的場合,如果文檔大部分都需要訪問時(shí),DDOM的性能比普通DOM方式更慢。SEDOM則通過引入了壓縮技術(shù),明顯減少普通DOM解析方法對(duì)存儲(chǔ)空間的消耗,但由于需要進(jìn)行壓縮操作,不可避免地對(duì)解析性能造成影響。SAX是由XML_DEV郵件列表中的成員提出的另一種已得到廣泛應(yīng)用的XML文檔解析方法。SAX方法的核心是通過線性掃描XML文檔,檢索用戶所關(guān)心的標(biāo)簽并觸發(fā)相應(yīng)的事件,在事件處理過程中完成用戶對(duì)XML文檔的訪問和解析。SAX方法可以解析任意大小的文件,實(shí)現(xiàn)簡單,資源消耗較少。在不需要改變文檔的內(nèi)容時(shí)并順序訪問的情況下,解析效率比較高。Matthias指出以XML作為主要數(shù)據(jù)描述和組織形式的信息系統(tǒng)中,XML解析方法對(duì)該類系統(tǒng)的性能具有直接而顯著的影響。DOM方法雖然可以建立XML文檔的完整結(jié)構(gòu)并具有隨機(jī)訪問能力,但其計(jì)算資源消耗較大,不適用于對(duì)大規(guī)模的XML文檔的快速解析;SAX方法雖然資源消耗較少,能夠以較高的效率解析大規(guī)模的XML文檔,但其去不具備對(duì)XML文檔的隨機(jī)訪問能力和在線修改能力。
發(fā)明內(nèi)容要解決的技術(shù)問題為了避免現(xiàn)有技術(shù)的不足之處,本發(fā)明提出一種通過索引解析XML文檔的方法,可以提高對(duì)大規(guī)模XML文檔的解析速度和檢索效率,減少資源消耗,并提供對(duì)XML文檔的隨機(jī)訪問能力。技術(shù)方案3—種通過索引解析XML文檔的方法,在解析過程中引入索引機(jī)制,并通過索引加速對(duì)XML文檔中各Element的隨機(jī)訪問速度。其技術(shù)特征在于方法步驟分為初始化階段和解析階段初始化階段步驟1、遍歷說明XML文檔結(jié)構(gòu)的DTD文檔,抽取出DTD文檔中根節(jié)點(diǎn)下的子樹標(biāo)簽名;步驟2、首先創(chuàng)建一個(gè)空Hash表,按照抽取出的子樹標(biāo)簽名,遍歷需要解析的XML文檔,查找并記錄下各子樹標(biāo)簽名在XML文檔中的起始相對(duì)位置,按照結(jié)構(gòu)項(xiàng)構(gòu)造新的項(xiàng)目加入到Hash表中形成子樹索引表;所述的結(jié)構(gòu)項(xiàng)是只讀XML文檔的結(jié)構(gòu)項(xiàng)為索引號(hào),起始相對(duì)位置;非只讀XML文檔的結(jié)構(gòu)項(xiàng)為索引號(hào),起始相對(duì)位置,是否更改過;步驟3、創(chuàng)建關(guān)鍵元素索引表首先創(chuàng)建一個(gè)空的Hash表,按關(guān)鍵元素的標(biāo)簽名稱遍歷XML文檔,抽取出文檔中的所有該關(guān)鍵元素的標(biāo)簽名稱對(duì)應(yīng)的值,并查詢子樹索引表得到該關(guān)鍵元素所在子樹索引號(hào),按結(jié)構(gòu)項(xiàng)子樹索引號(hào),該關(guān)鍵元素的標(biāo)簽名稱對(duì)應(yīng)的值填入Hash表中形成該關(guān)鍵元素的索引表;解析階段包括兩種模式非驗(yàn)證的IXP解析模式和驗(yàn)證的IXP解析模式;只讀XML文檔采用非驗(yàn)證的IXP模式如下步驟4、抽取查詢條件中的關(guān)鍵字名字,查詢與關(guān)鍵字同名的關(guān)鍵元素的索引表,按照查詢條件匹配關(guān)鍵元素索引表中各項(xiàng)值,找到匹配項(xiàng),抽取匹配項(xiàng)中的子樹索引號(hào);如果未找到與關(guān)鍵字同名的關(guān)鍵元素的索引表,則返回到步驟3;步驟5、根據(jù)子樹索引號(hào)查詢子樹索引表,在子樹索引表中找到匹配項(xiàng)后,抽取出該項(xiàng)中的起始相對(duì)位置內(nèi)容,根據(jù)起始相對(duì)位置定位到XML文檔中的子樹起始位置,將整個(gè)子樹內(nèi)容加載到內(nèi)存,在子樹范圍內(nèi)遍歷找到符合查詢條件的元素值返回,查詢結(jié)束;非只讀XML文檔采用驗(yàn)證的IXP模式如下步驟4、抽取查詢條件中的關(guān)鍵字名字,查詢與關(guān)鍵字同名的關(guān)鍵元素索引表,按照查詢條件匹配關(guān)鍵元素索引表中各項(xiàng)值,找到匹配項(xiàng),抽取匹配項(xiàng)中的子樹索引號(hào);步驟5、根據(jù)子樹索引號(hào)查詢子樹索引表,找到匹配項(xiàng)后,抽取出匹配項(xiàng)中"起始相對(duì)位置"內(nèi)容,根據(jù)"起始相對(duì)位置"定位到XML文檔中的對(duì)應(yīng)子樹起始位置,從這個(gè)起始位置開始將整個(gè)子樹內(nèi)容加載到內(nèi)存,然后在內(nèi)存中加載的這個(gè)子樹范圍內(nèi)遍歷,找到符合查詢條件的元素的值返回,查詢結(jié)束;如果查詢到元素后還需要改變該元素值,則繼續(xù)下述步驟;步驟6、更新上述步驟5中找到的元素的值,將子樹索引表中對(duì)應(yīng)于這個(gè)子樹的項(xiàng)目中"是否更改過"標(biāo)志改為"真";在關(guān)閉XML文檔時(shí),先把所有在子樹索引表項(xiàng)中"是否更改過"標(biāo)志值為"真"的子樹在內(nèi)存中的內(nèi)容依次寫入磁盤文件,然后執(zhí)行關(guān)閉文件。有益效果本發(fā)明提出的通過索引解析XML文檔的方法,具有如下特點(diǎn)1.對(duì)XML文檔操作前,有一個(gè)建立索引過程,這期間通過指定子樹節(jié)點(diǎn)和關(guān)鍵節(jié)點(diǎn),創(chuàng)建關(guān)鍵元素索引表和子樹索引表。然后,IXP允許應(yīng)用程序基于這些表執(zhí)行查詢操作。2.在對(duì)XML文檔解析過程中,采用索引表的方式記錄節(jié)點(diǎn)信息,查找時(shí)通過子樹索引表快速定位到XML文件中的子樹位置,加快了檢索速度。3.根據(jù)子樹索引表讀入指定區(qū)域的內(nèi)容,因?yàn)橹粚ML文檔中的部分內(nèi)容加載到內(nèi)存,通過遍歷子樹得到目標(biāo)信息。該過程避免了將全部XML文件到加載內(nèi)存,從而節(jié)省了內(nèi)存空間。4.IXP-nv方法勝任SAX使用的各種場合,但比SAX更有效率,因?yàn)樗ㄟ^初始化形成元素子樹后,查找時(shí)可快速定位到特定元素所在子樹,并進(jìn)行小范圍遍歷,而SAX通常需要從文件開始處遍歷文檔。IXP-nv占用很少的內(nèi)存,而且并不隨著文件變大而增加。5.解析過程包含兩個(gè)部分查找索引表和在特定元素的子樹中進(jìn)行元素匹配。IXP方法在實(shí)現(xiàn)過程中采用哈希函數(shù)優(yōu)化索引表,查找索引表時(shí)間幾乎是不變的,搜索元素子樹的時(shí)間只與子樹的大小相關(guān)。因此IXP方法在大規(guī)模的XML文檔下也能有很好的性能。由于解析器性能通常取決于文檔特征,如標(biāo)簽和數(shù)據(jù)比率,屬性使用程度,元素子樹數(shù)目以及平均元素子樹大小等。本發(fā)明基于IXP解析方法用0++語言實(shí)現(xiàn)了IXP解析器,在實(shí)施例中通過將IXP的性能與MSXML的性能在初始化和平均訪問時(shí)間的比較,可以看出本發(fā)明的效果。圖1:IXP中建立索引及查詢過程圖示[OO31]圖2:DOM、SAX與IXP方法初始化的性能比較[OO32]圖3:DOM、SAX和IXP方法元素訪問時(shí)間比較圖4:IXP方法初始化后所形成的索引表結(jié)構(gòu)具體實(shí)施例方式現(xiàn)結(jié)合實(shí)施例、附圖對(duì)本發(fā)明作進(jìn)一步描述以BookSet.xml文檔為例,對(duì)IXP解析方法的實(shí)施過程加以說明。BookSet.xml文檔的DTD格式符合下表的定義<table>tableseeoriginaldocumentpage5</column></row><table>IXP解析遍歷XML數(shù)據(jù),并將整個(gè)文檔以指定元素為根拆分成許多元素子樹。在這個(gè)DTD說明文檔中,可以發(fā)現(xiàn)其子樹元素為"Book",標(biāo)記所有起始標(biāo)簽(〈Book〉)和結(jié)束標(biāo)簽(〈/Book〉)的位置形成元素子樹索引表。如果能快速定位到包含目標(biāo)元素的子樹,則可大大加快檢索速度。采用所需要的任意標(biāo)簽創(chuàng)建索引,推薦采用具有唯一值的元素。此例中,采用ISBN作為關(guān)鍵標(biāo)簽,并記錄"〈ISBN>"和"〈/1SBN>"之間的文本作為索引值。初始化過程以后,IXP創(chuàng)建了元素子樹索引表和關(guān)鍵標(biāo)簽索引表。初始化過程以后,IXP創(chuàng)建了如錯(cuò)誤!未找到引用源。4所示元素子樹索引表和關(guān)鍵標(biāo)簽索引表。如果想查詢書本ISBN號(hào)碼為"7-302-04517"的作者姓名,只需要載入和搜索位置從67到140,總共只有73個(gè)字符的文檔。測試用例以BookSet.xml為例子,創(chuàng)建7個(gè)XML文檔,大小分別為13KB,119KB,238KB,471KB,934KB,1871KB,4652KB,他們包含了不同數(shù)量的元素。然后量化比較采用MSXML4.0和IXP進(jìn)行初始化和解析的時(shí)間開銷。初始化性能比較XML文檔分別采用DOM、SAX和IXP初始化10次,平均初始化時(shí)間如圖2。在初始化過程中,DOM需要遍歷和解析XML文檔形成一個(gè)內(nèi)存中的文檔樹,初始化時(shí)間與XML文檔的大小成正比。SAX只是創(chuàng)建了打開文件的句柄,但并不真正讀取數(shù)據(jù),因此其開銷是最少的。IXP需要解析和建立索引表,需要一定的時(shí)間開銷。由于其不需要建立完整的樹形結(jié)構(gòu),所以開銷時(shí)間遠(yuǎn)小于較DOM,該優(yōu)勢隨著文檔規(guī)模的擴(kuò)大也愈加明顯。XML文檔解析性能比較7個(gè)XML文檔在不進(jìn)行語法緩存的情況下,隨機(jī)查找1000次,平均訪問時(shí)間基本反映了各解析方法的解析性能,結(jié)果如圖3所示。從錯(cuò)誤!未找到引用源。3可以發(fā)現(xiàn),D0M解析器在對(duì)小文檔解析時(shí)具有良好的性能,但針對(duì)大文檔的開銷遠(yuǎn)遠(yuǎn)超出了預(yù)計(jì)。SAX解析器解析性能優(yōu)于DOM方式,仍然效率低下。進(jìn)一步的研究發(fā)現(xiàn)DOM和SAX在例子所用DTD描述下,XML文檔為720KB時(shí),具有近似的性能。在IXP初始化過程中,創(chuàng)建了元素子樹表和關(guān)鍵標(biāo)簽索引表,解析過程包含兩個(gè)部分查找索引表和在特定元素子樹中進(jìn)行元素匹配。IXP采用哈希函數(shù)優(yōu)化索引表,查找索引表時(shí)間幾乎是不變的,搜索元素子樹的時(shí)間只與子樹的大小相關(guān)。因此IXP解析器在大規(guī)模的XML文檔下也能有很好的性能。在最壞情況,IXP需要以新的索引標(biāo)簽重新初始化索引表。將DOM和SAX解析時(shí)間與IXP初始化和解析時(shí)間之和進(jìn)行比較,IXP性能仍然大大優(yōu)于DOM和SAX方式,如表1:表1:DOM、SAX方法解析時(shí)間和IXP初始化時(shí)間與解析時(shí)間總和的比較文檔大小DOMSAXIXP文檔大小DOMSAXIXP138.911.17.011911.144.412.823817.866.622.147155.5122.1399341000.1233.172.618715758.7577.2144.7465235381.31144.4426.51、文檔大小以"千字節(jié)(K)"為單位,時(shí)間以"毫秒(ms)"為單位。2、DOM和SAX這兩列的值分別為DOM方法和SAX方法解析元素所花費(fèi)的時(shí)間。3、該列的值為IBP方法初始化時(shí)間和解析時(shí)間的總和。對(duì)比實(shí)驗(yàn)表明,對(duì)于大型XML文檔,IXP方法的解析速度遠(yuǎn)遠(yuǎn)快于DOM方法和SAX6方法。通過提供通用接口,該方式能廣泛應(yīng)用于各種XML文檔的解析,為XML文本分析提供了一種新的方法。權(quán)利要求一種通過索引解析XML文檔的方法,其特征在于步驟分為初始化階段和解析階段初始化階段步驟1、遍歷說明XML文檔結(jié)構(gòu)的DTD文檔,抽取出DTD文檔中根節(jié)點(diǎn)下的子樹標(biāo)簽名;步驟2、首先創(chuàng)建一個(gè)空Hash表,按照抽取出的子樹標(biāo)簽名,遍歷需要解析的XML文檔,查找并記錄下各子樹標(biāo)簽名在XML文檔中的起始相對(duì)位置,按照結(jié)構(gòu)項(xiàng)構(gòu)造新的項(xiàng)目加入到Hash表中形成子樹索引表;所述的結(jié)構(gòu)項(xiàng)是只讀XML文檔的結(jié)構(gòu)項(xiàng)為索引號(hào),起始相對(duì)位置;非只讀XML文檔的結(jié)構(gòu)項(xiàng)為索引號(hào),起始相對(duì)位置,是否更改過;步驟3、創(chuàng)建關(guān)鍵元素索引表首先創(chuàng)建一個(gè)空的Hash表,按關(guān)鍵元素的標(biāo)簽名稱遍歷XML文檔,抽取出文檔中的所有該關(guān)鍵元素的標(biāo)簽名稱對(duì)應(yīng)的值,并查詢子樹索引表得到該關(guān)鍵元素所在子樹索引號(hào),按結(jié)構(gòu)項(xiàng)子樹索引號(hào),該關(guān)鍵元素的標(biāo)簽名稱對(duì)應(yīng)的值填入Hash表中形成該關(guān)鍵元素的索引表;解析階段包括兩種模式非驗(yàn)證的IXP解析模式和驗(yàn)證的IXP解析模式;只讀XML文檔采用非驗(yàn)證的IXP模式如下步驟4、抽取查詢條件中的關(guān)鍵字名字,查詢與關(guān)鍵字同名的關(guān)鍵元素的索引表,按照查詢條件匹配關(guān)鍵元素索引表中各項(xiàng)值,找到匹配項(xiàng),抽取匹配項(xiàng)中的子樹索引號(hào);如果未找到與關(guān)鍵字同名的關(guān)鍵元素的索引表,則返回到步驟3;步驟5、根據(jù)子樹索引號(hào)查詢子樹索引表,在子樹索引表中找到匹配項(xiàng)后,抽取出該項(xiàng)中的起始相對(duì)位置內(nèi)容,根據(jù)起始相對(duì)位置定位到XML文檔中的子樹起始位置,將整個(gè)子樹內(nèi)容加載到內(nèi)存,在子樹范圍內(nèi)遍歷找到符合查詢條件的元素值返回,查詢結(jié)束;非只讀XML文檔采用驗(yàn)證的IXP模式如下步驟4‘、抽取查詢條件中的關(guān)鍵字名字,查詢與關(guān)鍵字同名的關(guān)鍵元素索引表,按照查詢條件匹配關(guān)鍵元素索引表中各項(xiàng)值,找到匹配項(xiàng),抽取匹配項(xiàng)中的子樹索引號(hào);步驟5‘、根據(jù)子樹索引號(hào)查詢子樹索引表,找到匹配項(xiàng)后,抽取出匹配項(xiàng)中“起始相對(duì)位置”內(nèi)容,根據(jù)“起始相對(duì)位置”定位到XML文檔中的對(duì)應(yīng)子樹起始位置,從這個(gè)起始位置開始將整個(gè)子樹內(nèi)容加載到內(nèi)存,然后在內(nèi)存中加載的這個(gè)子樹范圍內(nèi)遍歷,找到符合查詢條件的元素的值返回,查詢結(jié)束;如果查詢到元素后還需要改變該元素值,則繼續(xù)下述步驟;步驟6‘、更新上述步驟5‘中找到的元素的值,將子樹索引表中對(duì)應(yīng)于這個(gè)子樹的項(xiàng)目中“是否更改過”標(biāo)志改為“真”;在關(guān)閉XML文檔時(shí),先把所有在子樹索引表項(xiàng)中“是否更改過”標(biāo)志值為“真”的子樹在內(nèi)存中的內(nèi)容依次寫入磁盤文件,然后執(zhí)行關(guān)閉文件。全文摘要本發(fā)明涉及一種通過索引解析XML文檔的方法,技術(shù)特征在于方法步驟為遍歷說明XML文檔結(jié)構(gòu)的DTD文檔,抽取出DTD文檔中根節(jié)點(diǎn)下的子樹標(biāo)簽名;然后創(chuàng)建Hash表,按照抽取出的子樹標(biāo)簽名,遍歷需要解析的XML文檔,查找并記錄下各子樹標(biāo)簽名在XML文檔中的起始相對(duì)位置,按照結(jié)構(gòu)項(xiàng)構(gòu)造新的項(xiàng)目加入到Hash表中形成子樹索引表;創(chuàng)建關(guān)鍵元素索引表后利用非驗(yàn)證的IXP解析模式或驗(yàn)證的IXP解析模式進(jìn)行解析。有益效果對(duì)于大型XML文檔,IXP方法的解析速度遠(yuǎn)遠(yuǎn)快于DOM方法和SAX方法。通過提供通用接口,該方式能廣泛應(yīng)用于各種XML文檔的解析,為XML文本分析提供了一種新的方法。文檔編號(hào)G06F17/30GK101777045SQ20081015076公開日2010年7月14日申請日期2008年9月1日優(yōu)先權(quán)日2008年9月1日發(fā)明者周興社,張海輝,楊剛,詹濤申請人:西北工業(yè)大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
汕尾市| 顺平县| 喀喇| 车险| 金乡县| 威信县| 隆昌县| 新干县| 五家渠市| 红河县| 浦城县| 屏边| 江山市| 凌云县| 柏乡县| 萍乡市| 来宾市| 大化| 淮北市| 绥宁县| 怀来县| 湖州市| 蕲春县| 岳普湖县| 奉新县| 青铜峡市| 东乡县| 湖南省| 宁陕县| 鄂尔多斯市| 曲水县| 望都县| 遂宁市| 岑溪市| 汝州市| 通州区| 娱乐| 若羌县| 江达县| 威远县| 临猗县|