用于存取xml数据的索引的制作方法

文档序号:6655983阅读:224来源:国知局

专利名称::用于存取xml数据的索引的制作方法
技术领域
:本发明涉及管理信息,更具体地,涉及存取包含在XML文档中的信息。
背景技术
:近年来,有很多允许存储和查询可扩展标记语言数据(“XML数据”)的数据库系统。尽管有很多XML查询的演进标准,但是所有标准都包括一些XPath的变量。然而,数据库系统通常不是处理XPath查询的最优系统,并且对数据库系统的查询性能还有很多要求。在XML模式定义可用的具体情况下,可获知XML实例文档中所用的结构和数据类型。然而,在XML模式定义不可用以及要查找的文档不符合任何模式的情况下,没有用于使用XPath查询的有效技术。一些数据库系统可采用点对点(ad-hoc)机制来满足与文档(其中,文档模式是未知的)相悖的Xpath查询。例如,数据库系统可通过对所有文档执行全扫描来满足XPath查询。虽然所有文档的全扫描可用于满足所有XPath查询,但是由于缺少索引,所以实施会非常慢。满足XPath查询的另一种方法涉及文本关键字的使用。具体地,很多数据库系统都支持文本索引,并且这些数据库系统可用于满足特定的XPath。然而,该技术仅能满足XPath查询的小子集。因此,在现有数据库系统中没有可用于处理多种XPath查询的有效索引技术。本部分描述的方法是可以推行的方法,而不必是先前已经构思或推行的方法。因此,除非另外指出,不可以仅仅因为本部分中描述的方法包含在该部分中而认为是现有技术。通过附图中的实例而不是限制的方式来描述本发明,在附图中相同的参考标号指向相似的元件,其中图1是示出用于基于新XML文档更新XML索引的步骤的流程图;以及图2可以实施本文所述技术的系统的框图。具体实施例方式在以下描述中,为了解释的目的,叙述了大量特定细节以提供对本发明的全面理解。然而,很显然,在没有这些特定细节的情况下也可以实施本发明。在其他实例中,以框图形式示出了已知的结构和装置,以避免不必要的使本发明不清楚。功能综述提供了一种用于在XML文档中索引路径、值、和次序(order,顺序)信息的机制。该机制可以在不考虑用于存储实际XML数据的数据结构(“基本结构”)和格式的情况下使用。例如,实际XML数据可以以诸如CLOB(存储实际XML文本的字符LOB)、O-R(XML模式下的对象关系结构形式)、或BLOB(存储一些二进制形式的XML的二进制LOB)的任意形式存在于数据库内部或外部的结构中。这里描述的技术涉及使用一组用于存取XML数据的共同组成索引的结构。根据一个实施例,该索引(这里称为“XML数据”)包括三个逻辑结构路径索引、次序索引、和值索引。在一个实施例中,所有这三个逻辑结构都存在于单个表中,这里称为PATH_TABLE。XPath查询语言最常用的部分包括基于值的判定和导航(父子派生)存取。如下文中将要更详细地描述的,通过追踪路径、值、和次序信息,XML索引可用于有效地满足这些存取方法。另外,基于如何实施XML索引的实施例,使用XML索引可产生以下有益效果中的一个或多个(1)改善基于XPath查询的搜索性能,这包括路径匹配以及值判定(predicate);(2)在片段由XPath表达式标识的情况下,处理片段提取;(3)在存在适当XML模式定义的情况下,关于值判定的数据类型认知;(4)通过添加新定义支持演进XML模式和XML索引的能力;(5)处理多类XPath表达式(包括子轴和后代轴),以及等式和范围判定;(6)用户通过包括或排除索引中指定的路径组或命名空间来控制索引路径组的能力,这在文档定向的情况中尤其有用,其中,索引中省略了与格式化相关的标志;(7)允许存储于索引中的实际文本值的用户化,例如,删掉空格(whitespace)、不区分大小写(case-insensitive);(8)大量加载索引以及支持并行索引创建的良好性能。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文档的两个实例。在此所述的技术不限于具有任何特定类型、结构、或内容的XML文档。下面将根据本发明的各种实施例给出如何索引和存取这种文档的实例。XML索引根据一个实施例,XML索引是改善包括基于XPath的判定和/或基于XPath的片段提取的查询性能的域索引(domainindex)。例如,可以在存储为CLOB或结构化存储的无模式XMLType列(column,栏)以及基于模式的XML上建立XML索引。在一个实施例中,XML索引是通过协作使用路径索引、值索引、和次序索引所产生的逻辑索引。路径索引提供了基于简单(导航)路径表达式来查找片段的机制。值索引提供了基于值等式或范围的查找。可能存在多个次级值索引——每种数据类型一个。次序索引使分级次序信息与索引的节点相关联。次序索引用于确定XML节点之间的父子、祖孙、以及兄弟关系。当用户提交含有XPath(作为判定或片断标识符)的查询时,XPath语句被分解成存取XML索引表的SQL查询。所生成的查询通常执行一组受路径、值、和次序约束的查找,并将其结果适当地合并。路径表根据一个实施例,逻辑XML索引包括PATH表和次级索引组。如上所述,每个索引XML文档可以包括许多索引节点。对于每个索引节点,PATH表包含一行。对于每个索引节点,该节点的PATH表的行包含与该节点相关的各种信息。根据一个实施例,PATH表中包含的信息包括(1)指示到节点的路径的PATHID;(2)用于对基本结构内的节点的片段数据进行定位的“位置数据”;以及(3)指示包含节点的XML文档的结构分级中该节点的位置的“分级数据”。可选地,对于与值相关的那些节点,PATH表还可以包含值信息。以下将更详细地描述每种类型的信息。路径XML文档结构在XML文档内的节点之间建立父子关系。XML文档中节点的“路径”反映了从“根”节点开始到特定节点的一系列父子链路。例如,到po2.xml中的“User”节点的路径为/PurchaseOrder/Actions/Action/User,这是因为“User”节点是“Action”节点的子节点,“Action”节点是“Actions”节点的子节点,以及“Actions”节点是“PurchaseOrder”节点的子节点。XML索引所索引的一组XML文档在此称为“索引XML文档”。根据一个实施例,可以在所有索引XML文档中的所有路径或索引XML文档中的路径子集上建立XML索引。下文中描述了用于指定索引哪条路径的技术。由特定XML索引所索引的路径组在此称为“索引XML路径”。路径ID以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。根据一个实施例,为每条索引XML路径都分配唯一路径标识符(ID)。例如,可以为po1.xml和po2.xml中路径分配下表中示出的路径ID可以使用多种技术来标识路径以及为路径分配路径ID。例如,用户可以明确地列举路径,以及为这样标识的路径指定相应的路径ID。可选地,数据库服务器可以将每个XML文档解析为添加至索引XML文档组中的文档。在解析操作期间,数据库服务器识别任何还没有被分配路径ID的路径,并且自动地为这些路径分配新的路径ID。路径ID到路径的映射可以以各种方式存储在数据库中。根据一个实施例,路经ID到路径的映射独立于XML索引本身存储为元数据。根据一个实施例,相同的存取结构用于符合不同模式的XML文档。由于索引XML文档可能符合不同模式,因此每个XML文档通常将仅包含分配了路径ID的路径子集。位置数据与节点相关的位置数据表示包含该节点的XML文档在基本结构中存在的位置。因此,基于基本结构的性质,位置数据的性质随着实施的不同而各不相同。根据如何存储实际XML文档,位置数据还可以包括指向XML文档内的逻辑指针或定位符。逻辑指针可用于提取与由XPath标识的节点相关的片段。为了解释的目的,将假设(1)基本结构是关系数据库中的表;以及(2)每个索引XML文档都存储在基本表的相应行中。在这样的情境中,节点的位置数据可以包括,例如(1)基本表内的行的ID(rowid),其中,基本表中存储了包含该节点的XML文档,以及(2)定位符,在XML文档内提供对对应于节点的片段数据的快速存取。分级数据用于节点的PATH表的行还包括表示节点在包含该节点的XML文档的分级结构中的存在位置的信息。这里,这种分级信息称为节点的“次序键(OrderKey)”。根据一个实施例,使用Dewey型值来表示分级次序信息。具体地,在一个实施例中,通过对节点的直接父节点的次序键添加值来创建节点的次序键,其中,添加的值表示该父节点的子节点中该特定子节点的位置。例如,假设特定节点D是节点C的子节点,其中,节点C是节点B的子节点,节点B又是节点A的子节点。进一步假设节点D具有次序键1.2.4.3。次序键中末尾的“3”表示节点D是其父节点C的第三个子节点。类似地,“4”表示节点C是节点B的第四个子节点。“2”表示节点B是节点A的第二个子节点。最前面的“1”表示节点A是根节点(即,没有父节点)。如上所述,通过对父节点的次序键添加对应于子节点数目的值,可以容易地创建子节点的次序键。类似地,通过去除子节点的次序键中的末尾数字,可以容易地从子节点的次序键得出父节点的次序键。根据一个实施例,由每个次序键所表示的合成数被转换成字节可比较值(bytecomparablevalue),使得两个次序键之间的数学比较表示XML文档的结构分级中次序键对应的节点的相对位置。例如,在XML文档的分级结构中,与次序键1.2.7.7相关的节点在与次序键1.3.1相关的节点之前。因此,数据库服务器使用将次序键1.2.7.7转换成第一值以及将次序键1.3.1转换成第二值的转换机制,其中,第一值小于第二值。通过将第一值与第二值进行比较,数据库服务器可以容易地确定与第一值相关的节点在与第二值相关的节点之前。可以使用多种转换技术来实现该结果,并且本发明不限于任何特定的转换技术。值信息索引文档中的一些节点可以是属性节点或对应于简单元素的节点。根据一个实施例,对于属性节点和简单元素,PATH表的行还存储属性和元素的实际值。例如,可以将这种值存储在PATH表中的“值列”中。下文中将详细描述在值列上建立的次级“值索引”。PATH表实例根据一个实施例,PATH表包括如下表所述来定义的栏如上所述,PATHID是分配给节点的数字,并且唯一地表示到节点的完全扩展路径。ORDERKEY是与节点相关的DEWEY次序号的系统表示。根据一个实施例,次序键的内部表示还保存文档次序。VALUE栏存储用于简单元素(即,没有子元素)节点和属性节点的有效文本值。根据一个实施例,相邻的文本节点通过连接接合。如下文中将要更详细描述的,提供允许用户通过在索引创建期间指定选项来定制存储在VALUE栏中的有效文本值的机制,例如,可以定制混合文本的行为、空格、区分大小写等。用户可以以包括有界RAW栏或BLOB的多种格式来存储VALUE栏。如果用户选择了有界存储,则在索引创建期间的任何溢出都将被标记为错误。下面的表是PATH表的实例,其中,该PATH表(1)具有上述的栏,以及(2)由用于po1.xml和po2.xml的条目(entry)构成。具体地,PATH表的每一行都对应于po1.xml或po2.xml的索引节点。在该实例中,假设po1.xml和po2.xml分别存储在基本表的行R1和R2中。构成的PATH表在该实例中,行ID列存储PATH表的每行的唯一标识符。根据其中创建有PATH表的数据库系统,行ID列可以是隐含列。例如,行的磁盘位置可用作行的唯一标识符。如下文将要详细描述的,次级次序索引和值索引使用PATH表的行ID值,以定位PATH表中的行。在上述实施例中,节点的PATHID、ORDERKEY、和VALUE都包括在单个表中。在可选的实施例中,可使用分开的表以将PATHID、ORDERKEY、和VALUE信息映射到相应的位置数据(例如,基本表资源标识(Rid)和定位符)。次级索引PATH表包括定位XML文档或XML片段所需的信息,其能够满足大范围查询。然而,如果没有次级存取结构,使用PATH表来满足这种查询将会常常需要对PATH表进行全扫描。因此,根据一个实施例,由数据库服务器创建多个次级索引来加速查询,其中(1)执行路径查找和/或(2)识别基于次序的关系。根据一个实施例,在PATH表上创建下面的次级索引。●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)节点的路径ID已知时,PATHID_INDEX可用于在PATH表中快速定位该节点的行。例如,基于键值“3.R1”,可遍历PATHID_INDEX以找到与键值“3.R1”相关的条目。假设PATH表如上所述构成,则索引条目具有值为3的行ID。值为3的行ID指向PATH表的第三行,该行是与路径ID3和资源标识R1相关的节点的行。ORDERKEY_INDEX(次序键_索引)ORDERKEY_INDEX建立在PATH表的资源标识和次序键列上。因此,ORDERKEY_INDEX中的条目的形式为(键值,行ID),其中,键值是表示特定资源标识/次序键组合的复合值,并且行ID标识PATH表的特定行。当(1)基本表行和(2)节点的次序键已知时,ORDERKEY_INDEX可用于在PATH表中快速定位该节点的行。例如,基于键值“R1.’1.2,可以遍历ORDERKEY_INDEX以找到与键值“R1.’1.2相关的条目。假设PATH表如上所述构成,则索引条目将具有值为3的行ID。值为3的行ID指向PATH表的第三行,该行是与次序键1.2和资源标识R1相关的节点的行。值索引正如可以使用PATHID_INDEX加快基于路径查找的查询,通过建立在PATH表的值列上的索引可以加快基于值查找的查询。然而,PATH表的值列可以保持多种数据类型的值。因此,根据一个实施例,为存储在值列中的每种数据类型建立单独的值索引。所以,在值列保持字符串、数字、和时戳的实施中,还创建了下面的值(次级)索引●STRING_INDEXonSYS_XMLVALUE_TO_STRING(value)●NUMBER_INDEXonSYS_XMLVALUE_TO_NUMBER(value)●TIMESTAMP_INDEXonSYS_XMLVALUE_TO_TIMESTAMP(value)这些值索引用于执行基于数据类型的比较(等式和范围)。例如,NUMBER值索引用于处理用户XPath中基于数字的比较。例如,NUMBER_INDEX中的条目可以为(数字,行ID)的形式,其中,行ID指向PATH表中与“数字”的值相关的节点的行。类似地,STRING_INDEX中的条目可以具有(字符串,行ID)的形式,以及TIMESTAMP_INDEX中的条目可以具有(时戳,行ID)的形式。PATH表中的值格式可以与数据类型的本身形式不对应。因此,当使用值索引时,数据库服务器可以调用转换功能,以将值字节从存储格式转换为指定数据类型。另外,如下文中将要描述的,数据库服务器应用任何必需的变换。根据一个实施例,对RAW值和BLOB值执行转换功能,并且在不可能转换时返回NULL。默认为当创建XML索引时创建值索引。然而,用户可以基于对查询工作量的了解来取消一个或多个数值索引的创建。例如,如果所有的XPath判定仅涉及字符串比较,则可以避免NUMBER和TIMESTAMP值索引。PARENT_ORDERKEY_INDEX根据一个实施例,建立在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都指向作为与资源标识/次序键组合相关的直接父节点的节点的PATH表的行。例如,在上述构成的PATH表中,资源标识/次序键组合“R1.’1.2对应于PATH表的行3中的节点。PATH表的行3中的节点的直接父节点是由PATH表的行1所表示的节点。因此,与“R1.’1.2相关的PARENT_ORDERKEY_INDEX条目具有指向PATH表的行1的行ID。创建XML索引根据一个实施例,响应于由数据库服务器接收的索引创建命令,在数据库内创建XML索引。为了解释的目的,在将被索引的XML文档将被存储在关系表的XMLType列中的情境中描述XML索引的创建。例如,假设基本结构为将样式表(stylesheet)存储为由ID列标识的XMLType的表stylesheet_tab。例如,可以使用下面的命令来创建该表CREATETABLEstylesheet_tab(idnumber,stylesheetXMLType);可在stylesheet_tab的stylesheet列上创建XML索引,以加速涉及基于Xpath的片段检索和XPath判定的查询。根据一个实施例,可以使用下面的命令来创建这种XML索引CREATEINDEXss_tab_xmliONstylesheet_tab(stylesheet)INDEXTYPEISXMLINDEX;下面的命令是如何在基于模式的XML类型上创建XML索引的实例CREATETABLEpurchaseorderOFXMLTypeXMLSchemahttp://xmlns.oracle.com/xdb/documentation/purchaseOrder.xsd″ELEMENT″PurchaseOrder″;CREATEINDEXpurchaseorder_xmliONpurchaseorder(object_value)INDEXTYPEISXMLINDEX;上述命令仅仅是可以提交到数据库服务器使数据库服务器创建XML索引的命令实例。这里描述的技术不限于用于指定索引创建的任何形式或语法。根据一个实施例,索引创建命令包括使用户可以指定XML索引的各种特性的参数,例如○包括在索引路径组中或从索引路径组排除的路径○PATH表和次级索引的名称○PATH表和次级索引的存储选项(例如,是否将PATH表存储为分区表、索引组织表(IndexOrganizedTable)等)○用于处理值的规则○值列的列类型(例如,RAW或BLOB)例如,用于处理值的规则可以指定是否将值视为区分大小写、是否将值标准化(如果是,如何执行标准化)、以及如何处理混合内容节点(具有值和子节点的节点)的值。相对于混合内容节点,例如,该规则可以指定与应当忽略、连接、或特殊处理的混合内容节点相关的值。这仅是可以由用户指定的值处理规则的实例。可用规则组可以根据实施的不同而不同,并且可以基于所涉及的值类型而有进一步改变。当用户创建XML索引时,自动创建下面的PATH表和次级索引。默认为基于XML索引的名称,通过系统生成次级索引和PATH表的名称。然而,用户可以明确地指定这些对象的名称。默认为从其上创建有XML索引的基本表的存储特性中得到PATH表和次级索引的存储选项。然而,用户还可明确地指定用于这些对象的存储特性。下面的实例示出了如何在PATH表的单独表空间中创建号索引(numberindex)。CREATEINDEXPOIndexONpurchaseOrderNDEXTYPEISXMLINDEXPARAMETERS‘PATHS(/PurchaseOrder/LineItems//*,/PurchaseOrder/LineItems/LineItem/@ItemNumber)PATHTABLEPOIndex_path_tabletablespacetab_tbsVALUESTOREASRAW(50)NUMBERINDEXPOIndex_num_idxtablespaceidx_tbs’用户选择索引的路径根据一个实施例,提供了一种机制,通过该机制,用户可以指定用于确定XML索引将索引哪条XML路径的规则。具体地,用户可以注册明显地包括特定XML路径的规则和/或明显地排除特定XML路径的规则。根据一个实施例,当用户创建XML索引时,默认为对基本文档中的所有节点进行索引(即,在PATH表中存在对应于文档中的所有节点的行)。然而,用户可以明确地指定将被索引的节点组(子树),从而省略PATH表中的剩余节点。这通常用于排除已知的从查询观点来看是无用的片段。通过减少索引节点的数量,可以改善XML索引的空间利用和管理效率。根据一个实施例,在创建XML索引时可能发生规则的初始注册。例如,假设要被索引的文档存储在purchaseOrder(订货单)表中。如果用户想要索引所有Lineitem(线项目)元素及其子节点、以及订货单参考号和请求者,则可发布下面的CreateIndexDDLCREATEINDEXPOIndex1ONpurchaseOrderINDEXTYPEISXMLINDEXPARAMETERS‘PATHS(/PurchaseOrder/LineItems//*,/PurchaseOrder/Reference,/PurchaseOrder/Requestor)PATHTABLEPOIndex_path_table’在该实例中,POIndex_path_table表示由域索引用来存储索引数据的表名称。在前述实例中,规则明显地包括特定路径。规则没有明显地包括的所有路径将从该索引中排除。规则/PurchaseOrder/LineItems//*包括通配符“*”。因此,该规则明显地包括路径/PurchaseOrder/LineItems以及到源于路径/PurchaseOrder/LineItems的所有节点的路径。这仅仅是通配符可以如何在规则中使用的一个实例。根据一个实施例,路径选择规则机制在许多情况下都支持通配符。例如,规则/nodex/*/nodey/nodez选择(1)源于/nodex/以及(2)终止于/nodey/nodez的所有路径,而不考虑nodex与nodey/nodez之间的路径。用户还可指定明确地排除路径的规则。例如,为了索引除Lineitem描述和purchaseOrder动作之外文档的所有路径,使用下面的CreateIndexDDL(创建索引DDL)来创建索引CREATEINDEXPOIndex2ONpurchaseOrderINDEXTYPEISXMLINDEXPARAMETERS‘PATHSEXCLUDE/PurchaseOrder/LineItems/LineItem/Description,/PurchaseOrder/Actions)PATHTABLEPOIndex_path_table2’将文档添加至索引文档组当需要索引新XML文档时,收集路径、次序、和值信息并存储在XML索引中。根据一个实施例,当将XML文档添加至索引XML文档的储存库时,解析新XML文档,以识别到其中所包含的节点的路径。一旦识别了新XML文档中节点的路径,数据库服务器就确定将索引包括在新XML文档中的哪些节点。之后,数据库服务器基于这些节点中的每个节点来更新XML索引。参照图1,示出了根据本发明一个实施例的如何处理新XML文档的流程图。在图1中,步骤102和108定义了对新XML文档中的每个节点进行处理的循环。具体地,在步骤102中,选择之前未被处理的节点。在第一次迭代期间,被选择进行处理的第一个节点将是新XML文档的根节点。在步骤104,数据库服务器确定当前选择的节点的路径。在步骤106,基于该路径,数据库服务器确定是否索引当前选择的节点。特别地,当用户已经指定要索引的路径子集时,仅对对应于指定路径子集的那些节点添加索引条目。根据一个实施例,步骤106包括将与当前节点相关的路径与路径选择规则进行匹配,以检查是否应当索引当前节点。如果(1)用户已经注册了表示应该包括哪些路径的规则,以及(2)与当前节点相关的路径与用户指定的任何路径都不匹配,则将以该节点为根节点的子树(片段)从索引中省略。另一方面,如果(1)规则指定哪些路径将从索引中被排除,以及(2)与用户指定的任何路径的都匹配的节点被排除,则将以该节点为根节点的片段从索引中省略。例如,可以使用有限时序机来执行匹配操作。如果在步骤106确定所选节点与将被索引的路径不相关,则控制进行至步骤108。在步骤108,数据库服务器确定新XML文档是否还具有要被处理的节点。如果新XML文档没有要被处理的节点,则完成更新XML索引的处理。否则,如果新XML文档还具有要被处理的节点,则控制返回到步骤102并处理其它节点。如果在步骤106确定将要索引当前节点,则将以该节点为根节点的片段添加至索引。此外,还将其所有祖先节点(ancestor)(直到根节点的元素节点)添加至该索引。最后,还将祖先元素节点内的任意名称空间属性添加至该索引。在图1中,更具体地示出了中断处理将被索引的节点的操作,在步骤110中,确定与当前节点相关的路径是否分配有PATHID。在先前索引的XML文档中不存在恰当路径的情况下,该路径可能还没有被分配给PATHID。在这种情况下,控制进行至步骤112,将PATHID分配给该路径。之后,将新的PATHID到路径的映射存储在数据库中。在步骤114,将包括关于当前节点的信息的行添加至PATH表。在步骤116,通过当前节点的条目更新PATHID、ORDERKEY、和PARENT_ORDERKEY索引。如上所述,PATHID和ORDERKEY条目将指向当前节点的新行,而PARENT_ORDERKEY条目将指向当前节点的父节点的PATH表的行。在步骤118,确定当前节点是否与值相关。如果当前节点与值不相关,则控制返回到步骤108。如果当前节点与值相关,并且已经为值的数据类型创建了值索引,则在步骤120中,将索引条目添加至与该特定数据类型相关的值索引。之后,控制返回到步骤108。根据一个实施例,即使节点与不被索引的路径相关,但是如果该节点是被索引的任意节点的祖先节点,则仍然对该节点进行索引。因此,即使用户指定仅应当包括与/a/b/c/*匹配的路径,仍然会索引与路径/a、/a/b、和/a/b/c相关的节点,只要它们是与模式/a/b/c/*匹配的路径相关的任意节点的祖先节点。变更XML索引根据一个实施例,提供了用于在创建索引之后变更XML索引特性的机制。例如,响应于变更索引的语句,可以执行XML索引的创建后变更。用于XML索引的变更索引语句的重要用途是添加或删除索引路径。根据一个实施例,可通过下面的AlterIndexDDL(变更索引DDL)将新路径添加至索引ALTERINDEXPOIndexPARAMETERS‘PATHS(/PurchaseOrder/Reference,/PurchaseOrder/Actions/Action//*)’在索引还没有索引订货单参考和Action元素的所有子节点的情况下,该DDL命令索引所有订货单参考和Action元素的所有子节点。类似地,下面的DDL在路径已经被索引的情况下将这些路径从索引中删除ALTERINDEXPOIndexPARAMETERS‘PATHSEXCLUDE(/PurchaseOrder/Reference,/PurchaseOrder/Actions/Action//*)’如下面的实例所示,AlterIndexRenameDDL(变更索引重命名DDL)使用户改变索引名称,而不明确地删掉和创建索引名称ALTERINDEXPOIndexRENAMEPONewIndex确定是否可以使用XML索引在查询时,如果可以将查询XPath静态地确定为用户指定Xpath的子集(并由此确保在该索引中),则XML索引可用于答复查询。如果在对查询进行编辑时不能确定子集关系,则XML索引不能用于满足查询。例如,通过下面的语句创建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查询。将最终分解的部分转化为索引PATH_TABLE上的SQL查询。根据一个实施例,索引存取方法的输入是包括一个或多个下列表达式的复合表达式●简单(导航)路径表达式,例如,/a/b●简单值表达式,例如,/a/b/c>50●表达式之间的结构结合(即,分级关系),例如,将XPath表达式/a/b[c>50]表示为(/a/b)PARENT-OF(/a/b/c>50)假设查询具有简单判定,例如,/a/b/c=foo,则这种查询可以对照如下PATH表来执行,SELECTDISTINCTridFROMpath_tableWHEREpathid=:1ANDxmlvalue_to_string(value)=‘foo’;将路径/a/b/c的ID限定为变量1。对于该查询有多种执行方案。根据一个实施例,查询优化器基于成本采用最佳的执行方案。数据库服务器可以(1)使用路径ID上的次级索引、(2)使用xmlvalue_to_string(值)上的次级索引、或(3)使用以上两者、以及位图和结果。假设指定片段查找的查询,例如,XPath/a/b/c。可以使用以下语句对照PATH表来执行这种查询SELECTridFROMpath_tableWHEREpathid=:1ORDERBYorder_key;路径/a/b/c的ID限定为变量1。通过文档次序的查询返回匹配的结果。如果需要,连接对应于单个文档的所有片段。假设基于简单判定指定片段查找的查询,例如,/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;然后,使用结构连接运算符(其使用Dewey次序键来表示)来合并结果。将路径/a/b和/a/b/c的ID限定为变量1和2。根据一个实施例,基于成本的优化器采用多种可能的执行方案中的最佳执行方案。XML索引还可用于执行数据类型认知操作。存在多种将数据类型信息附于XPath判定的机制。例如●使用XML模式。如果基本表列具有相关的XML模式,则对照XML模式对用户XPath进行类型检查,从而使适当的数据类型与表达式相关。●显式类型强制。XPath提供用于显式类型强制的运算符。●隐式类型强制。XPath定义一些隐式类型计算规则。例如,如果比较运算符的RHS为NUMBER,则将LHS隐式强制为NUMBER。根据一个实施例,在所有这些情况中,XML索引存取方法的输入是与数据类型信息相关的XPath表达式。数据类型信息被用在生成的SQL查询中,以确保选择适当的值索引。例如,类型检查的XPath如下SYS_XMLVALUE_TO_NUMBER(/a/b/c)>10.567下列查询中的结果对照使用NUMBER值索引的PATH表SELECTDISTINCTridFROMpath_tableWHEREpathid=:1ANDsys_xmlvalue_to_number(value)>10.567;如这里描述的,使用XML索引可以产生多种优点,包括可以有效地估计多组XPath;可以满足涉及数据类型认知比较的XPath;可以从原始XML文档中有效地提取片段;用户可以选择仅对路径的子集进行索引,从而避免了使索引膨胀(bloating);基于应用需要可以定制索引值;对偶数非模式的XML文档进行索引的能力可以满足多类用户的查询要求;能够使他们将其所有XML文档存储在Oracle中,而不用考虑查询性能。语法在上下文中已经描述了实施例,其中,响应于由数据库服务器接收的命令,数据库服务器创建并保持XML索引。该命令必须符合数据库服务器可以理解的语言。根据本发明的一个实施例,用于涉及XML索引的各种DDL命令的语法如下创建索引语法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’;根据一个实施例,域索引是对父XML表的均分。如果XML表未被分区,则域索引也没有被分区。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>)]]根据一个实施例,PARAMENTERS子句用于进行以下指定●用于路径表和次级索引的名称和物理参数(表空间等)。即使没有明确指定,仍然创建PATHTABLE上的全部六个索引。○如果列VALUE的类型被显式地指定为BLOB,则将数值外联(out-of-line)存储在BLOB片段中。否则,将数值内联(inline)存储为RAW数据。RAW的<size>恰好为整数。○STRING值的属性为■当字符串的所有前导空格和结尾空格要被去除时,为NORMALIZED■在混合文本的情况下IGNORE_MIXED_TEX将值存储为NULL■当将所有字符串转换为小写时,为CASE_INSENSITIVE注意,在将值存储到VALUE列之前(并且在PATHTABLE上创建次级索引之前)应用上述操作。●到索引的路径组。用户可以通过下列指定来控制索引路径组○到索引的路径的显式列表。这可以包括通配符和//轴。例如,/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是示出可以执行本发明的实施例的计算机系统200的框图。计算机系统200包括用于传递信息的总线202或其它通信装置以及用于处理信息的与总线202连接的处理器204。计算机系统200还包括诸如随机访问存储器(RAM)或者其它动态存储装置的主存储器206,其连接至总线202用于储存信息和将由处理器204执行的指令。在执行将由处理器204执行的指令期间,主存储器206还可用于储存临时变量或其他中间信息。计算机系统200进一步包括只读存储器(ROM)208或连接至总线202的其他静态存储装置,用于存储静态信息和处理器204的指令。提供诸如磁盘或光盘的存储设备210,并连接至总线202用于存储信息和指令。计算机系统200可以经由总线202连接至诸如阴极射线管(CRT)的显示器212,用于向计算机用户显示信息。包括字母数字键和其他键的输入装置214连接至总线202,用于将信息和指令选择传递到处理器204。另一种类型的用户输入装置是光标控制216,诸如鼠标、跟踪球、或光标方向键,用于将方向信息和命令选择传递到处理器204并用于控制显示器212上的光标移动。输入装置通常在两个轴上(第一个轴(例如X轴)和第二个轴(例如Y轴))具有两个自由度,使装置能指定平面上的位置。本发明涉及计算机系统200的使用,用于执行在此描述的技术。根据本发明的一个实施例,通过计算机系统200响应于执行包括在主存储器206中的一个或多个指令的一个或多个序列的处理器204,来实现这些技术。这样的指令可以从诸如存储装置210的其它计算机可读介质读入主存储器206。包括在主存储器206中的指令序列的执行,使得处理器204执行此处所述的处理步骤。在可选实施例中,可以使用硬连线电路(hard-wiredcircuitry)来取代软件指令或者与软件指令结合来实施该发明。因此,本发明的实施例将不限于硬件电路和软件的任何特定组合。这里使用的术语“机器可读介质”是指参与提供数据以使机器以特定方式运转的任何介质。在使用计算机系统200实施的实施例中,例如,在提供指令给处理器204用于执行的过程中,涉及了多种机器可读介质。这种介质可以采取多种形式,包括但不限于非易失性介质、易失性介质、和传递介质。非易失性介质举例来说包括光盘或磁盘,诸如存储装置210。易失性介质包括动态存储器,诸如主存储器206。传输介质包括同轴电缆、铜线、和光纤,包括组成总线202的导线。传输介质还可采取声波或光波形式,例如那些在无线电波和红外线数据通信过程中产生的声波和光波。通常形式的计算机可读介质包括如软盘、软性盘、硬盘、磁带,或者任何其它磁性介质、CD-ROM、任何其它光介质、打孔纸、纸带、或者任何带孔图样的物理介质、RAM、PROM、EPROM、FLASH-EPROM、或者其他任何存储芯片或者盒式磁带,或者以下提到的载波、或者计算机可读的任何其他介质。各种形式的计算机可读介质可参与将一个或者多个指令的一个或多个序列承载到处理器204用于执行。例如,指令开始可承载在远程计算机的磁盘中。远程计算机可以将指令加载到其动态存储器中,然后使用调制解调器通过电话线发送指令。计算机系统200本地的调制解调器可接收电话线上的数据,并使用红外发射器将数据转换成红外信号。红外探测器可以接收红外信号携带的数据,并且合适的电路可以将数据放到总线202上。总线202将数据承载到主存储器206,处理器204从主存储器取回并执行这些指令。在由处理器204执行这些指令之前或之后,由主存储器206接收的指令可随意地储存在存储装置210上。计算机系统200还包括连接至总线202的通信接口218。提供双向数据通信的通信接口218,连接到与局域网222连接的网络链路220。例如,通信接口218可以是综合业务数字网(ISDN)卡或者调制解调器,用于提供到相应类型的电话线的数据通信连接。又如,通信接口218可以是局域网(LAN)卡,用于提供至兼容局域网(LAN)的数据通信连接。也可以使用无线链路。在任何这样的实施中,通信接口218发送和接收承载表示各种类型的信息的数字数据流的电信号、电磁信号、和光学信号。网络链路220通常可通过一个或者多个网络向其它数据装置提供数据通信。例如,网络链路220可通过局域网222与主机224连接,或者与互联网服务提供商(ISP)226操作的数据设备连接。ISP226又通过目前通称为“互联网”228的全球分组数据通信网络提供数据通信服务。局域网222和互联网228都使用承载数字数据流的电信号、电磁信号、或光学信号。通过各种网络的信号和网络链路220上的信号以及通过通信接口218的信号,都传送数字数据给计算机系统200或者传送来自计算机系统的数字数据,是传输信息的载波的示例性形式。计算机系统200能通过网络、网络链路220、和通信接口218发送消息和接收数据(包括程序代码)。在互联网的实例中,服务器230可通过互联网228、ISP226、局域网222、和通信接口218,传送用于应用程序的所请求的程序代码。所接收的代码可以在其被接收时由处理器204执行,和/或储存在存储装置210或者其它非易失性介质中用于随后执行。按照这种方式,计算机系统200可以以载波的形式获得应用代码。以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。权利要求1.一种用于存取来自XML文档的信息的方法,所述方法包括在XML文档内识别将被索引的节点组;对于将被索引的所述节点组中的每个节点,将所述节点的条目存储在索引中,其中,给定节点的所述条目包括用于定位与所述给定节点相关的XML内容的定位数据,以及以下中的至少一个(a)分级数据,表示所述给定节点在包含所述给定节点的所述XML文档内的分级位置;以及(b)路径数据,对应于通过包含所述特定节点的XML文档的结构到所述给定节点的路径;以及响应于对来自所述XML文档的信息的请求,使用所述索引定位所述XML文档内的信息。2.根据权利要求1所述的方法,其中,所述索引被实施为关系表,以及通过在所述关系表内存储所述节点组中的每个节点的行来执行存储每个节点条目的步骤。3.根据权利要求1所述的方法,其中,所述索引存储与所述节点组中的一个或多个节点相关的值。4.根据权利要求3所述的方法,其中,存储在所述索引中的所述值包括多种数据类型的值,并且所述方法还包括为所述多种数据类型中的两种或多种数据类型中的每种建立次级索引的步骤。5.根据权利要求1所述的方法,其中,所述给定节点的所述定位数据包括用于定位XML文档的第一数据和用于在所述XML文档内定位与所述给定节点相关的信息的第二数据。6.根据权利要求1所述的方法,其中,所述给定节点的条目包括分级数据,所述分级数据表示所述给定节点在包括所述给定节点的所述XML文档内的分级位置;以及所述方法还包括基于所述分级数据,在所述索引中建立用于存取条目的次级索引。7.根据权利要求1所述的方法,其中,所述给定节点的条目包括路径数据,所述路径数据对应于通过包含所述特定节点的XML文档的结构到所述给定节点的路径;以及所述方法还包括基于所述路径数据,在所述索引中建立用于存取条目的次级索引。8.根据权利要求1所述的方法,还包括基于与所述父节点的子节点相关的分级信息,在所述索引中为所述父节点建立用于存取条目的次级索引。9.根据权利要求1所述方法,其中,识别将被索引的节点组的步骤包括以下步骤接收用于确定应当索引哪些路径的规则;确定与将被索引的XML文档中的节点相关的路径;以及基于(a)用于确定索引哪些路径的所述规则,以及(b)与将被索引的所述XML文档中的节点相关的所述路径,识别将索引哪些节点。10.根据权利要求9所述的方法,其中,所述规则显式标识将被包括在所述索引中的路径。11.根据权利要求9所述的方法,其中,所述规则显式标识将被从所述索引中排除的路径。12.根据权利要求4所述的方法,还包括接收指示将对其建立次级值索引的数据类型的用户数据。13.一种承载有一个或多个指令序列的计算机可读介质,当所述一个或多个指令序列被一个或多个处理器执行时,使所述一个或多个处理器执行权利要求1中所述的方法。14.一种承载有一个或多个指令序列的计算机可读介质,当所述一个或多个指令序列被一个或多个处理器执行时,使所述一个或多个处理器执行权利要求2中所述的方法。15.一种承载有一个或多个指令序列的计算机可读介质,当所述一个或多个指令序列被一个或多个处理器执行时,使所述一个或多个处理器执行权利要求3中所述的方法。16.一种承载有一个或多个指令序列的计算机可读介质,当所述一个或多个指令序列被一个或多个处理器执行时,使所述一个或多个处理器执行权利要求4中所述的方法。17.一种承载有一个或多个指令序列的计算机可读介质,当所述一个或多个指令序列被一个或多个处理器执行时,使所述一个或多个处理器执行权利要求5中所述的方法。18.一种承载有一个或多个指令序列的计算机可读介质,当所述一个或多个指令序列被一个或多个处理器执行时,使所述一个或多个处理器执行权利要求6中所述的方法。19.一种承载有一个或多个指令序列的计算机可读介质,当所述一个或多个指令序列被一个或多个处理器执行时,使所述一个或多个处理器执行权利要求7中所述的方法。20.一种承载有一个或多个指令序列的计算机可读介质,当所述一个或多个指令序列被一个或多个处理器执行时,使所述一个或多个处理器执行权利要求8中所述的方法。21.一种承载有一个或多个指令序列的计算机可读介质,当所述一个或多个指令序列被一个或多个处理器执行时,使所述一个或多个处理器执行权利要求9中所述的方法。22.一种承载有一个或多个指令序列的计算机可读介质,当所述一个或多个指令序列被一个或多个处理器执行时,使所述一个或多个处理器执行权利要求10中所述的方法。23.一种承载有一个或多个指令序列的计算机可读介质,当所述一个或多个指令序列被一个或多个处理器执行时,使所述一个或多个处理器执行权利要求11中所述的方法。24.一种承载有一个或多个指令序列的计算机可读介质,当所述一个或多个指令序列被一个或多个处理器执行时,使所述一个或多个处理器执行权利要求12中所述的方法。全文摘要提供了用于索引XML文档的技术。根据一个实施例,创建用于为XML文档的每个索引节点存储一行的PATH表。节点的PATH表的行包括(1)用于定位包含该节点的XML文档的信息,(2)标识节点路径的信息,以及(3)标识包含该节点的XML文档的分级结构内节点位置的信息。如果节点与值相关,则节点的PATH表的行还可以包括值。通过次级索引使得易于使用PATH表来答复XPath查询。文档编号G06F17/30GK1965316SQ200580018627公开日2007年5月16日申请日期2005年4月6日优先权日2004年4月9日发明者西瓦桑卡兰·钱德拉塞卡,拉维·默西,阿希什·蒂索,安霍-图安·特兰,斯里达·穆卡玛拉,埃里克·塞德拉,尼普恩·阿加瓦尔申请人:甲骨文国际公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1