專利名稱::用于存取xml數(shù)據(jù)的索引的制作方法
技術領域:
:本發(fā)明涉及管理信息,更具體地,涉及存取包含在XML文檔中的信息。
背景技術:
:近年來,有很多允許存儲和查詢可擴展標記語言數(shù)據(jù)(“XML數(shù)據(jù)”)的數(shù)據(jù)庫系統(tǒng)。盡管有很多XML查詢的演進標準,但是所有標準都包括一些XPath的變量。然而,數(shù)據(jù)庫系統(tǒng)通常不是處理XPath查詢的最優(yōu)系統(tǒng),并且對數(shù)據(jù)庫系統(tǒng)的查詢性能還有很多要求。在XML模式定義可用的具體情況下,可獲知XML實例文檔中所用的結(jié)構(gòu)和數(shù)據(jù)類型。然而,在XML模式定義不可用以及要查找的文檔不符合任何模式的情況下,沒有用于使用XPath查詢的有效技術。一些數(shù)據(jù)庫系統(tǒng)可采用點對點(ad-hoc)機制來滿足與文檔(其中,文檔模式是未知的)相悖的Xpath查詢。例如,數(shù)據(jù)庫系統(tǒng)可通過對所有文檔執(zhí)行全掃描來滿足XPath查詢。雖然所有文檔的全掃描可用于滿足所有XPath查詢,但是由于缺少索引,所以實施會非常慢。滿足XPath查詢的另一種方法涉及文本關鍵字的使用。具體地,很多數(shù)據(jù)庫系統(tǒng)都支持文本索引,并且這些數(shù)據(jù)庫系統(tǒng)可用于滿足特定的XPath。然而,該技術僅能滿足XPath查詢的小子集。因此,在現(xiàn)有數(shù)據(jù)庫系統(tǒng)中沒有可用于處理多種XPath查詢的有效索引技術。本部分描述的方法是可以推行的方法,而不必是先前已經(jīng)構(gòu)思或推行的方法。因此,除非另外指出,不可以僅僅因為本部分中描述的方法包含在該部分中而認為是現(xiàn)有技術。通過附圖中的實例而不是限制的方式來描述本發(fā)明,在附圖中相同的參考標號指向相似的元件,其中圖1是示出用于基于新XML文檔更新XML索引的步驟的流程圖;以及圖2可以實施本文所述技術的系統(tǒng)的框圖。具體實施例方式在以下描述中,為了解釋的目的,敘述了大量特定細節(jié)以提供對本發(fā)明的全面理解。然而,很顯然,在沒有這些特定細節(jié)的情況下也可以實施本發(fā)明。在其他實例中,以框圖形式示出了已知的結(jié)構(gòu)和裝置,以避免不必要的使本發(fā)明不清楚。功能綜述提供了一種用于在XML文檔中索引路徑、值、和次序(order,順序)信息的機制。該機制可以在不考慮用于存儲實際XML數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)(“基本結(jié)構(gòu)”)和格式的情況下使用。例如,實際XML數(shù)據(jù)可以以諸如CLOB(存儲實際XML文本的字符LOB)、O-R(XML模式下的對象關系結(jié)構(gòu)形式)、或BLOB(存儲一些二進制形式的XML的二進制LOB)的任意形式存在于數(shù)據(jù)庫內(nèi)部或外部的結(jié)構(gòu)中。這里描述的技術涉及使用一組用于存取XML數(shù)據(jù)的共同組成索引的結(jié)構(gòu)。根據(jù)一個實施例,該索引(這里稱為“XML數(shù)據(jù)”)包括三個邏輯結(jié)構(gòu)路徑索引、次序索引、和值索引。在一個實施例中,所有這三個邏輯結(jié)構(gòu)都存在于單個表中,這里稱為PATH_TABLE。XPath查詢語言最常用的部分包括基于值的判定和導航(父子派生)存取。如下文中將要更詳細地描述的,通過追蹤路徑、值、和次序信息,XML索引可用于有效地滿足這些存取方法。另外,基于如何實施XML索引的實施例,使用XML索引可產(chǎn)生以下有益效果中的一個或多個(1)改善基于XPath查詢的搜索性能,這包括路徑匹配以及值判定(predicate);(2)在片段由XPath表達式標識的情況下,處理片段提取;(3)在存在適當XML模式定義的情況下,關于值判定的數(shù)據(jù)類型認知;(4)通過添加新定義支持演進XML模式和XML索引的能力;(5)處理多類XPath表達式(包括子軸和后代軸),以及等式和范圍判定;(6)用戶通過包括或排除索引中指定的路徑組或命名空間來控制索引路徑組的能力,這在文檔定向的情況中尤其有用,其中,索引中省略了與格式化相關的標志;(7)允許存儲于索引中的實際文本值的用戶化,例如,刪掉空格(whitespace)、不區(qū)分大小寫(case-insensitive);(8)大量加載索引以及支持并行索引創(chuàng)建的良好性能。XML文檔實例為了解釋的目的,下文中將參照下面兩個XML文檔給出實例po1.xml<PurchaseOrder><Reference>SBELL-2002100912333601PDT</Reference><Actions><Action><User>SVOLLMAN</User></Action></Actions>....</PurchaseOrder>po2.xml<PurchaseOrder><Reference>ABEL-20021127121040897PST</Reference><Actions><Action><User>ZLOTKEY</User></Action><Action><User>KING</User></Action></Actions>....</PurchaseOrder>如上面指出的,po1.xml和po2.xml僅僅是XML文檔的兩個實例。在此所述的技術不限于具有任何特定類型、結(jié)構(gòu)、或內(nèi)容的XML文檔。下面將根據(jù)本發(fā)明的各種實施例給出如何索引和存取這種文檔的實例。XML索引根據(jù)一個實施例,XML索引是改善包括基于XPath的判定和/或基于XPath的片段提取的查詢性能的域索引(domainindex)。例如,可以在存儲為CLOB或結(jié)構(gòu)化存儲的無模式XMLType列(column,欄)以及基于模式的XML上建立XML索引。在一個實施例中,XML索引是通過協(xié)作使用路徑索引、值索引、和次序索引所產(chǎn)生的邏輯索引。路徑索引提供了基于簡單(導航)路徑表達式來查找片段的機制。值索引提供了基于值等式或范圍的查找。可能存在多個次級值索引——每種數(shù)據(jù)類型一個。次序索引使分級次序信息與索引的節(jié)點相關聯(lián)。次序索引用于確定XML節(jié)點之間的父子、祖孫、以及兄弟關系。當用戶提交含有XPath(作為判定或片斷標識符)的查詢時,XPath語句被分解成存取XML索引表的SQL查詢。所生成的查詢通常執(zhí)行一組受路徑、值、和次序約束的查找,并將其結(jié)果適當?shù)睾喜?。路徑表根?jù)一個實施例,邏輯XML索引包括PATH表和次級索引組。如上所述,每個索引XML文檔可以包括許多索引節(jié)點。對于每個索引節(jié)點,PATH表包含一行。對于每個索引節(jié)點,該節(jié)點的PATH表的行包含與該節(jié)點相關的各種信息。根據(jù)一個實施例,PATH表中包含的信息包括(1)指示到節(jié)點的路徑的PATHID;(2)用于對基本結(jié)構(gòu)內(nèi)的節(jié)點的片段數(shù)據(jù)進行定位的“位置數(shù)據(jù)”;以及(3)指示包含節(jié)點的XML文檔的結(jié)構(gòu)分級中該節(jié)點的位置的“分級數(shù)據(jù)”??蛇x地,對于與值相關的那些節(jié)點,PATH表還可以包含值信息。以下將更詳細地描述每種類型的信息。路徑XML文檔結(jié)構(gòu)在XML文檔內(nèi)的節(jié)點之間建立父子關系。XML文檔中節(jié)點的“路徑”反映了從“根”節(jié)點開始到特定節(jié)點的一系列父子鏈路。例如,到po2.xml中的“User”節(jié)點的路徑為/PurchaseOrder/Actions/Action/User,這是因為“User”節(jié)點是“Action”節(jié)點的子節(jié)點,“Action”節(jié)點是“Actions”節(jié)點的子節(jié)點,以及“Actions”節(jié)點是“PurchaseOrder”節(jié)點的子節(jié)點。XML索引所索引的一組XML文檔在此稱為“索引XML文檔”。根據(jù)一個實施例,可以在所有索引XML文檔中的所有路徑或索引XML文檔中的路徑子集上建立XML索引。下文中描述了用于指定索引哪條路徑的技術。由特定XML索引所索引的路徑組在此稱為“索引XML路徑”。路徑ID以上所述僅為本發(fā)明的優(yōu)選實施例而已,并不用于限制本發(fā)明,對于本領域的技術人員來說,本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進等,均應包含在本發(fā)明的保護范圍之內(nèi)。以上所述僅為本發(fā)明的優(yōu)選實施例而已,并不用于限制本發(fā)明,對于本領域的技術人員來說,本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進等,均應包含在本發(fā)明的保護范圍之內(nèi)。根據(jù)一個實施例,為每條索引XML路徑都分配唯一路徑標識符(ID)。例如,可以為po1.xml和po2.xml中路徑分配下表中示出的路徑ID可以使用多種技術來標識路徑以及為路徑分配路徑ID。例如,用戶可以明確地列舉路徑,以及為這樣標識的路徑指定相應的路徑ID??蛇x地,數(shù)據(jù)庫服務器可以將每個XML文檔解析為添加至索引XML文檔組中的文檔。在解析操作期間,數(shù)據(jù)庫服務器識別任何還沒有被分配路徑ID的路徑,并且自動地為這些路徑分配新的路徑ID。路徑ID到路徑的映射可以以各種方式存儲在數(shù)據(jù)庫中。根據(jù)一個實施例,路經(jīng)ID到路徑的映射獨立于XML索引本身存儲為元數(shù)據(jù)。根據(jù)一個實施例,相同的存取結(jié)構(gòu)用于符合不同模式的XML文檔。由于索引XML文檔可能符合不同模式,因此每個XML文檔通常將僅包含分配了路徑ID的路徑子集。位置數(shù)據(jù)與節(jié)點相關的位置數(shù)據(jù)表示包含該節(jié)點的XML文檔在基本結(jié)構(gòu)中存在的位置。因此,基于基本結(jié)構(gòu)的性質(zhì),位置數(shù)據(jù)的性質(zhì)隨著實施的不同而各不相同。根據(jù)如何存儲實際XML文檔,位置數(shù)據(jù)還可以包括指向XML文檔內(nèi)的邏輯指針或定位符。邏輯指針可用于提取與由XPath標識的節(jié)點相關的片段。為了解釋的目的,將假設(1)基本結(jié)構(gòu)是關系數(shù)據(jù)庫中的表;以及(2)每個索引XML文檔都存儲在基本表的相應行中。在這樣的情境中,節(jié)點的位置數(shù)據(jù)可以包括,例如(1)基本表內(nèi)的行的ID(rowid),其中,基本表中存儲了包含該節(jié)點的XML文檔,以及(2)定位符,在XML文檔內(nèi)提供對對應于節(jié)點的片段數(shù)據(jù)的快速存取。分級數(shù)據(jù)用于節(jié)點的PATH表的行還包括表示節(jié)點在包含該節(jié)點的XML文檔的分級結(jié)構(gòu)中的存在位置的信息。這里,這種分級信息稱為節(jié)點的“次序鍵(OrderKey)”。根據(jù)一個實施例,使用Dewey型值來表示分級次序信息。具體地,在一個實施例中,通過對節(jié)點的直接父節(jié)點的次序鍵添加值來創(chuàng)建節(jié)點的次序鍵,其中,添加的值表示該父節(jié)點的子節(jié)點中該特定子節(jié)點的位置。例如,假設特定節(jié)點D是節(jié)點C的子節(jié)點,其中,節(jié)點C是節(jié)點B的子節(jié)點,節(jié)點B又是節(jié)點A的子節(jié)點。進一步假設節(jié)點D具有次序鍵1.2.4.3。次序鍵中末尾的“3”表示節(jié)點D是其父節(jié)點C的第三個子節(jié)點。類似地,“4”表示節(jié)點C是節(jié)點B的第四個子節(jié)點?!?”表示節(jié)點B是節(jié)點A的第二個子節(jié)點。最前面的“1”表示節(jié)點A是根節(jié)點(即,沒有父節(jié)點)。如上所述,通過對父節(jié)點的次序鍵添加對應于子節(jié)點數(shù)目的值,可以容易地創(chuàng)建子節(jié)點的次序鍵。類似地,通過去除子節(jié)點的次序鍵中的末尾數(shù)字,可以容易地從子節(jié)點的次序鍵得出父節(jié)點的次序鍵。根據(jù)一個實施例,由每個次序鍵所表示的合成數(shù)被轉(zhuǎn)換成字節(jié)可比較值(bytecomparablevalue),使得兩個次序鍵之間的數(shù)學比較表示XML文檔的結(jié)構(gòu)分級中次序鍵對應的節(jié)點的相對位置。例如,在XML文檔的分級結(jié)構(gòu)中,與次序鍵1.2.7.7相關的節(jié)點在與次序鍵1.3.1相關的節(jié)點之前。因此,數(shù)據(jù)庫服務器使用將次序鍵1.2.7.7轉(zhuǎn)換成第一值以及將次序鍵1.3.1轉(zhuǎn)換成第二值的轉(zhuǎn)換機制,其中,第一值小于第二值。通過將第一值與第二值進行比較,數(shù)據(jù)庫服務器可以容易地確定與第一值相關的節(jié)點在與第二值相關的節(jié)點之前??梢允褂枚喾N轉(zhuǎn)換技術來實現(xiàn)該結(jié)果,并且本發(fā)明不限于任何特定的轉(zhuǎn)換技術。值信息索引文檔中的一些節(jié)點可以是屬性節(jié)點或?qū)诤唵卧氐墓?jié)點。根據(jù)一個實施例,對于屬性節(jié)點和簡單元素,PATH表的行還存儲屬性和元素的實際值。例如,可以將這種值存儲在PATH表中的“值列”中。下文中將詳細描述在值列上建立的次級“值索引”。PATH表實例根據(jù)一個實施例,PATH表包括如下表所述來定義的欄如上所述,PATHID是分配給節(jié)點的數(shù)字,并且唯一地表示到節(jié)點的完全擴展路徑。ORDERKEY是與節(jié)點相關的DEWEY次序號的系統(tǒng)表示。根據(jù)一個實施例,次序鍵的內(nèi)部表示還保存文檔次序。VALUE欄存儲用于簡單元素(即,沒有子元素)節(jié)點和屬性節(jié)點的有效文本值。根據(jù)一個實施例,相鄰的文本節(jié)點通過連接接合。如下文中將要更詳細描述的,提供允許用戶通過在索引創(chuàng)建期間指定選項來定制存儲在VALUE欄中的有效文本值的機制,例如,可以定制混合文本的行為、空格、區(qū)分大小寫等。用戶可以以包括有界RAW欄或BLOB的多種格式來存儲VALUE欄。如果用戶選擇了有界存儲,則在索引創(chuàng)建期間的任何溢出都將被標記為錯誤。下面的表是PATH表的實例,其中,該PATH表(1)具有上述的欄,以及(2)由用于po1.xml和po2.xml的條目(entry)構(gòu)成。具體地,PATH表的每一行都對應于po1.xml或po2.xml的索引節(jié)點。在該實例中,假設po1.xml和po2.xml分別存儲在基本表的行R1和R2中。構(gòu)成的PATH表在該實例中,行ID列存儲PATH表的每行的唯一標識符。根據(jù)其中創(chuàng)建有PATH表的數(shù)據(jù)庫系統(tǒng),行ID列可以是隱含列。例如,行的磁盤位置可用作行的唯一標識符。如下文將要詳細描述的,次級次序索引和值索引使用PATH表的行ID值,以定位PATH表中的行。在上述實施例中,節(jié)點的PATHID、ORDERKEY、和VALUE都包括在單個表中。在可選的實施例中,可使用分開的表以將PATHID、ORDERKEY、和VALUE信息映射到相應的位置數(shù)據(jù)(例如,基本表資源標識(Rid)和定位符)。次級索引PATH表包括定位XML文檔或XML片段所需的信息,其能夠滿足大范圍查詢。然而,如果沒有次級存取結(jié)構(gòu),使用PATH表來滿足這種查詢將會常常需要對PATH表進行全掃描。因此,根據(jù)一個實施例,由數(shù)據(jù)庫服務器創(chuàng)建多個次級索引來加速查詢,其中(1)執(zhí)行路徑查找和/或(2)識別基于次序的關系。根據(jù)一個實施例,在PATH表上創(chuàng)建下面的次級索引。●PATHID_NDEXon(pathid,rid)●ORDERKEY_INDEXon(rid,order_key)●VALUEINDEXES●PARENT_ORDERKEY_INDEXon(rid,SYS_DEWEY_PARENT(order_key))PATHID_INDEX(路徑ID索引)PATHID_NDEX建立在PATH表的路徑ID、資源標識列上。因此,PATHID_INDEX中的條目的形式為(鍵值,行ID),其中,鍵值是表示特定路徑ID/資源標識組合的復合值,并且行ID標識PATH表的特定行。當(1)基本表行和(2)節(jié)點的路徑ID已知時,PATHID_INDEX可用于在PATH表中快速定位該節(jié)點的行。例如,基于鍵值“3.R1”,可遍歷PATHID_INDEX以找到與鍵值“3.R1”相關的條目。假設PATH表如上所述構(gòu)成,則索引條目具有值為3的行ID。值為3的行ID指向PATH表的第三行,該行是與路徑ID3和資源標識R1相關的節(jié)點的行。ORDERKEY_INDEX(次序鍵_索引)ORDERKEY_INDEX建立在PATH表的資源標識和次序鍵列上。因此,ORDERKEY_INDEX中的條目的形式為(鍵值,行ID),其中,鍵值是表示特定資源標識/次序鍵組合的復合值,并且行ID標識PATH表的特定行。當(1)基本表行和(2)節(jié)點的次序鍵已知時,ORDERKEY_INDEX可用于在PATH表中快速定位該節(jié)點的行。例如,基于鍵值“R1.’1.2,可以遍歷ORDERKEY_INDEX以找到與鍵值“R1.’1.2相關的條目。假設PATH表如上所述構(gòu)成,則索引條目將具有值為3的行ID。值為3的行ID指向PATH表的第三行,該行是與次序鍵1.2和資源標識R1相關的節(jié)點的行。值索引正如可以使用PATHID_INDEX加快基于路徑查找的查詢,通過建立在PATH表的值列上的索引可以加快基于值查找的查詢。然而,PATH表的值列可以保持多種數(shù)據(jù)類型的值。因此,根據(jù)一個實施例,為存儲在值列中的每種數(shù)據(jù)類型建立單獨的值索引。所以,在值列保持字符串、數(shù)字、和時戳的實施中,還創(chuàng)建了下面的值(次級)索引●STRING_INDEXonSYS_XMLVALUE_TO_STRING(value)●NUMBER_INDEXonSYS_XMLVALUE_TO_NUMBER(value)●TIMESTAMP_INDEXonSYS_XMLVALUE_TO_TIMESTAMP(value)這些值索引用于執(zhí)行基于數(shù)據(jù)類型的比較(等式和范圍)。例如,NUMBER值索引用于處理用戶XPath中基于數(shù)字的比較。例如,NUMBER_INDEX中的條目可以為(數(shù)字,行ID)的形式,其中,行ID指向PATH表中與“數(shù)字”的值相關的節(jié)點的行。類似地,STRING_INDEX中的條目可以具有(字符串,行ID)的形式,以及TIMESTAMP_INDEX中的條目可以具有(時戳,行ID)的形式。PATH表中的值格式可以與數(shù)據(jù)類型的本身形式不對應。因此,當使用值索引時,數(shù)據(jù)庫服務器可以調(diào)用轉(zhuǎn)換功能,以將值字節(jié)從存儲格式轉(zhuǎn)換為指定數(shù)據(jù)類型。另外,如下文中將要描述的,數(shù)據(jù)庫服務器應用任何必需的變換。根據(jù)一個實施例,對RAW值和BLOB值執(zhí)行轉(zhuǎn)換功能,并且在不可能轉(zhuǎn)換時返回NULL。默認為當創(chuàng)建XML索引時創(chuàng)建值索引。然而,用戶可以基于對查詢工作量的了解來取消一個或多個數(shù)值索引的創(chuàng)建。例如,如果所有的XPath判定僅涉及字符串比較,則可以避免NUMBER和TIMESTAMP值索引。PARENT_ORDERKEY_INDEX根據(jù)一個實施例,建立在PATH表上的次級索引組包括PARENT_ORDERKEY_INDEX。與ORDER_KEY索引類似,PARENT_ORDERKEY_INDEX建立在PATH表的資源標識和次序鍵列上。因此,PARENT_ORDERKEY_INDEX的索引條目具有(鍵值,行ID)的形式,其中,鍵值是對應于特定資源標識/次序鍵組合的復合值。然而,不同于ORDER_KEY索引,PARENT_ORDERKEY_INDEX條目中的行ID不指向具有特定資源標識/次序鍵組合的PATH表的行。相反,每個PARENT_ORDERKEY_INDEX條目的行ID都指向作為與資源標識/次序鍵組合相關的直接父節(jié)點的節(jié)點的PATH表的行。例如,在上述構(gòu)成的PATH表中,資源標識/次序鍵組合“R1.’1.2對應于PATH表的行3中的節(jié)點。PATH表的行3中的節(jié)點的直接父節(jié)點是由PATH表的行1所表示的節(jié)點。因此,與“R1.’1.2相關的PARENT_ORDERKEY_INDEX條目具有指向PATH表的行1的行ID。創(chuàng)建XML索引根據(jù)一個實施例,響應于由數(shù)據(jù)庫服務器接收的索引創(chuàng)建命令,在數(shù)據(jù)庫內(nèi)創(chuàng)建XML索引。為了解釋的目的,在將被索引的XML文檔將被存儲在關系表的XMLType列中的情境中描述XML索引的創(chuàng)建。例如,假設基本結(jié)構(gòu)為將樣式表(stylesheet)存儲為由ID列標識的XMLType的表stylesheet_tab。例如,可以使用下面的命令來創(chuàng)建該表CREATETABLEstylesheet_tab(idnumber,stylesheetXMLType);可在stylesheet_tab的stylesheet列上創(chuàng)建XML索引,以加速涉及基于Xpath的片段檢索和XPath判定的查詢。根據(jù)一個實施例,可以使用下面的命令來創(chuàng)建這種XML索引CREATEINDEXss_tab_xmliONstylesheet_tab(stylesheet)INDEXTYPEISXMLINDEX;下面的命令是如何在基于模式的XML類型上創(chuàng)建XML索引的實例CREATETABLEpurchaseorderOFXMLTypeXMLSchemahttp://xmlns.oracle.com/xdb/documentation/purchaseOrder.xsd″ELEMENT″PurchaseOrder″;CREATEINDEXpurchaseorder_xmliONpurchaseorder(object_value)INDEXTYPEISXMLINDEX;上述命令僅僅是可以提交到數(shù)據(jù)庫服務器使數(shù)據(jù)庫服務器創(chuàng)建XML索引的命令實例。這里描述的技術不限于用于指定索引創(chuàng)建的任何形式或語法。根據(jù)一個實施例,索引創(chuàng)建命令包括使用戶可以指定XML索引的各種特性的參數(shù),例如○包括在索引路徑組中或從索引路徑組排除的路徑○PATH表和次級索引的名稱○PATH表和次級索引的存儲選項(例如,是否將PATH表存儲為分區(qū)表、索引組織表(IndexOrganizedTable)等)○用于處理值的規(guī)則○值列的列類型(例如,RAW或BLOB)例如,用于處理值的規(guī)則可以指定是否將值視為區(qū)分大小寫、是否將值標準化(如果是,如何執(zhí)行標準化)、以及如何處理混合內(nèi)容節(jié)點(具有值和子節(jié)點的節(jié)點)的值。相對于混合內(nèi)容節(jié)點,例如,該規(guī)則可以指定與應當忽略、連接、或特殊處理的混合內(nèi)容節(jié)點相關的值。這僅是可以由用戶指定的值處理規(guī)則的實例??捎靡?guī)則組可以根據(jù)實施的不同而不同,并且可以基于所涉及的值類型而有進一步改變。當用戶創(chuàng)建XML索引時,自動創(chuàng)建下面的PATH表和次級索引。默認為基于XML索引的名稱,通過系統(tǒng)生成次級索引和PATH表的名稱。然而,用戶可以明確地指定這些對象的名稱。默認為從其上創(chuàng)建有XML索引的基本表的存儲特性中得到PATH表和次級索引的存儲選項。然而,用戶還可明確地指定用于這些對象的存儲特性。下面的實例示出了如何在PATH表的單獨表空間中創(chuàng)建號索引(numberindex)。CREATEINDEXPOIndexONpurchaseOrderNDEXTYPEISXMLINDEXPARAMETERS‘PATHS(/PurchaseOrder/LineItems//*,/PurchaseOrder/LineItems/LineItem/@ItemNumber)PATHTABLEPOIndex_path_tabletablespacetab_tbsVALUESTOREASRAW(50)NUMBERINDEXPOIndex_num_idxtablespaceidx_tbs’用戶選擇索引的路徑根據(jù)一個實施例,提供了一種機制,通過該機制,用戶可以指定用于確定XML索引將索引哪條XML路徑的規(guī)則。具體地,用戶可以注冊明顯地包括特定XML路徑的規(guī)則和/或明顯地排除特定XML路徑的規(guī)則。根據(jù)一個實施例,當用戶創(chuàng)建XML索引時,默認為對基本文檔中的所有節(jié)點進行索引(即,在PATH表中存在對應于文檔中的所有節(jié)點的行)。然而,用戶可以明確地指定將被索引的節(jié)點組(子樹),從而省略PATH表中的剩余節(jié)點。這通常用于排除已知的從查詢觀點來看是無用的片段。通過減少索引節(jié)點的數(shù)量,可以改善XML索引的空間利用和管理效率。根據(jù)一個實施例,在創(chuàng)建XML索引時可能發(fā)生規(guī)則的初始注冊。例如,假設要被索引的文檔存儲在purchaseOrder(訂貨單)表中。如果用戶想要索引所有Lineitem(線項目)元素及其子節(jié)點、以及訂貨單參考號和請求者,則可發(fā)布下面的CreateIndexDDLCREATEINDEXPOIndex1ONpurchaseOrderINDEXTYPEISXMLINDEXPARAMETERS‘PATHS(/PurchaseOrder/LineItems//*,/PurchaseOrder/Reference,/PurchaseOrder/Requestor)PATHTABLEPOIndex_path_table’在該實例中,POIndex_path_table表示由域索引用來存儲索引數(shù)據(jù)的表名稱。在前述實例中,規(guī)則明顯地包括特定路徑。規(guī)則沒有明顯地包括的所有路徑將從該索引中排除。規(guī)則/PurchaseOrder/LineItems//*包括通配符“*”。因此,該規(guī)則明顯地包括路徑/PurchaseOrder/LineItems以及到源于路徑/PurchaseOrder/LineItems的所有節(jié)點的路徑。這僅僅是通配符可以如何在規(guī)則中使用的一個實例。根據(jù)一個實施例,路徑選擇規(guī)則機制在許多情況下都支持通配符。例如,規(guī)則/nodex/*/nodey/nodez選擇(1)源于/nodex/以及(2)終止于/nodey/nodez的所有路徑,而不考慮nodex與nodey/nodez之間的路徑。用戶還可指定明確地排除路徑的規(guī)則。例如,為了索引除Lineitem描述和purchaseOrder動作之外文檔的所有路徑,使用下面的CreateIndexDDL(創(chuàng)建索引DDL)來創(chuàng)建索引CREATEINDEXPOIndex2ONpurchaseOrderINDEXTYPEISXMLINDEXPARAMETERS‘PATHSEXCLUDE/PurchaseOrder/LineItems/LineItem/Description,/PurchaseOrder/Actions)PATHTABLEPOIndex_path_table2’將文檔添加至索引文檔組當需要索引新XML文檔時,收集路徑、次序、和值信息并存儲在XML索引中。根據(jù)一個實施例,當將XML文檔添加至索引XML文檔的儲存庫時,解析新XML文檔,以識別到其中所包含的節(jié)點的路徑。一旦識別了新XML文檔中節(jié)點的路徑,數(shù)據(jù)庫服務器就確定將索引包括在新XML文檔中的哪些節(jié)點。之后,數(shù)據(jù)庫服務器基于這些節(jié)點中的每個節(jié)點來更新XML索引。參照圖1,示出了根據(jù)本發(fā)明一個實施例的如何處理新XML文檔的流程圖。在圖1中,步驟102和108定義了對新XML文檔中的每個節(jié)點進行處理的循環(huán)。具體地,在步驟102中,選擇之前未被處理的節(jié)點。在第一次迭代期間,被選擇進行處理的第一個節(jié)點將是新XML文檔的根節(jié)點。在步驟104,數(shù)據(jù)庫服務器確定當前選擇的節(jié)點的路徑。在步驟106,基于該路徑,數(shù)據(jù)庫服務器確定是否索引當前選擇的節(jié)點。特別地,當用戶已經(jīng)指定要索引的路徑子集時,僅對對應于指定路徑子集的那些節(jié)點添加索引條目。根據(jù)一個實施例,步驟106包括將與當前節(jié)點相關的路徑與路徑選擇規(guī)則進行匹配,以檢查是否應當索引當前節(jié)點。如果(1)用戶已經(jīng)注冊了表示應該包括哪些路徑的規(guī)則,以及(2)與當前節(jié)點相關的路徑與用戶指定的任何路徑都不匹配,則將以該節(jié)點為根節(jié)點的子樹(片段)從索引中省略。另一方面,如果(1)規(guī)則指定哪些路徑將從索引中被排除,以及(2)與用戶指定的任何路徑的都匹配的節(jié)點被排除,則將以該節(jié)點為根節(jié)點的片段從索引中省略。例如,可以使用有限時序機來執(zhí)行匹配操作。如果在步驟106確定所選節(jié)點與將被索引的路徑不相關,則控制進行至步驟108。在步驟108,數(shù)據(jù)庫服務器確定新XML文檔是否還具有要被處理的節(jié)點。如果新XML文檔沒有要被處理的節(jié)點,則完成更新XML索引的處理。否則,如果新XML文檔還具有要被處理的節(jié)點,則控制返回到步驟102并處理其它節(jié)點。如果在步驟106確定將要索引當前節(jié)點,則將以該節(jié)點為根節(jié)點的片段添加至索引。此外,還將其所有祖先節(jié)點(ancestor)(直到根節(jié)點的元素節(jié)點)添加至該索引。最后,還將祖先元素節(jié)點內(nèi)的任意名稱空間屬性添加至該索引。在圖1中,更具體地示出了中斷處理將被索引的節(jié)點的操作,在步驟110中,確定與當前節(jié)點相關的路徑是否分配有PATHID。在先前索引的XML文檔中不存在恰當路徑的情況下,該路徑可能還沒有被分配給PATHID。在這種情況下,控制進行至步驟112,將PATHID分配給該路徑。之后,將新的PATHID到路徑的映射存儲在數(shù)據(jù)庫中。在步驟114,將包括關于當前節(jié)點的信息的行添加至PATH表。在步驟116,通過當前節(jié)點的條目更新PATHID、ORDERKEY、和PARENT_ORDERKEY索引。如上所述,PATHID和ORDERKEY條目將指向當前節(jié)點的新行,而PARENT_ORDERKEY條目將指向當前節(jié)點的父節(jié)點的PATH表的行。在步驟118,確定當前節(jié)點是否與值相關。如果當前節(jié)點與值不相關,則控制返回到步驟108。如果當前節(jié)點與值相關,并且已經(jīng)為值的數(shù)據(jù)類型創(chuàng)建了值索引,則在步驟120中,將索引條目添加至與該特定數(shù)據(jù)類型相關的值索引。之后,控制返回到步驟108。根據(jù)一個實施例,即使節(jié)點與不被索引的路徑相關,但是如果該節(jié)點是被索引的任意節(jié)點的祖先節(jié)點,則仍然對該節(jié)點進行索引。因此,即使用戶指定僅應當包括與/a/b/c/*匹配的路徑,仍然會索引與路徑/a、/a/b、和/a/b/c相關的節(jié)點,只要它們是與模式/a/b/c/*匹配的路徑相關的任意節(jié)點的祖先節(jié)點。變更XML索引根據(jù)一個實施例,提供了用于在創(chuàng)建索引之后變更XML索引特性的機制。例如,響應于變更索引的語句,可以執(zhí)行XML索引的創(chuàng)建后變更。用于XML索引的變更索引語句的重要用途是添加或刪除索引路徑。根據(jù)一個實施例,可通過下面的AlterIndexDDL(變更索引DDL)將新路徑添加至索引ALTERINDEXPOIndexPARAMETERS‘PATHS(/PurchaseOrder/Reference,/PurchaseOrder/Actions/Action//*)’在索引還沒有索引訂貨單參考和Action元素的所有子節(jié)點的情況下,該DDL命令索引所有訂貨單參考和Action元素的所有子節(jié)點。類似地,下面的DDL在路徑已經(jīng)被索引的情況下將這些路徑從索引中刪除ALTERINDEXPOIndexPARAMETERS‘PATHSEXCLUDE(/PurchaseOrder/Reference,/PurchaseOrder/Actions/Action//*)’如下面的實例所示,AlterIndexRenameDDL(變更索引重命名DDL)使用戶改變索引名稱,而不明確地刪掉和創(chuàng)建索引名稱ALTERINDEXPOIndexRENAMEPONewIndex確定是否可以使用XML索引在查詢時,如果可以將查詢XPath靜態(tài)地確定為用戶指定Xpath的子集(并由此確保在該索引中),則XML索引可用于答復查詢。如果在對查詢進行編輯時不能確定子集關系,則XML索引不能用于滿足查詢。例如,通過下面的語句創(chuàng)建XML索引POIndex1CREATEINDEXPOIndex1ONpurchaseOrderINDEXTYPEISXMLINDEXPARAMETERS‘PATHS(/PurchaseOrder/LineItems//*,/PurchaseOrder/Reference,/PurchaseOrder/Requestor)PATHTABLEPOIndex_path_table’XML索引可用于答復查詢XPath/PurchaseOrder/LineItem/Description。然而,由于在不同于/PurchaseOrder/LineItems的路徑下存在<Description>元素,所以XML索引不能用于答復查詢XPATH//Description。使用XML索引來答復XPath查詢通過將XPath索引分解為基于值的簡單路徑和判定,XML索引可用于滿足XPath查詢。將最終分解的部分轉(zhuǎn)化為索引PATH_TABLE上的SQL查詢。根據(jù)一個實施例,索引存取方法的輸入是包括一個或多個下列表達式的復合表達式●簡單(導航)路徑表達式,例如,/a/b●簡單值表達式,例如,/a/b/c>50●表達式之間的結(jié)構(gòu)結(jié)合(即,分級關系),例如,將XPath表達式/a/b[c>50]表示為(/a/b)PARENT-OF(/a/b/c>50)假設查詢具有簡單判定,例如,/a/b/c=foo,則這種查詢可以對照如下PATH表來執(zhí)行,SELECTDISTINCTridFROMpath_tableWHEREpathid=:1ANDxmlvalue_to_string(value)=‘foo’;將路徑/a/b/c的ID限定為變量1。對于該查詢有多種執(zhí)行方案。根據(jù)一個實施例,查詢優(yōu)化器基于成本采用最佳的執(zhí)行方案。數(shù)據(jù)庫服務器可以(1)使用路徑ID上的次級索引、(2)使用xmlvalue_to_string(值)上的次級索引、或(3)使用以上兩者、以及位圖和結(jié)果。假設指定片段查找的查詢,例如,XPath/a/b/c??梢允褂靡韵抡Z句對照PATH表來執(zhí)行這種查詢SELECTridFROMpath_tableWHEREpathid=:1ORDERBYorder_key;路徑/a/b/c的ID限定為變量1。通過文檔次序的查詢返回匹配的結(jié)果。如果需要,連接對應于單個文檔的所有片段。假設基于簡單判定指定片段查找的查詢,例如,/a/b[c=foo]。輸入的XPath的標準化表示為(/a/b)PARENT-OF(/a/b/c=foo)。以下查詢可用于查找路徑/a/b的匹配以及簡單判定(/a/b/c=foo)的匹配。SELECTp1.rid,p1.offsetFROMpath_tablep1,path_tablep2WHEREp1.pathid=:1ANDp2.pathid=:2ANDxmlvalue_to_string(p2.value)=‘foo’ANDSYS_DEWEY_PARENT(p1.order_key)=p2.order_keyORDERBYp1.rid,p1.offset;然后,使用結(jié)構(gòu)連接運算符(其使用Dewey次序鍵來表示)來合并結(jié)果。將路徑/a/b和/a/b/c的ID限定為變量1和2。根據(jù)一個實施例,基于成本的優(yōu)化器采用多種可能的執(zhí)行方案中的最佳執(zhí)行方案。XML索引還可用于執(zhí)行數(shù)據(jù)類型認知操作。存在多種將數(shù)據(jù)類型信息附于XPath判定的機制。例如●使用XML模式。如果基本表列具有相關的XML模式,則對照XML模式對用戶XPath進行類型檢查,從而使適當?shù)臄?shù)據(jù)類型與表達式相關?!耧@式類型強制。XPath提供用于顯式類型強制的運算符?!耠[式類型強制。XPath定義一些隱式類型計算規(guī)則。例如,如果比較運算符的RHS為NUMBER,則將LHS隱式強制為NUMBER。根據(jù)一個實施例,在所有這些情況中,XML索引存取方法的輸入是與數(shù)據(jù)類型信息相關的XPath表達式。數(shù)據(jù)類型信息被用在生成的SQL查詢中,以確保選擇適當?shù)闹邓饕?。例如,類型檢查的XPath如下SYS_XMLVALUE_TO_NUMBER(/a/b/c)>10.567下列查詢中的結(jié)果對照使用NUMBER值索引的PATH表SELECTDISTINCTridFROMpath_tableWHEREpathid=:1ANDsys_xmlvalue_to_number(value)>10.567;如這里描述的,使用XML索引可以產(chǎn)生多種優(yōu)點,包括可以有效地估計多組XPath;可以滿足涉及數(shù)據(jù)類型認知比較的XPath;可以從原始XML文檔中有效地提取片段;用戶可以選擇僅對路徑的子集進行索引,從而避免了使索引膨脹(bloating);基于應用需要可以定制索引值;對偶數(shù)非模式的XML文檔進行索引的能力可以滿足多類用戶的查詢要求;能夠使他們將其所有XML文檔存儲在Oracle中,而不用考慮查詢性能。語法在上下文中已經(jīng)描述了實施例,其中,響應于由數(shù)據(jù)庫服務器接收的命令,數(shù)據(jù)庫服務器創(chuàng)建并保持XML索引。該命令必須符合數(shù)據(jù)庫服務器可以理解的語言。根據(jù)本發(fā)明的一個實施例,用于涉及XML索引的各種DDL命令的語法如下創(chuàng)建索引語法CREATEINDEX<index_name>ON[<schema>.]<table_name>(<column_name>)INDEXTYPEIS[<schema>.]XMLINDEX[LOCAL][PARALLEL][PARAMETERS’<parameter_clause>‘];實例Createindexxmldoc_idxonxmldoc_tab(xmldoc)indextypeisXMLINDEXParameters‘PATHS(/a/b/c,//e),PATHTABLExmldoc_idx_pathtab’;根據(jù)一個實施例,域索引是對父XML表的均分。如果XML表未被分區(qū),則域索引也沒有被分區(qū)。PATHTABLE及其次級索引也被均分為XML表。PARAMETERS子句的語法<parameters_clause>::=<parameter_clause>[,<parameters_clause>]<parameter_clause>::=[<paths_clause>|<path_table_clause>|<pathid_index_clause>|<orderkey_index_clause>|<value_index_clause>]<paths_clause>::=PATHS([<path_list_clause>|<namespaces_clause>]*)<path_list_clause>::={<include_list_clause>|<exclude_list_clause>}<include_list_clause>::=<xpath_list_clause><exclude_list_clause>::=EXCLUDE(<xpath_list_clause>)<xpath_list_clause>::=<xpath>[,<xpath_list_clause>]<namespaces_clause>::=NAMESPACES(<namespace_list_clause>)<namespace_list_clause>::=<namespace>[,<namespace_list_clause>]<path_table_clause>::=PATHTABLE[<identifier>][(<segmentattributesclause><table_properties>)]<pathid_index_clause>::=PATH<index_parameters><orderkey_index_clause>::=ORDERKEY<index_parameters><value_index_clause>::=VALUESTOREAS<value_type><value_type>::={RAW[(<integralnumber>)]BLOB}<value_idx_clause>::=<value_idx1_clause>[,<value_idx_clause>]<value_idx_1_clause>::=[<string_parameters>|NUMBER|TIMESTAMP]<index_parameters><string_parameters>::=STRING[<string_parametersl>[,<string_parameters>]]<string_parametersl>::=NORMALIZED|IGNORE_MIXED_TEXT|CASE_INSENSITIVE<index_parameters>::=[INDEX[<identifier>][(<index_attributes>)]]根據(jù)一個實施例,PARAMENTERS子句用于進行以下指定●用于路徑表和次級索引的名稱和物理參數(shù)(表空間等)。即使沒有明確指定,仍然創(chuàng)建PATHTABLE上的全部六個索引?!鹑绻蠽ALUE的類型被顯式地指定為BLOB,則將數(shù)值外聯(lián)(out-of-line)存儲在BLOB片段中。否則,將數(shù)值內(nèi)聯(lián)(inline)存儲為RAW數(shù)據(jù)。RAW的<size>恰好為整數(shù)?!餝TRING值的屬性為■當字符串的所有前導空格和結(jié)尾空格要被去除時,為NORMALIZED■在混合文本的情況下IGNORE_MIXED_TEX將值存儲為NULL■當將所有字符串轉(zhuǎn)換為小寫時,為CASE_INSENSITIVE注意,在將值存儲到VALUE列之前(并且在PATHTABLE上創(chuàng)建次級索引之前)應用上述操作?!竦剿饕穆窂浇M。用戶可以通過下列指定來控制索引路徑組○到索引的路徑的顯式列表。這可以包括通配符和//軸。例如,/a/b/c、/d/*、/x//y○不被索引的路徑的顯式列表刪掉索引語法DROPINDEX<index_name>;實例Dropindexxmldoc_idx;使用與XML索引的分量、下部PATHTABLE以及其次級索引一起刪除XML索引。變更索引語法ALTERINDEX<index_name>PARAMETERS’<parameter_clause>‘|RENAME<new_index_name>|REBUILD[ONLINE][PARALLEL[DEGREE<degree>]]|MODIFYPARTITION<partition_name>PARAMETERS’<parameter_clause>‘|RENAMEPARTITION<partition_name>TO<new_partition_name>|REBUILDPARTITION<partition_name>[ONLINE][PARALLEL[DEGREE<degree>]]|實例Alterindexxmldoc_idxParameters‘PATHS(/a/b/c,//e),PATHTABLExmldoc_idx_pathtab’;Alterindexxmldoc_idxRENAMETOnew_xmldoc_idx;Alterindexxmldoc_idxREBUILD;Alterindexxmldoc_idxMODIFYPARTITIONp1Parameters‘PATHS(/a/b/c,//e)’;Alterindexxmldoc_idxRENAMEPARTITIONxmldoc_idxpartTOnew_xmldoc_idxpart;Alterindexxmldoc_idxREBUILDPARTITIONxmldoc_idxpart;硬件綜述圖2是示出可以執(zhí)行本發(fā)明的實施例的計算機系統(tǒng)200的框圖。計算機系統(tǒng)200包括用于傳遞信息的總線202或其它通信裝置以及用于處理信息的與總線202連接的處理器204。計算機系統(tǒng)200還包括諸如隨機訪問存儲器(RAM)或者其它動態(tài)存儲裝置的主存儲器206,其連接至總線202用于儲存信息和將由處理器204執(zhí)行的指令。在執(zhí)行將由處理器204執(zhí)行的指令期間,主存儲器206還可用于儲存臨時變量或其他中間信息。計算機系統(tǒng)200進一步包括只讀存儲器(ROM)208或連接至總線202的其他靜態(tài)存儲裝置,用于存儲靜態(tài)信息和處理器204的指令。提供諸如磁盤或光盤的存儲設備210,并連接至總線202用于存儲信息和指令。計算機系統(tǒng)200可以經(jīng)由總線202連接至諸如陰極射線管(CRT)的顯示器212,用于向計算機用戶顯示信息。包括字母數(shù)字鍵和其他鍵的輸入裝置214連接至總線202,用于將信息和指令選擇傳遞到處理器204。另一種類型的用戶輸入裝置是光標控制216,諸如鼠標、跟蹤球、或光標方向鍵,用于將方向信息和命令選擇傳遞到處理器204并用于控制顯示器212上的光標移動。輸入裝置通常在兩個軸上(第一個軸(例如X軸)和第二個軸(例如Y軸))具有兩個自由度,使裝置能指定平面上的位置。本發(fā)明涉及計算機系統(tǒng)200的使用,用于執(zhí)行在此描述的技術。根據(jù)本發(fā)明的一個實施例,通過計算機系統(tǒng)200響應于執(zhí)行包括在主存儲器206中的一個或多個指令的一個或多個序列的處理器204,來實現(xiàn)這些技術。這樣的指令可以從諸如存儲裝置210的其它計算機可讀介質(zhì)讀入主存儲器206。包括在主存儲器206中的指令序列的執(zhí)行,使得處理器204執(zhí)行此處所述的處理步驟。在可選實施例中,可以使用硬連線電路(hard-wiredcircuitry)來取代軟件指令或者與軟件指令結(jié)合來實施該發(fā)明。因此,本發(fā)明的實施例將不限于硬件電路和軟件的任何特定組合。這里使用的術語“機器可讀介質(zhì)”是指參與提供數(shù)據(jù)以使機器以特定方式運轉(zhuǎn)的任何介質(zhì)。在使用計算機系統(tǒng)200實施的實施例中,例如,在提供指令給處理器204用于執(zhí)行的過程中,涉及了多種機器可讀介質(zhì)。這種介質(zhì)可以采取多種形式,包括但不限于非易失性介質(zhì)、易失性介質(zhì)、和傳遞介質(zhì)。非易失性介質(zhì)舉例來說包括光盤或磁盤,諸如存儲裝置210。易失性介質(zhì)包括動態(tài)存儲器,諸如主存儲器206。傳輸介質(zhì)包括同軸電纜、銅線、和光纖,包括組成總線202的導線。傳輸介質(zhì)還可采取聲波或光波形式,例如那些在無線電波和紅外線數(shù)據(jù)通信過程中產(chǎn)生的聲波和光波。通常形式的計算機可讀介質(zhì)包括如軟盤、軟性盤、硬盤、磁帶,或者任何其它磁性介質(zhì)、CD-ROM、任何其它光介質(zhì)、打孔紙、紙帶、或者任何帶孔圖樣的物理介質(zhì)、RAM、PROM、EPROM、FLASH-EPROM、或者其他任何存儲芯片或者盒式磁帶,或者以下提到的載波、或者計算機可讀的任何其他介質(zhì)。各種形式的計算機可讀介質(zhì)可參與將一個或者多個指令的一個或多個序列承載到處理器204用于執(zhí)行。例如,指令開始可承載在遠程計算機的磁盤中。遠程計算機可以將指令加載到其動態(tài)存儲器中,然后使用調(diào)制解調(diào)器通過電話線發(fā)送指令。計算機系統(tǒng)200本地的調(diào)制解調(diào)器可接收電話線上的數(shù)據(jù),并使用紅外發(fā)射器將數(shù)據(jù)轉(zhuǎn)換成紅外信號。紅外探測器可以接收紅外信號攜帶的數(shù)據(jù),并且合適的電路可以將數(shù)據(jù)放到總線202上??偩€202將數(shù)據(jù)承載到主存儲器206,處理器204從主存儲器取回并執(zhí)行這些指令。在由處理器204執(zhí)行這些指令之前或之后,由主存儲器206接收的指令可隨意地儲存在存儲裝置210上。計算機系統(tǒng)200還包括連接至總線202的通信接口218。提供雙向數(shù)據(jù)通信的通信接口218,連接到與局域網(wǎng)222連接的網(wǎng)絡鏈路220。例如,通信接口218可以是綜合業(yè)務數(shù)字網(wǎng)(ISDN)卡或者調(diào)制解調(diào)器,用于提供到相應類型的電話線的數(shù)據(jù)通信連接。又如,通信接口218可以是局域網(wǎng)(LAN)卡,用于提供至兼容局域網(wǎng)(LAN)的數(shù)據(jù)通信連接。也可以使用無線鏈路。在任何這樣的實施中,通信接口218發(fā)送和接收承載表示各種類型的信息的數(shù)字數(shù)據(jù)流的電信號、電磁信號、和光學信號。網(wǎng)絡鏈路220通常可通過一個或者多個網(wǎng)絡向其它數(shù)據(jù)裝置提供數(shù)據(jù)通信。例如,網(wǎng)絡鏈路220可通過局域網(wǎng)222與主機224連接,或者與互聯(lián)網(wǎng)服務提供商(ISP)226操作的數(shù)據(jù)設備連接。ISP226又通過目前通稱為“互聯(lián)網(wǎng)”228的全球分組數(shù)據(jù)通信網(wǎng)絡提供數(shù)據(jù)通信服務。局域網(wǎng)222和互聯(lián)網(wǎng)228都使用承載數(shù)字數(shù)據(jù)流的電信號、電磁信號、或光學信號。通過各種網(wǎng)絡的信號和網(wǎng)絡鏈路220上的信號以及通過通信接口218的信號,都傳送數(shù)字數(shù)據(jù)給計算機系統(tǒng)200或者傳送來自計算機系統(tǒng)的數(shù)字數(shù)據(jù),是傳輸信息的載波的示例性形式。計算機系統(tǒng)200能通過網(wǎng)絡、網(wǎng)絡鏈路220、和通信接口218發(fā)送消息和接收數(shù)據(jù)(包括程序代碼)。在互聯(lián)網(wǎng)的實例中,服務器230可通過互聯(lián)網(wǎng)228、ISP226、局域網(wǎng)222、和通信接口218,傳送用于應用程序的所請求的程序代碼。所接收的代碼可以在其被接收時由處理器204執(zhí)行,和/或儲存在存儲裝置210或者其它非易失性介質(zhì)中用于隨后執(zhí)行。按照這種方式,計算機系統(tǒng)200可以以載波的形式獲得應用代碼。以上所述僅為本發(fā)明的優(yōu)選實施例而已,并不用于限制本發(fā)明,對于本領域的技術人員來說,本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進等,均應包含在本發(fā)明的保護范圍之內(nèi)。權利要求1.一種用于存取來自XML文檔的信息的方法,所述方法包括在XML文檔內(nèi)識別將被索引的節(jié)點組;對于將被索引的所述節(jié)點組中的每個節(jié)點,將所述節(jié)點的條目存儲在索引中,其中,給定節(jié)點的所述條目包括用于定位與所述給定節(jié)點相關的XML內(nèi)容的定位數(shù)據(jù),以及以下中的至少一個(a)分級數(shù)據(jù),表示所述給定節(jié)點在包含所述給定節(jié)點的所述XML文檔內(nèi)的分級位置;以及(b)路徑數(shù)據(jù),對應于通過包含所述特定節(jié)點的XML文檔的結(jié)構(gòu)到所述給定節(jié)點的路徑;以及響應于對來自所述XML文檔的信息的請求,使用所述索引定位所述XML文檔內(nèi)的信息。2.根據(jù)權利要求1所述的方法,其中,所述索引被實施為關系表,以及通過在所述關系表內(nèi)存儲所述節(jié)點組中的每個節(jié)點的行來執(zhí)行存儲每個節(jié)點條目的步驟。3.根據(jù)權利要求1所述的方法,其中,所述索引存儲與所述節(jié)點組中的一個或多個節(jié)點相關的值。4.根據(jù)權利要求3所述的方法,其中,存儲在所述索引中的所述值包括多種數(shù)據(jù)類型的值,并且所述方法還包括為所述多種數(shù)據(jù)類型中的兩種或多種數(shù)據(jù)類型中的每種建立次級索引的步驟。5.根據(jù)權利要求1所述的方法,其中,所述給定節(jié)點的所述定位數(shù)據(jù)包括用于定位XML文檔的第一數(shù)據(jù)和用于在所述XML文檔內(nèi)定位與所述給定節(jié)點相關的信息的第二數(shù)據(jù)。6.根據(jù)權利要求1所述的方法,其中,所述給定節(jié)點的條目包括分級數(shù)據(jù),所述分級數(shù)據(jù)表示所述給定節(jié)點在包括所述給定節(jié)點的所述XML文檔內(nèi)的分級位置;以及所述方法還包括基于所述分級數(shù)據(jù),在所述索引中建立用于存取條目的次級索引。7.根據(jù)權利要求1所述的方法,其中,所述給定節(jié)點的條目包括路徑數(shù)據(jù),所述路徑數(shù)據(jù)對應于通過包含所述特定節(jié)點的XML文檔的結(jié)構(gòu)到所述給定節(jié)點的路徑;以及所述方法還包括基于所述路徑數(shù)據(jù),在所述索引中建立用于存取條目的次級索引。8.根據(jù)權利要求1所述的方法,還包括基于與所述父節(jié)點的子節(jié)點相關的分級信息,在所述索引中為所述父節(jié)點建立用于存取條目的次級索引。9.根據(jù)權利要求1所述方法,其中,識別將被索引的節(jié)點組的步驟包括以下步驟接收用于確定應當索引哪些路徑的規(guī)則;確定與將被索引的XML文檔中的節(jié)點相關的路徑;以及基于(a)用于確定索引哪些路徑的所述規(guī)則,以及(b)與將被索引的所述XML文檔中的節(jié)點相關的所述路徑,識別將索引哪些節(jié)點。10.根據(jù)權利要求9所述的方法,其中,所述規(guī)則顯式標識將被包括在所述索引中的路徑。11.根據(jù)權利要求9所述的方法,其中,所述規(guī)則顯式標識將被從所述索引中排除的路徑。12.根據(jù)權利要求4所述的方法,還包括接收指示將對其建立次級值索引的數(shù)據(jù)類型的用戶數(shù)據(jù)。13.一種承載有一個或多個指令序列的計算機可讀介質(zhì),當所述一個或多個指令序列被一個或多個處理器執(zhí)行時,使所述一個或多個處理器執(zhí)行權利要求1中所述的方法。14.一種承載有一個或多個指令序列的計算機可讀介質(zhì),當所述一個或多個指令序列被一個或多個處理器執(zhí)行時,使所述一個或多個處理器執(zhí)行權利要求2中所述的方法。15.一種承載有一個或多個指令序列的計算機可讀介質(zhì),當所述一個或多個指令序列被一個或多個處理器執(zhí)行時,使所述一個或多個處理器執(zhí)行權利要求3中所述的方法。16.一種承載有一個或多個指令序列的計算機可讀介質(zhì),當所述一個或多個指令序列被一個或多個處理器執(zhí)行時,使所述一個或多個處理器執(zhí)行權利要求4中所述的方法。17.一種承載有一個或多個指令序列的計算機可讀介質(zhì),當所述一個或多個指令序列被一個或多個處理器執(zhí)行時,使所述一個或多個處理器執(zhí)行權利要求5中所述的方法。18.一種承載有一個或多個指令序列的計算機可讀介質(zhì),當所述一個或多個指令序列被一個或多個處理器執(zhí)行時,使所述一個或多個處理器執(zhí)行權利要求6中所述的方法。19.一種承載有一個或多個指令序列的計算機可讀介質(zhì),當所述一個或多個指令序列被一個或多個處理器執(zhí)行時,使所述一個或多個處理器執(zhí)行權利要求7中所述的方法。20.一種承載有一個或多個指令序列的計算機可讀介質(zhì),當所述一個或多個指令序列被一個或多個處理器執(zhí)行時,使所述一個或多個處理器執(zhí)行權利要求8中所述的方法。21.一種承載有一個或多個指令序列的計算機可讀介質(zhì),當所述一個或多個指令序列被一個或多個處理器執(zhí)行時,使所述一個或多個處理器執(zhí)行權利要求9中所述的方法。22.一種承載有一個或多個指令序列的計算機可讀介質(zhì),當所述一個或多個指令序列被一個或多個處理器執(zhí)行時,使所述一個或多個處理器執(zhí)行權利要求10中所述的方法。23.一種承載有一個或多個指令序列的計算機可讀介質(zhì),當所述一個或多個指令序列被一個或多個處理器執(zhí)行時,使所述一個或多個處理器執(zhí)行權利要求11中所述的方法。24.一種承載有一個或多個指令序列的計算機可讀介質(zhì),當所述一個或多個指令序列被一個或多個處理器執(zhí)行時,使所述一個或多個處理器執(zhí)行權利要求12中所述的方法。全文摘要提供了用于索引XML文檔的技術。根據(jù)一個實施例,創(chuàng)建用于為XML文檔的每個索引節(jié)點存儲一行的PATH表。節(jié)點的PATH表的行包括(1)用于定位包含該節(jié)點的XML文檔的信息,(2)標識節(jié)點路徑的信息,以及(3)標識包含該節(jié)點的XML文檔的分級結(jié)構(gòu)內(nèi)節(jié)點位置的信息。如果節(jié)點與值相關,則節(jié)點的PATH表的行還可以包括值。通過次級索引使得易于使用PATH表來答復XPath查詢。文檔編號G06F17/30GK1965316SQ200580018627公開日2007年5月16日申請日期2005年4月6日優(yōu)先權日2004年4月9日發(fā)明者西瓦??ㄌm·錢德拉塞卡,拉維·默西,阿希什·蒂索,安霍-圖安·特蘭,斯里達·穆卡瑪拉,埃里克·塞德拉,尼普恩·阿加瓦爾申請人:甲骨文國際公司