首页> 中国专利> 基于结构分析的可扩展标记语言键约束验证方法

基于结构分析的可扩展标记语言键约束验证方法

摘要

本发明公开了一种基于结构分析的可扩展标记语言键约束验证方法,包括根据输入的待验证的XML文档和该文档需遵从的键约束,抽取XML文档中的键值生成键值文档;根据预设计的键值文档DTD,检查键值文档是否满足键值文档DTD的结构约束,如果满足,则待验证的XML文档满足定义的键约束;否则该待验证的XML文档不满足键约束。本发明可广泛应用于当前网络环境下各应用系统的基于XML的数据交换过程,满足了Internet上各应用系统之间基于XML数据交换的需求,具有广阔的应用前景。

著录项

  • 公开/公告号CN1704932A

    专利类型发明专利

  • 公开/公告日2005-12-07

    原文格式PDF

  • 申请/专利权人 北京大学;

    申请/专利号CN200410042943.7

  • 申请日2004-06-01

  • 分类号G06F17/30;

  • 代理机构北京同立钧成知识产权代理有限公司;

  • 代理人刘芳

  • 地址 100871 北京市海淀区颐和园路5号

  • 入库时间 2023-12-17 16:50:55

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2014-07-30

    未缴年费专利权终止 IPC(主分类):G06F17/30 授权公告日:20071107 终止日期:20130601 申请日:20040601

    专利权的终止

  • 2007-11-07

    授权

    授权

  • 2006-02-01

    实质审查的生效

    实质审查的生效

  • 2005-12-07

    公开

    公开

说明书

技术领域

本发明涉及一种可扩展标记语言XML(eXtensible Markup Language)键约束验证方法;尤其涉及一种面向XML模式(XML Schema)键约束的XML文档验证方法,属于数据管理技术领域。

背景技术

XML已经广泛应用于Internet上的数据交换。并且已经成为Internet上的数据表示和交换的事实标准。目前国内外的电信、金融、医疗、电子商务、新闻出版等应用领域越来越多的应用系统采用XML作为标准格式交换数据。

基于XML的数据交换过程中,XML数据不仅包括元素类型信息,还包括语义信息。由于XML模式(简称XML Schema)已经成为描述XML数据结构和约束的标准,并且XML Schema中支持XML的键约束,因此,基于XML的数据交换过程中,XML数据应该遵从XML Schema的要求,既要满足结构上的约束,又要满足语义上的约束。

目前大多数XML文档的验证解析器或工具还不能完全支持XML Schema规范中一致性约束的验证。

尽管XML Schema中的键约束定义已经给出,但是如何验证这些约束还是没有得到的问题,所以,建立有效的验证系统(Validator)面临着一些问题:

1、不同于关系数据库,XML键不是局部的,有可能遍布在整个文档中;

2、键可以在一个特定的上、下文环境中定义;

3、一个元素可以有多个键约束,或在文档中出现在不同的层次上。

一般来说,建立一个验证系统最简单的策略是使用SAX(Simple API forXML,XML简单应用程序接口)或DOM(Document Object Model,文档对象模型)开发,如Microsoft XML Parser 4.0(MSXML)、XML Schema Validator(XSV)等;但是这些系统并不能完全支持XML Schema中的键约束。

文献[XKvalidator:A constraint validator for XML,CIKM 2002]提出在解析XML文档时为所有定义的键建立键索引结构。在XML文档上使用一个SAX解析器和一组有限状态自动机(DFAs:Deterministic Finite Automata)经过一遍扫描可以创建索引;自动机可以识别一个XML键K的上下文(Q),目标节点(Q′)和键路径(P1,...,Pp)。自动机的创建与文档结构密切相关,如果文档结构改变,则需要重新创建或维护自动机,处理不够灵活。

文献[Tree Automata to Verify XML Key Constraints,WebDB03]利用树自动机的理论。树自动机(tree automata)可以很有效的描述结构化的约束。然而为了验证键约束,需要操作数据的值。对树自动机(tree automata)进行扩展,使用自底向上(bottom-up)的树变换器(tree transducer)解决了同时验证模式和键约束的问题;但是这种方法一次只能验证一个键。

从上面的分析可以看出,目前存在的相关XML键约束验证系统和工具,大多不能完全支持XML Schema中的键约束;即使对于少数支持XML Schema中的键约束的方法,也都需要研制开发专有的键约束验证系统,成本很高。

