存储xml数据的方法、执行xml查询的方法及其装置的制作方法

文档序号:6469933阅读:196来源:国知局
专利名称:存储xml数据的方法、执行xml查询的方法及其装置的制作方法
技术领域
本发明涉及XML数据的存储和XML查询的执行技术,具体地,涉 及基于简单路径在XML仓库中存储XML数据的方法和装置,以及在 XML仓库中执行XML查询的方法和装置。
背景技术
大量XML文档通常存储在原生XML数据库的XML仓库中,或者存 储在关系数据库的XML数据类型的列中。通常,存储在同一个XML仓 库或是一个XML数据类型的列中的XML文档具有相似模式(schema )。 XML查询经常^皮用于从这些XML文档中获取信息。在大多数情况下,这 些信息是细小且分歉的。 一般地,XML查询使用基于XPath的语言,例 如,XQuery语言、XUpdate语言、XSLT语言等。
XML查询的执行方案与XML数据的存储方案是相关的。以下是现有 的存储XML数据和执行XML查询的技术方案
1. XML数据作为文件存储在文件系统中或者作为CLOB对^储在 关系数据库中。在这样的存储方案中,当查询或者更新XMLlt据时,必 须对XML文件或者CLOB对象进行解析,以获得所需的信息或者更新数 据,这样,需要花费大量的时间。
2. XML数据的存储是基于XML模式文件或者文档类定义(DTD ) 文件。具体地,在该技术方案中,首先分析XML文件的模式文件,并创 建一组关系表,在这些关系表之间具有引用关系。与XML文件对应的XML 数据模型树的节点之间的层次和排序关系被映射成关系表之间的引用关 系,在关系表中还存储了节点的值。这样,XML文件被分解成关系表,并存储在关系数据库中。当使用XPath字符串查询XML数据时,将XPath 字符串转换为若干作用于这些关系表的SQL语句,执行这些SQL语句以 获得查询的结果,最后将这些查询结果序列化为最终的XML片段返回给 用户。然而,这种技术方案的问题在于实际的应用程序的XML模式很复 杂,因此,对XML文件的分解会导致出现大量的关系表和这些关系表之 间复杂的引用关系,从而造成查询非常复杂。而且,XML模式的变化要求 大量的数据库模式的维护,并且这种技术方案不能处理无模式的XML数 据。
3. XML数据的存储不依赖于XML模式文件或DTD文件,也就是说, 该存储方案是模式无关的。具体地,使用一些标记方法来对XML文件的 节点加标签,例如基于Dewey排序的ORDPath、 DLN方法等,并将这些 标签与节点的值一起存储在磁盘上。这样,XML树的节点之间的层次和排 序关系可以通过比较它们的标签而容易地推导出。在这种技术方案中, XML数据的存储是基于标签的聚束,也就是说,XML文件是顺序存储的。 这样,当进行XML查询时,需要访问多个驻留有不同XML文件的磁盘 页,从而造成性能的降低。
例如,假设在XML仓库中有10000个XML文件,每个XML文件是 4KB,而磁盘页的大小也是4KB。如果采用上述第3种存储方案,则这些 XML文件被顺序地存储在10000个磁盘页上,并且每个文件包括一个文章 的全部信息,诸如作者信息、文章的内容、发表时间等,图l示出了一个 XML树的例子。假J殳XML查询是"/article/author/name",即查询所有 作者的名字,那么需要访问10000个磁盘页,如果名字字段的大小不超过 64字节,则有10000*(4KB-64B )的无用数据被取出,浪费率达到98.44%, 从而使得XML查询的性能下降。

