一种基于路径信息的可扩展标记语言祖先后代索引方法,包括以下步骤:步骤一:解析XML文档;步骤二:建立B+树索引;步骤三:使用B+树索引进行祖先后代关系查询。本发明专利技术是一个实用的索引,基于计算机数据库领域内的B+树结构,该结构保证了在绝大多数情况下,采用索引都会比不采用索引查询效率有很大的提高,该索引无论对于基于关系数据库的XML数据库管理系统还是基于Native存储的XML数据库管理系统,都易于实现;该结构实现简单,只需要进行一次节点扫描,对于文档的数据是否有数据倾斜状况,都有很好的性能;还可以很好的处理A1//A2//…//An这类复杂的路径查询,避免了把长路径分成若干个祖先后代对的做法,有效的实现了对索引节点一次扫描即可得到查询结果。
【技术实现步骤摘要】
本专利技术属于计算机数据库
,特别涉及一种XML(可扩展标记语言, Extensible Markup Language)数据索引方法,具体涉及一种基于路径信息来实现XML祖先 后代结构关系的数据索引方法。
技术介绍
随着网络数据的海量增长,网络数据的格式越来越多样,由于XML具有良好的可 扩展性以及自描述性,因此在当前hternet上,XML已经成为事实上的数据表示和数据交 换标准。在具体应用中,越来越多的应用系统采用XML标准格式来发表和交换数据。对于 XML查询,现在已经有了标准的XML查询语言XPath和XQuery,为了加速XPath和XQuery 查询,需要对XML数据建立索引。XML文档是一个树形结构的文档,在XPath和XQuery查询中,一个比较困难的问题 就是解决XML文档中祖先后代关系的结构查询。如下面的查询表达式book//editor直观的办法是对于book标签节点和editor标签节点分别建立对应的一个链表, 然后对这两个链表中的元素进行嵌套循环一一匹配,这样的算法的复杂度为0(N2)。一个更为精巧和典型的解决办法是采用Siurug Al-Khalifa等人提出的 Structural Joins (结构连接)办法来完成。结构连接算法对每一个XML元素进行编码,其 编码形式为(Docld, StartPos, EndPos, LevelNum)。对于两个元素节点 Elementl (DocId 1, StartPos 1, EndPos 1, LevelNum 1)禾口 Element2 (Docld 2, StartPos 2, EndPos2, LevelNum2)。Elementl 和 Elementl 满足祖先后代关系当且仅当DocIdl = DocId2, StartPosl < StartPos2,EndPosl > EndPos2。在结果连接算法中,基本想法是对两个标签 节点链表按照(Docld,Startpos)进行排序,算法采用一个栈数据结构保留中间结果。之后又相继提出很多算法来解决祖先后代结构连接问题,不过后来算法的核心思 想都是在Siurug Al-Khalifa等人提出一个栈加上XML元素标签链表的基础上加以改进。上面的各种算法在进行祖先后代关系查询的时候,都需要为祖先标签节点和后代 标签节点建立一个链表,并且通常需要遍历这两个链表。另外,对于更加复杂的查询诸如 A1ZVA2ZVAf An之类,结构连接算法通常是把它们分成A1//A2,A2//A3这样的祖先后代对, 然后对这些运算结果进一步进行连接操作,效率比较低。
技术实现思路
本专利技术也是为了解决XML查询语言XPath和XQuery中祖先后代关系查询而提出, 不同于那些传统算法,本专利技术基于XML解析中产生的路径信息来进行祖先后代关系查询。本专利技术采用的技术方案是设计并实现了一个新的XML结构信息索引XStrctldx。 算法对解析过的XML文档每个节点存储为(Key,Value)形式,其中Key为XML文档的节点 标签,Value包含了当前XML文档节点的从父节点到根节点的路径。对于这些XML文档节点,在Key上面建立B+树索引,在查询过程中,对于指定的标签,只需要判断其对应的Value 中是否含有满足条件的祖先节点即可。该索引主体采用B+树数据结构,既可以很容易的嵌 入到关系型数据库中,又可以在Native类型的XML数据库中使用。本专利技术所需要存储的具体节点信息如图2所示,具体步骤如下步骤1解析XML文档本专利技术首先需要对XML文档进行解析,得到文档节点的具体信息。对于XML文档 解析有两种方法,DOM解析与SAX解析。DOM是对XML文档在内存中建立树结构,这对系统 的资源消耗很大,一般说来,所建立的树结构占用的内存大小可能是文档本身的几倍到数 十倍。对于大型文档可能根本没法应用DOM解析。因此我们采用SAX解析。在SAX解析过程中,我们使用一个栈结构。在SAX解析中,会产生以下类型事件①文档开始;②遇到元素节点开始标签;③遇到元素节点结束标签;④文档结束。每当遇到元素节点开始标签,即判断是否对该标签进行字典映射,也就是说把标 签的字符流转化成对应的数字ID。如果需要进行映射变换,即把该标签转化为数字ID,并 存储到系统的数据字典中,然后把该数字ID入栈;如果不需要进行映射变换,直接把该数 字入栈,并且对该节点形成(Key,ValUe)对。其中Key即为该元素节点对应的数字ID,Value 是一个结构体,Value结构体包括当前节点从其父节点到根节点的路径信息,以及指向该节 点具体存储位置的指针。每当遇到元素节点的结束标签,即判断该标签与栈顶元素是否是同一元素节点, 如果相同,则把栈顶元素弹出,否则不做操作。由于 XML 文档的嵌套性质,即只有 <ElementlXElement2>......</Element2></Elementl〉这种形式的文档,没有 <ElementlXElement2>......</ElementlX/Element2> 形式的文档,因此,在我们使用SAX文档时,当解析某一个元素节点的时候,在从栈顶到栈底 的元素,正好对应了该元素从父节点到根节点元素。(因为在遇到开始标签的时候压栈,在 遇到结束标签的时候弹栈,故有此特性)。在文档结束的时候,文档所有的元素节点解析完毕,每个元素节点都形成了我们 需要的(Key, Value)对。步骤2建立B+树索引对于步骤1解析出来的每个(Key,Value)对,其实就对应了 XML文档中的每个元 素节点,,需要把这些元素节点用B+树索引起来。如果该算法应用于关系数据库环境,那么我们可以把我们的(Key,Value)对变成 关系数据库系统中的表结构。该表有三个字段,其模式为(CurrentN0de,Path,XP0inter), CurrentNode字段对应于我们(Key,Value)中的Key,PathInfo和XPointer组合对应于我 们(Key,Value)对中的Value结构体,其中I^thhf0为该节点的父亲节点到根节点的路径 信息,XPointer为一个指针,指向该节点所存储的具体物理地址。B+树索引的Key即建立 在(Key, Value)对中Key字段上。如果该算法应用于Native XML数据库环境,我们的每个(Key,Value)对在存储的 时候要采用B+树来进行索引,其中Key对应于B+树中的索引键值,所对应的值即Value结 构体,Value结构体包括每个元素节点的从父亲节点到根节点的路径信息以及指向该节点 所存储的具体物理地址信息。无论是使用关系型数据库来管理XML数据,还是采用Native系统来管理XML数 据,我们的索引都可以应用,并且整体都为B+树作为索引。需要注意的是,虽然我们把步骤1和步骤2分开来写,但是在实际实现中,每解析 一个元素节点,相应的就把这个节点按照通用B+树算法插入到B+树当中,在文档解析完 成,一个完整的B+树索引也就建立完毕。按照B+树通用算法,我们的(Key,ValUe)对是聚 簇存储的,本文档来自技高网...
【技术保护点】
一种基于路径信息的可扩展标记语言祖先后代索引方法,其特征在于包括以下步骤:步骤一:解析XML文档采用SAX解析,使用一个栈结构,在SAX解析中会产生以下类型事件:①文档开始;②遇到元素节点开始标签;③遇到元素节点结束标签;④文档结束;每当遇到元素节点开始标签,即判断是否对该标签进行字典映射,如需要进行映射变换,则将标签的字符流转化成对应的数字ID,并存储到系统的数据字典中,然后把该数字ID入栈;如不需要进行映射变换,直接把该数字入栈,并且对该节点形成(Key,Value)对;每当遇到元素节点的结束标签,即判断该标签与栈顶元素是否是同一元素节点,如果相同,则把栈顶元素弹出,否则不操作;在文档结束的时候,文档所有元素节点解析完毕,每个元素节点都形成了(Key,Value)对;步骤二:建立B+树索引存储步骤一解析出来的每个(Key,Value)对,若该方法应用于关系数据库环境,则将(Key,Value)对变成关系数据库系统中的表结构,该表有三个字段,其模式为(CurrentNode,Path,XPointer),CurrentNode字段对应于(Key,Value)对中的Key,PathInfo和XPointer组合对应于(Key,Value)对中的Value结构体,其中PathInfo为该节点的父亲节点到根节点的路径信息,XPointer为一个指针,指向该节点所存储的具体物理地址;若该方法应用于Native XML数据库环境,存储每个(Key,Value)对的时候要采用B+树算法来进行存储,其中Key对应于B+树中的索引键值,所对应的值即Value结构体,Value结构体包括每个元素节点从父亲节点到根节点的路径信息以及指向该节点所存储的具体物理地址信息;步骤三:使用B+树索引进行祖先后代关系查询对于A//D这类祖先后代关系查询,先通过B+树找到所有标签名称是D的节点,然后对于每个节点,依次检索该节点的Value结构,看看Value结构中的路径信息是否包含A标签,如果该路径信息包含了A标签,则说明这个D节点满足查询条件,通过Value结构中的指针找到该D节点具体的物理存储地址,找到查询结果;对于A↓[1]//A↓[2]//…//A↓[n]这类复杂的路径查询,先通过步骤2中的B+树找到所有标签名称是An的节点,然后对于这些节点,依次检索该节点的Value结构,对于Value结构中的路径信息,与路径查询中的A↓[1]//A↓[2]//…//A↓[n-1]进行匹配,即判断A↓[1]//A↓[2]//…//A↓[n-1]是否是Value结构中的路径的有序子集。...
【技术特征摘要】
【专利技术属性】
技术研发人员:张恩德,赵相国,刘辉林,孙永佼,
申请(专利权)人:东北大学,
类型:发明
国别省市:89
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。