專利名稱:結構化文檔管理設備、搜索設備、存儲和搜索方法及程序的制作方法
技術領域:
本發明涉及一種具有層級邏輯結構的結構化文檔數據庫。
背景技術:
存在不同方案的結構化文檔管理系統,用于存儲并搜索由例如可擴展的標注語言(XML)寫成的結構化文檔數據。
(1)一種用于將結構化文檔數據作為文本文件數據管理的簡單方案在這種方案中,當所述數據數量或大小增加時,存儲器的效率可能降低,或者其可能變得難以利用結構化文檔的特性來執行搜索。
(2)用于將結構化文檔數據存儲在關系數據庫(RDB)中的方案。
(3)用于利用為管理結構化文檔數據而開發的面向對象的數據庫(OODB)執行管理的方案。
RDB廣泛地使用的在基本系統中。而且,作為擴展RDB的XML使能的RDB是可利用的。由于RDB以平面表格形式存儲數據,它們要求能夠將層級結構的XML數據對應到表格的復雜的映射。由于這種映射,所述性能可能降低,除非對于表格預先設計滿意的圖表。
除了上述提到的方案(1至3),近來已經建議了新的方案。
(4)用于簡單地管理結構化文檔數據的方案在這種方案中,不用任何特殊的映射處理來存儲具有不同層級結構的XML數據。因此,在數據的存儲或獲取期間不存在特殊的開銷。而且,這個方案不需要成本高的預設計圖表,這使XML數據的結構可以根據商業環境中的變化而容易地變化。
即使結構化文檔數據是有效存儲的,如果沒有用于獲取所存儲的數據的手段也是沒有意義的。查詢語言作為用于獲取所存儲數據的手段而存在。如同在RDB領域的結構化查詢語言(SQL),定義了XML查詢語言(XQuery)。XQuery是用于將XML數據作為數據庫操作的語言。提供了用于獲取、收集和/或分析符合條件的數據集。而且,由于XML數據具有層級結構,其中諸如父/子和兄弟的元素被結合,提供了用于遵循所述結構的手段。
例如,KOKAI申請的公開號為No.2002-34618與No.2000-57163的日本專利,公開了一種用于遵循所存儲的結構化文檔數據的層級結構的技術,以搜索包括由搜索條件指定的特定元素和結構的結構化文檔數據。
通常,保存在數據庫中的結構化文檔數據的規模越大、結構化文檔數據項的數量越大,搜索條件越復雜,跟隨包括在每一個結構化文檔數據項的層級結構內的元素的處理越多的時間。而且,由于所存儲的結構化文檔數據項的數量和每一個結構化文檔數據項的尺寸的增加,變得不可能處理在存儲器內的數據項,由此其中多數是保存在諸如硬盤的輔助存儲器中。
在用于簡單管理結構化文檔數據的方案中,所述結構化文檔數據的元素的層級結構是直接存儲的。因此,為了檢查是否具有由搜索條件指定的元素或結構,必須頻繁地訪問保存在輔助存儲器中的結構化文檔數據的元素。對于更加復雜的搜索條件來說也是相同的。
在引用的現有技術中,當具有期望元素或結構的結構化文檔數據項是從存儲有具有層級結構的結構化文檔數據項的數據庫中檢索的時,在遍歷數據庫內的每一個結構化文檔數據項的層級結構的元素時,使用搜索條件搜索。因此,高速搜索是不可能的。所要搜索的每一個結構化文檔數據項的尺寸越大、結構化文檔數據項的數量越大、搜索條件越復雜,提高搜索處理的速度越困難。
發明內容
按照以上描述的情況展開了本發明,目的是提供一種結構化文檔管理設備以及能夠以高速搜索結構化文檔數據的搜索設備。
根據本發明的第一方面,提供了一種結構化文檔管理設備,包括存儲有多個結構化文檔數據項的數據存儲器,每一個數據項包括多個元素;存儲包括多個結構的公共結構的公共結構存儲器,所述多個結構包括在所述結構化文檔數據項內;被配置來獲取新的結構化文檔數據項的第一獲取單元;被配置來將所述公共結構更新為包括所述結構和包括在所述新結構化文檔數據項內多個結構的新公共結構的更新單元;被配置為獲取所述新公共結構和所述新結構化文檔數據項的結構之間的差分結構的第二獲取單元;存儲所述差分結構的差分結構存儲器;以及配置為將所述新結構化文檔數據項的元素的數組存儲到所述數據存儲器里的存儲單元,所述數組是基于所述差分結構排列的。
根據本發明的第二方面,提供了一種搜索設備,包括存儲有多個結構化文檔數據項的存儲器,每一個數據項包括多個元素;被配置來獲取用于搜索包括在所述元素內的期望的元素的搜索條件的獲取單元;以及被配置來從搜索包括在所述結構化文檔數據項內的特定結構化文檔數據項中搜索所期望的元素的搜索單元,所述搜索單元包括被配置來基于在所述特定結構化文檔數據項的結構和公共結構之間的差分結構,來重構所述特定結構化文檔數據項的結構的重構單元,所述公共結構包括在所述結構化文檔數據項內的多個結構,還包括所述特定結構化文檔數據項的結構;以及被配置來從所述重構的結構中檢測所期望的元素的檢測單元。
根據本發明的第三方面,提供了一種方法,包括將新的結構化文檔數據項存儲到存儲有多個結構化文檔數據項的存儲器里,每一個數據項包括多個元素;獲取包括在所述結構化文檔數據項和所述新的結構化文檔數據項內的多個結構的公共結構;獲取所述公共結構和所述新結構化文檔數據項的結構之間的差分結構;以及將所述新結構化文檔數據項的元素的數組存儲到所述存儲器里,所述數組是基于所述新的差分結構排列的。
根據本發明的第四方面,提供了一種方法,包括從搜索包括在多個結構化文檔數據項內的特定結構化文檔數據項中搜索所期望的元素,每一個數據項包括多個元素;基于在所述特定結構化文檔數據項的結構和公共結構之間的差分結構,來重構所述特定結構化文檔數據項的結構,所述公共結構包括在所述結構化文檔數據項內的多個結構,還包括所述特定結構化文檔數據項的結構;以及從所述重構的結構中檢測期望的元素。
根據本發明的第五方面,提供了一種存儲在由計算機讀取的媒質中的程序,所述程序包括用于指示計算機存儲每一個都包括多個元素的多個結構化文檔數據項的裝置,通過所述程序指令存儲新結構化文檔數據項;用于指示計算機獲取包括在所述結構化文檔數據項和新結構化文檔數據項內的多個結構的公共結構的裝置;用于指示計算機獲取所述公共結構和所述新結構化文檔數據項的結構之間的差分結構的裝置;以及用于指示計算機將所述新結構化文檔數據項的元素的數組存儲到所述存儲器里的裝置,所述數組是基于所述新的差分結構排列的。
根據本發明的第六方面,提供了一種在由計算機讀取的媒質中存儲的程序,所述程序包括用于指示計算機存儲每一個都包括多個元素的多個結構化文檔數據項的裝置,所述程序用作從包括在所述結構化文檔數據項內的特定結構化文檔數據項中搜索所期望的元素的搜索設備;用于基于所述特定結構化文檔數據項的結構和公共結構之間的差分結構,來重構所述特定結構化文檔數據項的結構的裝置,所述公共結構包括在所述結構化文檔數據項內的多個結構,還包括所述特定結構化文檔數據項的結構;以及用于指示計算機從所述重構的結構中檢測所期望元素的裝置。
圖1是說明按照本發明實施例的結構化文檔管理系統的功能配置例子的視圖;圖2是說明服務器的硬件配置例子的視圖;圖3是說明結構化文檔數據的例子(文檔A)的視圖;圖4是說明結構化文檔數據的另一個例子(文檔B)的視圖;圖5是說明結構化文檔數據庫的數據結構的視圖;圖6是說明所述文檔A的文檔樹的視圖;圖7是說明所述文檔A的結構化數據的視圖;圖8是說明公共結構化數據例子的視圖;圖9是說明指示在圖8的公共結構化數據和文檔A之間差異的第一差分結構的視圖;圖10是說明指示在圖8的公共結構化數據和文檔A之間差異的第二差分結構的視圖;圖11是說明所述文檔B的文檔樹的視圖;圖12是說明所述文檔B的結構化數據的視圖;圖13是說明另一個公共結構化數據例子的視圖;圖14是說明指示在圖13的公共結構化數據和文檔B之間差異的第一差分結構的視圖;圖15是說明指示在圖13的公共結構化數據和文檔B之間差異的第二差分結構的視圖;圖16是說明差分結構化數據的存儲裝置例子的視圖;圖17是說明文檔對象記錄(數組)的存儲裝置例子的視圖;圖18是有利于解釋結構化數據提取處理的流程圖;圖19是有利于解釋公共結構注冊處理的流程圖;圖20是有利于解釋差分結構注冊處理的流程圖;圖21是有利于解釋差分結構注冊處理的另一個流程圖;圖22是說明結構化文檔數據的另一個例子(文檔C)的視圖;圖23是說明所述文檔C的文檔樹的視圖;
圖24是說明所述文檔C的數據結構的視圖;圖25是說明指示在圖13的公共結構化數據和文檔C之間差異的第一差分結構的視圖;圖26是說明指示在圖13的公共結構化數據和文檔C之間差異的第二差分結構的視圖;圖27是說明差分結構化數據的存儲裝置例子的視圖;圖28是有利于解釋文檔對象存儲處理的流程圖;圖29是說明保存在索引數據存儲裝置中的索引數據的數據結構的示意圖;圖30是說明文檔對象記錄(數組)的存儲裝置例子的視圖;圖31是說明查詢數據例子的視圖;圖32是有利于解釋搜索處理單元的操作的概要的流程圖;圖33是有利于解釋結構化掃描單元的操作的流程圖;圖34是說明從圖31的查詢數據獲取的查詢圖表的視圖;圖35是有利于解釋基于圖34的查詢圖表的搜索處理的視圖;圖36是說明結果數據例子的視圖;圖37是說明另一個查詢數據例子的視圖;圖38是說明從圖37的查詢數據獲取的查詢圖表的視圖;圖39是有利于解釋基于圖38的查詢圖表的搜索處理的視圖;以及圖40是說明另一個結果數據例子的視圖。
具體實施例方式
本發明的實施例將參照附圖來描述。
圖1是說明按照本發明實施例的結構化文檔管理系統的功能結構例子的視圖。如所示,所述結構化文檔管理系統基本上包括客戶機201和服務器101。當從所述客戶機201接收儲存數據或搜索數據的請求時,所述服務器101執行相對應的處理。
所述客戶機201主要包括結構化文檔注冊單元202、搜索單元203、輸入單元204和輸出單元205。由諸如鍵盤和鼠標的輸入裝置形成的輸入單元204用來輸入結構化文檔和多種指令。所述結構化文檔注冊單元202用來將例如預先存儲在與客戶機201結合的存儲器內的結構化文檔存儲到結構化文檔數據庫(結構化文檔DB)111中。所述結構化文檔注冊單元202將存儲請求連同所要存儲的結構化文檔發送以所述服務器101。
根據由用戶通過所述輸入單元204輸入的指令,所述搜索單元203產生查詢數據并且將包括所述查詢數據的搜索請求發送到所述服務器101,所述查詢數據例如包括為了所期望的數據而搜索所述結構化文檔數據庫111的搜索條件。而且,所述搜索單元203接收從所述服務器101返回的對應于所述搜索請求的結果數據,并且將其顯示在所述輸出單元205上。
所述服務器101包括請求處理單元102、存儲處理單元103和搜索處理單元104。而且,所述服務器101連接到所述結構化文檔數據庫111。所述結構化文檔數據庫111包括公共結構化數據存儲裝置112、差分結構化數據存儲裝置113、索引數據存儲裝置114、文檔對象數據存儲裝置115。
所述請求處理單元102判斷從所述客戶機201發送的請求是否是存儲請求或搜索請求,將所判斷的請求分配到所述存儲處理單元103或搜索處理單元104,以及將所述存儲處理單元103或搜索處理單元104的處理結果返回到所述客戶機201。
所述存儲處理單元103從所述客戶機201接收存儲請求,以及將從所述客戶機201來的結構化文檔存儲到所述結構化文檔數據庫111中。所述存儲處理單元103包括文檔數據分析單元31、結構化數據提取單元32、公共結構注冊單元33、差分結構注冊單元34和文檔對象存儲單元35。
所述文檔數據分析單元31分析從所述請求處理單元102發送的每一個結構化文檔的結構。基于所述分析結果,所述結構化數據提取單元32提取所述結構化文檔的(文檔)結構化數據。所述差分結構注冊單元34將保存在所述公共結構化數據存儲裝置112中的所述結構化數據和所述公共結構化數據之間的差異存儲到所述差分結構化數據存儲裝置113中。所述公共結構注冊單元33更新保存在所述公共結構化數據存儲裝置112中的公共結構化數據。
所述文件對象存儲單元35將結構化文檔數據存儲到所述文件對象數據存儲裝置115中、還將用于檢測包括在所述結構化文檔數據中項的位置的索引數據存儲到所述文檔對象數據存儲裝置115中。由所述文檔數據分析單元31分析的對應于結構化文檔數據項的每一個元素(節點)的對象數據,是基于從所述結構化文檔數據項提取的差分結構化數據的次序來存儲到所述文檔對象數據存儲裝置115里的。
所述搜索處理單元104從所述客戶機201接收搜索請求,在所述結構化文檔數據庫111中檢測相應于在所述請求中指定的條件(查詢數據)的數據,以及返回作為檢測結果數據的所檢測的數據到所述客戶機201。所述搜索處理單元104基本上包括查詢數據分析單元41、查詢執行單元42和結果產生單元46。所述查詢執行單元42包括結構掃描單元43、索引掃描單元44和數據聯接單元45。
所述查詢數據分析單元41分析從所述請求處理單元102發送的查詢數據的結構。基于所述分析結果,所述查詢執行單元42利用所述結構掃描單元43和索引掃描單元44,查閱存儲在所述公共結構化數據存儲裝置112中的公共結構化數據、存儲在所述差分結構化數據存儲裝置113中的差分結構化數據和存儲在所述索引數據存儲裝置114中的索引數據。所述查詢執行單元42然后利用所述數據聯接單元45聯接所述參照結果。
基于從所述數據聯接單元45獲取的數據,所述結果產生單元46從所述文檔對象數據存儲裝置115讀取對象數據,以及產生與包含于所述查詢數據中的條件相同的數據。
圖2示出了所述服務器101的硬件配置例子。如所示,總線1連接到通信I/F(接口)單元2、便攜式記錄媒質驅動單元3、顯示單元4、輸入單元5、輸出單元6、運算單元(CPU)7、外部存儲單元8以及存儲器9。在圖2的配置中,所述總線1還連接到在圖1中出現的所述結構化文檔數據庫111。
用于實現所述請求處理單元102、存儲處理單元103和搜索處理單元104的功能的程序,預先存儲在圖2中示出的外部存儲單元8中,以及從那里讀取到所述存儲器9以被運行。
圖3示出了結構化文檔數據的例子。可擴展標注語言(XML)是作為用以表示結構化文檔的典型語言來示范。在圖3中示出的文檔(文檔A)是由XML寫成的。在XML中,結構化文檔的每一個組成部分稱作“元素”,每一個元素使用標記來編寫。特別地,每一個元素是通過在兩個標記之間插入文本數據來表示,也就是一個標記(開始標記)指示每一個元素的開始,一個標記(結束標記)指示每一個元素的結束。保持在所述開始和結束標記之間的文本數據是包括在由所述開始和結束標記表示的一個元素中的文本元素(文本節點)。
在圖3的例子中,保持在標記<書>和</書>之間的元素包括根元素以及保持在<標題>和</標題>之間、在<作者>和</作者>之間、和在<摘要>和</摘要>之間的三個子元素。保持在<標題>和</標題>之間的子元素包括文本元素“數據庫”。而且,保持在<作者>和</作者>之間的子元素包括兩個子元素,每一個子元素保持在<作者>和</作者>之間。
圖4示出了所述結構化文檔數據的另一個例子,其類似于圖3的例子。在圖3和4中示出的結構化文檔數據項的不同在于,在后者中,所述結構化文檔數據(文檔B)包括三個<作者>元素、以及代替<摘要>元素的<關鍵詞>元素。
例如在XML中表示的結構化文檔具有以下特點它們是層級數據模型;它們可以包含相同的元素;它們包含按次序排列的元素;以及它們可以或可以不具有圖表。
圖5邏輯上示出了結構化文檔數據庫的數據結構,其具有形式為節點和弧線(arc)的樹狀結構。多個結構化文檔是使用作為根的節點“根”而存儲為一個結構化文檔的一部分。
節點“書夾”作為所述根節點“根”的子節點而存在。在節點“書夾”下面,存在有在圖3和4中示出的文檔A和B的各自的子樹。
在圖5的情況下,使用“文件夾”和“文檔”的概念。特別地,所述節點“根”和“書夾”被認為是文件夾,多個文檔(在這種情況下,兩個文檔A和B)存在于所述文件夾下面。
實際上,每一個節點(包括每個文本節點)是作為用于在所述文檔對象數據存儲裝置115中的對象數據的文件而保持的。稱作對象ID(OID)的標識符分配給每個節點(包括每個文本節點)。在圖5中,為了簡化說明,OID由數字表示。任何期望的對象數據可以通過指定其OID來獲取。實際上,每個OID包含有作為分配給包括每個節點(包括每個文本節點)的結構化文檔的標識符的文檔ID、以及指示在所述結構化文檔的存儲區中的存儲槽位置的存儲槽ID,所述結構化文檔是相應于每個節點的對象數據的結構化文檔。
對應于各自節點的對象的屬性包括諸如子節點OID和父節點OID、相關弧線的信息,還包括標記名稱。
(存儲)現在參照圖6至10,將簡短地描述當在圖3中示出的文檔A存儲到所述結構化文檔DB 111里時執行的所述存儲處理單元103的操作。這里假定所述文檔A是存儲在所述結構化文檔DB 111中的第一個結構化文檔數據。在這種情況下,還不存在公共的結構化數據。
為接收從所述客戶機201發出的存儲所述文檔A的請求時,首先,所述文檔數據分析單元31分析所述文檔A的結構,由此輸出文檔樹,其位于作為根節點的節點“書”下面,如圖6所示。這種處理可以使用由公眾已知的編譯程序和編譯程序工具代表的結構分析技術來實現,諸如Yacc和Lex。
所述結構化數據提取單元32從如圖6中示出的這種文檔樹中獲取如圖7中示出的這種結構化數據。所述公共結構注冊單元33從圖7中示出的公共結構獲取如圖8中示出的這種公共結構,以及將其存儲到所述公共結構化數據存儲裝置112里。所述公共結構表示在所存儲的結構化文檔中通常采用的結構。如圖8所示,在所述公共結構中,具有相同標記名稱的多個兄弟節點由一個節點代表。注意到在所述公共結構化數據存儲裝置112中,用于公共結構化數據的節點“根”是作為根節點而最初產生的,其統率表示所述公共結構化數據的樹。
所述差分結構注冊單元34獲取與所述結構有關的信息,也就是獲取如圖10所示的這種差分結構化數據(第二差分結構化數據),所述結構包括在圖7所示文檔A的結構化數據中、而不是包括在圖8所示的公共結構化數據中。在這種實施例中,為了獲取所述第二差分結構化數據,將獲取如圖9所示的這種第一差分結構化數據。在以下說明中,如果僅僅指示包括在所述第一和第二差分結構化數據中的第二差分結構化數據,其可以簡單地稱為“差分結構化數據”。
所述文檔A的結構化數據的節點“作者們”包括兩個節點“作者”。也就是,存在相同的子結構(子樹)。然而,由于這種重復結構是從所述公共結構排除的,其可以寫成如圖10所示的第二差分結構化數據。
在所述第二差分結構化數據中,如果在結構化數據的某個節點下面重復地檢測到相同子樹(部分或全部的相同子樹),則將指示所述子樹檢測的數量的信息將作為屬性信息增加到所述特定節點,并且僅使用一個子樹來表示相同的子樹,如圖10所示。在這種情況下,如果存在不一定包括在相同子樹中的節點(不定節點),則將指示所述節點是不定節點的標志“?”將作為屬性信息附加到所述節點。
所述公共結構化數據覆蓋至此存儲的多個結構化文檔數據項,而對于所存儲的每個結構化文檔數據項存在一個差分結構化數據項。而且,當存儲結構化文檔數據項時,如果此數據項包含有不包括在當前公共結構化數據內的節點,所述節點將增加到所述公共結構化數據。因此,簡單地增加了所述公共結構化數據大小。
用于識別的節點ID分配給存儲在所述公共結構化數據存儲裝置112中公共結構化數據的各個節點。在圖8所示的公共結構情況下,節點ID“T0”指示根節點,節點ID“T1”到“T7”分配給另一個節點。也就是,當存儲所述文檔A時,用于去獲取差分結構化數據的公共結構化數據包含具有節點ID“T0”至“T7”的節點。當增加了其它結構化文檔數據項時,新的節點將增加到所述公共結構化數據。指示所述增加次序的新的節點ID將附加到所述新的節點。在所述實施例中,為了區分作為時標的公共結構化數據,所述公共結構化數據的最后節點ID將與所述差分結構化數據一起存儲在所述差分結構化數據存儲裝置113中。
所述文檔A的差分結構化數據與用來獲取所述差分結構化數據的公共結構化數據的最后節點ID“T7”一起存儲在所述差分結構化數據存儲裝置113中,該存儲是例如圖16所示的“ManagementT7[1][1][2*][1][1][1]”的數據組的形式。
基于在圖10中所示的差分結構化數據,所述文檔對象存儲單元35將排列的對象數據項存儲到所述文檔對象數據存儲裝置115里,所述對象數據項對應于所述文檔樹的各個節點(包括文本節點)。所述文檔對象數據存儲裝置115具有用于存儲各個結構化文檔數據項的多個存儲區,每個存儲區分成多個存儲槽。每個存儲槽具有指示其位置的存儲槽ID,以及用來存儲對應于每個存儲區的結構化文檔數據的每個對象數據項。存儲在一個存儲區中的結構化文檔數據項被稱作文檔對象記錄。所述文檔對象記錄是形成所述結構化文檔數據的多個元素的數組。所述數組元素的位置信息項對應于各自的存儲槽ID。
如圖17所示,在存儲文檔(也就是文檔A)的存儲區中,首先存儲對應于所述公共結構化數據的各個節點的對象數據項,然后順序存儲在所述文檔樹中的不定節點或文本節點。所述對象數據項是以從所述差分結構化數據的左邊節點開始的次序、以及以從所述差分結構化數據的最高級節點開始的次序存儲的。
將給出當將圖4的文檔B存儲到所述結構化文檔DB 111中時、執行的所述存儲處理單元103的操作的簡短說明。更具體地說,將給出其中在圖8中所示的公共結構化數據存儲到所述公共結構化數據存儲裝置112里的情況的說明。
當接收從所述客戶機201發出的存儲所述文檔B的請求時,所述文檔數據分析單元31分析所述文檔B的結構,由此輸出文檔樹,其位于作為根節點的節點“書”下面,如圖11所示。
所述結構化數據提取單元32從如圖11中所示的這種文檔樹中獲取如圖12中所示的這種結構化數據。
所述公共結構注冊單元33將存儲在所述公共結構化數據存儲裝置112和在圖8中所示的公共結構化數據與圖12中所示的結構化數據相比較,由此更新圖8的公共結構化數據。也就是,在這種情況下,將增加作為如圖13所示的節點“書”的子節點的所述節點“關鍵詞”,所述節點“關鍵詞”不是包括在圖8的公共結構化數據中、而是包括在圖12的結構化數據中。注意所述節點“關鍵詞”的節點ID是“T8”。如圖8所示的這種公共結構是從在圖12中所示的結構化數據獲取的,并且存儲在所述公共結構化數據存儲裝置112中。
所述差分結構注冊單元34獲取差分結構化數據(見圖15),其指示在圖12的結構化數據和圖13的公共結構化數據之間的差分結構。特別地,所述單元34獲取如圖14所示的這種第一差分結構化數據。如可以從圖14所理解,所述第一差分結構化數據另外包括不是包括在圖12的結構化數據中、而是包括在圖13的公共結構化數據中的節點,也就是節點“摘要”。將指示檢測數量是零的屬性信息“0”附加到這個節點。這意味著由所述節點“摘要”表示的元素不存在于所述文檔B中,而是存在于所述公共結構化數據中。
包括在文檔B的結構化數據中的節點“作者們”具有三個節點“作者”,其意味著存在相同的子結構(子樹)。為表示這些,在圖15的第二差分結構化數據中,使用代表所述重復結構的一個子結構,其具有附加在該處的指示檢測數量是3的屬性信息“3*”。
所述文檔B的差分結構化數據與用來獲取所述差分結構化數據的公共結構化數據的最后節點ID“T8”一起存儲在所述差分結構化數據存儲裝置113中,所述存儲是以例如圖16所示的“ManagementT8[1][1][3*][1][1]
[1]”的數據組的形式。
如圖17所示,在存儲文檔B的存儲區中,首先存儲對應于所述公共結構化數據的各自節點的對象數據項,然后順序存儲在所述文檔樹中的不定節點或文本節點。所述對象數據項是以從在所述根節點下的結構的第一子節點開始的次序存儲的,使用所述差分結構化數據的根節點作為起始點。對于在每個子節點下的結構,所述對象數據項是以從所述差分結構化數據的最高級節點開始、并且以最低級節點結束的次序存儲的。
圖18是有利于解釋所述結構化數據提取單元32的結構化數據提取處理的流程圖。將給出從圖6的文檔樹中提取圖7的結構化數據的情況的說明。所述結構化數據是通過向下跟隨從所述根節點開始的文檔樹的節點,以及增加作為用于所述結構化數據的節點的所檢測的節點而提取的。
特別地,首先,從所述文檔數據分析單元31輸出的圖6中所示文檔A的文檔樹的根節點被設置為所述結構化數據的根節點(步驟S1)。為了將所述文檔樹的節點增加到在所述根節點下的結構化數據,所述文檔樹的根節點被設置為“d”節點,以及所述結構化數據的根節點被設置為“f”節點(步驟S2)。如果所述“d”節點包括子節點(在步驟S3為是),所述“d”節點的第一子節點被設置為“d”節點′(步驟S4)。所述“d”節點′將作為所述“f”節點的子節點被增加,指示檢測數量是1的屬性信息“1”附加到所述子節點“d”節點′(步驟S5)。在屬于所述“d”節點的所有子節點上執行步驟S4和S5之后,將更新所述“d”節點和“f”節點,直到在所述文檔樹的所有節點上執行了步驟S4和S5(步驟S6和S7)。也就是在步驟S7,所述文檔樹的下一個節點(也就是跟隨被設置作為當前“d”節點的節點)將被設置為新的“d”節點,以及對應于所述新的“d”節點的結構化數據的節點被設置為新的“f”節點。隨后,所述程序回到步驟S3,以及重復步驟S3至35。
在圖18所示的處理中,將以在所述結構化數據的根節點下依次增加節點“書”、“標題”和“作者”。然后,在所述節點“作者”下增加所述節點“作者們”的第一子節點,也就是節點“作者”,以及在所述節點“作者”下增加所述節點“作者”的子節點,也就是節點“名”和“姓”。類似地,在所述節點“作者們”下增加所述節點“作者們”的第二子節點,也就是另一個節點“作者”,以及在其下面增加這個節點的“作者”的子節點,也就是節點“名”和“姓”。最后,增加作為所述結構化數據的節點“書”的子節點的節點“摘要”。指示檢測數量是1的屬性信息將附加到每個節點。
圖19是有利于解釋所述公共結構注冊單元33的公共結構注冊處理的流程圖。將給出當存儲包括在圖7的結構化數據中的第一文檔A時、產生新的公共結構化數據的情況的說明。在這種情況下,所述公共結構化數據是通過在向下跟隨圖7的結構化數據時、將所述結構化數據的節點與所述公共結構化數據的節點相比較而更新的,由此將不包括在所述公共結構化數據內的節點(“g”節點)增加到所述公共結構化數據。如上所述,當在所述結構化數據中檢測到相同節點(相同元素名稱的節點)時,僅將其中一個節點增加到所述公共結構化數據。
特別地,從所述結構化數據提取單元32輸出的圖7中所示文檔A的結構化數據的根節點“書”被設置為“f”節點(步驟S11),。如果所述公共結構化數據在所述根節點“根”下面包含對應于“f”節點的節點,則程序進行到步驟S15,反之如果其不包含這種節點,則程序進行到步驟S13(步驟S12)。由于這種情況是指向新的公共結構化數據的產生的,在所述節點“根”下面不存在公共結構化數據,因此程序進行到步驟S13,其中增加作為所述節點“根”的子節點的“f”節點。也就是,增加所述節點“書”,以及將所述結構化數據的節點“書”設置為“g”節點(步驟S14)。
其后,重復步驟S16到S21,由此在所述“g”節點下構造公共結構化數據。特別地如果所述“f”節點具有子節點(在步驟S16為是),則所述“f”節點的第一子節點設置為“f”節點′(步驟S17)。而且,如果所述公共結構化數據的“g”節點不包含與所述“f”節點′相同的節點(在步驟S18為否),所述“f”節點′將作為所述“g”節點的子節點而增加,并且將節點ID附加到所述子節點(步驟S19)。相反,如果所述公共結構化數據的“g”節點包含與所述“f”節點′相同的子節點(在步驟S18為是),程序回到步驟S16,由此將所述“f”節點的第二子節點設置為新的“f”節點′。對屬于所述“f”節點的所有子節點執行步驟S18和S19之后,更新所述“f”節點和“g”節點,直到對所述結構化數據的所有節點執行了步驟S18和S19(步驟S20和S21)。也就是在步驟S21,所述結構化數據的下一個節點(也就是跟隨被設置為當前“f”節點的節點)被設置為新的“f”節點而設置,并且對應于所述新的“f”節點的公共結構化數據的節點被設置為新的“g”節點。隨后,所述程序回到步驟S16,并且重復步驟S16至S19。
通過上述的處理,獲取如圖8所示的這種公共結構化數據,其中在所述結構化數據中檢測到的相同的多個子樹中的一個代表所述多個子樹。最后,如圖8所示的這種公共結構化數據存儲在所述公共結構化數據存儲裝置112中(步驟S22)。
現在將給出在將具有圖12所示結構化數據的文檔B存儲在其中已經存儲了圖8所示這種公共結構化數據的狀態中時、執行所述公共結構注冊處理的說明。在這種情況下,將僅描述與存儲所述文檔A的情況有關的不同點。在步驟S15,所述公共結構化數據的節點“書”被設置為“g”節點。在步驟S16到S21,更新存儲在所述公共結構化數據存儲裝置112中的公共結構化數據。包括在圖12的結構化數據中、而不包括在圖8的公共結構化數據中的節點是節點“關鍵詞”。因此,當在步驟S17將作為所述節點“書”的第三子節點的節點“關鍵詞”設置為“f”節點′時,在步驟S18對所述詢問的應答為否(由于圖8的公共結構化數據的節點“書”的子節點不包括所述節點“關鍵詞”)。這時,程序進行到步驟S19,其中所述節點“關鍵詞”作為所述節點“書”的另一個子節點而增加,節點ID“T8”附加到所增加的節點。
從上述處理,獲取了如圖13所示的這種公共結構化數據。最后,更新存儲在所述公共結構化數據存儲裝置112中的公共結構化數據(步驟S22),其類似于在圖13中所示的公共結構化數據。
圖20和21是有利于解釋由所述差分結構注冊單元34執行的差分結構注冊處理的流程圖。將例如使用其中存儲有具有圖12所示結構化數據的文檔B的情況,給出所述差分結構注冊處理的說明。
首先,將圖12的結構化數據和圖13的公共結構化數據相比,由此檢測不是包括在圖的結構化數據中、而是包括在圖13的公共結構化數據中的節點,也就是節點“摘要”。隨后,將具有附加其上的屬性信息“0”的所述節點“摘要”增加到所述結構化數據,所述屬性信息指示檢測的數量是零。因此,產生如圖14所示的這種第一差分結構化數據。
特別地,圖12中所示結構化數據的根節點“書”將設置為“f”節點(步驟S31)。然后,對應于所述“f”節點的所述公共結構化數據中的節點被設置為“g”節點(步驟S32)。
如果所述“g”節點具有子節點(在步驟S33為是),所述“g”節點的第一子節點被設置為“g”節點′(步驟S44)。而且,如果所述結構化數據的“f”節點不包含與所述“g”節點′相同的節點(在步驟S35為否),所述“g”節點′作為所述“f”節點的子節點而添加,以及將指示檢測數量是零的屬性信息“0”附加到這個子節點(步驟S36)。相反,如果所述結構化數據的“f”節點包含與所述“g”節點′相同的節點(在步驟S35為是),程序回到步驟S33,由此將所述“g”節點的第二子節點設置為新的“g”節點′(步驟S34)。
例如,如果在步驟S34將作為所述節點“書”的第三子節點的節點“摘要”設置為新的“g”節點′,在步驟S35對所述詢問的應答為否(由于圖12的結構化數據的節點“書”的子節點不包括節點“摘要”)。這時,程序進行到步驟S36,其中增加作為所述節點“書”的另一個子節點的節點“摘要”,以及將指示檢測數量是零的屬性信息“0”附加到所增加的節點。
在屬于所述“g”節點的所有子節點上執行步驟S35和S36之后,更新所述“f”節點和“g”節點,直到在所述公共結構化數據的所有節點上執行了步驟S35和S36(步驟S37和S38)。也就是在步驟S38,所述結構化數據的下一個節點(也就是跟隨被設置為當前“g”節點的節點)被設置為新的“g”節點,以及對應于所述新的“g”節點的結構化數據的節點被設置為新的“f”節點。隨后,所述程序回到步驟S33,以及重復步驟S33至S36。
從上述描述的處理中,獲取如圖14所示的這種第一差分結構化數據。
隨后,產生如圖15所示的這種第二差分結構化數據,其中包括在所述第一差分結構化數據中的相同子結構中的一個代表它們。如果在所述第一差分結構化數據的特定節點下多次檢測到相同的子樹(在圖21中的步驟S41為是),就以完全重復形式重寫這個重復結構(步驟S42)。也就是,相同的子樹由包括在它們中的一個子樹代表,并且指示所述子樹的檢測數量的屬性信息將附加到所述子樹的根節點。
圖14的第一差分結構化數據包含在所述節點“作者們”下的三個相同的子樹,其使用節點“作者”作為根。因此,如圖15所示,所述三個子樹中的一個代表它們,并且將指示所述子樹的檢測數量是3的屬性信息“3”附加到所述子樹的根節點“作者”。
如果在所述第一差分結構化數據的特定節點下檢測到相同的子樹,并且如果至少其中一個子樹僅僅具有任何其它子樹的部分結構(在步驟S43為是),就以部分重復形式重寫所述重復結構(步驟S44)。
現在將描述部分重復形式,使用在圖24中所示的結構化數據作為例子。圖24的結構化數據包含在節點“作者們”下的、使用有節點“作者”作為根的的兩個子樹。其中一個子樹不包括節點“姓”,而另一個子樹具有如所述文檔B的結構化數據的相同結構(見圖12)。
圖25示出了指示在圖24的結構化數據和圖13的公共結構化數據之間差異的第一差分結構化數據。而且,圖26示出了第二差分結構化數據,其中在圖25中的其中一個相同子結構代表它們。
圖25的第一差分結構化數據包含在所述節點“作者”下的兩個相同的子樹,其使用節點“作者”作為根。其中一個子樹不包括所述節點“姓”。因此,在圖21所示的步驟S44,如圖26所示,所述兩個子樹中的一個被用作代表,并且指示所述子樹的檢測數量的屬性信息“2”附加到所述子樹的根節點“作者”。而且,指示不定節點的屬性信息“?”附加到包括在所述子樹中的節點“名”。
參照前面的圖21,除在所述第一差分結構化數據中的重復結構的部分(也就是,不包括重復結構并且可以由不多于預定門限值的信息數量表示的部分,其展開的形式未改變)是以展開的形式表示的(步驟S45)。也就是,由圖14的第一差分結構化數據中的節點“書”、“標題”、“作者”、“摘要”和“關鍵詞”形成的子樹在圖15的第二差分結構化數據中保持不變。
由上述處理獲取的所述第二差分結構化數據以數據數組形式重寫(步驟S46)。特別地,附加到圖15中第二差分結構化數據的節點的各自檢測的數量是以從在所述根節點下的結構的第一子節點開始的次序排列的,其中使用所述根節點作為起始點。涉及在每個子節點下的結構,所述檢測的數量是以從所述結構化數據的最高級節點開始、并且以最低級節點結束的次序而排列的。換句話說,當按所述節點“書”、“標題”“作者們”、“作者”、“名”、“姓”、“摘要”和“關鍵詞”的次序排列節點的各自檢測的數量時,獲取數據[1][1][3*][1][1]
[1]。
如圖16所示,所述差分結構注冊單元34在所述差分結構化數據存儲裝置113中存儲所獲取的差分結構化數據,其具有附加的節點ID“T8”(稱作管理信息),節點ID“8”被分配給所述公共結構化數據的最后節點來獲取所述差分結構化數據。
圖16示出了差分結構化數據的存儲器的例子。如所示,所述差分結構化數據存儲裝置113存儲文檔A和文檔B的差分結構化數據。
所述文檔A的差分結構化數據是以數據數組形式排列,實際上以[1][1][2*][1][1][1]的數字序列形式排列。每個數據項具有以下意義[1]檢測到所述節點“標題”一次;[1]檢測到所述節點“作者”一次;[2*]檢測到使用所述節點“作者”作為根的結構兩次;[1]檢測到所述節點“作者/名”一次;[1]檢測到所述節點“作者/姓”一次;和 檢測到所述節點“摘要”一次。
所述文檔A的差分結構化數據是以數據數組形式排列,實際上以[1][1][3*][1][1]
[1]的數字序列形式排列。每個數據項具有以下意義[1]檢測到所述節點“標題”一次;[1]檢測到所述節點“作者”一次;[3*]檢測到使用所述節點“作者”作為根的結構三次;[1]檢測到所述節點“作者/名”一次;[1]檢測到所述節點“作者/姓”一次;和檢測到所述節點“摘要”零次,也就是沒有檢測到;和[1]檢測到所述節點“關鍵詞”一次。
附加到每個差分結構化數據項的管理信息指示最大節點數量,從其中可以確定用于每個差分結構化數據項的公共結構化數據的范圍。每次存儲具有不包括在所述公共結構化數據中的新的結構化文檔數據時,就將這個節點增加到所述公共結構化數據。由于因此簡單地增加所述節點的數量,所述管理信息指示用于產生每個差分結構化數據項的公共結構化數據的范圍。
圖22示出了所述結構化文檔數據的另一個例子,其具有類似于圖3的結構化文檔數據(文檔A)、或者圖4的結構化文檔數據(文檔B)的結構。也就是,在圖22的結構化文檔數據(文檔C)中,所述節點“作者”具有兩個節點“作者”,所述第二個節點“作者”不具有節點“姓”。而且,不存在節點“摘要”,而存在節點“關鍵詞”。
圖23示出了在圖22中所示的文檔C的文檔樹。
圖24示出了通過基于在圖23中所示的文檔C的文檔樹、而執行在圖18中所示的結構化數據提取處理所獲取的結構化數據。
當存儲圖22的文檔C時,將由圖19的公共結構注冊處理來存儲到所述公共結構數據存儲裝置112里的公共結構化數據和圖13中所示的相同。因此,如果圖13中所示的公共結構化數據已經存儲在所述公共結構數據存儲裝置112中,就不對其進行更新。圖25示出了通過使用圖24的結構化數據和圖13的公共結構化數據來執行圖24的差分結構注冊處理所獲取的第一差分結構化數據。
在圖25的第一差分結構化數據中,在所述節點“作者們”下面存在有使用節點“作者”作為根的兩個子樹,其中一個子樹不具有所述節點“姓”。而且,將具有指示所述檢測數量是零的屬性信息的節點“摘要”增加到所述節點“書”。類似地,將具有指示所述檢測數量是零的屬性信息的節點“姓”增加到所述第二節點“作者”。在圖26中所示的第二差分結構化數據包括具有指示所述檢測數量是零的屬性信息“0”的節點“摘要”。
在圖26中所示的第二差分結構化數據可以[1][1][2*][1][?]
[1]的數字序列來表示。如圖27所示,所述差分結構注冊單元34在所述差分結構化數據存儲裝置113中存儲具有附加的節點ID“T8”的差分結構化數據,節點ID“8”被分配給所述公共結構化數據的最后節點來獲取所述差分結構化數據。
參照圖28的流程圖,將使用所述文檔B的文檔樹(見圖11)的情況作為例子給出所述文檔對象存儲單元35的操作的說明。當以從所述根節點開始的次序向下跟隨圖15的第二差分結構時,首先,對應于所述公共結構化數據的節點的所述文檔樹的對象數據項將順序存儲到所述文檔對象數據存儲裝置115里,然后將所述文檔的不定節點和文本節點順序存儲到其中。
特別地,在圖15中所示的由所述差分結構注冊單元34獲取的第二差分結構化數據的根節點(節點“書”)被設置為“S”節點。而且,圖11的所述文檔樹的根節點(節點“書”)設置為“d”節點(步驟S51)。
如果以展開的形式表示所述“S”節點(在步驟S52為是),則對應于所述文檔樹的“d”節點的對象數據將存儲到所述文檔對象數據存儲裝置115里(步驟S53)。目前,由于所述“s”節點處于展開的形式設置到了的所述節點“書”,所述對象數據、也就是對應于所述“d”節點的“書”,被存儲到所述文檔對象數據存儲裝置115的文檔B存儲區的第一存儲槽(存儲槽ID=0)里,如圖17所示。
然后,在步驟S59,更新所述“s”節點和“d”節點,隨后程序回到步驟S52。在步驟S59,所述第二差分結構化數據的下一個節點、也就是節點“標題”,將設置為“s”節點,并且對應于此“s”節點的文檔樹的節點、也就是節點“標題”,將設置為“d”節點。
并且在這種情況下,所述“s”節點是以展開形式表示(在步驟S52為是),因此對應于所述“d”節點的對象數據、也就是“標題”,被存儲到所述文檔對象數據存儲裝置115的文檔B存儲區的第二存儲槽(存儲槽ID=1)里,如圖17所示(步驟S53)。
其后,在步驟S59,所述第二差分結構化數據的下一個節點、也就是節點“作者們”,被設置為“s”節點,并且對應于此“s”節點的文檔樹的節點、也就是節點“作者們”,被設置為“d”節點,隨后程序回到步驟S52。
另外在這種情況下,所述“s”節點是以展開形式表示(在步驟S52為是),因此對應于所述“d”節點的對象數據、也就是“作者們”,被存儲到所述文檔對象數據存儲裝置115的文檔B存儲區的第三存儲槽(存儲槽ID=2)里,如圖17所示(步驟S53)。
其后在步驟S59,所述第二差分結構化數據的下一個節點、也就是節點“作者”,被設置為“s”節點,并且對應于此“s”節點的文檔樹的節點、也就是節點“作者”,被設置為“d”節點,隨后程序回到步驟S52。
在這種情況下,由于附加到所述“s”節點的屬性信息“3”指示檢測數量是3(在步驟S52為否),在“s”節點下的子樹以完全重復形式表示(在步驟S54為是),在所述文檔樹的“d”節點下的子樹中的對象數據項將以完全重復形式存儲到所述文檔對象數據存儲裝置115里(步驟S55)。更具體地說,在圖11所示的文檔樹中,由于檢測到使用“d”節點(也就是,節點“作者”)作為根的三個子樹,將包括在每個子樹中的對象數據項“作者”、“名”和“姓”順序存儲到三個連續的存儲槽的操作重復三次。結果,如圖17所示,包括在所述第一子樹中的對象數據項被存儲到所述文檔對象數據存儲裝置115的文檔B存儲區的第四存儲槽(存儲槽ID=3)至第六存儲槽(存儲槽ID=5)中。類似地,包括在所述第二子樹中的對象數據項被存儲到第七存儲槽(存儲槽ID=6)至第九存儲槽(存儲槽ID=8)里,以及包括在所述第三子樹中的對象數據項被存儲到第十存儲槽(存儲槽ID=9)至第十二存儲槽(存儲槽ID=11)里。
由于包括在所述第二差分結構化數據中的節點“摘要”的檢測數量是“0”,所以在步驟S59忽略此節點并將所述節點“關鍵詞”設置為“s”節點,并且將包括在所述文檔樹中的對應于所述“s”節點的節點、也就是所述節點“關鍵詞”設置為“d”節點。然后,程序回到步驟S52。
另外在這種情況下,所述“s”節點是以展開形式表示(在步驟S52為是),因此對應于所述當前“d”節點的對象數據、也就是“關鍵詞”,被存儲到所述文檔對象數據存儲裝置115的文檔B存儲區的第十三存儲槽(存儲槽ID=12)里,如圖17所示(步驟S53)。
因此,完成了所述第二差分結構化數據的所有節點的檢測(在步驟S58為是),隨后程序進行到步驟S60,其中還沒有存儲的所述文檔樹的對象數據項被存儲到所述文檔對象數據存儲裝置115里。更具體地說,對應于文本數據項的對象數據項被順序存儲到例如所述具有存儲槽ID=21的存儲槽里,并且以和對應于所述公共結構化數據的各個節點的對象數據項相同的存儲次序,如圖17所示。
將作為例子使用存儲所述文檔C的文檔樹的情況給出所述文檔對象存儲單元35的操作的說明(見圖23)。所述文檔對象存儲單元35使用在圖26中所示的第二差分結構化數據來存儲所述文檔樹的每個對象數據項。存儲對應于從所述根節點到節點“作者”范圍的節點的對象數據項的操作和在所述文檔B中所執行的相同。僅描述與所述文檔B的不同點。
在步驟S59,所述第二差分結構化數據的下一個節點、也就是節點“作者”,被設置為“s”節點,并且對應于此“s”節點的文檔樹C的節點、也就是節點“作者”,被設置為“d”節點,隨后程序回到步驟S52。
在這種情況下,由于附加到所述“s”節點的屬性信息“2”指示檢測數量是2(在步驟S52為否),并且在所述“s”節點下的子樹以部分重復形式表示(在步驟S54為否,在步驟S56為是),在所述文檔樹“d”節點下的子樹中的對象數據項將以部分重復形式存儲到所述文檔對象數據存儲裝置115里(步驟S57)。
更具體地,在圖23所示的文檔樹中,盡管檢測到使用“d”節點(也就是,節點“作者”)作為根的兩個子樹,所述第二子樹不具有節點“姓”。因此,在所述第二差分結構化數據中,所述節點“LAST NAME”當作為不定節點。在步驟S57不存儲對應于所述不定節點的對象數據,而是在步驟S60存儲。
在步驟S57,首先,將包括在每個子樹中的對象數據項“作者”和“名”順序存儲到兩個連續存儲槽里的操作重復兩次。結果,如圖30所示,包括在所述第一子樹中的對象數據項被存儲到所述文檔對象數據存儲裝置115的文檔C存儲區的第四存儲槽(存儲槽ID=3)和第五存儲槽(存儲槽ID=4)中。類似地,包括在所述第二子樹中的對象數據項被存儲到第六存儲槽(存儲槽ID=5)和第七存儲槽(存儲槽ID=6)里。
此后,以和在存儲所述文檔B的情況相同的方式,所述對象數據“關鍵詞”被存儲到具有存儲槽ID=7的存儲槽里。
因此,完成了所述第二差分結構化數據的所有節點的檢測(在步驟S58為是),隨后程序進行到步驟S60,其中在步驟S57還沒有存儲的所述文檔樹的對象數據項被存儲到所述文檔對象數據存儲裝置115里。更具體地說,所述第一子樹的對象數據“姓”被存儲到例如如圖30所示具有存儲槽ID=30的存儲槽里。然后,對應于文本數據項的對象數據項順序存儲到例如所述具有存儲槽ID=31的存儲槽里,并且以和對應于所述公共結構化數據的各個節點的對象數據項相同的存儲次序,如圖30所示。
圖30示出了文檔對象記錄,也就是所述文檔A、B和C的文檔對象記錄的例子。所述文檔對象記錄與對應其的文檔ID相關地存儲。在每個文檔中的每個對象數據項是由所述文檔ID和存儲槽ID中唯一指定的。換句話說,如果給定了包括文檔ID和存儲槽ID的對象ID,可以訪問任何對象數據項。
所述文檔對象存儲單元35將每個文檔樹的每個對象數據項存儲到所述文檔對象數據存儲裝置115里,并且基于在每個文檔樹中的每個對象數據項更新所述索引數據存儲裝置114。索引數據指示在所存儲結構化文檔數據中的文本元素的文本數據、和分配給在包括所述文本數據的所述結構化文檔數據內的元素的對象ID(OID)之間的關系。
如圖29所示,所述索引數據存儲裝置114存儲有術語表格,以及多個存儲分配給文本元素的OID的表格,所述文本元素鏈接到包含于所述術語表格中的術語并且包括所述術語本身。通過跟隨包含于所述術語表格中的術語的鏈接,獲取了包括有所述術語的文本元素的檢測位置,也就是OID。
每個對象數據項的對象ID以<文檔ID,存儲槽ID>來表示。所述文檔A、B和C的文檔ID分別是“文檔A”、“文檔B”和“文檔C”。
(搜索)將描述圖1的搜索處理單元104的操作。
圖31示出了輸入到所述搜索處理單元104的查詢數據的例子。在XML中,使用由W3C開發的XQuery(XML查詢語言),并且使用了基于這種語言的查詢描述方法。
在圖31中所示的查詢數據描述了以下情況的AND(與)條件,這些情況是元素“書”存在于結構化文檔DB“DB”的層次樹中、元素“作者”存在于所述元素“書”中,以及所述元素“作者”包括具有包含字符串“Taro”的文本元素的元素“名”以及具有包含字符串“Tanaka”的文本元素的元素“姓”。
如圖31所示的這種查詢數據將從所述客戶機201的搜索單元203發送到所述服務器101的請求處理單元102。
然后參照圖32和33的流程圖,將給出當接收如圖31所示這種查詢數據時所執行的所述搜索處理單元104的操作的簡短說明。
由所述請求處理單元102接收的查詢數據傳送到所述搜索處理單元104的查詢數據分析單元41。所述查詢數據分析單元41分析所接收的查詢數據的結構,并且基于所述分析結果提取稱作查詢圖表的圖形結構(步驟S101和S102)。例如,如圖34所示的這種查詢圖表是從圖31所示的查詢數據獲取的。可以由所述查詢圖表表示的在查詢數據內的這種結構以下將稱為“Sc”。
如圖34所示,所述查詢圖表是將與包含在查詢數據內的元素(比如db“DB”、“書”、“作者”、“名”和“姓”)相對應的變量以及根據在所述元素之間的層次關系和在所述字符串之間的包含關系的變量連接而形成的。
在圖34所示的查詢圖表內,變量是由圓形節點代表,變量名稱寫入所述圓周中。這些節點是所謂的變量節點。而且,在所述查詢數據內指定的元素由在其中寫有“TAG(標記)”的六邊形節點代表。這些節點是所謂的標記節點。此外,在所述查詢數據內指定的字符串是由其中寫有“CMP”的六邊形節點代表。這些節點是所謂的值比較標記。
然后,為了將所述查詢圖表內的全部變量實例化,所述查詢執行單元42順序地產生稱為表格的代表所述變量組可以采用的值的全部可能組合的數據。
特別地,其首先判斷包含在所述查詢圖表內的全部變量是否由一個表格實例化(步驟S103)。如果對在步驟S103的詢問的應答為是,也就是,如果實例化了全部變量,所實例化的變量是作為在步驟S111搜索結果的輸出。所述變量可以采用的值指示OID。
如果包含在所述查詢圖表內的全部變量沒有被實例化的值(在步驟S104為是),則從步驟S104到步驟S110范圍的處理將重復,直到它們被實例化。
在步驟S104,判斷使用保存在所述索引數據存儲裝置114中的索引的搜索是否可能。如果具有術語索引功能,比如存在“contains(包含)”,可以實現使用在所述結構化文檔DB 111內的索引數據的高速搜索。在這種情況下,所述索引掃描單元44執行索引掃描(步驟S105)。
如果在所述查詢圖表上的特定變量被實例化,如果屬于比所述特定變量低等級的變量被實例化,并且如果屬于比所述特定變量高等級的變量沒有被示例(在步驟S106為否),則所述結構掃描單元43執行結構掃描(步驟S107)。
在步驟S108,判斷多個表格是否包含相同的變量。如果對在步驟S108的詢問的應答為是,所述數據聯接單元45執行聯接處理以聯接所述多個列表(步驟S109)。
如果對在步驟S108的詢問的應答為否,在步驟S110運行不同于上述的處理。
如上述的,在步驟S111,執行結果輸出處理。這時,獲取所述變量可以采用的值的可能組合(即可能的OID的組合)作為表格。每個組合是由具有相同文檔ID的多個OID所形成的。因此,每個組合對應于一個結構化數據項。可以通過從所述文檔對象數據存儲裝置115中取得與每個文檔ID相對應的結構化數據、來獲取與所述查詢數據相對應的結構化文檔數據項的組,所述每個ID文檔是從作為表格的組合獲取的。
圖35是有利于解釋基于圖34的查詢圖表的搜索處理的視圖。
(1)由于所述查詢圖表包含值比較標記節點、以及所述項索引功能“contains”,使用如圖29所示的這種索引數據對所述字符串“Taro”執行索引掃描。結果,實例化了變量節點34(見圖35中的表格1)。也就是,獲取作為與變量節點$4相對應的OID的<文檔A,4>、<文檔B,4>和<文檔B,7>。
(2)類似地,使用如圖29所示的這種索引數據對所述字符串“Tanaka”執行索引掃描。結果,實例化了變量節點$5(見圖35的表格2)。也就是,獲取作為與變量節點$5相對應的OID的<文檔A,5>和<文檔B,8>。
(3)由于實例化了所述變量節點$4和$5,執行結構掃描以實例化屬于比這些變量節點更高等級的變量節點。
參考圖33的流程圖描述結構掃描。
首先,從圖35中的表格1和2,讀取包含在所述對象ID內的與變量節點$4和$5相對應的文檔ID(步驟S121)。
從所述公共結構化數據存儲裝置112和差分結構化數據存儲裝置113分別讀取與每個文檔ID相對應的差分結構化數據和公共結構化數據(與附加到所述差分結構化數據的管理信息相應)(步驟S122)。
從與每個文檔ID相對應的所述差分結構化數據和公共結構化數據,重構與每個文檔ID相對應的結構化數據(步驟S123)。
例如,為了重構所述文檔A的結構化數據,以圖10所示的完全重復形式表示的差分結構化數據的子樹被以原始展開的形式表示,從而重構如圖7所示的這種結構化數據。
而且,為了重構所述文檔B的結構化數據,以圖15中所示的完全重復形式表示的差分結構化數據的子樹被以原始展開的形式表示,并且消除了具有指示檢測數量是零的屬性信息“0”的節點“摘要”。結果,重構了如圖12所示的這種結構化數據。
隨后,從在表格1中的每個對象數據項開始,向上遍歷每個重構文檔的結構化數據,從而檢測和在所述查詢圖表上的高等級變量節點相同的節點(步驟S124)。
如果和在所述查詢圖表上的高等級變量節點相同的節點是不定節點,由于不能確定所述不定節點的存儲槽ID(在步驟S125為否),程序進行到步驟S127。相反,如果和在所述查詢圖表上的高等級變量節點相同的節點是固定節點,由于可以從所述結構化數據確定所述固定節點的存儲槽ID(在步驟S125為是),程序進行到步驟S126。
現在將給出用于判斷是否可以在步驟S125確定所述存儲槽ID的方法的說明。如先前描述的,所述文檔對象存儲單元35以對象數據數組形式存儲每個文檔。分配給數組中各個元素的位置信息項是存儲槽ID。如圖30所示,與所述公共結構化數據的各個節點相對應的對象數據項是以從所述數組的最先的數據項開始的次序保存的(從所述差分結構化數據的最左邊節點開始,以及從所述差分結構化數據的最高等級節點開始)。然后,存儲在所述文檔樹內的不定節點或正文節點。
通過遍歷從所述根節點開始的重構的結構化數據,獲取除不定節點“?”之外的節點的檢測數量的總和。如果檢測到若干次高等級的節點(例如,2*),則執行考慮到所述高等級節點的檢測數量的總和計算。如果存儲槽ID大于所述總和,則不能確定所述存儲槽ID。
例如在圖23的文檔C情況下,除所述不定節點“姓”外,檢測到所述元素“標題”一次,也檢測到所述元素“作者們”一次,檢測到所述元素“作者”兩次,檢測到屬于每個元素“作者”的元素“名”一次,并且檢測到所述元素“關鍵詞”一次。因此,所述文檔C的全部節點的檢測總數由以下給出1+1+2×(1+1)+1=7因此,不能確定高于“7”的存儲槽ID。
在步驟S126,計算當向下跟隨每個結構數據項時所獲取的存儲槽ID。例如,可以通過計算存在于從每個結構數據項的根節點到所述的范圍中的所述對象數據項的數量來檢測特定節點的存儲槽ID。
在步驟S127,為了檢測每個所獲取節點的存儲槽ID,搜索與每個文檔ID相對應并且保存在所述文檔對象數據存儲裝置115中的對象記錄。
因此,掃描重構的每個結構化數據項。結果,從在圖35內所示與變量節點$4相對應的表格1中獲取在圖35內所示的與變量節點$3相對應的表格3,以及從在圖35內所示并且與變量節點$5相對應的表格2中獲取在圖35內所示并且與變量節點$3相對應的表格4。
將給出如何從表格1獲取在圖35內所示的與變量節點$3相對應的表格3的說明。在圖34內的變量節點$3與所述節點“作者”有關。參照圖7文檔A所重構的結構化數據,通過從具有存儲槽ID=4的節點“名”向上地跟隨所述結構化數據、來獲取所述節點“作者”。由于這些節點保存在從具有存儲槽ID=0的根節點開始數起的第四存儲槽中,所述節點“作者”的存儲槽ID是“3”。
類似地,參照圖12文檔B的重構的結構化數據,通過從具有存儲槽ID=4的節點“名”向上地跟隨所述結構化數據、來獲取所述節點“作者”。由于這些節點保存在從具有存儲槽ID=0的根節點開始數起的第四存儲槽中,所述節點“作者”的存儲槽ID是“3”。
類似地,參照圖12文檔B的重構的結構化數據,通過從具有存儲槽ID=7的節點“名”向上地跟隨所述結構化數據、來獲取所述節點“作者”。由于這些節點保存在從具有存儲槽ID=0的根節點開始數起的第七存儲槽中,所述節點“作者”的存儲槽ID是“6”。
因此,所述變量節點$3是從表格1來實例化的,如圖35的表格3中所示。也就是,獲取作為與變量節點$3相對應的OID的<文檔A,3>、<文檔B,3>和<文檔B,6>。
將給出如何從表格2獲取在圖35內所示的與變量節點$3相對應的表格4的說明。在圖34內的變量節點$3與所述節點“作者”有關。參照圖7文檔A的重構的結構化數據,通過從具有存儲槽ID=5的節點“姓”向上地跟隨所述結構化數據、來獲取所述節點“作者”。由于這些節點保存在從具有存儲槽ID=0的根節點開始數起的第四存儲槽中,所述節點“作者”的存儲槽ID是“3”。
類似地,參照圖12文檔B所重構的結構化數據,通過從具有存儲槽ID=8的節點“姓”向上地跟隨所述結構化數據、來獲取所述節點“作者”。由于這些節點保存在從具有存儲槽ID=0的根節點開始數起的第七存儲槽中,所述節點“作者”的存儲槽ID是“6”。
因此,所述變量節點$3是從表格2來實例化的,如圖35的表格4中所示。也就是,獲取作為與變量節點$3相對應的OID的數據項<文檔A,3>和<文檔B,6>。
(4)如上述項(2)和(3)所描述的,所述變量節點$3是以不同方式實例化的,如表格3和4所示。隨后聯接表格3和4。特別地,由于表格3和4包含公共OID<文檔A,3>和<文檔B,6>。因此,獲取了如圖35所示的包含這些OID的表格5。
(5)由于實例化了所述變量節點$4、$5和$3,執行結構掃描以實例化與比這些變量節點更高等級的變量節點$2(“書”)相對應的元素。
首先,在OID<文檔A,3>上執行如圖33所示的結構掃描。特別地,參照圖7文檔A所重構的結構化數據,規定了作為具有存儲槽ID=3的節點“作者”的更高級節點的節點“書”。所述節點“書”的存儲槽ID是“0”,也就是,所述節點“書”是所述結構化數據的根節點。
隨后,在OID<文檔B,6>上執行如圖33所示的結構掃描。特別地,參照圖12文檔B的重構的結構化數據,規定了作為具有存儲槽ID=6的節點“作者”的更高級節點的節點“書”。所述節點“書”的存儲槽ID是“0”,也就是,所述節點“書”是所述結構化數據的根節點。
因此,實例化了所述變量節點$2,如圖35的表格6中所示。也就是,獲取了作為與變量節點$2相對應的OID的<文檔A,0>和<文檔B,0>。
OID<文檔A,0>和<文檔B,0>是作為搜索結果從所述查詢執行單元42輸出的。所述結果產生單元46基于作為所述搜索結果獲取的OID產生結果數據(見圖36)。
圖36示出了滿足圖31中所示的查詢數據的結果數據例子。所述結果數據是通過從所述文檔對象數據存儲裝置115讀取不低于包含在圖36表格6內的OID的OID的節點結構化文檔數據的部分或全部來產生的。在圖36內所示的結果數據包含所述文檔A和B。
如圖36所示的這種搜索數據是從所述請求處理單元102發送到作為所述請求者所述客戶機201的。所述客戶機201在與所述輸出單元205結合的顯示器上顯示所接收的結構化數據。
圖37示出了所述查詢數據的另一個例子。此查詢數據請求搜索包括在元素“書”中的元素“作者”的列表,所述元素“作者”包括各自的元素“姓”,每個元素“姓”包括字符串“Tanaka”。圖31的查詢數據請求搜索元素“書”的列表,而圖37的查詢數據請求搜索元素“作者”的列表。
在圖37所示查詢數據的情況下,獲取如圖38所示的這種查詢圖表。
圖39是有利于基于圖38的查詢圖表解釋搜索處理的視圖。
(1)由于所述查詢圖表包含值比較標記節點、以及所述術語索引功能“contains”,使用如圖29所示的這種索引數據對所述字符串“Tanaka”執行索引掃描。結果,實例化了所述變量節點$3(見圖39的表格7)。也就是,獲取作為與變量節點$3相對應的OID的<文檔A,5>和<文檔B,8>。
(2)由于實例化了所述變量節點$3,執行結構掃描以實例化屬于比這些變量節點更高等級的變量節點$2。
首先,所述文檔A和B的結構數據項是從在所述文檔A和B之間的差分結構化數據、以及從與附加到所述差分結構化數據的管理信息相對應的公共結構化數據中重構的。
通過從具有存儲槽ID=5的節點“姓”向上地跟隨圖7文檔A的結構化數據、來獲取所述節點“作者”。由于這些節點保存在從具有存儲槽ID=0的根節點開始數起的第四存儲槽中,所述節點“作者”的存儲槽ID是“3”。
類似地,通過從具有存儲槽ID=8的節點“姓”向上地跟隨圖12文檔B的結構化數據、來獲取所述節點“作者”。由于這些節點保存在從具有存儲槽ID=0的根節點開始數起的第七存儲槽中,所述節點“作者”的存儲槽ID是“6”。
因此,實例化了所述變量節點$2,如圖39的表格3中所示。也就是,獲取作為與變量節點$2相對應的OID的數據項<文檔A,3>和<文檔B,6>。
這兩個OID是滿足圖37所示的查詢數據的搜索結果。
所述結果產生單元46通過從所述文檔對象數據存儲裝置115讀取不低于包含在圖39表格8內的OID的OID的節點的結構化文檔數據的部分或全部來產生結果數據。圖40所示的所述結果數據包含有屬于具有不低于3的存儲槽ID的節點(具有存儲槽ID=3的節點是第一節點“作者”)的所述文檔A的子文檔,以及屬于具有不低于6的存儲槽ID的節點(具有存儲槽ID=6的節點是第二節點“作者”)的所述文檔B的子文檔。
如上所述,在所述實施例中,為了將新的結構化文檔數據存儲到所述結構化文檔DB 111里,獲取在公共結構和所述新結構化文檔數據的結構之間的差分結構。所述公共結構是指包括在已經保存在所述結構化文檔DB 111內的每個結構化文檔數據項中、以及包括在所述新結構化文檔數據中的公共結構。可以通過使用所述新結構化文檔數據的結構、更新已經保存在所述結構化文檔DB 111中的每個結構化文檔數據項的公共結構,來獲取此差分結構。根據所述差分結構排列的所述新結構化文檔數據的元素的數組,存儲在所述文檔對象數據存儲裝置115中。
在上述實施例中,當存儲新的結構化文檔數據時,使用所述新結構化文檔數據的結構更新所述公共結構。而且,存儲所更新的公共結構和所述新結構化文檔數據的結構之間的差分結構以及所述新結構化文檔數據的元素的數組。因此,可以顯著地減少存儲有關新結構化文檔數據所必須的數據數量。而且,由于所述數組的每個元素的位置與所述差分結構中每個元素的位置對應,可以從所述新結構化文檔數據的結構容易地確定任何元素的存儲區。
另外,當為了檢測所期望的元素(由搜索條件指定)而搜索保存在所述結構化文檔DB 111中的結構化文檔數據項時,所述結構化文檔數據項的結構是從在所述結構化文檔數據項的結構和覆蓋所述結構化文檔數據項的結構以及存儲在所述DB 111中的其它結構化文檔數據項的結構的公共結構之間的差分結構重構的。從所重構的結構,確定所期望的元素。所述文檔對象數據存儲裝置115存儲根據所述差分結構排列的所述結構化文檔數據項的元素的數組。在所述數組內的所期望元素的位置信息(存儲槽ID)是基于在所重構的結構內的所期望元素的位置來檢測的。
如上所述,在所述實施例中,保存在所述結構文檔DB 111中的每個結構化文檔數據項的結構被重構和遍歷、以判斷其是否包含期望的元素。而且,可以用少數次數對數據的參考來檢測所期望元素的存儲區(存儲槽ID)。結果,對于結構化文檔數據的搜索可以以高速執行。
所述實施例的流程圖說明了按照本發明實施例的方法和系統。應當理解所述流程圖例圖的每個框圖、以及所述流程圖例圖中框圖的組合,可以由計算機程序指令來實現。這些計算機程序指令可以加載在計算機或其它可編程設備上、以產生機器,使得運行在計算機或其它可編程設備上的所述指令創建用于實現在所述流程圖框圖或多個框圖內指定的功能的裝置。這些計算機程序指令也可能保存在計算機可讀的存儲器上,其可以直接由計算機或其它可編程設備以特定方式運行,使得保存在所述計算機可讀的存儲器中的指令產生制品,包括實現在所述流程圖框圖或多個框圖內規定的功能的指令裝置。這些計算機程序指令也可以加載在計算機或其它可編程設備上,以引起在計算機或其它可編程設備上執行的一系列操作步驟,以使計算機可編程設備提供產生對于實現在所述流程圖框圖或多個框圖內指定的功能的步驟。
所屬領域技術人員將容易想到附加的優點和修改。因此,本發明廣義上不局限于在這里所示和描述的細節和典型的實施例。因此,可以在不脫離由所附權利要求及其等同物限定的總的發明構思的精神或范圍下,可以進行多種修改。
權利要求
1.一種結構化文檔管理設備,包括數據存儲裝置,其存儲多個分別包括多個元素的結構化文檔數據項;公共結構存儲裝置,其存儲包括多個包括在所述結構化文檔數據項中的結構的公共結構;第一獲取單元,其被配置來獲取新的結構化文檔數據項;更新單元,其被配置來將所述公共結構更新為新的公共結構,該新的公共結構包括所述結構和包括在所述新的結構化文檔數據項中的多個結構;第二獲取單元,其被配置來獲取所述新的公共結構和所述新的結構化文檔數據項的結構之間的差分結構;差分結構存儲裝置,其存儲所述差分結構;以及存儲單元,其被配置來將所述新的結構化文檔數據項的元素的數組存儲到所述數據存儲裝置里,所述數組是基于所述差分結構排列的。
2.根據權利要求1的設備,其中所述第二獲取單元被配置來獲取所述差分結構,所述差分結構包括指示所述新的公共結構的每個元素是否存在的信息和指示檢測到多少次所述新的結構化文檔數據項的子結構的信息。
3.根據權利要求1的設備,其中所述存儲單元被配置來存儲所述數組,指示所述新的結構化文檔數據項的每個元素在所述數組中的位置的位置信息是指示所述每個元素的標識符。
4.一種搜索設備,包括存儲裝置,其存儲多個分別包括多個元素的結構化文檔數據項;獲取單元,其被配置來獲取用于搜索包括在所述元素中的期望的元素的搜索條件;以及搜索單元,其被配置來從包括在所述結構化文檔數據項中的特定結構化文檔數據項中搜索所述期望的元素,所述搜索單元包括重構單元,其被配置來基于所述特定結構化文檔數據項的結構和公共結構之間的差分結構,來重構所述特定結構化文檔數據項的結構,所述公共結構包括在所述結構化文檔數據項中的多個結構、還包括所述特定結構化文檔數據項的結構;和檢測單元,其被配置來從所述重構的結構檢測所述期望的元素。
5.根據權利要求4的設備,其中所述存儲裝置被配置來存儲所述特定結構化文檔數據項的元素數組,所述數組是基于所述差分結構排列的;并且所述搜索單元被配置來基于所述期望元素在所述重構的結構中的位置,獲取指示所述期望元素在所述數組中的位置的位置信息。
6.一種方法,包括將新的結構化文檔數據項存儲到存儲裝置里,該存儲裝置存儲有多個分別包括多個元素的結構化文檔數據項;獲取包括多個結構的公共結構,所述多個結構包括在所述結構化文檔數據項和所述新的結構化文檔數據項中;獲取所述公共結構和所述新的結構化文檔數據項的結構之間的差分結構;以及將所述新的結構化文檔數據項的元素的數組存儲到所述存儲裝置里,所述數組是基于所述新的差分結構排列的。
7.一種方法,包括從包括在多個分別包括多個元素的結構化文檔數據項中的特定結構化文檔數據項中搜索期望的元素;基于所述特定結構化文檔數據項的結構和公共結構之間的差分結構,來重構所述特定結構化文檔數據項的結構,所述公共結構包括在所述結構化文檔數據項中的多個結構,還包括所述特定結構化文檔數據項的結構;以及從所述重構的結構檢測所述期望的元素。
8.根據權利要求7的方法,還包括基于所述期望元素在所述重構結構中的位置,來獲取指示所述期望元素在數組中的位置的位置信息,所述數組是由基于所述差分結構排列的所述特定結構化文檔數據項的元素形成的。
9.一種存儲在由計算機讀取的媒質上的程序,所述程序包括用于指示所述計算機存儲多個分別包括多個元素的結構化文檔數據項的裝置,新的結構化文檔數據項通過所述程序的指令被存儲;用于指示所述計算機獲取包括多個結構的公共結構的裝置,所述多個結構包括在所述結構化文檔數據項和所述新的結構化文檔數據項中;用于指示所述計算機獲取所述公共結構和所述新的結構化文檔數據項的結構之間的差分結構的裝置;以及用于指示所述計算機將所述新的結構化文檔數據項的元素的數組存儲到所述存儲裝置里的裝置,所述數組是基于所述新的差分結構排列的。
10.一種存儲在由計算機讀取的媒質上的程序,所述程序包括用于指示所述計算機存儲多個分別包括多個元素的結構化文檔數據項的裝置,所述程序用作從包括在所述結構化文檔數據項中的特定結構化文檔數據項中搜索期望的元素的搜索設備;用于指示所述計算機基于在所述特定結構化文檔數據項的結構和公共結構之間的差分結構,來重構所述特定結構化文檔數據項的結構的裝置,所述公共結構包括在所述結構化文檔數據項中的多個結構,還包括所述特定結構化文檔數據項的結構;以及用于指示所述計算機從所述重構的結構檢測所述期望元素的裝置。
全文摘要
本發明涉及結構化文檔管理設備、搜索設備、存儲和搜索方法及程序。一種結構化文檔管理設備,包括存儲有多個分別包括多個元素的結構化文檔數據項的數據存儲器;存儲包括在所述結構化文檔數據項內的多個結構的公共結構的公共結構存儲器;被配置來獲取新的結構化文檔數據項的第一獲取單元;被配置來將公共結構更新為包括所述結構和包括在所述新結構化文檔數據項內的多個結構的新公共結構的更新單元;被配置來獲取所述新公共結構和所述新結構化文檔數據項的結構之間的差分結構的第二獲取單元;存儲差分結構的差分結構存儲器;以及被配置來將新的結構化文檔數據項的元素的數組存儲到數據存儲器里的存儲單元,所述數組是基于差分結構排列的。
文檔編號G06F17/30GK1722138SQ200510084628
公開日2006年1月18日 申請日期2005年7月15日 優先權日2004年7月15日
發明者服部雅一 申請人:株式會社東芝