发明内容

本发明所要解决的技术问题在于:提供一种基于面向XML Schema键约束的XML文档验证方法,保证基于XML的数据交换过程中数据的正确性和完整性。

本发明的基于结构分析的可扩展标记语言键约束验证方法,包括如下步骤:

步骤一、根据输入的待验证的XML文档和键约束定义信息,创建XML文档的DOM解析树文件并进一部解析相应的键约束;

步骤二、抽取XML文档中的键值生成键值文档,并且在键值文档中创建文档验证所需要的辅助元素的信息;

步骤三、检查键值文档是否满足键值文档DTD,如果满足,则待验证的XML文档满足键约束;否则该待验证的XML文档不满足键约束。

本发明提出基于结构分析的XML键约束验证的方法,通过基于XPath的键值抽取,并根据键约束,自动将XML文档中的键值抽取出来,并按照键值文档生成规则创建键值文档;保证了任何具有结构验证的XML数据管理系统都可以通过使用本发明,将键约束自动转化为等价的结构验证来解决,整个转换过程完全自动化,不需要任何人工干预。

本发明可广泛应用于当前网络环境下各应用系统基于XML的数据交换过程,满足了Internet上各应用系统之间基于XML数据交换的需求,具有广阔的应用前景。

附图说明

图1是本发明的整体流程示意图;

图2是本发明的处理流程示意图;

图3是一个待验证的XML文档的部分数据,用树形表示。

图4是另一个待验证的XML文档的部分数据,用树形表示。

具体实施方式

本发明是针对当前网络环境下各应用系统基于XML的数据交换中保持数据语义正确性的需求,而提出的一种基于结构分析的XML键约束验证方法。本发明的技术方案的主要思想在于,将XML文档和键约束作为输入,用基于XPath的键值抽取技术创建键值文档,然后利用根据XML键定义形式而设计的键值文档DTD(文档类型定义,Document Type Definition)验证,分析输入的XML文档是否满足XML Schema键约束的要求。

本发明方法具体如下:

参见图1、2,根据XML Schema中键约束,利用XPath查询技术抽取XML文档中的键值,按照规则生成键值文档,并创建键值文档DTD(文档类型定义,Document Type Definition);然后,通过检查原XML文档的键值文档是否满足键值文档DTD来验证原XML文档是否满足XML Schema的键约束。

本发明利用键约束抽取XML文档中的键值,建立键值文档,从而巧妙地将键约束的验证问题转化为一个检查XML文档是否满足给定的DTD结构约束的问题;由于当前已经有成熟计算机数据处理技术可以支持DTD结构的约束检查,因此,只要XML键使用XPath表达,键约束的验证就可以通过XPath查询和结构约束的检查来完成。

由于检查键值文档是否满足键值文档DTD可以利用已有的结构约束的验证工具来完成,所以利用XPath查询技术抽取XML文档中的键值,并生成键值文档是本技术方案的关键问题。

如图1、图2所示,具体来说,本发明的技术方案包括如下步骤:

步骤一、根据输入的待验证的XML文档和键约束定义信息,创建XML文档的DOM(文档对象模型,Document Object Model)解析文件,并进一部解析相应的键约束;

步骤二、抽取XML文档中的键值生成键值文档,并且在键值文档中创建文档验证所需要的辅助元素的信息;

步骤三、检查键值文档是否满足键值文档DTD,如果满足,则待验证的XML文档满足键约束;否则该待验证的XML文档不满足键约束。

本发明的步骤一中,本领域技术人员完全可以采用通常的手段建立DOM解析树,例如:使用现有的XML解析器;而解析给定的键约束操作包括:分析每一个键约束,将其上下文、目标节点、键路径部分分别用XPath表示。

本发明所述步骤二中,具体可以为:在DOM树上用XPath查询处理每一个键,创建键值文档;并同时在键值文档中生成该键的辅助元素的信息。具体包括:找到所有的键约束中的上下文节点,对每一个上下文节点提取其每一个键路径中的键值;对每一个键值,抽取对应的目标节点,创建键值文档;同时生成验证所需的辅助元素节点。

本发明所述步骤二中,按照键值文档生成规则建立键值文档,具体包括:

假设键约束为:Ki=(C,(T,{P1,...,Pp))),其中,Ki表示一个键约束,C表示上下文,T表示选择器,Pj表示键路径,键路径可能有多条:1≤j≤p,j表示键路径的序号:

