基于模式的xml存储方法及应用的制作方法

文档序号:6424996阅读:248来源:国知局
专利名称:基于模式的xml存储方法及应用的制作方法
技术领域
本发明涉及一种XML存储方法及应用,尤其涉及一种基于模式的XML存储方法及应用。
背景技术
XML文档是用标签自定义的文档,它包含元素节点,属性节点,文本节点等。XML文档具体如下<pre listing-type="program-listing">  <bib>   <vendorl>   <name>LongMark</name>   <book1 isbn=″isbn1001″>   <title>C++</title>   <author1>   <fname>Rose</fname>   <lname>Smith</lname>   </author>   <price>50</price>   </book1>   <book2 isbn=″isbn1002″>   <title>XML</title>   <author2>   <fname>Steven</fname>   <lname>Tom</lname>   </author2>   <price>80</price>   </book>   </vendor1>   <vendor2>...</vendor2>   <bib></pre>如上所示,&lt;bib&gt;,&lt;vender&gt;等是元素节点,isbn是属性节点,C++是文本节点。元素节点可以嵌套,外层节点是内层节点的父节点,内层节点是外层节点的子节点。比如,&lt;bib&gt;是&lt;vendor&gt;的父节点,&lt;vendor&gt;就是name的父节点。
XML数据可以表示成树状的数据,比如上述的XML文档可以表示成图1中的结构。用于数据交换的XML文档通常是有模式定义的。模式定义XML的结构,比如元素节点可以有哪些类型的子节点和属性节点,子节点可以重复出现的次数等。图2是图1所示文档的模式定义。其中带“*”号的节点表示可以重复出现的节点。这里,vendor,book和author是可以重复出现的节点。
随着XML数据越来越成为数据交换和数据表示的标准,对XML数据高效的管理和查询的需求越来越强烈。而高效的管理和查询直接依赖于XML数据的存储方式。所以,一种高效的XML存储方法,是高效的XML管理和查询的关键和前提。
目前,在XML存储结构中,物理存取的最小单位是记录。记录即是一棵子树,它由一个或多个节点(如Element Node、Attribute Node、Text Node等)组成,是逻辑存取的最小单位。如果要读取某一个节点,必须把该节点所在的整个记录读取进来。
欲理解XML的存储,首先要弄清楚两个关键问题一是记录的粒度,二是记录的存储顺序。
记录的粒度就是记录中包含有的几个节点。一般地,记录的粒度有三种。
节点级的,每一个节点就是一个记录。如vendor、book等分别是一个记录。
子树级的,一棵子树是一个记录。比如,bib(vendor(name))是一个记录。划分子树的标准是使每一个记录的大小尽可能地跟物理块的大小接近。这样划分出来的记录类型是没有规律的。
文档级的,整个文档是一个记录。比如,如图1所示的整棵树是一个记录。
如果记录的粒度是节点级的或者子树级的,那么接下来面临的问题就是记录的存储顺序,也就是记录在存储上的物理连接关系。记录的存储顺序一般有以下几种按深度优先顺序存储。这是最常见的存储顺序。比如,在图1中,如果按照深度优先方式,则遍历的顺序是bib,vendor,name,book1,title1,author1,fname1,lname1,price1,book2,title2,author2,fname2,lname2,price2。假设一个物理块能容纳4个记录,那么第一个物理块存放bib,vendor,name,book1,第二个物理块存放title1,author1,fname1,lname1,以此类推。
按广度优先顺序存储。比如,在图1中,若记录按照广度优先的顺序则是bib,vendor,name,book1,book2,title1,author1,price1,title2,author2,price2,fname1,lname1,fname2,lname2。仍假设一个物理块能容纳4个记录,那么第一个物理块存放bib,vendor,name,book1,第二个物理块存放book2,title1,author1,price1,以此类推。
目前,现有的存储方法大多数采用按照深度优先的顺序存储。节点的粒度是节点级,子树级或者文档级。它们都没有借助模式信息,导致同类数据不能存放在一起,从而不能为XML的查询提供高效的数据访问。比如,上述XML的文档中的两个author节点,它们实际上是同类节点,都表示了书的作者的信息。这两个作者节点在以上的存储方法中不会相邻存储在一起,而对书的作者的查询往往要求访问所有的作者信息,这样,就大大影响了查询效率。

发明内容
针对上述现有XML存储方法所存在的问题和不足之处,本发明提出了一种可提高查询效率的基于模式的XML存储方法及应用。
本发明是这样实现的一种XML存储方法,包括以下步骤(1)对XML事先给定的模式,选取该模式定义的特定节点作为记录节点;(2)按步骤(1)的方法把输入的XML文档划分成一个一个记录,并记录其类型;(3)对步骤(2)中得到的记录按类型进行分类,类型相同的记录存储在一起。
优选地,所述步骤(1)中的节点满足以下条件的被选取节点是模式树的根节点;或节点是可重复节点且有子节点。
优选地,所述记录在逻辑页的存储组织成链表结构,各记录之间用指针链接起来,每个记录有两个指针,prev指向前一个记录,next指向后一个。逻辑页的头部有头指针和尾指针,分别指向第一个记录,和最后一个记录。第一个记录的prev指针指向NULL,最后一个记录的next指针指向NULL。
优选地,所述聚簇存储具体为同类型的记录按照上述方法存储于一个逻辑页中,如果需要多个页,则各页之间又通过指针链接起来。
一种XML存储方法的应用,该方法可用于含有结构化数据的数据库中。
本发明根据XML模式树划分记录类型,并据此对XML文档数据划分记录,然后把相同类型的记录聚簇存储在一起。本发明的存储方式的粒度是子树级的。但是子树的划分有别于以前的任何方法,而且存储顺序也不是按照深度优先或者广度有限,而是同类记录聚簇的顺序。
具体而言,本发明具有以下优点1、提高了查询效率;大部分情况下,查询需要访问同类节点,本发明正是把同类的相关联的节点存储在一起,回答一个查询所需要的内外存交换的次数就大大减少,从而减少了查询时间,提高了查询效率。
2、便于数据管理;本发明将同类节点聚簇存储在一起,在进行数据更新等管理时,能使管理工作更加方便和迅速。
3、节省了存储空间;本发明的存储的粒度是子树级,相比节点级的存储方法,子树级需要更少的指针,因而需要更少的存储空间。可大大节约了存储容量。