发明内容
本发明正A^于上述技术问题而提出的,其目的在于提供一种基于简 单路径在XML仓库中存储XML数据的方法和装置,其能够处理无模式的XML数据并提高XML数据查询的性能。本发明的目的还在于提供一
种在XML仓库中执行XML查询的方法和装置,
根据本发明的第一个方面,提供一种基于简单路径在XML仓库中存
储XML数据的方法,所述XML仓库包括筒单路径仓库和数据仓库,所
述方法包括对XML文档中的每一个节点,生成用于唯一识别该节点的
节点标识符;生成所述XML文档的筒单路径;将所述简单路径存储到所 述简单路径仓库中;以及以简单路径为索引将每一个所述简单路径中的每
个节点的数据依次存储到所述数据仓库中,其中所述数据包括该节点的节 点标识符和值。
根据本发明的第二个方面,提供一种在XML仓库中执行XML查询 的方法,其中,在所述XML仓库中使用上述的存储XML数据的方法存 储有多个XML文档,所述方法包括接收所述XML查询;基于所述XML 仓库的简单路径仓库,解析所述XML查询以生成执行树,其中,所述执 行树由一个或多个主简单路径构建,并且每个主简单路径关联有零个或多 个次级简单路径和谓词简单路径;以及基于所述XML仓库的数据仓库, 执行所述执行树以获得所述XML查询的结果。
根据本发明的第三个方面,提供一种基于简单路径在XML仓库中存 储XML数据的装置,所述XML仓库包括简单路径仓库和数据仓库,所 述装置包括节点标识符生成冲莫块,用于对XML文档中的每一个节点, 生成用于唯一识别该节点的节点标识符;以及筒单路径生成才莫块,用于生 成所述XML文档的简单路径;其中,所生成的简单路径净皮存储到所述筒 单路径仓库中,并且以简单路径为索引将每一个所述简单路径中的每个节 点的数据依次存储到所述数据仓库中,其中所述数据包括该节点的节点标 识符和值。
根据本发明的第四个方面,提供一种在XML仓库中执行XML查询 的装置,其中,在所述XML仓库中使用上述的存储XML数据的装置存 储有多个XML文档,所述装置包括接收模块,用于接收所述XML查 询;解析模块,用于基于所述XML仓库的简单路径仓库,解析所述XML
9查询以生成执行树,其中,所述执行树由一个或多个主简单路径构建,并
且每个主简单路径关联有零个或多个次级筒单路径和谓词简单路径;以及 执行模块,用于基于所述XML仓库的数据仓库,执行所述执行树以获得 所述XML查询的结果。