步骤200:创建空的键值文档,并在其中增加根元素XMLKeys,表示记录的是键约束的信息;然后,循环处理每一个键,生成每个键在键值文档中的对应部分;

步骤201、每出现一个键约束,在根元素中增加一个元素,其元素标签设为Key,此元素表示记录该键的信息,属性设为KID,表示键约束的处理顺序,属性的值是键的序号;

步骤202、执行该键约束中上下文节点路径部分(C部分)的XPath,如果非空,则在元素标签为Key的元素中增加一个元素,将该元素标签设为ContextNode,属性设为CID,属性的值属于执行XPath C返回的DOM树上相应的节点序号集,该序号集记为C_Set;

步骤203、对每一个C_Set中的值c(c表示一个上下文节点),抽取键路径部分每一个键路径的值;每处理一个键路径,在元素标签为ContextNode的元素中增加元素标签为Field的元素,该元素的一个属性记为Number,其值是键路径序号,元素的另一个属性记为Value,其值是此键路径的取值;

步骤204、抽取对应c、键路径序号为i的、键值为v的目标节点集,该目标节点集记为S_Set,对S_Set中每一个值s(目标节点)创建元素标签为Field的元素中的一个元素,该元素标签为Selector,元素标签为Selector的元素的值是s,即目标节点的元素序号。

对每一个C_Set中的值c获取XML文档中的辅助信息,包括如下步骤:

步骤210、计算ContextNode节点中所有Field元素具有相同Value属性值的目标节点集的交集;

步骤211、如果交集个数大于1,在当前处理的键Key元素中创建子元素Selector_ShareKeyValue,即该节点记录同一个上下文节点下,对该键中所有的键路径共享同一个键值的目标节点集,Selector_ShareKeyValue元素节点是验证文档是否符合键约束定义的辅助信息。

为记录交集中的元素,在Selector_ShareKeyValue中创建Intersection元素(该元素用于记录各键路径键值都相等的目标节点交集的相关信息),并且进一步在Intersection中创建F_path子元素(用于记录交集中键路径信息);F_path有两个属性:Number和Value,取值分别是键路径的序号,对应每一序号的相应键值。在Intersection元素中还要创建S_Node元素(用于表示目标节点的元素),用于记录当前交集中目标节点的元素序号值。

步骤212:如果交集个数小于1,则不进行任何处理,继续处理C_Set中下一个元素,直到处理完所有的元素。

待验证XML文档按照键值文档的上述生成规则建立键值文档,键值文档的内容是根据键的定义以及需要验证的XML文档内容确定的。

本发明所述的步骤三中,根据XML键约束的定义形式设计专用于验证的键值文档DTD如下所示:

