專利名稱:單次遍歷樹生成前后序編碼的方法
技術領域:
本發明提供了一種建立XML索引的方法,具體涉及一種單次遍歷XML文檔生成前 后序編碼的方法,屬于數據結構與算法領域。
背景技術:
現有的XML索引技術將XML數據單元作為記錄保存,同時保存有助于確定節點間 結構關系的位置信息,位置信息通常分為兩類,一類是節點在某種遍歷方法所得字符序列 中的序號,另一類是節點在XML文檔中的路徑信息。基于前后序的索引編碼方式可以完整 地反映XML節點間的結構關系,進而將XML文檔表達成一個由節點組成的序列。前后序編碼是一種區間編碼方式,其基本思想是將在先序遍歷序列和后序遍歷序 列中的序列對組成的區間(pre,post)作為節點的位置信息,其基本索引記錄形式為(s, pre,p0St),其中s為XML樹中節點的標簽屬性。前后序編碼的方式經常應用于構建XML文 檔的索引。通常得到XML的前后序編碼都需要進行前序遍歷和后序遍歷兩次掃描,當XML文 檔很大時兩次掃描所消耗的時間代價是巨大的。
發明內容
本發明的目的在于提供一種方法,通過單次掃描XML樹同時實現前序和后序編 碼,借以解決通常的兩次掃描帶來的時間消耗問題。本發明的原理是把XML節點的遍歷序和編碼序分開,然后合并前序編碼和后序編 碼中相同的遍歷序,進而實現單次掃描的方案。在遍歷序中得到的XML節點序列形如“入 A,入B,入C,出C,入D,出D,出B,入E,出E,出A”,前序編碼以入節點為觸發編碼的時機,即 A,B,C,D,E,而后序編碼以出節點為觸發編碼的時機,即C,D,B, E,A,具體見圖2。對XML 樹的遍歷過程可參照前序編碼遍歷(或后序編碼遍歷)方案,關鍵的技術點為正確地定位 入、出節點的時機,并同時維護兩個獨立增長的前序編碼序和后序編碼序,當完成對XML樹 的一次掃描時每個節點都將得到自己的唯一的前序編碼和后序編碼。在程序代碼中,設立 進入遞歸函數的前、后分別為入、出節點的時機,并聲明兩個全局變量用來保存當前增長的 前序編碼序和后序編碼序。本發明的技術方案如下定義函數V,其參數為樹的節點n,該函數的執行流程如圖1所示,其實現方法如 下1).如果參數n為null,則退出本函數;否則執行2);2) 構建前序編碼;3).把參數n定義為其左子節點,遞歸調用函數V;4).構建后序編碼;5).構建前序編碼;
3
6).把參數n定義為其右子節點,遞歸調用函數V;7).構建后序編碼;8).函數結束。本發明通過單次掃描XML文檔同時實現前序和后序編碼的方法,把兩次掃描的消 耗降低到一次,當數據量很大時,單次掃描生成前后序編碼的方法減少了一半的時間開銷, 大大加速了 XML文檔構建索引的過程。
圖1為執行單次遍歷樹生成前后序編碼的流程圖;圖2為對一個樹進行遍歷的例子。
具體實施例方式下面用一個具體的實施例來對本發明做進一步的闡述。圖2是一個單次掃描生成前后序編碼的例子,該樹共有5個節點,其中A是根節 點。經過本發明提供的方法執行遍歷過程,可得出如下結果該樹的遍歷序列為入A,入B,入C,出C,入D,出D,出B,入E,出E,出A ;前序編碼 的序列為A,B, C,D,E ;后序編碼的序列為C,D,B, E,A。因此實現了單次遍歷樹同時編碼 前后序的功能。最后需要注意的是,公布實施例的目的在于幫助進一步理解本發明,但是本領域 的技術人員可以理解在不脫離本發明及所附的權利要求的精神和范圍內,各種替換和修 改都是可能的。因此,本發明 應局限于實施例所公開的內容,本發明要求保護的范圍以權 利要求書界定的范圍為準。
權利要求
一種構建XML前序和后序編碼的方法,其特征在于,所述方法對XML文檔的遍歷次數為一次;其實現方法為定義函數V,其參數為樹的節點n,該函數的實現方法如下1).如果參數n為null,則退出本函數;否則執行2);2).構建前序編碼;3).把參數n定義為其左子節點,遞歸調用函數V;4).構建后序編碼;5).構建前序編碼;6).把參數n定義為其右子節點,遞歸調用函數V;7).構建后序編碼;8).函數結束。
2.如權利要求1所述的方法,其特征在于,所述的前序編碼和后序編碼各保存在一個 全局變量中;所述的構建前序編碼和構建后序編碼是指對該全局變量的維護。
全文摘要
本發明公開了一種通過單次遍歷便可同時構建XML文檔前序編碼和后序編碼的方法,屬于數據結構與算法領域。本發明通過把XML節點的遍歷序和編碼序分開,然后合并前序編碼和后序編碼中相同的遍歷序,關鍵的技術點為正確地定位入、出節點的時機,并同時維護兩個獨立增長的前序編碼序和后序編碼序,當完成對XML樹的一次掃描時每個節點都將得到自己的唯一的前序編碼和后序編碼。本發明把兩次掃描的消耗降低到一次,當數據量很大時,單次掃描生成前后序編碼的方法減少了一半的時間開銷,大大加速了XML文檔構建索引的過程。
文檔編號G06F17/30GK101853310SQ201010204349
公開日2010年10月6日 申請日期2010年6月21日 優先權日2010年6月21日
發明者徐瀟然, 鄧志鴻 申請人:北京大學