法律状态公告日
法律状态信息
法律状态
2014-04-09
未缴年费专利权终止 IPC(主分类):G06F17/30 授权公告日:20070124 终止日期:20130217 申请日:20040217
专利权的终止
2007-01-24
授权
授权
2005-03-09
实质审查的生效
实质审查的生效
2005-01-05
公开
公开
技术领域
本发明涉及数据库描述的生成方法,尤其是一种基于关系数据库模式图Schema Diagram的自动生成可扩展标记语言模式XML Schema键约束的方法,属于计算机数据管理技术领域。
背景技术
XML(eXtensible Markup Language)已成为Internet上的数据表示和交换的事实标准,越来越多的应用系统采用XML作为标准格式来发布和交换数据。但是,由于关系数据库技术成熟,市场中占有主导地位,如何将关系数据库转换为XML文档成为当前的迫切需要解决的问题。
目前已存在一些系统和工具可以对关系数据库和XML进行数据转换,如IBM公司的XML Extender,Oracle公司的XML Enable以及XPERANTO,SilkRoute系统等,但是由于这些系统只考虑到数据结构层面,缺少对数据完整性约束的分析,而键和外键约束是关系数据模型中最重要的完整性约束,在数据库管理系统领域得到大量应用,但是现有技术中,还没有解决从关系模型到XML的键约束转换问题,造成了数据模式转换过程中的语义信息丢失的问题。具体如下:
首先,目前从关系数据库到XML文档的映射规则仅仅考虑了数据结构层面,缺少对数据完整性约束的分析。
其次,虽然目前XML Schema中已经提供了定义XML键约束的机制,但是在数据交换过程中,原来关系数据库中的键和外键语义约束,不能通过交换过程自动转换为XML上的键约束。
例如由IBM Almaden Research Center研制的XPERANTO系统,虽然该系统利用Xquery视图实现了从关系数据库到XML数据的发布和转换,但是由该系统生成的任何XML文档都没有键的约束,因此丢失了原有的关系数据库中的键和外键等语义约束。
因此,目前广泛应用的基于XML的数据发布应用系统迫切需要提供一种基于关系数据库的键和外键约束生成XML数据发布键约束的方法。
发明内容
本发明所要解决的技术问题在于:提供一种面向可扩展标记语言模式的键约束自动生成方法,基于关系数据库模式图Schema Diagram的键约束(包括键和外键)生成可扩展标记语言模式XML Schema的层次描述和键约束,解决目前在关系数据库数据转换为XML数据进行发布的过程中结构转换时完整性约束丢失的问题。
本发明所述的技术方案,包括如下步骤:
步骤一、利用关系数据库的键和外键构造数据库的模式图;
步骤二、扫描模式图,在扫描模式图过程中建立关系表名、候选码与XML Schema中键约束的选择器XPath、域XPath之间的对应关系,生成关系数据库键约束的XML选择器索引;
步骤三、利用步骤二获得的索引生成XML Schema上的键约束,从而完成基于XML数据发布过程中键约束的自动生成。
本发明通过关系数据库模式图,建立关系数据库键约束的XML选择器索引,从而生成XML Schema的键约束,解决了目前基于XML的数据发布过程中结构转换时完整性约束丢失的问题,可广泛应用于当前网络环境下各应用系统的基于XML的数据发布过程,满足了目前Internet上大量应用系统之间XML数据发布与转换的需求,具有广阔的应用前景。
附图说明
图1是本发明的整体流程的示意图;
图2是一个简化的银行系统的数据库模式图;
图3是图2所示的例子中,建立根结点和只有出度而没有入度节点的示意图;
图4是图2所示的例子中,branch出队列后的示意图;
图5是图2所示的例子中,account出队列后的示意图;
图6是图2所示的例子中,loan出队列后的示意图;
图7是图2所示的例子中,R中customer入队列后的示意图;
图8是图2所示的例子中,customer出队列后的示意图。
具体实施方式
本发明是针对当前网络环境下各应用系统基于XML数据发布的需求而提出的一种新的完整性约束生成的技术方案,它基于关系数据库模式图(Schema Diagram)中重要的和大量存在的键和外键约束自动生成为XMLSchema描述的层次关系和键约束,实现了关系数据库数据的XML发布。
本发明方法,首先利用关系数据库的键和外键构造数据库的模式图;然后在扫描模式图过程中建立关系表名、候选码与XML Schema中键约束的选择器XPath(Selector XPath)、域XPath(Field XPath)之间的对应关系,生成关系数据库键约束的XML选择器索引;再利用该索引自动生成XMLSchema上的键约束,从而实现了基于XML数据发布过程中键约束的自动获得。
本发明所述的模式图定义为G=(V,E),其中:V=(key attribute,non-keyattribute),即包括主属性和非主属性;E是描述表之间的参照关系,对于表s,其属性列表为X,表t,其属性列表为Y,对于每一个外键引用关系t[β]_s[α],其中α_X,β_Y,且α是s表的主属性,则由t表的β属性到s表的α属性之间有一条边。
对于一个含有主键和外键依赖的数据库模式,可以用模式图SchemaDiagram来表示,即所述的构建模式图,包括如下步骤:
步骤11、对数据库中的每一个关系表用一个矩形来表示,矩形上方标注关系的名字,矩形内列出关系表的属性。
步骤12、如果有主键,用一条横线将主键属性分隔在方框上部。
步骤13、对数据库中的每一个外键,生成从参照关系的外键属性到被参照关系的主键属性之间的一个有向边。
下面通过一个具体的实例来说明如何构建带有内键和外键约束关系数据库的模式图:
一个简化的银行系统的数据库模式,包含如下的表结构:
branch(branch_name,branch_city,assets),
account(account_number,branch_name,balance),
depositor(customer_name,account_number,last_date),
customer(customer_name,customer_street,customer_city),
loan(loan_number,branch_name,amount)
borrower(customer_name,loan_number,last_date)
其中的下划线标出的该表的键。除此以外,各个表之间还具有外键约束联系,例如account表中的branch_name属性是一个外键,它参照branch表中的主键branch_name。
如图2所示是根据上述关系数据库模式图构建步骤得到的数据库模式图。本发明的获得关系数据库中模式图的方式,与现有技术基本相同,可以参考Paul Dorsey and Peter Koletzke,Designer/2000 Handbook,OraclePress。
本发明所述的扫描数据库模式图,生成索引,具体包括如下步骤:
步骤21、根据数据库模式图,建立XML根结点及其儿子节点;
步骤22、从XML根结点出发,对模式图进行反向扫描;根据扫描的结果,建立层次结构和索引表。
上述的步骤21,根据以下步骤确定XML根结点Vr以及其儿子节点,具体包括如下步骤:
步骤211:建立根结点Vr;
步骤212:扫描模式图,找出只有入度没有出度的节点集合R;并对R中每一个节点,相应生成由根结点Vr指向该节点的一条边。
步骤213:如果没有这样的节点,表示模式图中有环,则从环中任选一节点,并生成根结点Vr指向该节点的一条边。
所述的根结点Vr是一个空结点,只是作为XML树的开始结点,与具体关系数据库无关。由于XML数据是一个树状结构,所以找到了所有的只有入度没有出度的节点集合R后,从R出发一定可以达到所有的结点,所以步骤212中,完成了这一步骤。如果模式图中是环状的,则该环的结点中不存在只有入度没有出度的节点,但是从每一个节点出发都可以到达环中的所有结点,因此可以从环中任取一个节点,作为开始。
如图3所示是根据图2中的数据库模式图,其R={branch,customer},完成步骤21后的示意图。
所述的步骤22包括如下步骤:
步骤221、将节点集合R压入队列,按照模式图边的相反方向,开始对模式图进行反向的宽度优先扫描;
步骤222、在反向宽度优先扫描过程中,记当前节点为s(X),其属性列表为X;扫描到新的节点记做t(Y),其属性列表为Y,由于新的结点是既有入度又有出度的结点,那么,一定存在外键连接FK:t[β]_s[α],其中α_X,β_Y,
对于该外键连接,按照以下步骤生成相应的层次结构:
首先,在t中将已经出现在s节点中的属性删除;保证s节点的该属性只出现一次;
然后,将t剩余的属性作为s节点的子节点;这样就形成了XML的树的一个层次结构;
每生成一次层次结构,都在XML Schema选择器索引中建立相应的索引,选择器索引的结构如下:
选择器索引的内容按照以下步骤生成:
步骤a、对于根结点Vr,将模式图中该节点记录的表名和主键属性填入选择器索引表的前两列中,其选择器XPath和域XPath为NULL;
步骤b、在扫描模式图过程中,每扫描到一个新节点,就将模式图中该节点记录的表名和主键属性填入选择器索引表的前两列中;其选择器XPath为其父节点选择器XPath加上当前扫描到的边,域XPath为目标集路径加上该节点至候选键属性的边。
步骤223、按照上面的方法,依次递归处理所有结点,如果扫描到的节点已经被扫描过,说明XML树中已经包含了该结点,则生成reference关系索引,引用已经被扫描定位的该结点;直到处理完关系数据库模式图中的所有外键约束关系。
本发明的步骤223中递归处理所有结点,采用了宽度优先的扫描方式。所述的宽度优先扫描,是指从集合R的每一个节点v开始,先访问节点v,并将其标记为已访问节点,接着依次访问v的所有相邻的节点w1,w2,...,wn,然后再访问与w1,w2,...,wn邻接的所有未被访问的节点,依此类推,直到所有的节点都被访问为止。
下面仍采用上面提到的简化银行系统的例子,来进一步说明本发明的技术方案:
步骤A、只有出度没有入度的集合R={branch,customer}中branch进入队列中,利用队列对关系数据库模式图进行处理,开始宽度扫描;
步骤B、branch出队列,branch的属性表成为branch的子节点,由于通过外键约束,连接到account和loan表,所以,account和loan表的属性表成为了各自的子节点;同时队列元素变成{account,loan},生成XML模式如图4所示;
步骤C、account出队列,采用与步骤B同样的方式处理后,队列元素变为{loan,depositor},生成XML模式如图5所示;
步骤D、loan出队列,队列元素变为{depositor,borrower},生成XML模式如图6所示;
步骤E、depositor出队列,队列变为{borrower};
步骤F、borrower出队列,队列为空;
步骤G、R中customer入队列,队列变为{customer},生成XML模式如图7所示;
步骤H、customer出队,由于depositor,borrower都已经被扫描过,所以生成两个引用关系referencel(depositor-customer)和reference2(borrower-customer),处理结束,生成XML模式如图8所示。
在以上的步骤中,相应的索引表中的表项同时生成,下面是上述例子中得到的索引表:
Reference关系(反向扫描customer发出的边)如下:对于
depositor(customer_name)_customer(customer_name)
borrower(cus tomer_name)_customer(customer_name)
得到Reference关系:
通过上面的步骤,本发明利用集合R为根的XML结构,得到了具有键约束的XML Schema的树状模式图的表示结构和便于对键约束进行检索的索引表,利用该索引集,就可以方便的生成XML Schema的键约束。
所述的生成具有键约束的XML Schema,包括如下步骤:
步骤30、读入步骤二生成的层次结构,建立XML Schema中的元素和子元素构成的模式框架;
步骤31、逐行读入选择器索引表,将数据库表名、候选键属性,上下文路径、选择器XPath和域XPath,分别设定为T、K、C、S、F;
步骤32、在模式框架中按照上下文路径C查找元素名称为T的元素,增加如下键约束:
<xsd:key name=键名>
<xsd:selector xpath=S/>
<xsd:field xpath=F/>
</xsd:key>。
下面上述例子中具有键约束的文字描述的XML Schema片断,斜体的部分表示生成的键约束:
<xsd:element name=″customer″> <xsd:complexType> <xsd:sequence><xsd:element name=″customer_name″type=″xsd:string″/><xsd:element name=″customer_street″type=″xsd:string″/><xsd:element name=″customer_city″type=″xsd:string″/> </xsd:sequence></xsd:complexType><xsd:key name=″PK_c″> <xsd:selector xpath=″customer″/> <xsd:field xpath=″customer_name″/></xsd:key></xsd:element><xsd:element name=″branch″> <xsd:complexType> <xsd:sequence><xsd:element name=″branch_name″type=″string″/><xsd:element name=″branch_city ″type=″string″/><!-- SIPO <DP n="9"> --><dp n="d9"/><xsd:element name=″assets″type=″integer″/> <xsd:element name=″account″minOccurs=0 maxOccurs=″unbounded″><br/><xsd:complexType><xsd:sequence> <xsd:element name=″account_name ″type=″string″/><xsd:element name=″balance″type=″integer″/> <xsd:element name=″depositor″minOccurs=0 maxOccurs=″unbounded″> <xsd:complexType><xsd:sequence> <xsd:element name=″last_date″type=″xsd:date″/><xsd:element name=″refl″type=″xsd:string″/> </xsd:sequence> </xsd:complexType> <xsd:keyref name=″ref1_customer″refer=″PK_c″> <xsd:selector xpath=″branch/account/depositor″/> <xsd:field xpa th=″ref1″/> </xsd:keyref> </xsd:element> </xsd:sequence> </xsd:complexType> <xsd:keyname=″PK_a″> <xsd:selector xpath=″branch/account″/> <xsd:field xpath=″account_name″/></xsd:key> </xsd:element> <xsd:element name=″loan″minOccurs=0 maxOccurs=″unbounded″> <xsd:complexType> <xsd:element name=″borrower″minOccurs=0 maxOccurs=″unbounded″><xsd:complexType><xsd:sequence><xsd:element name=″last_date″type=″xsd:date″/><xsd:element name=″ref2″type=″xsd:string″/> </xsd:sequence></xsd:complexType><xsd:keyref name=″ref2_customer″refer=″PK_c″><xsd:selector xpath=″branch/loan/borrower″/><!-- SIPO <DP n="10"> --><dp n="d10"/><xsd:field xpath=″ref2 ″/> </xsd:keyref> </xsd:element> </xsd:complexType><xsd:key name=″PK_l″><xsd:selector xpath=″branch/loan″/><xsd:field xpath=″loan_number″/></xsd:key> </xsd:element> </xsd:sequence></xsd:complexType><xsd:key name=″PK_b″><xsd:selector xpath=″branch″/><xsd:field xpath=″branch_name″/></xsd:key> </xsd:element>
最后所应说明的是:以上实施例仅用以说明而非限制本发明的技术方案,尽管参照上述实施例对本发明进行了详细说明,本领域的普通技术人员应当理解:依然可以对本发明进行修改或者等同替换,而不脱离本发明的精神和范围的任何修改或局部替换,其均应涵盖在本发明的权利要求范围当中。
机译: 在可扩展标记语言模式中验证唯一粒子归因约束的方法
机译: 利用可扩展标记语言模式来管理电子文档中特定类型的内容的方法和装置
机译: 利用可扩展标记语言模式管理电子文档中特定内容类型的方法和装置