图1是XML数据模型树的一个例子的示意图2是根据本发明的一个实施例的基于简单路径在XML仓库中存储 XML数据的方法的流禾呈图3是具有编码串的XML数据模型树的示意图; 图4是采用B+树的数据仓库的示意图5是才艮据本发明的一个实施例的在XML仓库中执行XML查询的 方法的流程图6是执行树的一个例子的示意图7是根据本发明的一个实施例的基于简单路径在XML仓库中存储 XML数据的装置的示意性方框图8是根据本发明的一个实施例的在XML仓库中执行XML查询的 装置的示意性方框图。
具体实施例方式
相信通过以下结合附图对本发明的具体实施例的详细说明,本发明的 上述和其它目的、特征和优点将会变得更明显。
图2示出了才艮据本发明的一个实施例的基于简单路径在XML仓库中 存储XML数据的方法的流程图。下面结合附图,详细说明本实施例。
在本实施例中,XML仓库包括简单路径(Simple Path)仓库和数据 仓库,其中,简单路径仓库用于存储所有的简单路径,数据仓库用于存储 所有XML文档的数据。关于简单路径的定义,将在后面进行说明。
如图2所示,在步骤S201,对XML文档中的每一个节点,生成用于唯一识别该节点的节点标识符(DOrderPath)。在本实施例中,节点的节 点标识符包括该节点所属的XML文档的文档标识(DocID)和该节点的 编码串(OrderPath)。编码串OrderPath可以是Dewey编码字符串,或 者是基于类似Dewey编码方法的字符串,诸如ORDPath编码方法、DLN 编码方法等。
在本实施例中,节点标识符DOrderPath用于识别唯一的XML文档 中唯一的节点,因此, 一个节点与一个节点标识符相关联。在XML数据 模型树中,两个节点之间的层次和排序关系可以容易地通过节点标识符推 导出。图3示出了具有编码串的XML数据模型树的示意图,其中,"article"、 "author"等是节点的名称,"0" 、 "0.0" 、 "0.0.1"分别是节点"article"、 "author" 、 "age"的编码串。假i殳该XML文档的文档标识是1,则节 点"article"的节点标识符是"1,0",相应地,节点"author"的节点标 识符为"1,0.0",节点"age"的节点标识符为"1,0.0.1"。
对于节点标识符DOrderPath,定义了 6个基;^算。假设path、 pathl 和path2是3个节点标识符,那么,
(1) Length(path)返回该path指定的节点的深度,这可通过解析该 path而获得;
(2) Intercept(path,n)表示如果Length(path)<=n,则返回path,否 则,返回path的长度为n的前缀;
(3 ) Value(path)返回该path指定的节点的值;
(4 ) operator〉(pathl,path2)返回pathl和path2的单个比特(或字 节)字符串的比较结果是否是pathl>path2;
(5) operator〈(pathl,path2)返回pathl和path2的单个比特(或字 节)字符串的比较结果是否是pathKpath2;
(6) operatoF(pathl,path2)返回pathl和path2的单个比特(或字 节)字符串的比较结果是否是pathl-path2。
这些运算可用在将要在后面描述的XML查询的执行中,例如用于谓 词运算、XML片段序列化等。
ii在步骤S205,生成XML文档的简单路径。所谓筒单路径是从XML 文档的根节点到任意一个节点的标签路径,节点之间通过'7"分隔。在本 实施例中,简单路径的标签采用节点的名称。在图3所示的例子中,该XML 文档的简单路径是 article; article/author; article/chapter; article/author/name; article/author/age; article/chapter/title;
article/chapter/text。
在步骤S210,将在步骤S205中生成的简单路径存储到简单路径仓库 中。在本实施例中,确定简单路径仓库中是否包括这些简单路径,如果这 些简单路径中的某个或某些简单路径已被包括,则忽略该筒单路径,否则,
存储该筒单路径,并为所存储的简单路径分配一个唯一的简单路径标识 (PathID)。这样,对于具有相同模式的多个XML文档,只需存储单个 XML文档的简单路径即可,简单路径的数量由XML文档的才莫式文件或 DTD文件确定。
在本实施例中,简单路径仓库采用XML文件的形式,下面给出一个 简单路径仓库的例子
<root NumOfSP="12"> <article UID=,,0,,>
〈xmlns:xsi UID=,T,/>
<xsi: noNamespaceSchemaLocation UID=,,2,,/>
<author UID=,,4,,> <name UID="5">
</name> <age UID="8"/> </author>
〈chapter UID=,,10,,/></clmptcr> <text UID="15">
</text>
<ID UID="16"> </article> </root>
在步骤S215,以简单路径为索引将每一个简单路径中的每个节点的数 据依次存储到数据仓库中,其中,节点的数据包括该节点的节点标识符和 值。XML文档的数据由两部分构成值信息和结构信息,其中,值信息是 指XML文档中节点的值,这可通过在XML数据模型中限定的取值方法 获取,结构信息是指XML文档中节点之间的层次和排序关系。在本实施 例中,XML文档的结构信息是节点的节点标识符。这样,在数据仓库中, XML文档的数据是基于简单路径存储的,并且每个简单路径的数据按节点 标识符的顺序进行存储。
在本实施例中,数据仓库采用B+树的形式,其以"筒单路径标识,节 点标识符(PathID, DOrderPath (DocID, OrderPath))"作为键值,并且 对于XML文档中具有值的节点,在B+树的对应叶节点中存储这些节点的 值。图4示出了采用B+树的数据仓库的一个例子。
通过以上描述可以看出,采用本实施例的基于简单路径在XML仓库 中存储XML数据的方法,XML数据以简单路径的聚束的方式进行存储, 并且一个筒单路径的数据按照节点标识符的顺序进行存储。与现有的基于 才莫式文件分解XML文档并存储的方案相比,本实施例的方法不需要XML 文档的模式,可以处理无模式的XML数据,并JU吏用节点标识符来保持 XML文档的结构,对节点加标识符能够纟艮容易地在装载XML文档的过程 中进行,并且不涉及创建和维护关系表的复杂性。与现有的基于标签的聚 束存储XML数据的方案相比,本实施例的方法由于以简单路径的聚束的方式存储XML数据,因此能够提高XML数据查询的性能,高效地执行 XML查询。
在同一个发明构思下,图5是根据本发明的一个实施例的在XML仓 库中执行XML查询的方法的流程图,其中,对于与前面实施例相同的部 分,适当省略其说明。下面结合附图对本实施例进行详细说明。
在本实施例中,在XML仓库中使用图2所示的存储XML数据的方 法存储有多个XML文档,即,XML仓库的简单路径仓库中存储了所有的 简单路径,数据仓库中存储了所有XML文档的数据,包括值信息和结构 信息。优选地,这些XML文档具有相似的模式。
如图5所示,在步骤501,接收一个XML查询Spath。如前所述,在 本实施例中,XML查询是基于XPath的,例如, $path = '/article/author[age<30,,即查询年龄小于30岁的文章作者。
然后,在步骤505,基于简单路径仓库,解析所接收的XML查询以生 成执行树。在本实施例中,执行树由一个或多个主简单路径构建,并且每 个主简单路径关联有零个或多个次级简单路径和谓词简单路径。
下面对主简单路径、次级简单路径和谓词简单路径的含义进行说明。
主简单路径(Primary Simple Path,记为PriSP($path))是指其节点 是作为XML查询的结果的XML片段的根节点的简单路径,也就是说, 主简单路径的节点是XML查询的结果的XML片段的根节点。主简单路 径可以是一个或多个。
对于一个主简单路径Spripath,可具有零个或多个属于该主简单路径 的次级简单路径(Secondary Simple Path,记为SecSP($path, $pripath)) 和谓词简单路径(Predicate Simple Path,记为PredSP($path, $pripath))。 在本实施例中,次级简单路径是指其节点是主筒单路径的节点的后代节点 的简单路径,而谓词简单路径是指其节点和该节点的值用于过滤主简单路 径和属于该主简单路径的次级简单路径的简单路径。
具体地,在步骤505中,当接收到一个XML查询后,首先在简单路 径仓库中对该XML查询中的第一个节点进行名称测试,以找到与第一个
14节点匹配的节点,并获取包含该匹配的节点的简单路径,以构建与第一个 节点相关的执行树。然后,在与第一个节点相关的执行树中记录对第一个 节点的其它测试(包括节点类型测试、节点数据类型测试)。判断第一个 节点是否存在谓词运算,如果存在,则对谓词节点进行名称测试,并在与 第 一个节点相关的执行树中记录谓词节点与第 一个节点的位置关系以及谓
词运算的值表达式,然后存储与第一个节点相关的执行树。对XML查询 中的随后的节点重复上述的处理,并用所构建的与该节点相关的执行树更 新与前一个节点相关的执行树。这样,当对XML查询中的所有节点的处 理都完成后,所得到的执行树就是执行该XML查询所需的执行树。
对于上述的XML查询Spath的例子,在解析该XML查询Spath后生 成的执行树中,主简单路径PriSP(Spath)-('/article/author,),主简单路径 PriSP($path)={Varticle/author,}的次级简单路径 SecSP($path, '/article/author,)={'/article/author/name,, Varticle/author/age,}, 相应地, 谓词简单路径PredSP($path, '/article/author,)= {'/article/author/age'}。在 另一个例子中,如果XML查询Spath = '/article/",则主简单路径可能有 多个,即PriSP($path)={'/article/author,, '/artide/chapter〃},其中每一个 主简单路径具有各自的次级简单路径和谓词简单路径。
另外,对于某个谓词简单路径Spredpath,定义了两种谓词结构谓词 (Structure Predicate , 记为SturcturePred($pripath, $predpath)),值谓 词(Value Predicate, i己为ValuePred(Spripath, $predpath))。在本实施 例中,结构谓词描述了主简单路径的节点和属于该主简单路径的次级简单 路径的节点或谓词简单路径的节点之间的关系;值谓词是XML查询Spath 中的谓词的文字值部分。在上面的例子中,结构谓词是operator=(lh, Intercept(rh, Length(rh)-l)) , 而 值 谓 词 是 "Value(Varticle/author/age,)>30,,。
图6示出了执行树的一个例子,其中,在谓词简单路径中,"位置信 息"记录了该谓词简单路径的结构谓词,而"表达式信息"则记录了该谓 词简单路径的值谓词;在次级简单路径中,"位置信息"记录了该次级简单路径与主简单路径的关系。
在步骤510,基于XML仓库的数据仓库,执行在步骤505中生成的执 行树以获得XML查询的结果。
在本实施例中,对于执行树中的n个主简单路径PriSP中的每一个 PriSP[i(i5n),根据其简单路径标识,访问数据仓库,以获得该主简单 路径的所有节点的数据,包括节点标识符和值。对于属于某个主简单路径 PriSP[i的m个次级简单路径SecSPi中的每一个SecSPi[j(j 5 m),根 据其简单路径标识,访问数据仓库,以获得该次级简单路径的所有节点的 数据或者句柄。对于属于某个主简单路径PriSPi的k个谓词简单路径 PreSPi中的每一个PreSPi[p(p5 k),根据其简单路径标识,访问数据 仓库,以获得该谓词简单路径的所有节点的数据或者句柄。
然后,对于每一个主简单路径中的每一个节点的数据,依次使用属于
该主简单路径的每一个谓词简单路径的所有节点的数据进行谓词运算。在
对该节点的数据进行谓词运算的结果均为真时,从属于该主简单路径的次 级简单路径的所有节点的数据中取出该主简单路径的节点的后代节点的数
据,并将所取出的数据序列化为XML片段,作为XML查询的结果的一 部分。当对所有主简单路径都进行上述的处理后,合并所有的XML片段, 从而获得最终的XML查询的结果。
通过以上描述可以看出,采用本实施例的在XML仓库中执4亍XML 查询的方法,由于在XML仓库中基于简单路径的聚束存储XML数据, 因此,能够通过一个简单路径快速地获取属于该简单路径的数据,从而, 可以减少在从XML仓库中查询数据时的I/O次数,同时,由于属于一个 筒单路径的节点lt据都是以节点标识符的顺序存储的,因此,能够确保在 执行XML查询的过程中谓词运算和序列化操作都在线性时间中,从而提 高了 XML数据查询的性能。
在同一个发明构思下,图7是根据本发明的一个实施例的基于简单路 径在XML仓库中存储XML数据的装置的示意性方框图。下面结合附图, 对本实施例进行详细说明。如前所述,在本实施例中,XML仓库包括简单路径仓库和数据仓库。 如图7所示,本实施例的基于简单路径在XML仓库中存储XML数 据的装置700包括节点标识符生成模块701,其对XML文档中的每一个 节点,生成用于唯一识别该节点的节点标识符;以及简单路径生成模块 702,其生成XML文档的简单路径;其中,所生成的简单路径净皮存储到简 单路径仓库703中,并且以简单路径为索引将每一个筒单路径中的每个节 点的数据被依次存储到数据仓库704中,节点的数据包括该节点的节点标 识符和值。
当某个XML文档需要存储到XML仓库中时,节点标识符生成模块 701为该XML文档的每一个节点生成节点标识符。优选地,节点标识符包 括该XML文档的文档标识和该节点的编码串。具体地,在节点标识符生 成才莫块701中,文档标识分配单元为该XML文档分配文档标识,同时, 编码串生成单元为该节点生成编码串。在本实施例中,编码串生成单元采 用Dewey编码方法以生成编码串。
然后,简单路径生成模块702生成该XML文档的简单路径。关于简 单路径,已在图1所示的实施例的详细描述中介绍过,此处省略其说明。 然后,将所生成的简单路径存储到筒单路径仓库中,并以简单路径为索引 将每一个简单路径的每个节点的数据依次存储到数据仓库中。
进一步地,本实施例的基于简单路径在XML仓库中存储XML数据 的装置700还可以包括确定模块705,其确定简单路径仓库703中是否 包括由简单路径生成模块702生成的简单路径;以及简单路径标识分配模 块706,其为所存储的简单路径分配唯一的简单路径标识。这样,当将所 生成的简单路径存储到简单路径仓库中时,确定模块705确定所生成的简 单路径是否被包括,如果某个简单路径已被包括,则忽略该简单路径;如 果某个简单路径没有被包括,则存储该简单路径,并由简单路径标识分配 模块706分配一个唯一的简单路径标识给该筒单路径。
在本实施例中,简单路径仓库采用XML文件的形式,而数据仓库可 以采用B+树的形式。关于采用XML文件的筒单路径仓库和采用B+树的
17^:据仓库,在前面已经描述过,此处省略其"^兌明。
应当指出,本实施例的基于简单路径在XML仓库中存储XML数据 的装置700在操作上可以实现图2所示的基于简单路径在XML仓库中存 储XML数据的方法。
在同一个发明构思下,图8是根据本发明的一个实施例的在XML仓 库中执4亍XML查询的装置的示意性方框图,其中,对于与前面实施例相 同的部分,适当省略其说明。
在本实施例中,使用如图7所示的存储XML数据的装置700在XML 仓库中存储有多个XML文档。优选地,这些XML文档具有相似的模式。
如图8所示,本实施例的在XML仓库中执行XML查询的装置800 包括接收模块801,其接收XML查询;解析模块802,其基于XML仓 库的简单路径仓库,解析所接收的XML查询以生成执行树,其中,所述 执行树由一个或多个主简单路径构建,并且每个主简单路径关联有零个或 多个次级简单路径和谓词简单路径;以及执行模块803,其基于XML仓库 的数据仓库,执行由解析模块802生成的执行树,以获得该XML查询的 结果。
关于主简单路径、次级简单路径和谓词筒单路径,在前面的实施例中 已经描述,此处适当省略其说明。
在本实施例中,当接收模块801接收到一个XML查询时,例如基于 XPath的查询,将其传送到解析模块802进行解析。在解析模块802中, 首先对于该XML查询中的每一个节点,由名称测试单元8021对该节点进 行名称测试,以找到与该节点匹配的节点。然后,执行树构建单元8022 获取包含该匹配的节点的简单路径,以构建与该节点相关的执行树,并且 记录单元8023在与该节点相关的执行树中记录对该节点的其它测试(包括 节点类型测试、节点数据类型测试),同时,谓词运算判断单元8024判断 该节点是否存在谓词运算。当谓词运算判断单元8024判断该节点存在谓词 运算时,由名称测试单元8021对谓词节点进行名称测试,并由记录单元 8023在与该节点相关的执行树中记录谓词节点与该节点的位置关系以及谓词运算的值表达式。更新单元8025用与该节点相关的执行树更新与前一 个节点相关的执行树。 在本实施例中,解析模块802可以在现有的XPath 解析器的基础上进行如下的筒单修改而得到解析^=莫块802只对当前节点 进行名称测试,其它测试则直接记录到所生成的执行树中;如果当前节点 存在谓词运算,则对谓词节点也只进行名称测试,而谓词节点与当前节点 的关系以及谓词的值表达式也记录到执行树中。解析模块802所输出的执 行树如图6所示。
进一步地,解析模块还可以包括谓词确定单元,其对于每一个谓词 简单路径,确定结构谓词和值谓词。关于结构谓词和值谓词,在前面的实 施例中已进行描述,此处省略其说明
在获得了执行树之后,执行模块803基于数据仓库,执行该执行树以 获得XML查询的结果。在执行模块803中,访问单元8031根据每一个主 简单路径的简单路径标识、每一个次级简单路径的简单路径标识和每一个 谓词简单路径的简单路径标识,访问XML仓库的数据仓库,以获得主简 单路径的所有节点的数据、次级简单路径的所有节点的数据以及谓词简单 路径的所有节点的数据。然后,谓词运算单元8032对每一个主简单路径中 的每一个节点的数据,依次使用属于该主简单路径的每一个谓词筒单路径 的所有节点的数据进行谓词运算。在对该节点的数据进行的谓词运算的结 果均为真时,数据取出单元8033从属于该主简单路径的次级简单路径的所 有节点的数据中取出该主简单路径的节点的后代节点的数据,并由序列化 单元8034将所取出的数据序列化为XML片段。在对所有主简单路径的处 理完成后,合并单元8035合并所有的XML片段,从而获得XML查询的 结果。
应当指出,本实施例的在XML仓库中执行XML查询的装置800在 操作上可以实现图5所示的在XML仓库中执行XML查询的方法。
应当指出,上述实施例中的基于简单路径在XML仓库中存储XML 数据的装置和在XML仓库中执行XML查询的装置及其各个组成部分可 以由诸如超大^!4莫集成电路或门阵列、诸如逻辑芯片、晶体管等的半导体、或者诸如现场可编程门阵列、可编程逻辑设备等的可编程硬件设备的硬件 电路实现,也可以用由各种类型的处理器执行的软件实现,也可以由上述 硬件电路和软件的结合实现。
以上虽然通过一些示例性的实施例详细描述了本发明的基于简单路径
在XML仓库中存储XML数据的方法和装置以及在XML仓库中执行 XML查询的方法和装置,但是以上这些实施例并不是穷举的,本领域技术 人员可以在本发明的精神和范围内实现各种变化和修改。因此,本发明并 不限于这些实施例,本发明的范围仅由所附的权利要求限定。
权利要求
1.一种基于简单路径在XML仓库中存储XML数据的方法,所述XML仓库包括简单路径仓库和数据仓库,所述方法包括对XML文档中的每一个节点,生成用于唯一识别该节点的节点标识符;生成所述XML文档的简单路径;将所述简单路径存储到所述简单路径仓库中;以及以简单路径为索引将每一个所述简单路径中的每个节点的数据依次存储到所述数据仓库中,其中所述数据包括该节点的节点标识符和值。
2. 根据权利要求1所述的方法,其中,所述节点标识符包括所述 XML文档的文档标识和该节点的编码串。
3. 根据权利要求2所述的方法,其中,所述编码串是基于Dewey编 码方法生成的。
4. 根据权利要求1至3任意一项所述的方法,其中,所述将所述简 单路径存储到所述简单路径仓库中包括确定所述简单路径仓库中是否包括所述简单路径; 如果已包括所述简单路径,则忽略所述简单路径;否则,存储所述简 单路径;以及为所存储的简单路径分配一个筒单路径标识。
5. 根据权利要求1至4任意一项所述的方法,其中,所述简单路径 仓库采用XML文件的形式。
6. 根据权利要求4所述的方法,其中,所述数据仓库采用B+树的形 式,其中,所迷B+树以"简单路径标识,节点标识符,,作为键值,所述节 点的值包含在所述B+树的对应的叶节点中。
7. —种在XML仓库中执行XML查询的方法,其中,在所述XML 仓库中使用权利要求1至6任意一项所述的存储XML数据的方法存储有 多个XML文档,所述方法包括接收所述XML查询;基于所述XML仓库的简单路径仓库,解析所述XML查询以生成执 行树,其中,所述执行树由一个或多个主简单路径构建,并且每个主简单 路径关联有零个或多个次级简单路径和谓词简单路径;以及基于所述XML仓库的数据仓库,执行所述执行树以获得所述XML 查询的结果。
8. 根据权利要求7所述的方法,其中,所述解析所述XML查询以生 成执行树的步骤包括对于所述XML查询中的每一个节点,对该节点进4亍名称测试,以找到与该节点匹配的节点; 获取包含所述匹配的节点的筒单路径,以构建与该节点相关的执行树; 在所述与该节点相关的执行树中记录对该节点的其它测试; 判断该节点是否存在谓词运算,如果存在,则对谓词节点进行名称测试,并在所述与该节点相关的执行树中记录所述谓词节点与该节点的位置关系以及所述谓词运算的值表达式;以及用所述与该节点相关的执行树更新与前一个节点相关的执行树。
9. 根据权利要求8所述的方法,其中,所述解析所述XML查询以生 成执行树的步骤还包括对于每一个所述谓词简单路径,确定结构谓词和 值谓词。
10. 根据权利要求7至9任意一项所述的方法,其中,所述执行所述 执行树的步骤包括根据每一个所述主简单路径的简单路径标识、每一个所述次级筒单路 径的简单路径标识和每一个所述谓词筒单路径的筒单路径标识,访问所述 XML仓库的数据仓库,以获得该主简单路径的所有节点的数据、该次级简 单路径的所有节点的数据以及该谓词简单路径的所有节点的数据;对于每一个所述主简单路径中的每一个所述节点的数据,依次使用属于该主简单路径的每一个所述谓词筒单路径的所有节 点的数据进行谓词运算;在对于该节点的数据的所述谓词运算的结果均为真时,从属于该主简单路径的次级简单路径的所有节点的数据中取出该节点的后代节点的数据;将所取出的数据序列化为XML片段;以及 合并所有的所述XML片段以获得所述XML查询的结果。
11. 才艮据权利要求7至IO任意一项所述的方法,其中,所述XML查 询是基于XPath的。
12. 根据权利要求7至11任意一项所述的方法,其中,所述XML文 档具有相似的模式。
13. —种基于简单路径在XML仓库中存储XML数据的装置,所述 XML仓库包括简单路径仓库和数据仓库,所述装置包括节点标识符生成模块,用于对XML文档中的每一个节点,生成用于 唯一识别该节点的节点标识符;以及筒单路径生成才莫块,用于生成所述XML文档的简单路径; 其中,所生成的简单路径被存储到所述简单路径仓库中,并且以简单 路径为索引将每一个所述筒单路径中的每个节点的数据依次存储到所述数 据仓库中,其中所述数据包括该节点的节点标识符和值。
14. 根据权利要求13所述的装置,其中,所述节点标识符包括所述 XML文档的文档标识和该节点的编码串;所述节点标识符生成^=莫块包括文档标识分配单元,用于为所述XML文档分配文档标识;以及 编码串生成单元,用于为所述节点生成编码串。
15. 根据权利要求14所述的装置,其中,所述编码串生成单元采用 Dewey编码方法。
16. 根据权利要求13至15任意一项所述的装置,还包括 确定模块,用于确定所述简单路径仓库中是否包括所述简单路径;以及简单路径标识分gi模块,用于为所存储的简单路径分配简单路径标识; 其中,当所述确定模块确定所述简单路径已被包括时,所述简单路径被忽略;否则,所述筒单路径被存储到所述简单路径仓库中。
17. 根据权利要求13至16任意一项所述的装置,其中,所述简单路径 仓库采用XML文件的形式。
18. 根据权利要求16所述的装置,其中,所述数据仓库采用B+树的形 式,其中,所述B+树以"简单路径标识,节点标识符"作为键值,并且所 述节点的值包含在所述B+树的对应的叶节点中。
19. 一种在XML仓库中执行XML查询的装置,其中,在所述XML 仓库中使用权利要求13至18任意一项所述的存储XML数据的装置存储 有多个XML文档,所述装置包括接收才莫块,用于接收所述XML查询;解析模块,用于基于所述XML仓库的简单路径仓库,解析所述XML 查询以生成执行树,其中,所述执行树由一个或多个主筒单路径构建,并 且每个主简单路径关联有零个或多个次级简单路径和谓词筒单路径;以及执行模块,用于基于所述XML仓库的数据仓库,执行所述执行树以 获得所述XML查询的结果。
20. 根据权利要求19所述的装置,其中,所述解析模块包括 名称测试单元,用于对于所述XML查询中的每一个节点,对该节点进4亍名称测试,以找到与该节点匹配的节点;执行树构建单元,用于获取包含所述匹配的节点的简单路径,以构建 与该节点相关的执行树;记录单元,用于在所述与该节点相关的执4亍树中记录对该节点的其它 测试;谓词运算判断单元,用于判断该节点是否存在谓词运算,其中,在所 述谓词运算判断单元判断该节点存在谓词运算时,由所述名称测试单元对 谓词节点进4亍名称测试,并由记录单元在所述与该节点相关的执行树中记 录所述谓词节点与该节点的位置关系以及所述谓词运算的值表达式;以及更新单元,用于用所述与该节点相关的执4于树更新与前一个节点相关 的执行树。
21. 根据权利要求20所述的装置,其中,所述解析模块还包括谓词 确定单元,用于对于每一个所述谓词简单路径,确定结构谓词和值谓词。
22. 根据权利要求19至21任意一项所述的装置,其中,所述执行模块 包括访问单元,用于根据每一个所述主简单路径的简单路径标识、每一个 所述次级筒单路径的简单路径标识和每一个所述谓词简单路径的筒单路径 标识,访问所述XML仓库的数据仓库,以获得该主筒单路径的所有节点 的数据、该次级简单路径的所有节点的数据以及该谓词简单路径的所有节 点的数据;谓词运算单元,用于对于每一个所述主简单路径中的每一个所述节点 的数据,依次使用属于该主简单路径的每一个所述谓词简单路径的所有节 点的数据进行谓词运算;数据取出单元,用于在对于该节点的数据的所述谓词运算的结果均为真时,从属于该主简单路径的次级简单路径的所有节点的数据中取出该节点的后代节点的数据;序列化单元,用于将所取出的数据序列化为XML片段;以及 合并单元,用于合并所有的所述XML片段以获得所述XML查询的结果。
23. 根据权利要求19至22任意一项所述的装置,其中,所述XML查 询是基于XPath的。
24. 根据权利要求19至23任意一项所述的装置,其中,所述XML文 档具有相似的模式。
全文摘要
本发明提供一种基于简单路径在XML仓库中存储XML数据的方法,该XML仓库包括简单路径仓库和数据仓库,该方法包括对XML文档中的每一个节点,生成用于唯一识别该节点的节点标识符;生成XML文档的简单路径;将简单路径存储到简单路径仓库中;以及以简单路径为索引将每一个简单路径中的每个节点的数据依次存储到数据仓库中,其中数据包括该节点的节点标识符和值。本方法使数据以简单路径的聚束的方式进行存储,并且一个简单路径的数据按照节点标识符的顺序进行存储。而且,本方法不需要XML文档的模式,可以处理无模式的XML数据,并且能够提高XML数据查询的性能。此外,还提供了基于简单路径在XML仓库中存储XML数据的装置以及在XML仓库中执行XML查询的方法和装置。
文档编号G06F17/30GK101661481SQ20081021251
公开日2010年3月3日 申请日期2008年8月29日 优先权日2008年8月29日
发明者刘长浩, 张国根, 硕 武 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1