下面结合附图对本发明作出详细说明。
图1为现有XML文档的树状数据结构示意图;图2为图1的模式结构示意图;
图3为本发明流程示意图。
具体实施例方式
如图3所示,本发明借助模式信息,将XML文档的同类数据放在一起存储。若要求将同类型记录聚簇存储,关键问题是选定某些特定类型的节点作为记录节点。而这可以根据模式来完成。首先,给定一个具体的模式,如何选定模式定义上的特定节点作为记录节点呢?本发明选取记录类型的方法是这样的如果模式树上一个节点满足以下条件,则被选定为记录节点类型为模式树的根节点,或者是可重复节点(即前面所述XML文档中带“*”,标志的),而且有子节点。
对于图2中的模式定义来说,按本发明方法选取出来的记录节点类型应该是bib(vendor)、vendor(name、book)、book(title、author、price)、author(fname、lname)这四个。本发明选择记录类型的方法隐含了语义的信息。如果一个节点类型是可重复的而且有子节点的,说明它是比较完整的逻辑单位。比如,author表示作者信息,book表示了书的信息等等。在查询中,该逻辑单位内的节点可能要经常一起被查询。比如,查询book节点,可能经常以price为谓词判断,而以title为返回的结果节点等。
选择好记录的类型之后,下一步是把输入的XML文档划分成一个一个记录。比如,对于图1所表示的XML文档,根据前述方法划分出来的记录类型,可以生成记录如下类型1bib(vendor1,vendor2...)类型2vendor(name,book1,book2,...)类型3book1(title,author1,price),book2(title,author2,price)类型4author1(fname,lname),author2(fname,lname)生成好记录之后,下一步是要把这些记录按照类型存储在一起。比如,在第二步生成的记录中,有四种类型,相同的类型,如类型3中的book1和book2,将会相邻存储在一起。其存储利用指针结构,各记录顺序存放,记录之间用指针链接,存储页头部有两个指针,头指针和尾指针,分别指向第一个记录,和最后一个记录。第一个记录的prev指针指向NULL,链尾记录的next指针指向NULL。这样,相同类型的记录就组织成了一条链表,使从book1开始,可以顺着链表访问book2,book3,...,直到bookn。
本发明可使利用本发明存储结构的数据库更具可管理性,维护起来相当方便。同时,利用本发明存储结构的数据库占用的存储空间相对较小,节约了系统的宝贵存储空间。利用本发明存储结构的数据库可使查询的效率得到提高。
本发明的存储方法可用于任何含有结构化数据的数据库中。特别是应用到关系数据库的各系统中。
权利要求
1.一种XML存储方法,包括以下步骤(1)对XML事先给定一个模式,选取该模式定义的特定节点作为记录节点;(2)按步骤(1)的方法把输入的XML文档划分成一个一个记录,并记录其类型;(3)对步骤(2)中得到的记录按类型进行分类,类型相同的记录存储在一起。
2.如权利要求1所述的XML存储方法,其特征在于,所述步骤(1)中的节点满足以下条件的被选取的节点是模式树的根节点;或节点是可重复节点且有子节点。
3.如权利要求1所述的XML存储方法,其特征在于,所述存储方式具体为指针结构,头指针指向第一个记录,尾指针指向链尾的记录,第一个记录的prev指针指向NULL,链尾记录的next指针指向NULL。
4.如权利要求3所述的XML存储方法,其特征在于,所述记录存储在一起具体为同类型的记录存储于同一个逻辑页中,或者多个通过指针相链接的逻辑页中。
5.一种权利要求1方法的应用,其特征在于,该方法可用于含有结构化数据的数据库中。
全文摘要
本发明公开了一种XML存储方法,包括对XML事先给定一个模式,选取该模式定义的特定节点作为记录节点;把输入的XML文档划分成一个一个记录,并记录其类型;对得到的记录按类型进行分类,类型相同的记录存储在一起。本发明可使利用本发明存储结构的数据库更具可管理性,维护起来相当方便。同时,利用本发明存储结构的数据库占用的存储空间相对较小,节约了系统的宝贵存储空间。利用本发明存储结构的数据库可使查询的效率得到提高。
文档编号G06F17/30GK1588368SQ200410073869
公开日2005年3月2日 申请日期2004年9月7日 优先权日2004年9月7日
发明者孟小峰, 罗道锋, 安靖, 王宇, 陆世潮 申请人:孟小峰, 罗道锋, 安靖, 王宇, 陆世潮
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1