以文本方式查看主题

-  W3CHINA.ORG讨论区 - 语义网·描述逻辑·本体·RDF·OWL  (http://bbs.xml.org.cn/index.asp)
--  『 XML 与 数据库 』  (http://bbs.xml.org.cn/list.asp?boardid=17)
----  基于Dietz编码在关系数据库中存储和查询XML文档  (http://bbs.xml.org.cn/dispbbs.asp?boardid=17&rootid=&id=46755)


--  作者:Prentice2000
--  发布时间:5/11/2007 10:03:00 PM

--  基于Dietz编码在关系数据库中存储和查询XML文档
我的毕业设计就是这个题目,现在已经完成了。
我把我的设计都放在我的BLOG里了
http://blog.sina.com.cn/u/1406570134
欢迎大家光临
--  作者:Prentice2000
--  发布时间:5/12/2007 8:53:00 PM

--  
在XML文档中的元素存在有父子关系,因此就需要对元素进行编码来反映这些父子关系,并将这些编码也要保存在关系表中。这里使用对元素进行Dietz编码来反映元素之间的父子关系。
    XPath 针对 XML 文档建立了一套数据模型。在该模型中,每个 XML 文档都对应一棵有序树。整棵树共包括七种类型的结点。考虑在数据库中存储元素结点,文本结点和属性结点,因此就需要在数据库建立3个关系分别存储这3种类型的结点。
Dietz编码规则
    Dietz编码是P.F. Dietz提出的。它的编码规则是XML文档可以表示为一个树型结构,树T中的每一个结点被赋予一个先序遍历序号和后续遍历序号的二元组<pre,post>。由于树T中的一个祖先结点u在先序遍历(后序遍历)中必然出现在它的后裔结点v之前(之后),因此,结点u和v是祖先/后裔关系,当且仅当pre(u)<post(v)∩post(v)<pre(u)。因此,树T中的任意两个结点之间的祖先/后裔关系的检测(即包含检测)能够在常数时间内被计算(即两次比较计算)。对于该编码方案,pre或post均可以作为结点的惟一标识。

    一个XML文档树的先序遍历等价于它的文档顺序,即如果对文本形式的XML文档进行顺序存取,则一个元素被访问的顺序就是它们的先序遍历的序号;反之,XML文档的文本能够以先序遍历它的文档树的形式进行重构。

产生的关系模式

Document(DocumentID,DocumentName)

Element(DocumentID,ElementPre,ElementPost,TagName,ParentPre,ParentPost)

Attribute(DocumentID,AttributeID,ElementPre,ElementPost,AttributeName,AttributeValue)

Text(DocumentID,TextID,ElementPre,ElementPost,TextContent)

    表Document存储的是数据库中保存的XML文档的文件名,该表的主键为文档标号(DocumentID)。表Element存储的是XML文档中的元素,属性ElementPre和ElementPost分别表示元素的先序和后序编码,由于XML文档中元素最多有一个父元素,因此属性ParentPre和ParentPost分别表示父元素的先序和后序编码,属性TagName代表元素的标记名称,该表的主键为DocumentID,ElementPre,ElementPost。表Attribute存储的是XML文档中属性结点,属性AttributeID表示每个XML文档中属性编号,根据XPath数据模型中对于属性结点的描述,表中还要保存该属性所从属的元素信息即需要保存元素的先序和后序编码。表Text存储的是XML文档中的文本结点,表中的属性分别表示文本编号,父元素的先序和后序编码,文本内容。


--  作者:Prentice2000
--  发布时间:5/12/2007 8:58:00 PM

--  
XPath快速定位
对于一个XPath查询来说,除了包含关系,如祖先/后裔关系、双亲/孩子关系,还有文档位置关系,如左兄弟/右兄弟关系(preceding-sibling/following-sibling)、之前/之后关系(preceding/following)关系。
    通过对XML文档进行Dietz编码可以实现对XPath快速定位[4]。XPath查询一共有13个查询轴,其中有4个是最基本的,分别是祖先、后裔、之前、之后,对于XML文档树中任意给定的上下文结点v,4个基本轴给出了该XML文档树的一种互不相交的剖分,即XML文档树的结点集合T被剖分成由4个互不相交的结点子集以及结点v自身构成:v/ancestor∪v/descendant∪v/preceeding∪v/following∪{v}

       因此,对于每一个XPath定位步的计算实际上是计算一次集合集T的剖分,对于一个给定的上下文结点v,能够快速的确定4个基本轴的剖分。

如下图所示,表示的是结点g的剖分情况

g/ancestor={a,f}

g/following={i,j,k}

g/preceding={b,c,d,e}

g/descendant={h}

g/ancestor-or-self= g/ancestor∪{g}

g/descendant-or-self= g/descendant∪{g}

由于在关系模式Element中存储了元素的Dietz编码以及该元素父元素的DIetz编码,通过XPath快速定位的方法就可以将XPath转化为SQL
在我的毕业设计中已经实现了在关系数据库中存储XML,将存储好的文档导出(即关系数据转化为XML),XPath转化为SQL


--  作者:Prentice2000
--  发布时间:5/12/2007 8:59:00 PM

--  
在我的BLOG中有详细的介绍,欢迎大家光临
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
44.922ms