專利名稱:Xml文件中節(jié)點元素的索引信息表示法的制作方法
技術(shù)領域:
本發(fā)明涉及W3C標準,具體地說是一種用于解決大型XML文件的處理效率問題的 XML節(jié)點元素索引信息表示方法。
背景技術(shù):
目前在解析XML文件時,主要有二種技術(shù)文檔對象模型DOM (Document Object Model)禾口 SAX (Simple API for XML)。DOM是W3C的成熟標準,是一個基于樹型的解析技術(shù)。在內(nèi)存中構(gòu)建起一棵完整的 解析樹,并生成解析樹上的所有節(jié)點(Node)對象,以實現(xiàn)對整個XML文檔的全面、動態(tài)的訪 問。在DOM構(gòu)造的節(jié)點樹中,每一個元素、屬性均被當作對象進行處理。內(nèi)存中的解析 樹結(jié)構(gòu)提供了很好的導航支持,但存在以下問題首先,整個XML文檔必須一次解析完成, 不可能只做部分解析;其次,在內(nèi)存中加載整個文檔和構(gòu)建完整樹結(jié)構(gòu)成本很高,尤其當文 檔非常大的時候。通常,DOM樹的容量比文檔容量要大一個數(shù)量級,所以它要消耗大量內(nèi)存; 第三,一般的DOM節(jié)點類型在互操作性上有優(yōu)勢,但并不是非常適合對象類型的綁定。SAX是一個用于處理XML的事件驅(qū)動的“推”模型。它不是W3C標準,但它是一個 得到廣泛認可的API。SAX解析器不象DOM那樣為整個文檔建立樹型表示,而是在讀取文檔 時激活一系列的事件。這些事件被推給事件處理器,由事件處理器提供對文檔內(nèi)容的訪問。上述二種技術(shù)在解析大型XML文件的應用中均存在一定的缺陷D0M對計算機的 性能和內(nèi)存要很高的要求;SAX在處理文件編碼和文件編輯時存在困難。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題是克服上述現(xiàn)有技術(shù)存在的缺陷,提供一種在解析 XML文件時對節(jié)點元素的新的處理方法,使用該方法能夠以高效、靈活和低資源占用率的方 式來解析大型XML文件。為此,本發(fā)明采用如下的技術(shù)方案XML文件中節(jié)點元素的索引信息表示法,在解 析XML文件時,將原始XML文件以字節(jié)數(shù)組的形式讀入內(nèi)存;在加載文件的同時,掃描文件 內(nèi)容,并且為每一個掃描得到的節(jié)點創(chuàng)建索引信息。本發(fā)明加載XML文件時直接將XML文件以字節(jié)數(shù)組形式讀入內(nèi)存,不需要象其它 方式那樣將文件轉(zhuǎn)換成對象樹,加載效率高,速度快;索引信息以整數(shù)形式保存,容易編程 處理;索引信息長度固定,容易實現(xiàn)高效率檢索。索引信息中的各項內(nèi)容說明如下眷前驅(qū)節(jié)點當前XML節(jié)點的前驅(qū)節(jié)點。如果當前節(jié)點是根節(jié)點,則前驅(qū)節(jié)點指向 當前節(jié)點的起始位置;如果當前節(jié)點是第一個子節(jié)點,則前驅(qū)節(jié)點指向當前節(jié)點父節(jié)點的 起始位置;其他節(jié)點的前驅(qū)節(jié)點指向上一個兄弟節(jié)點。眷節(jié)點類型定義XML節(jié)點的類型;
深度XML節(jié)點在文檔樹中的深度; 節(jié)點長度XML節(jié)點的長度; 預留單元目前不使用,預留至將來使用; 偏移量XML節(jié)點首字節(jié)在整個XML文檔中的位置;眷后繼節(jié)點當前XML節(jié)點的后繼節(jié)點。如果當前節(jié)點是文件中最后一個節(jié)點,則 后繼節(jié)點指向該節(jié)點的起始位置;如果當前節(jié)點是葉子節(jié)點,則后繼節(jié)點指向當前節(jié)點父 節(jié)點的下一個兄弟節(jié)點;其他節(jié)點的后繼節(jié)點指向下一個兄弟節(jié)點。索引信息的長度為固定長度128bit,表示前驅(qū)節(jié)點和后繼節(jié)點的信息長度均為 32bit,表示節(jié)點類型的信息長度為4bit,表示深度的信息長度為8bit,表示節(jié)點長度的信 息長度為20bit,表示偏移量的信息長度為30bit,表示預留單元的信息長度為2bit。因此 在對大型XML文件進行索引時,總索引信息所占用的內(nèi)存空間與XML文件大小成線性關系, 特別是當節(jié)點字節(jié)數(shù)多時,效率高。不會如DOM處理方式中,當文件體積增大時,所占用的 內(nèi)存空間成倍增長。本發(fā)明結(jié)合了傳統(tǒng)的DOM和SAX解析XML文件的優(yōu)點,通過改變XML節(jié)點元素的 表示方法,使本發(fā)明的XML元素處理方法與傳統(tǒng)方法相比有以下幾方面的改進1)處理XML文件的速度更快。由于不需要把XML文件中的各個元素當作對象來進 行處理,在處理XML元素時操作的對象是字節(jié)數(shù)組中的數(shù)據(jù),使得編程處理時速度比傳統(tǒng) 方式有成倍提高。2)解析XML文件時占用的存儲空間小。用本發(fā)明方法處理的XML文件,所占用的 內(nèi)存空間只是文件本身加上額外的索引信息;與DOM將節(jié)點當作對象存儲在內(nèi)存的方式相 比,所占用的存儲空間大為減少。3)可以方便地對文件進行隨機讀寫、訪問。索引信息中的節(jié)點地址信息保證了在 訪問XML文件時,可以隨時訪問文件的任何一個節(jié)點,而且由于索引信息是以定長的整數(shù) 形式保存的,所以訪問速度很快。而傳統(tǒng)的SAX技術(shù)在訪問XML文件時由于缺少有效的索 引信息,在隨機訪問文件時就會遇到困難。下面結(jié)合說明書附圖和具體實施方式
對本發(fā)明作進一步說明。
圖1為本發(fā)明XML節(jié)點元素的索引信息格式。圖2為本發(fā)明索引信息與XML文件的關系。
具體實施例方式下面以一個具體的XML文件為例,來說明該文件節(jié)點元素的索引信息表示方法。<note><to>George</to><from>John</from><heading>Reminder</heading><body>Don' t forget the meeting ! </body></note>
該XML文件在被讀入內(nèi)存的同時,根據(jù)圖1定義的格式,生成如下形式的索引信 息。其中每一個節(jié)點的前驅(qū)和后繼節(jié)點的信息是前驅(qū)和后繼節(jié)點在內(nèi)存中的偏移量。
權(quán)利要求
XML文件中節(jié)點元素的索引信息表示法,其特征在于在解析XML文件時,將原始XML文件以字節(jié)數(shù)組的形式讀入內(nèi)存;在加載文件的同時,掃描文件內(nèi)容,并且為每一個掃描得到的節(jié)點創(chuàng)建索引信息,所述的節(jié)點索引信息包括前驅(qū)節(jié)點、節(jié)點類型、深度、節(jié)點長度、預留單元、偏移量和后繼節(jié)點,節(jié)點索引信息中的各信息單元以定長的整數(shù)形式保存,所述的偏移量指XML節(jié)點首字節(jié)在整個XML文檔中的位置,所述的深度指XML節(jié)點在文檔樹中的深度,所述的前驅(qū)節(jié)點為當前XML節(jié)點的前驅(qū)節(jié)點,所述的后繼節(jié)點為當前XML節(jié)點的后繼節(jié)點。
2 根據(jù)權(quán)利要求1所述的XML文件中節(jié)點元素的索引信息表示法,其特征在于如果當 前節(jié)點是根節(jié)點,則前驅(qū)節(jié)點指向當前節(jié)點的起始位置;如果當前節(jié)點是第一個子節(jié)點,則 前驅(qū)節(jié)點指向當前節(jié)點父節(jié)點的起始位置;其他節(jié)點的前驅(qū)節(jié)點指向上一個兄弟節(jié)點。
3.根據(jù)權(quán)利要求1或2所述的XML文件中節(jié)點元素的索引信息表示法,其特征在于如 果當前節(jié)點是文件中最后一個節(jié)點,則后繼節(jié)點指向該節(jié)點的起始位置;如果當前節(jié)點是 葉子節(jié)點,則后繼節(jié)點指向當前節(jié)點父節(jié)點的下一個兄弟節(jié)點;其他節(jié)點的后繼節(jié)點指向 下一個兄弟節(jié)點。
4.根據(jù)權(quán)利要求3所述的XML文件中節(jié)點元素的索引信息表示法,其特征在于節(jié)點索 引信息的總長度為128bit,表示前驅(qū)節(jié)點和后繼節(jié)點的信息長度均為32bit,表示節(jié)點類 型的信息長度為4bit,表示深度的信息長度為8bit,表示節(jié)點長度的信息長度為20bit,表 示偏移量的信息長度為30bit,表示預留單元的信息長度為2bit。
全文摘要
本發(fā)明公開了一種用于解決大型XML文件的處理效率問題的XML節(jié)點元素索引信息表示方法?,F(xiàn)有的文檔對象模型在解析大型XML文件的應用中均存在一定的缺陷DOM對計算機的性能和內(nèi)存要很高的要求;SAX在處理文件編碼和文件編輯時存在困難。本發(fā)明的特征在于在解析XML文件時,將原始XML文件以字節(jié)數(shù)組的形式讀入內(nèi)存;在加載文件的同時,掃描文件內(nèi)容,并且為每一個掃描得到的節(jié)點創(chuàng)建索引信息,節(jié)點索引信息中的各信息單元以定長的整數(shù)形式保存。本發(fā)明加載XML文件時直接將XML文件以字節(jié)數(shù)組形式讀入內(nèi)存,加載效率高,速度快;索引信息以整數(shù)形式保存,容易編程處理;索引信息長度固定,實現(xiàn)了高效率檢索。
文檔編號G06F17/30GK101996252SQ20101054733
公開日2011年3月30日 申請日期2010年11月17日 優(yōu)先權(quán)日2010年11月17日
發(fā)明者吳俊 , 樓伯良, 王松, 董毅, 阮黎翔, 陸承宇, 黃曉明 申請人:浙江省電力試驗研究院;浙江省電力試驗研究院技術(shù)服務中心