《一种基于先序位置子孙数的XML编码方法.pdf》由会员分享,可在线阅读,更多相关《一种基于先序位置子孙数的XML编码方法.pdf(9页珍藏版)》请在专利查询网上搜索。
1、(10)申请公布号 CN 103164421 A(43)申请公布日 2013.06.19CN103164421A*CN103164421A*(21)申请号 201110413343.7(22)申请日 2011.12.12G06F 17/30(2006.01)(71)申请人中国人民解放军第二炮兵工程学院地址 710025 陕西省西安市灞桥区洪庆镇同心路第二炮兵工程学院(72)发明人曹耀钦 宋建社 孙睿 曹继平赵霜 郭军 袁春霞 李晓燕(54) 发明名称一种基于先序位置-子孙数的XML编码方法(57) 摘要本发明涉及一种在XML数据库技术领域中简单易实现的XML编码方法,其核心技术是通过一种基于先。
2、序遍历值与节点子孙数相结合的二元编码方案实现了XML文档的关系存储。首先采用先序遍历算法,求出每个XML文档节点的先序遍历值,而后计算每个节点的子孙数目(含自身节点),以二元组(先序遍历值,子孙数)构成XML的文档编码。在此基础上,设计基于关系数据库的数据存储模式,从而实现了XML文档的关系存储。本发明可以基于简单的加减运算即可实现对XML的标准查询语言XPath的支持,也可方便地支持关系存储下的XML信息更新操作,支持SQL数据库查询语言。本发明的编码方法具有编码合理,节点物理意义清晰,操作简便,易于实现等优点,对XML的关系存储实现有重要的实用价值。(51)Int.Cl.权利要求书1页 说。
3、明书5页 附图2页(19)中华人民共和国国家知识产权局(12)发明专利申请权利要求书1页 说明书5页 附图2页(10)申请公布号 CN 103164421 ACN 103164421 A1/1页21.一种基于先序位置-子孙数的XML编码方法,其特征在于包括如下具体步骤:(1)采用先序遍历计算出XML文档树中各节点的编历值,再计算出阁节点的子孙数(含自身节点),形成XML文档的二元编码;(2)基于先序位置-子孙数的编码方法设计XML文档的一组关系存储模式;(3)基于先序位置-子孙数的XML编码方法对XML的标准查询语言XPath的支持方法;(4)基于先序位置-子孙数编码方法的关系存储模式对信息更。
4、新的支持方法;(5)基于先序位置-子孙数编码方法的关系存储模式对SQL查询语言的支持方法。权 利 要 求 书CN 103164421 A1/5页3一种基于先序位置 - 子孙数的 XML 编码方法技术领域0001 本发明涉及一种在XML数据库技术领域中简单易实现的XML编码方法,其核心技术是通过一种基于先序遍历值与节点子孙数相结合的二元编码方案实现了XML文档的关系存储。该编码方法是一种基于区间值的编码方法,在基于关系数据库的XML文档存储、基于XML的信息查询、更新操作及信息交换中有广泛的应用,特别是在军事信息系统中实现信息互操作领域具有重要军事应用价值。背景技术0002 近年来,XML已逐渐。
5、成为分布计算与业务应用中数据表示及数据交换的标准格式。为发挥XML的潜能,XML文档数据的有效存储是必须研究解决的关键技术。由于XML数据的半结构化性、XML的文档/数据两重性和多用途性、以及XML在不同应用领域的特殊要求,使得XML的存储问题至今难以找到一种通用的“最佳”解决方案。这正是导致以XML存储为核心的“XML数据库”至今尚无定论的关键所在。目前的解决方法可归结为两大类:第一种是在已有的关系数据库或面向对象数据库基础上扩充相应的功能,使其能够胜任XML的数据处理工作,称之为XML使能数据库。另一种方法则是为XML数据量身定做的数据库即纯XML数据库。纯XML数据库充分考虑到XML数据。
6、的特点,以一种自然的方式来处理XML数据,能够从各方面很好地支持XML的存储和查询,并且能够达到较好的效果,但是,纯XML数据库要走向成熟还有很长的路。由于关系数据库技术已相当成熟,如何利用关系数据库实现XML文档的高效存储,对于充分发挥现有关系数据库的效能,实现基于关系数据库的信息系统之间的互联互通及互操作,其核心问题是基于关系数据库的XML编码方法。因此,本发明对XML文档的高效利用既有很强的理论意义和应用价值。发明内容0003 本发明所要解决的技术问题是针对现有技术的不足,提供一种简单易实现的XML编码方法,该方法实现了对XML文档的先序位置-子孙数的区间编码方案,以及对XML文档编码的。
7、关系数据库存储,在此基础上实现了XML文档的查询和更新操作,为XML文档的关系数据库操作提供了一种简便有效的方法。0004 为解决XML文档的关系数据库高效操作问题,本发明提供了一种先序位置和其节点子孙数为编码的二元XML编码方法,该方法通过先序遍历文档结构图组成的二叉树,获得每个节点的先序遍历值,实现每个XML文档节点的有序编码,然后通过计算每个节点的子孙数,通过节点的子孙数实现了文档结构的表征,从而实现了XML文档编码。具体说,就是设XML文档树是T,节点集合VV1,V2,Vn,则基于先序遍历值和子孙数的二元区间编码为,其中:numorder是节点的先序遍历编号,sum是以本节点为根节点的。
8、子树的所有节点数,即该节点的子孙数(含自身节点)。0005 本发明的基于先序位置-子孙数的XML编码方法包括以下步骤:0006 (1)对XML文档进行二元区间编码:说 明 书CN 103164421 A2/5页40007 采用先序遍历算法对XML进行遍历,获得对应的先序遍历值numorder;0008 计算每个节点对应的子孙数sum(含自身节点),叶子节点的子孙数(sum)为1;0009 将对应的numorder和sum组成一个二元组,形成XML文档编码;0010 (2)设计XML的关系存储模式0011 XML文档的关系存储模式就是采用关系数据库实现XML文档信息的存储,查询及更新操作。其核心。
9、是设计合适的关系模式,将文档解析后得到的有关信息存储到关系数据库中。0012 对资源文档集合建立一个索引表,该索引表的每个记录是一个三元组(docID,URL,ResourceType)。0013 其中:0014 docID是该节点所在文档的文档标识;0015 URL是文档资源的地址;0016 ResourceType是资源的类型。0017 对于每个标记相同的节点建立一个元素索引表,该索引表的每个记录是一个六元组(docID,numorder,sum,parentorder,nodeType,depth,name)。0018 其中:0019 docID是该节点所在文档的文档标识;0020 nu。
10、morder是该节点在文档树中的先序遍历值;0021 sum是节点的子孙数;0022 parentorder是其父节点的编号;0023 nodeType是节点的类型,其值取EE、ET和EN,分别代表元素节点的内容是子元素、文本和空。0024 depth表示该节点在文档树中所位于的层次。0025 由于一般树结构中节点的孩子是无顺序的,而XML文档树中的节点应是有序的,故我们可把文档树结构定义为一种扩展的树结构,节点的孩子顺序按照从左到右顺序排列,因而NodeNum号实质上确定了该节点在文档树中的位置0026 对XML文档树中的所有标记名建立一个索引表,该索引表的每个记录是一个四元组(docID,。
11、numorder,Tagname,ConType)。0027 其中:0028 docID是该节点所在文档的文档标识;0029 numorder是该节点的编号;0030 Tagname是所有元素节点和属性节点的标记;0031 ConType是该节点的内容类型。0032 对于所有文本节点和属性节点,需要建立一个值索引表,该表的每个记录是一个四元组(docID,numorder,value,valueType)。0033 其中:0034 docID是该节点所在文档的文档标识;0035 numorder是该节点的编号;0036 value是以字符串形式存放的文本或属性节点的值;说 明 书CN 1031。
12、64421 A3/5页50037 valueType用来说明属性值或文本内容的原始数据类型。0038 据此,可设计XML文档的关系存储模式如下:0039 Documen t(docID,URL,ResourceType)0040 Tagname(docID,numorder,Tagname,ConType)0041 Value(docID,numorder,value,valueType)0042 Elem-Tagname(docID,numorder,sum,parentorder,nodeType,depth,name)0043 (3)基于关系存储的XML信息查询0044 XPath是一个。
13、XML查询语言,它用来描述在一个XML文档树中的查询导航,它是W3C所推荐的一种相对简单的查询语言。同时,XPath也是强制的,各种XML查询语言都必须支持它。0045 针对查询功能,XPath定义了13个查询轴,在XML文档中实现相关信息的查询。这13个查询轴分别是:0046 child轴:选择上下文节点的孩子。0047 descendant轴:选择上下文节点的后裔。0048 parent轴:选择上下文节点的父节点。0049 ancestor轴:选择上下文节点的祖先。0050 following-sibling轴:选择上下文节点所有在其后(右)的节点。0051 preceding-sibli。
14、ng轴:选择上下文节点所有在其前(左)的节点。0052 following轴:选择上下文节点所有在其后且排除其所有后裔的节点。0053 preceding轴:选择上下文节点所有在其前且排除其所有祖先的节点。0054 attribute轴:选择上下文节点的属性。0055 namespace轴:选择上下文节点的命名空间。0056 self轴:选择上下文节点自身。0057 descendant-or-self轴:选择上下文节点自身及其后裔。0058 ancestor-or-self轴:选择上下文节点自身及其祖先。0059 本发明的编码方案可以全面支持XPath查询,也即支持XPath的13个查询轴。。
15、0060 (4)关系存储下的XML信息删除0061 当文档树中需要删除节点为v,其双亲节点为u时,可分为以下几种情况:0062 删除的节点v是一个叶子节点,也即sum(v)1。0063 在这种情况下,可通过以下步骤实现:0064 a.节点v的双亲节点u的后裔数减1,即sum(u)sum(u)-1;0065 b.文档树中所有比节点v编号大的节点p,其编号减1,即numorder(p)numorder(p)-1;0066 c.节点u的所有祖先节点的后裔数(sum)全部减1。节点u的所有祖先x满足numorder(x)numorder(u)且numorder(x)+sum(x)numorder(u)。
16、,也就是当节点x满足numorder(x)numorder(u)且numorder(u)numorder(x)+sum(x)时,sum(x)sum(x)-1。0067 删除的节点v不是叶子节点,也即sum(v)1。0068 在这种情况下,可通过以下步骤实现:说 明 书CN 103164421 A4/5页60069 a.节点u的后裔数减1,即sum(u)sum(u)-1;0070 b.节点v的所有后裔节点的层数-1。节点v的所有后裔x满足numorder(v)+sum(v)numorder(x)且numorder(v)numorder(x),也就是当节点x满足numorder(v)+sum(v)。
17、numorder(x)且numorder(v)numorder(x)时,depth(x)depth(x)-1。0071 c.文档树中所有比节点v编号大的节点p,其编号减1,即numorder(p)numorder(p)-1。0072 d.节点v的孩子节点为x,其双亲节点修改为numorder(u),即如果节点x满足:numorder(v)parentorder(x),则parentorder(x)numorder(u)。0073 (5)信息更新的SQL语言实现0074 基于(3)和(4)中所给方法,可以通过数据库的SQL语言方便地实现XML信息查询、更新操作。0075 本发明的优点是:本发明借。
18、助先序遍历算法的思想,通过和节点子孙数一起形成了一种XML的编码方法,具有编码合理,节点物理意义清晰,操作简便,易于实现等优点,对XML的关系存储实现有重要的实用价值。附图说明0076 下面结合附图对本发明作进一步详细说明。0077 图1为一个XML文档构成的文档树。0078 图2为本发明的编码与现有常用XML编码的对比。0079 图3为本发明对XPath的查询轴的支持方法。具体实施方式0080 为了更好的说明本发明的技术方案,以下结合附图对本发明的实施方式作进一步说明。0081 参见图1,某XML文档片段所构成的文档树如图所示。首先按照先序遍历方法,可得到节点的排列先序排列顺序为:1,2,3。
19、,4,5,6,7,8。然后计算每个节点的子孙数分别为:8,3,1,1,1,3,1,1。其形成的二元编码为:(1,8),(2,3),(3,1),(4,1),(5,1),(6,3),(7,1),(8,1)。0082 参见图2,依据图1所给出的文档树,可以得到本发明所形成的编码树,图2中给出了其他几种常用方法的编码树。0083 参加图3,本发明对XML的标准查询语言XPath的支持非常简单,只有要通过简单的加减运算即可实现。如查询节点u的孩子v,则可通过判断:numorder(u)parentorder(v)即可。0084 本发明对数据库标准查询语言SQL的支持如下(以关系存储下的XML信息删除的第。
20、一种情况为例说明SQL的实现程序):0085 /获得节点v的编号及双亲节点编号0086 select numorder,parentorder0087 into:vorder,:vparentorder说 明 书CN 103164421 A5/5页70088 from B0089 where Namev;0090 /删除节点v0091 delete from B0092 where numorder:vorder;0093 /将节点u的后裔数-10094 update B0095 set sumsum-10096 where numrder:vparentorder;0097 /将所有编号大于v的节点的编号-10098 update B0099 set numordernumorder-10100 where numorder:vorder;0101 /节点u的所有祖先节点的后裔数(num)全部减10102 update B0103 set sumsum-10104 where numorder:vparentorder and :vparentordernumorder+sum;说 明 书CN 103164421 A1/2页8图1图2说 明 书 附 图CN 103164421 A2/2页9图3说 明 书 附 图CN 103164421 A。