<!DOCTYPE XMLKeys[

   <!ELEMENT Key(ContextNode+,Selector_ShareKeyValue*)>

   <!ATTLIST Key KID CDATA #REQUIRED>

   <!ELEMENT ContextNode(Field*>

   <!ATTLIST ContextNode CID CDATA #REQUIRED>

   <!ELEMENT Field(Selector+)>

   <!ATTLIST Field

        Number CDATA #REQUIRED

        Value CDATA #REQUIRED>

   <!ELEMENT Selector(#PCDATA)>

   <!ELEMENT Selector_ShareKeyValue(Intersection*)>

   <!ELEMENT Intersection(F_Path+,S_Node)>

   <!ELEMENT S_Node(#PCDATA)>

   <!ATTLIST F_Path

        Number CDATA #REQUIRED

        Value CDATA #REQUIRED>

]>

该DTD表示建立的键值文档所遵从的模式信息,对可以出现在键值文档中的内容进行了规定。如果键值文档符合该DTD的结构约束,则是合法的XML文档,说明原XML文档满足键约束,否则说明原XML文档不满足键约束。

其中的Selector_ShareKeyValue元素节点是验证文档是否符合键约束的辅助信息。通过计算ContextNode节点中的相关数据,该节点记录同一个上下文节点下,对所有的键路径共享同一个键值的目标节点集。

本发明所述的步骤三中,对于文档的结构约束的检查是现有技术已经解决的问题,例如XML分析器都有一组自定义的特性或属性用于控制功能。可以设定属性的值在解析器中打开DTD验证功能,以判断实例是否符合DTD中所描述的所有约束,验证过程可以检查实例中的所有的元素和属性是否符合相应的数据类型定义。这也是本发明将键约束转化成DTD检验问题的原因。

根据键值文档DTD检查原XML文档的键值文档是否有效。利用现有技术可以实现检查XML文档是否满足DTD的结构约束,如果不满足,源XML文档不满足给定的键约束;否则,源XML文档是满足键约束的。

目前已经有XML解析器支持用DTD验证XML文档实例是否有效,因此任何具有结构验证的XML数据管理系统,都可以通过使用本技术,将键约束自动转化为等价的结构验证,从而达到快速验证XML文档键约束的目的。、下面通过两个具体的实例,进一步说明本发明的技术方案。

图3是一个需要进行验证的XML文档,用树形结构表示,假定文档需遵从的键约束如下:

KS1:(/,(./corporation,{./@ID}))

KS2:(/corporation,(./section,{./name}))

KS3:(/,(//mgr,{./name,./tel}))

按照规则,从原XML文档中通过执行键约束中对应的XPath抽取每一个键的相关部分,构建键值文档的主要内容如下:

<XMLKeys> <Key KID=1>  <ContextNode CID=1>    <Field Number=1 Value=06>        <Selector>2</Selector>    </Field>    <Field Number=1 Value=32>        <Selector>80</Selector>    </Field>  </ContextNode> </Key> <Key KID=2>  <ContextNode CID=2>    <Field Number=1 Value=“CS”>        <Selector>7</Selector>    </Field>    <Field Number=1 Value=“Bio”>        <Selector>15</Selector>    </Field>  </ContextNode>  <ContextNode CID=80>    <Field Number=1 Value=”Geo”>        <Selector>85</Selector>    </Field>  </ContextNode> </Key>  <Key KID=3>   <ContextNode  CID=1>     <Field Number=1 Value=“Tom”>         <Selector>4</Selector>         <Selector>87</Selector>     </Field>     <Field Number=1 Value=“Lee”>         <Selector>9</Selector>     </Field>     <Field Number=1 Value=“Rose”>         <Selector>17</Selector>     </Field>     <Field Number=2 Value=3001>         <Selector>4</Selector>     </Field>     <Field Number=2 Value=6600>         <Selector>9</Selector>         <Selector>17</Selector>     </Field>     <Field Number=2 Value=5000>         <Selector>87</Selector>     </Field>   </ContextNode>  </Key> </XMLKeys>

利用现有的具有结构验证功能的XML分析器对生成的键值文档用键值文档DTD进行验证,上述XML文档符合DTD结构,所以原XML文档满足XML键约束。

如图4所示是另一个XML文档的部分数据的例子,按照键值文档生成规则,键值文档中包括下面的一部分内容:

  <Key KID=3>   <ContextNode CID=1>
    <Field Number=1 Value=“Tom”>      <Selector>4</Selector>      <Selector>87</Selector>  </Field>  <Field Number=1 Value=“Lee”>     <Selector>9</Selector>  </Field>  <Field Number=1 Value=“Rose”>     <Selector>17</Selector>  </Field>  <Field Number=2 Value=3001>     <Selector>4</Selector>     <Selector>87</Selector>  </Field>  <Field Number=2 Value=6600>     <Selector>9</Selector>     <Selector>17</Selector>  </Field></ContextNode><Selector ShareKeyValue>   <Intersection>       <F_path Number=1 Value=”Tom”/>       <F_path Number=2 Value=”3001”/>       <S_Node>4</S_Node>       <S_Node>87</S_Node>  </Intersection></Selector_ShareKeyValue></Key>

辅助信息<Selector_ShareKeyValue>元素中,intersection元素有多个S_Node子元素,即4和87节点每一条键路径都共享同样的键值,因此,键值文档不符合键值文档DTD的约束。从而不符合键约束的定义。所以得出结论:XML文档不满足K3约束。

本发明用于键约束验证的结构验证机制,保证了任何具有结构验证的XML数据管理系统,都可以通过使用本发明,将键约束自动转化为等价的结构验证来解决。从而达到快速验证XML文档键约束的目的。

最后所应说明的是:以上实施例仅用以说明而非限制本发明的技术方案,尽管参照上述实施例对本发明进行了详细说明,本领域的普通技术人员应当理解:依然可以对本发明进行修改或者等同替换,而不脱离本发明的精神和范围的任何修改或局部替换,其均应涵盖在本发明的权利要求范围当中。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号