CN101201834A - 基于文档类型定义的xml数据流关键字搜索方法 - Google Patents
基于文档类型定义的xml数据流关键字搜索方法 Download PDFInfo
- Publication number
- CN101201834A CN101201834A CNA2007100477063A CN200710047706A CN101201834A CN 101201834 A CN101201834 A CN 101201834A CN A2007100477063 A CNA2007100477063 A CN A2007100477063A CN 200710047706 A CN200710047706 A CN 200710047706A CN 101201834 A CN101201834 A CN 101201834A
- Authority
- CN
- China
- Prior art keywords
- xml
- mislca
- query
- node
- key word
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明属于数据管理技术领域,具体为一种基于文档类型定义的XML数据流关键字搜索方法。本发明包括:将关键字搜索的语义定义为语义独立的最小最低公共祖先,将查询结果定义为语义独立的最小连通树,从而能够有效处理XML数据流;对纯粹关键字搜索语法进行简单扩充,每一个搜索项由一个关键字和包含该关键字的标签组成;基于文档类型定义,将关键字搜索细化为查询图,在查询图的基础上构造支持正向状态转移和状态回溯的查询状态机,对XML数据流和返回结果缓存进行单遍扫描和处理。本发明能够有效支持XML格式数据流的关键字搜索,搜索语法简单、搜索效率高,可应用于互联网内容监测、互联网信息发布与订阅、Web服务消息过滤等领域。
Description
技术领域
本发明属于数据管理技术领域,具体涉及一种利用文档类型定义(DTD),对可扩充标记语言(XML)数据流进行关键字搜索的方法。
背景技术
人们在20世纪90年代初,提出了数据流处理模型。与传统数据库技术不同,它的特点是:数据是在线、实时到达的,到达次序不受应用控制;查询是持续的;由于数据流是无限的,将到达的数据流存储在本地后再进行处理是不现实的。加州大学伯克利分校的“Telegraph”[16,17],斯坦福大学的“STREAM”[18]项目等项目的研究重点是关系型数据流管理技术(也称为基于元组的数据流)。如今,XML已经成为Web上和企业间的信息描述和信息交换的标准。不同于关系型数据流,XML流是自描述的,内容与结构混杂在一起,具有层次、嵌套的结构,其数据是有序的,通常以记号(token)的方式进行处理。因此,XML流处理技术引起广泛的研究兴趣。
迄今为止,几乎所有关于XML流处理的研究[1,2,3]都采用XPath[4]或XQuery[5]这样的完全结构化的查询语言。这类结构化查询语言的优点是能够表达准确用户的查询语义和想要的返回结果,但是,对于一般用户(尤其是Web用户)而言过于复杂,难以学习。即使用户完全掌握了查询语言,由于不了解XML流背后的结构,也难以写出正确的查询。关键字搜索广泛应用于信息检索领域,取得了巨大的成功。其优点是为用户提供了友好的搜索界面,已经被广泛接受,并且用户不需要了解XML的结构。然而,从另一方面讲,由于缺乏对XML文档结构的了解以及过于简单的搜索界面,会带来一些严重的缺点:首先,利用纯粹的关键字难以甚至不可能准确地表达用户的查询语义;其次,用户不能说明要返回的XML片断是什么。
XML文档或XML数据库上的关键字搜索是近年来数据管理领域中的一个热点[7,8,9,10,11,12],比较著名的有XKeyword[10]、XKSearch [7]、XSearch[8]、XRANK[9]、XSeek[12]等。但是,这些工作与本发明有两点重要区别。一是本发明处理的是XML数据流,是一个新的研究问题。这与XML文档或XML数据库的查询处理方法有着根本区别:XML数据库中,XML数据是持久存储的,而查询是即时发出的;在查询时可以多次扫描XML文档,对其进行索引和查询优化。而在XML流中,查询是持续的,而数据流是无限的、实时的、以预先无法知道的顺序到达,因而只能单遍扫描、并在少量的内存中加以处理。第二个主要区别是关于关键字的搜索语义,即到底哪部分XML文档片段是用户真正感兴趣的内容。这是进行关键字搜索的一个根本问题。目前,XML文档或XML数据库搜索的相关工作大都认为,最小最低公共祖先(SLCA)是对用户有意义的XML片段,例如XKSearch[7]开发了SE和ILE算法来计算SLCA。Li等人[6]将关键字搜索的语义定义为有意义的最低公共祖先(Meaningful Lowest CommonAncestor),其本质含义于SLCA相同。Vagelis等人[11]给出了计算包含关键字的结点的最小连通树的方法。然而,对于递归文档和DTD中含有部分共享元素的情况下,类似SLCA的概念会丢失部分对用户有意义的XML片段。因此,本发明定义了新的概念:语义独立的最小最低公共祖先(MISLCA),将其作为XML关键字搜索的语义,并用语义独立的最小连通树(MIMCT)作为查询结果返回给用户。
到目前为止,涉及到XML流上的关键字查询只有参考文献[19],它没有考虑如何利用DTD所蕴含的相关信息。但是,在很多XML流的应用中,例如网站的个性化推荐服务等,服务提供商预先知道XML文档的DTD。而利用XML流的DTD,可以明显提高查询处理的性能。与参考文献[19]相比,本发明除了在搜索语义上与之不同之外(它使用的是最小最低公共祖先),另一点是首次考虑在已知DTD的情况下,如何在XML流上进行高效的关键字搜索。
发明内容
本发明的目的在于提出一种能够利用DTD有效实现针对XML数据流的关键字搜索方法,以便能在单遍扫描XML数据流的情况下处理关键字搜索,同时保持较低的内存耗费、有效进行返回结果的缓存管理。
本发明提出的利用DTD实现XML数据流的关键字搜索方法是基于查询自动机的方法,可以记为XDSearch。方法的具体步骤如下:
(1)将用户提交的关键字搜索定义为XML搜索项的集合,每一个XML搜索项由一个关键字和包含该关键字的标签组成;将关键字搜索的语义定义为语义独立的最小最低公共祖先,记为MISLCA,将查询结果定义为语义独立的最小连通树,记为MIMCT;从而为用户提供友好搜索界面;
(2)将XML数据流的文档类型构造为一个简化DTD图;
(3)将用户提交的关键字和XML数据流的简化DTD图结合在一起,找出从DTD图的根到关键字的所有可能的查询路径,进而通过共享所有可能查询路径的前缀,构造关键字的查询图;
(4)在查询图的基础上构造支持正向状态转移和状态回溯的查询状态机,利用查询状态机,对XML数据流和返回结果的缓存进行单遍扫描和查询处理;
(5)为了进一步提高系统性能,定义查询状态机的最终接受状态,在遇到最终接受状态时,状态机停止执行。
下面对具体内容给予详细描述:
1.友好的搜索界面
当前,XML文档的关键字搜索界面主要是输入一组关键字(当前研究将各个关键字之间的关系默认为″与″),我们将之称为纯关键字搜索。例如,对于图1所示的XML文档片段,如果用户要搜索Kasitij Sheth和Amit Sheth两个人共同发表的文章题目,则可输入关键字″Kasitij Sheth″、″Amit Sheth″和″title″,其中关键字可以是标签包含的值(如″Kasitij Sheth″),也可以是标签名(如″title″)。这种纯关键字搜索广泛应用于信息检索领域,取得了巨大的成功。其优点是为用户提供了友好的搜索界面,并且用户不需要了解XML的结构。然而,从另一方面讲,由于缺乏对XML文档结构的了解以及过于简单的搜索界面,用户难以甚至不可能准确地表达用户的查询语义,例如,同样的″Kasitij Sheth″和″Amit Sheth″不仅可能出现在作者名中,也可能出现在文章名、地址名等中,这时,用户可能搜索到很多无关的结果。本发明对纯关键字搜索的语法进行简单扩充。除了允许用户输入关键字,还允许用户选择XML标签(由服务器方提供相应的标签信息)。本发明将“XML标签-关键字”称为搜索项。在一个搜索项中,标签直接包含关键字,可能出现在XML文档中。用户的搜索由一系列搜索项组成。下面给出相关定义。
定义1.搜索项(Search Term,简称为ST)。一个搜索项t是一个XML文档标签和它包含的关键字组成的对,表示为t=s∶w,其中,s表示XML文档标签,w表示标签s包含的关键字。关键字可以为空。用户提交的查询Q(S)是搜索项的集合S=t1,t2,…,tn。
例如,针对图1,用户若要查询″Kasitij Sheth″和″Amit Sheth″共同发表的文章的″title″,可以给出查询Q1(S),包含搜索项t1,t2,t3。其中,t1=name:″Kasitij Sheth″,t2=name:″Amit Sheth″,t3=title。
2.定义关键字搜索语义和返回结果
XML关键字搜索的一个核心问题是XML中哪些部分是用户感兴趣的数据,即确定与用户搜索语义最密切相关的XML片段,避免向用户返回大量的无关结果。当前的很多相关研究将XML文档看作一颗树,以所有关键字的最小公共祖先(LCA)为基础,来确定XML关键字搜索的语义。例如通常将XML关键字搜索问题归结为最小最低公共祖先(SLCA)的查找,将包含关键字的结点的最小连通树作为对用户有意义的返回结果。本发明提出的语义独立的最小最低公共祖先(MISLCA)和语义独立的最小连通树(MIMCT)是以它们为基础的,因此,下面首先形式化地定义相关基本概念。
定义2.后裔/自身关系(Descendant-Or-Self)。给定一颗XML树T,V表示树中所有结点的集合,nd,na∈V,如果nd是na的后裔或等于na,称为nd与na具有后裔或自身关系,记为nd≤na,如果nd≠na,则记为nd<na。
定义3.公共祖先(Common Ancestor,简称为CA)。给定一颗XML树T,V表示树中所有结点的集合,对于n1,…,nk∈V,若nca∈V是n1,…,nk的CA,当且仅当(n1≤nca)∧…∧(nk≤nca)。这时,nca记为CA(n1,…,nk)。
定义4.最低公共祖先(Lowest Common Ancestor,简称为LCA)。给定一颗XML树T,V表示树中所有结点的集合,对于n1,…,nk∈V,若nlca∈V是n1,…,nk的LCA,记为LCA(n1,…,nk),当且仅当
(1)nlca=CA(n1,…,nk),并且
(2) n′∈V(n′≠nlca),如果n′=CA(n1,…,nk),则nlca<n′。
定义5.最小连通树(Minimum Connecting Tree,MCT)。给定一颗XML树T(V表示树中所有结点的集合)以及一系列结点n1,…,nk∈V,n1,…,nk的最小连通树Tmct是指连接结点n1,…,nk的T的最小子树,子树Tmct的根是n1,…,nk的LCA,表示为MCT(n1,…,nk)。
在XML文档的关键字搜索中,每一个关键字会在文档中有多个实例。换言之,文档中会有多个XML片段包含,因此,下面给出关键字的最低公共祖先的定义。
定义6.关键字的最低公共祖先(Lowest Common Ancestor of Keywords, 简称为LCAK)。给定一颗XML树T和一个关键字列表w1,…,wk。V表示树中所有结点的集合。假定用Si表示对应关键字wi的结点集合,Si∈V,即Si中元素的标记直接包含关键字wi。对于S1,…,Sk以及一个结点nlca∈V,如果存在n1∈w1,…,nk∈wk,使得nlca=LCA(n1,…,nk),则nlca∈LCA(S1,…,Sk)。
后面提到的最低公共祖先等概念,如不特别指明,都是指关键字的最低公共祖先。下面在定义6的基础上给出最小最低公共祖先的定义。
定义7.最小最低公共祖先(Smallest Lowest Common Ancestor of Keywords,简称为SLCA)。S1,…,Sk的所有SLCA记为SLCA(S1,…,Sk)。如果XML树中的一个结点nlca是S1,…,Sk的SLCA当且仅当:
(1)nslca∈LCA(S1,…,Sk),并且
(1) n′∈LCA(S1,…,Sk)(n′≠nslca),则nslca<n′。
直观地讲,关键字w1,…,wk的SLCA需要满足下面两个条件:以SLCA为根的子树包含w1,…,wk对应的结点;不存在上面的SLCA的子孙结点同样包含所有的关键字w1,…,wk。然而,在将SLCA应用于递归XML文档或者XML文档中含有某些共享元素的时候,则会丢失某些有用的信息。例如,对于图2所示的XML片段,如果用户给出查询Q2(S),包含搜索项t1,t2,t3。其中,t1=name:″a″,t2=name:″b″,t3=title,那么,用户想要得到的XML片段可能包括:1)作者″a″和作者″b″作为合作作者发表的文章″t2″;2)还应该包括被文章″t2″引用的文章″t3″,其作者同样是″a″和″b″;3)还可能是″a″和″b″共同作为编辑的会议″t1″。但是,根据SLCA,文章″t2″和会议″t1″的信息将会丢失。其原因是在DTD中,″paper″和被其引用的″paper″之间存在环路(即递归),″conf″和″paper″则共享了元素″name″和″title″。在递归存在的情况下,例如元素″paper″引用″paper″,虽然存在后裔关系,但它们含有同样类型、相互独立的信息片段;在某些元素被共享的时候,例如″title″被″conf″和″paper″所共享,″name″被″editor″和″author″所共享,相互独立的XML片段的最低公共祖先(″conf″和″paper″)之间存在后裔关系。但这些都可能是用户所要的结果。因此,本发明对SLCA的概念进行扩充,给出下面的定义:
定义8.语义独立的最小最低公共祖先(Meaning Independent Smallest LowestCommon Ancestor,MISLCA)。给定一颗XML树T,假定v1,…vk是S1,…,Sk的所有MISLCA,记为MISLCA(S1,…,Sk)。开始MISLCA(S1,…,Sk)为空,那么,
(1)SLCA(S1,…,Sk)都是S1,…,Sk的MISLCA,即MISLCA(S1,…,Sk)=MISLCA(S1,…,Sk)+SLCA(S1,…,Sk)。
(2)另外,如果nmislca是S1,…,Sk的MISLCA,即MISLCA(S1,…,Sk)=MISLCA(S1,…,Sk)+nmislca,当且仅当
(a)nmislca∈ LCA(S1,…,Sk)-MISLCA(S1,…,Sk),并且
(b) n′∈LCA(S1,…,Sk)-MISLCA(S1,…,Sk)(n′≠nmislca),则nmislca<n′,并且,
(c)以nmislca为根的最小连通树与SLCA(S1,…,Sk)为根的最小连通树的交集为空。
(3)重复执行步骤(2),直到没有nmislca满足2中的条件。
自然地,依据MISLCA来定义关键字搜索的返回结果。
定义9.语义独立的最小连通树(Meaning Independent Minimum Connecting Tree,MIMCT).给定一颗XML树T(V表示树中所有结点的集合)以及一个关键字列表w1,…,wk,w1,…,wk的最小连通树TMIMCT是指以该关键字列表的MISLCA为根的、连接MISLCA包含的所有关键字的最小子树。
针对图2,根据定义8和定义9可以看出;关键字″a″、″b″和title的MISLCA分别是结点″conf″、″conf″的孩子结点″paper″、和″cite″的孩子结点″paper″;返回结果分别为以上面几个结点为根的最小连通树,即在图2中用曲线框起来的子树。
3.构造关键字的查询图
XML流的处理时间包括XML文档解析时间、查询匹配时间和缓存管理时间。DTD描述了XML文档的相关结构和语义信息。对于关键字搜索,如果不利用DTD的相关信息,由于不知道XML文档的哪些部分与关键字相关,就必须对整个文档进行解析和查询处理,这势必影响系统的性能。而通过DTD可以细化关键字查询,将XML文档解析和关键字查询匹配限定于只与关键字相关的XML片段,而略去无关的部分。这不仅加速了XML文档的解析时间,也提高了XML流与关键字之间的查询匹配的性能.
定义10.简化DTD可以看作一个有根的有向图SDG=(V,E),称为简化DTD图(Simplified DTD Graph)。其中,V表示有向图的所有结点构成的集合,EV×V是连接结点的边。
(1)r∈V是DTD图指定的根。对于任一结点v∈V,都存在惟一的从r到v的有向路径。
(2)结点v∈V对应元素或属性,边e∈E表示结点之间的包含(父子)关系。结点的标签名是元素或属性的名字。
简化DTD略去了DTD中的部分语义信息,例如一对多关系(“*”操作符)、强制关系(“#”操作符)、可选关系(“?”)操作符等。其原因是,在这里只需关注从DTD图的根到包含关键字的标签之间可能存在的路径。图1所示的XML文档的DTD如图3所示。其中。圆圈表示元素或属性,箭头表示包含关系(也称父子关系)。从图中可以看书,元素″title″是″conf″和″paper″的共同孩子,即是″conf″和″paper″的共享元素;″paper″通过″cite″元素包含自身,意味着递归关系,在图中表示为一个环路。
下面说明通过XML文档的DTD和关键字来构造查询图的方法。
给定一个输入XML树T的DTD,以及一个关键字查询Q(S)。Q(S)包含的搜索项为t1,t2,t3…tn,搜索项中的关键字为w1,…,wn,包含关键字的标签为si,…,sm(m≤n,因为多个关键字可能属于同一个标签)。构造查询图的步骤如下:
(1)构造给定DTD的简化DTD图SDG。
(2)V是SDG中的结点集合,r∈V是SDG的根。对于每一个si∈V,可以找出从r到si的惟一有向路径Pi,从而得到一个路径集合P=P1,…,Pm。然后将每一个关键字w连接到路径中包含它的标签上。例如,对于Q2(S)(t1:=name:″Kasitij Sheth″,t2=name:″AmitSheth″,t3=title)和图3的SDG,可以得到如图4所示的路径集合。
(3)对每一个路径Pi∈P,通过共享它们的前缀将它们组合在一起,即可以得到查询图。例如,将图4所示的路径集合通过前缀共享结合在一起,得到的查询图如图5所示。
现在,形式化地给出查询图(Query Graph,简称为QG)的定义。
定义11:查询图QG是一个9元组QG=(V’,E’,∑’,λ’,η,ρ’,root’,S’,W)
(1)V’表示结点的有限集合。
(2)∑’表示结点标签的有限集合。
(3)λ’:V’→∑是标签函数;λ(n)返回结点n的标签名字。
(4)ρ’:V’→∑’∪ε是父亲函数,ρ’(n)返回n的父亲结点.
(5)root’∈V’是G’的根.
(6)W=w1,…,wn表示关键字列表.
(7)S’=s1,…,sm是直接包含W的结点.
然后,在查询图QG中,对于包含关键字列表W=w1,…,wn的结点S’=s1,…,sm,计算出所有的MISLCA和MIMCT。
如图5所示,关键字″Kasitij Sheth″、″Amit Sheth″、″title″的MISLCA分别是结点″conf″和″paper″,用带阴影的方框表示;它们的MIMCT是分别以″conf″和″paper″为根的包含所有关键字的最小连通树,在图中用曲线框起来。这样,通过将关键字细化为查询图,关键字搜索与XML流的匹配就转化为查询图与XML流的匹配。存在下面给出的定理;
定理1.查询图QG是简化DTD图SDG=(V,E)的同根子图,其中,G’G,V’V,并且E’E ∩(V’×V’)。
这个定理是很直观的,我们在此略去相关证明。
定理2.给定一个输入XML树T和一个关键字列表W=w1,…,wk,其中,VT表示T中的结点集合,S=s1,…,sk是包含关键字的结点。假定XML树T的简化DTD是SDG,并且由关键字W和SDG生成的查询图是QG。那么,如果XML树T与QG匹配,则与关键字W匹配,并且W在QG上的MISLCA对应于W在XML树T上的MISLCA。
证明:如果XML树T与QG匹配,那么意味着它T中的一颗子树T1符合QG中的某个语义独立最小连通树的模式T1’.也就可以推出,对于关键字W中的任一关键字wi∈W,sj是包含wi的标签,必然存在T中的一个结点与sj匹配(即标签名相同),因而,XML树T必与关键字W匹配.
另外,子树T1的根r1是包含关键字标签的s1,…,sk的公共祖先,r1对应于QG的子树T1’的根r1’(即r1的标签名与r1’的标签名相同)。我们知道,r1’是QG上s1,…,sk的MISLCA。倘若在T上,r1不是s1,…,sk的MISLCA,那么在T上必然存在另一个结点v是s1,…,sk的MISLCA。由于XML树T是符合SDG的,并且根据QG的生成算法可知,QG包含从根到所有关键字的可能路径,因而v在QG中必然存在一个对应结点v’,这与r1’是QG上s1,…,sk的MISLCA相矛盾。
4.查询状态机的构造
为了处理XML流,本发明在查询图的基础上构造一个自动机,称为查询状态机。自动机是处理XML流的一种自然、优雅的方式。系统接受XML流的SAX事件,依据查询状态机的状态驱动,来计算关键字搜索的答案。SAX解析器对输入XML流进行解析后产生SAX事件,并转换为(标签名,类型),类型如open和close。查询状态机的驱动方式包括正向转移和回溯两种,因而可以单遍处理XML流。
下面给出查询状态机的定义,它是从查询图构得来的。
定义12:查询状态机(Query State Machine,QSM)是根据查询图G’(V’,E’,∑’,λ’,η’,ρ’,root’,S’,W)构造的元组QSM(Q,r,q0,F,I,δs,δe,∑,λ,ρ,S),其中,
(1)Q是有限状态标识符,包括q0和对应于G’中结点V’的状态。
(2)q0是QSM的初始状态。
(3)r是Q的一个成员,对应于G’中的root’。
(4)F是Q的一个子集,表示QSM的接受状态,对应于G’中的MISLCA。
(5)I是输入事件(tagName,type),其中tagName表示结点测试名,type表示事件类型,包括startElement、closeElement等。
(6)δs和δe表示转移函数,分别对应于startElement和endElement事件。这些转移函数计算当前状态q的下一个状态q’(q称为q’的父状态,q’称为q的孩子状态)。
(7)∑表示有限输入符号,对应于G’中的∑’。
(8)λ:Q-{q0}→∑是名字函数,返回状态的标签名。
(9)ρ:Q →∑∪ ε是父亲函数,ρ(q)返回结点q的父状态。
(10)W是Q的子状态,对应于一系列关键字。
图5所表示的QG所生成的QSM同样在该图中表示。其中,q0为该QSM的初始状态的标识;q1和q6是QSM的两个接受状态,用带阴影的方框表示;QSM的驱动方式包括正向转移和回溯,分别由δs和δe触发。箭头表示正向转移。每一个正向转移所对应的回溯未在图中明确标出。
5.基于查询状态机的XML流处理
该算法在一个运行时栈的基础上处理XML数据流。进出运行时栈的元素称为栈条目。每一个栈条目都由三个部分组成(ID,B=<flag1,…,flagn>,R),其中,ID是QSM中状态的标识;B是一个数组,包含一些标志(TURE or FALSE),对应于查询中的关键字,它们的初始值均为FALSE。当一个关键字匹配发生时,其对应的标志位设为TURE;R是树形结构,其中存储的是查询的候选输出。在查询匹配执行的过程中,当某些结点匹配发生时,需要将它先缓存下来,因为暂时还没有足够信息来判断它是否是最终的输出结果。如果它不是最终的输出结果,则将这些缓存的结果丢弃;如果确定一个关键字搜索匹配成功,则R包含的是所有关键字的一个MIMCT,将它返回给用户。
QSM与通常的有限自动机有所不同。当一个开始标签与文档结点匹配时(称为一个结点匹配发生),触发δs函数;当遇到相应的结束标签时,触发对应的δe函数。而满足接受状态的条件是:状态从δe函数转移到接受状态,并且接受状态对应的标志位都为TRUE。这时,称为一个查询匹配发生。另外值得注意的一点是,QSM可能存在多个接受状态。当一个接受状态的条件得到满足时,即一个XML片段满足了用户提交的关键字搜索,这时QSM并不停止运行,而是直到整个XML流处理完毕。
给定一个输入XML树T和一个查询状态机QSM,QSM与T的匹配算法包括正向转移Forward和回溯Backward两部分组成:
Forward:
(1)将QSM的初始状态q0压入运行时栈中。
(2)对T中的每一个结点,遇到一个startElement事件时,若文档标记与当前状态q的名字λ(q)相同,则结点匹配发生,随即触发δs函数,计算当前状态q的下一个状态q’(当前状态q是指处于运行时栈的栈顶的状态)。QSM的状态从q转移到q’,将<q’,<F,…,F>,R>压入栈中;同时,将匹配的元素加入对应的R中。
(3)如果一个关键字匹配发生,则将栈条目中对应的标志设为TRUE,并且将包含该关键字的标签放入R中。
Backward:
(1)对T中的每一个结点,closeElement事件触发δe函数,计算当前状态q的下一个状态q’。当δe函数被触发,处于栈顶的栈条目被弹出。如果被弹出的栈条目中某个标记为TRUE,则将当前栈顶对应的标记设为TRUE,并将R的内容连接到当前栈顶条目的R中;对于值为FALSE的标记,则不做处理。
(2)当遇到一个接受状态,如果它的所有标志都为TRUE,则找到一个满足关键字搜索的结果,该栈条目被弹出,将R中的结果发给用户。
(3)重复上面的步骤,直到整个XML文档被处理完毕,即回到查询状态机的初始状态。
本发明使用图1所示的XML文档样例作为XML流,图3为该文档的DTD。假定用户提交的关键字搜索为Q1(S),具体为t1:name=″Kasitij Sheth″,t2:name=″Amit Sheth″,t3:title,根据图3所示DTD构造的查询状态机如图5所示。图6显示了随着XML流的到达,其运行时栈的情况。其中,带下划线的栈条目表示接受状态。
首先,将初始状态q0压入栈中。当遇到“conf”元素的开标签时,由于元素“conf”与状态q1匹配,触发QSM的δs转移函数,将状态q1的栈条目<q1,(F,F,F),(conf)>被压入运行时栈中。这时,所有的标志都为FALSE,并将“conf”放入结果R1中。接着,遇到“title”时,发现一个关键字匹配,将其对应的标志赋为TRUE。由于“title”是元素标签,因而将“title”和它所包含的值“…(ER)”放入结果R2中,即title←…(ER)。当遇到其</title>时,触发QSM的δe函数,q2栈条目从栈中弹出,将其TRUE标志赋给父亲状态q1对应的标志,并将结果的内容链接到q1的结果中,如图6(2)所示。接着,依次遇到“editor”、“person”、“name”的开始标记,由QSM驱动,依次将其栈条目压入栈中,如图6(3)所示。由于没有发现关键字匹配,在遇到这些元素的结束标记时,触发QSM的δe函数,将其从栈中弹出。当遇到“conf”元素的子元素“paper”时,执行过程如图6(4)、6(5)、6(6)、6(7)、6(8)、6(9)所示。当执行到paper的结束标签“/paper”时,由于所有的关键字都匹配,其标志全为TRUE,并且“paper”是QSM的一个接受状态q6,因而它是一个满足关键字搜索的XML片段,将其从栈中弹出,将其结果返回给用户。
实际上,当QSM所有的接受状态处理完毕时,已经没有必要继续进行处理。因而需要在适当的时候停止对文档进行处理。本发明对QSM的定义进行扩充,给出整个QSM的最终接受状态。定义如下.
定义13:QSM的最终接受状态fqsm是QSM中Q的一个元素,表示整个QSM的最终接受状态。
(1)fqsm对应于相应QG中的所有MISLCA的最低公共祖先.
(2)如果QSM经δe转移函数到达fqsm,并且fqsm对应的所有标记位都为TRUE,则整个QSM运行完毕。
在某些情况下,fqsm对应的QG中的结点层次较高,如图5所示,其fqsm对应QG中的结点是″conf″,则对系统运行影响不大。但有时,QSM的接受状态(对应于G’中的MISLCA)处于文档中较低的层次,而这时对XML文档剩余部分再继续进行处理会比较耗时。
本发明提出一种新方法(利用DTD实现XML数据流的关键字搜索方法),可以应用于互联网内容监测、互联网信息发布与订阅、Web服务消息过滤等领域中,具有下面独特的特性:
1、定义“语义独立的最小最低公共祖先MISLCA”来表示关键字的搜索语义,“语义独立的最小连通树MIMCT”来表示用户搜索的返回结果。与已有方法相比,能够有效处理包含递归结构在内的XML数据流。
2、提出新的关键字搜索语法,对纯粹关键字搜索语法进行简单扩充,利用由关键字和包含该关键字的标签组成的搜索项,从而能够利用DTD的相关信息结合起来。
3、提出新的概念“关键字的查询图”,基于DTD,将关键字搜索细化为查询图,从而缩小XML数据流的查询处理空间和解析范围,提高关键字搜索性能。
4、首次利用DTD实现了XML数据流的关键字搜索方法。提出查询状态机的概念,并利用查询自动机对XML数据流和返回结果缓存进行单遍扫描和处理。
附图说明
图1为XML文档样例1。
图2为XML文档样例2。
图3为图1所示XML文档的简化DTD图。
图4为根据图3所示的简化DTD图生成的路径集合。
图5为通过前缀共享组合路径集合所生成的查询图。
图6为在处理XML文档样例1时的运行时栈的情况。
图7本发明方法与纯关键字方法在文档大小从500KB到8000KB情况下的执行时间的比较(左面为本发明方法,右面为纯关键字方法)。
图8本发明方法与纯关键字方法在不同关键字频度的情况下执行时间的比较(左面为本发明方法,右面为纯关键字方法)。
图9内存使用情况(左面为本发明方法,右面为纯关键字方法)。
表1为DTD简化规则。
具体实施方式
系统实现所用的编程环境是Eclipse,Java虚拟机的版本是1.5。在具体实施时,该方法由一系列步骤组成。
(1)简化DTD
有时候,DTD可能会很复杂,例如包含嵌套的操作符(e1|e2)*。但是,在关键字搜索的背景下,我们所关心的是元素在XML文档中的位置(例如父子关系、祖先后裔关系)以及是否存在文档的根到关键字的可能路径,因此,本发明定义一组简化规则来去掉这些不必要的复杂性。简化规则在表1中列出(假定不含不连续的相同元素,实际DTD通常如此)。
简化算法simplifyingDTD的输入是一个组正则表达式,输出是简化的表达式。
simplifyingDTD
输入:Regular expression r;
输出:the simplified regular expression of r;
1.if r contain“(”and“)”operator
2. r=migrateNestStructure(r);//该函数应用规则1去除嵌套结构
3.EndIf;
4.ifr contain“op1op2” //op1和op2分别为为*、+、?中的任何一个
5. r=migrateNestOperator(r);//该函数应用规则2去除嵌套操作符
6.EndIf;
7.if r contain consecutive same elements;
8. r=migrateSameElement(r);//该函数应用规则3去除连续的相同元素
9.EndIf;
(2)根据简化DTD图和输入关键字构造可能的路径集合,并将这些路径集合合并为一个查询图。在具体实施的时候,查询图的构造算法ConstructingQG同时完成路径的查找和查询图的构造(使用深度优先和基于栈的方法)。
constructingQG
输入:一组包含关键字的节点标签s1,…,sk和简化的DTD图SDG;
输出:查询图QG;
初始化方法:
1.sdgTraverse(SDG G)
2.{
3.for(v=0;v<G.n();v++)
4. {G.setVisitedMark(v,UNVISITED);//所有结点初始都是未访问过节点
6. G.setQGMark(v,NONQGNODE);//所有结点初始都不是QG的节点
7. }
8. sdgDFS(G,r);//对SDG的根进行深度优先搜索,并执行相应操作
9.}
深度优先搜索方法:
1.sdgDFS(SDG G,int v)
2.{SDGStack.push(G,v);
3. G.setVisitedMark(v,VISITED);
4. if(λ`(v)==si)
5. G.setQGMark(v,QGNODE);
6.for(Edge w=G.first(v);G.isEdge(w);w=G.next(w))
7. if(G.getVisitedMark(G.v(w))==UNVISITED)
8. sdgDFS(G,v);.}
9. if G.setQGMark(v)==true;
10.QG.add(v);//如果是QG结点,则将其加入到QG中
11.SDGStack.pop(G,v);
12.G.setQGMark(SDGStack.top(G,v),QGNODE);//关键字结点的父亲是QG中的
节点
13.}
(3)在QG图上查找语义独立的最小最低公共祖先的算法LocatingMISLCA。其中会用到最小最低公共祖先的查找算法。由于(a)QG是简化的DTD图的子图,因而不会太大;(b)该查找算法是在XML流处理引擎运行前执行的,因而不影响XML流处理引擎的运行时效率;所以,可以参照使用当前的最小最低公共祖先的查找算法,例如,参考文献[19]中的索引查找急切算法、基于栈的算法等。
LocatingMISLCA
输入:一组包含关键字的节点标签s1,…,sk和QG;
输出:MISLCA的集合;
初始化方法:
1.locatingMISLCA(QG TheQG,String s[])
2.{
3. MISLCA=null;//将MISLCA集合初始化为空
4. while(locatingSLCA(TheQG, s[])is not null)
4. {MISLCA=MISLCA+locatingSLCA(TheQG,s[]);
6.TheQG=TheQG-subTree(locatingSLCA(TheQG,s[]));
7. }
8.}
(4)查询自动机QSM是根据QG构造的。QSM是本发明在XML流处理环境下对有限状态机的扩展,支持正向转移和逆向转移。QSM的实现方式有多种:状态模式、基于状态转移表的实现。这里的实施方式采用了基于状态转移表的方式。
QSM的类定义如下:
class QSM
{
protected QSMTransition[][]tranTable;//可回溯状态转移表
protected int iniState;//初始状态
protected int currentState;//当前状态
protected int finalState[];//接受状态
protected String label[];//状态标签名
…
public QSM(QG g);/*除了通常的初始化工作外,主要是调用constrTranTable(QG g)
来构造状态转移表。构造转移表的规则参加定义12。*/
public getIniState();
public setIniState(int state);
public getCurrentState();
public setCurrentState(int state);
public getFinalState();
public setFinalState(int state);
public String getLabel(int state);
public int forwardNextState(int currentState);//正向转移
public int reverseNextState(int currentState);//逆向转移
private static constrTranTable(QG g);
...
}
(5)XML流处理引擎XMLStreamEngine接收来自SAX的事件,依据QSM的状态驱动来计算关键字搜索的答案;其输入是XML流和包含关键字的标签,输出是关键字的MIMCT。包括两个主要的操作forword(处理XML元素的开始标签)和reverse(处理XML元素的结束标签)。
forword
1.push querysm.getIniState()into runtimeStack;/*将初始状态加入栈中,querysm是
QSM的一个对象实例*/
2.currentState=querysm.forwardNextState(querysm.getIniState())
3.if e.tag==querysm.getLabel(currentState)and e.type==“Open”
4.for(i=1;i<=k;++i)
5. {
6. if(querysm.getLabel(currentState))==w[i];//w[i]is a keword label of
w1...wk
7. stackItem.flag[i]=true;//set its corresponding flag to true
8. endif
9. }
10. stackItem. R.add(querysm.getLabel(currentState));//R是对应的MIMCT
11. runtimeStack.push(stackItem);//stack Item包括标签、对应的标志位和R
12. currentState=querysm.forwardNextState(currentState);
13.endif
14. else
15. output(“No Match”);
16. endif
reverse
1.while(currentState<>initialState)
2 {
3. if(e.type==“Close”)
4. {currentItem=runtimeStac k.pop();
5. if(currentState.type is the final state and all flags of its stackItem are true)
6. output(currentItem.R);
7. else
8. for(k=0;i<=k;++k)
9. {
10. if(currentItem.flag[i]==true)
11. runtimeStack.top().flag[i]=true;
12. runtimeStack.top().R.add(currentItem.R);
13. endif
14. }
15. endif
16. currentState=querysm.reverseNextState(currentState);
17.}
本发明的积极效果
为了证明本发明的效果,实现相应的原型系统,进行了一系列实验。系统实现所用的编程环境是Eclipse,Java虚拟机的版本是1.5。实验的运行环境是HP4000笔记本,主频为1500MHz,内存为256M操作系统是Windows XP专业版。实验的数据集是使用XMark[13]和DBLP[14]的DTD生成的。文档的生成工具用的是IBM的文档生成器[15]。
同时实现了在没有DTD情况下处理XML流的系统,称为XML流的纯关键字搜索方法,下面简称纯关键字方法,而将本文的方法称为基于DTD的方法。由于没有DTD的相关信息,纯关键字方法必须对整个XML文档进行扫描。两者所用的编程环境相同,实验的运行环境和使用的数据集也相同。下面给出在DBLP数据集上的实验结果,XMark得到的结果相似。
我们首先取较小的文档进行实验。文档大小从500K到8000K,关键字的个数为3,关键字在XML流中出现的频度分别为100,100,100。实验结果表明,基于DTD的方法运行得非常有效,运行时间随文档大小变化不大,而纯关键字方法则随着文档大小明显增加。原因在于,在基于DTD的方法中,由于将关键字检索细化为查询图,进而转换为查询状态机,只是将与查询状态机匹配的结点压入运行时栈,不必对整个文档进行解析。在XML流处理的背景下,文档解析时间是影响系统性能的一个重要因素。所以,在关键字频度较低的情况下,基于DTD的方法性能表现相当好。在纯关键字方法中,无论什么样的关键字搜索以及有多少返回结果,都必须对整个文档进行解析并加以处理。因而,即使在匹配结果比较小的情况下,系统的性能也对文档大小很敏感。
下面的实验考察关键字在XML文档出现频度加大的情况下对系统性能所造成的影响。同样关键字个数为3,从下面几个方面进行度量:1)文档的大小为80MB;2)关键字在文档中出现的频度从10000到100000个;3)系统运行的时间,单位是m。实验表明,基于DTD的系统对关键字在文档中出现的频度比较敏感:随着关键字在文档中出现频度的增加,系统运行时间明显增加;而纯关键字系统运行时间变化不太明显。
图9说明了两种实现的内存使用情况。左面显示的是本发明的方法,右面显示的是不考虑DTD的纯粹的关键字搜索。两者都从两个方面进行测试,一个是XML文档的大小:30MB、60MB、90MB和120MB;另一个是关键字个数的变化3个、5个。从实验的结果可以看出,随着文档大小和关键字个数的变化,两种实现方法的内存耗费都基本不变,分别维持在1.8MB和1.9MB左右。对系统的处理算法略加分析,显而易见,系统的内存耗费主要与运行时栈的高度(即文档处理的深度)以及返回结果的大小有关,而与文档大小并无直接的关系。
表1 DTD简化规则
规则1:简化嵌套结构 | 规则2:简化嵌套操作符 | 规则3:合并相同元素 |
(e1,e2)→e1,e2 | e**→e*→e | e*,...,e*→e |
(e1|e2)→e1,e2 | e*?→e*→e | e*,...,e?→e |
(e1,e2)*→e1,e2 | e?*→e*→e | e?,...,e+...→e |
(e1,e2)?→e1,e2 | e??→e?→e | e?,...,e?→e |
(e1,e2)+→e1,e2 | e*+→e+→e | e,...,e→e |
e?+→e+→e | e+,...,e+→e | |
... | ... |
参考文献
[1]Yanlei Diao,Mehmet Altinel,Michael J.Franklin,Hao Zhang and Peter Fischer.Path sharing and predicate evaluation for high-performance XML filtering.ACMTrans.Database Syst.,28(4):467-516,2003
[2]FENG PENG and SUDARSHAN S.CHAWATHE.XSQ:A Streaming XPath Engine,ACMTransactions on Database Systems,Vol.30,No.2,June 2005,Pages 577-623.
[3]Yi Chen,Susan B.Davidson and Yifeng Zheng.An Efficient XPath Query Processorfor XML Streams.In the 22nd IEEE International Conference on Data Engineering.April 2006,Atlanta,USA
[4]Chamberlin,D.:XQuery:An XML query language.IBM Syst.J.41,597-615(2003)
[5]Anders Berglund,Scott Boag,Dong Chamberl in,Mary F.Fernandez,Michael Kay,Jonathan Robie,and Jrme Simon.XML path language(XPath)2.0 W3C working draft16.Technical Report WD-xpath20-20020816,World Wide Web Consortium,August2002.
[6]Y.Li,C.Yu,and H.V.Jagadish,“Schema-Free XQuery,”Proc.Conf.Very LargeDatabases,2004.
[7]Y.Xu and Y.Papakonstantinou,“Efficient Keyword Search for Smallest LCAsin XML Databases,”Proc.ACM SIGMOD Conf.,2005.
[8]Cohen,S.et al.:XSEarch:A semantic search engine for XML.VLDB(2003)
[9]L.Guo,F.Shao,C.Botev,and J.Shanmugasundaram,“XRANK:Ranked KeywordSearch over XML Documents,”Proc.ACM SIGMOD Conf.,2003.
[10]Hristidis,V.et al.:Keyword proximity search on XML graphs.ICDE(2003)
[11]Vagelis Hristidis,Nick Koudas,Member,IEEE,Yannis Papakonstantinou,andDivesh Srivastava,Keyword Proximity Search in XML Trees.IEEE TRANSACTIONSON KNOWLEDGE AND DATA ENGINEERING,VOL.18,NO.4,APRIL 2006
[12]Ziyang Liu,Jeffrey Walker,Yichen,Xseek:A Semantic XML Search Engine UsingKeywords.VLDB 2007,September 22-28,Vienna,Austria.
[13]BUSSE,R.,CAREY,M.,FLORESCU,D.,KERSTEN,M.,MANOLESCU,I.,SCHMIDT,A.,AND WAAS,F.2001.XMark:An XML benchmark project.
http://monetdb.cwi.nl/xml/index.html.
[14]LEY,M.2001.DBLP DTD. http://www.acm.org/sigmod/dblp/db/about/dblp.dtd.
[15]Angel Luis Diaz and Douglas Lovell.XML Generator.
http://www.alphaworks.ibm.com/tech/xmlgenerator,September 1999
[16]Babcock B,Babu S,Datar M,Motwani R,Widom J.Models and issues in data streams.In:Popa L,ed.Proc.of the 21st ACM SIGACT-SIGMOD-SIGART Symp.on Principlesof Database Systems. Madison:ACM Press,2002.1~16.
[17]Madden,S.,et al.2002.Continuously adaptive continuous queries over streams.In Proc.of the ACM SIGMOD International Conference on Management of Data.
[18]Motwani,R.,et al.2003.Query processing,approximation,and resourcemanagement in a data stream management system. In Proc. of the Conference onInnovative Data Systems Research(CIDR).
[19]WANG Xiao-Feng,Zhang Xin,Xie Min,MENG Xiao-Feng,ZHOU Jun-Feng. KeywordSearch on XML Streams,Journal of Computer Research and Development,2006,43(Suppl.):484-489
[20]Chong Sun,Chee-Yong Chan,Amit K. Goenka,Multiway SLCA-based Keyword Searchin XML Data.WWW2007,May8-12,2007,Banff,Alberta,Canada.
Claims (3)
1.一种基于文档类型定义的XML数据流关键字搜索方法,其特征在于具体步骤如下:
(1)将用户提交的关键字搜索定义为XML搜索项的集合,每一个XML搜索项由一个关键字和包含该关键字的标签组成;将关键字搜索的语义定义为语义独立的最小最低公共祖先,记为MISLCA,将查询结果定义为语义独立的最小连通树,记为MIMCT;从而为用户提供友好搜索界面;
(2)将XML数据流的文档类型构造为一个简化DTD图;
(3)将用户提交的关键字和XML数据流的简化DTD图结合在一起,找出从DTD图的根到关键字的所有可能的查询路径,进而通过共享所有可能查询路径的前缀,构造关键字的查询图;
(4)在查询图的基础上构造支持正向状态转移和状态回溯的查询状态机,利用查询状态机,对XML数据流和返回结果的缓存进行单遍扫描和查询处理;
(5)为了进一步提高系统性能,定义查询状态机的最终接受状态,在遇到最终接受状态时,状态机停止执行:
其中,所述的XML关键字搜索项、XML关键字搜索语义以及返回结果定义如下:
定义1.搜索项,简称为ST:一个搜索项t是一个XML文档标签和它包含的关键字组成的对,表示为t=s∶w,其中,s表示XML文档标签,w表示标签s包含的关键字;关键字可以为空;用户提交的查询Q(S)是搜索项的集合S=t1,t2,…,tn;
定义2.语义独立的最小最低公共祖先,简称为MISLCA:给定一颗XML树T,V表示树T中所有结点的集合;nd∈V,na∈V,如果nd是na的后裔或等于na,称为nd与na具有后裔或自身关系,记为nd≤na;如果nd≠na,则记为nd<na;再给定一个关键字列表w1,…,wk,假定用Si表示对应关键字wi的结点集合,Si∈V,即Si中元素的标记直接包含关键字wi;将关键字列表w1,…,wk的最低公共祖先(LCA)表示为LCA(S1,…,Sk),将最小最低公共祖先(SLCA)表示为SLCA(S1,…,Sk);假定v1,…vk是S1,…,Sk的所有MISLCA,记为MISLCA(S1,…,Sk);开始MISLCA(S1,…,Sk)为空,那么,
(1)SLCA(S1,…,Sk)都是S1,…,Sk的MISLCA,即MISLCA(S1,…,Sk)=MISLCA(S1,…,Sk)+SLCA(S1,…,Sk);
(2)另外,如果nmislca是S1,…,Sk的MISLCA,即MISLCA(S1,…,Sk)=MISLCA(S1,…,Sk)+nmislca,当且仅当
■nmislca∈LCA(S1,…,Sk)-MISLCA(S1,…,Sk),并且
■n′∈LCA(S1,…,Sk)-MISLCA(S1,…,Sk)(n′≠nmislca),则 nmislca<n′,并且,
■以nmislca为根的最小连通树与SLCA(S1,…,Sk)为根的最小连通树的交集为空;
(3)重复执行步骤(2),直到没有nmislca满足(2)中的条件;
定义3.语义独立的最小连通树,简称为MIMCT:给定一颗XML树T以及一个关键字列表w1,…,wk,w1,…,wk的最小连通树TMIMCT是指以该关键字列表的MISLCA为根的、连接MISLCA包含的所有关键字的最小子树;
所述的简化DTD图的定义如下:
定义4.简化DTD可以看作一个有根的有向图SDG=(V,E),称为简化DTD图,其中,V表示有向图的所有结点构成的集合,EV×V是连接结点的边;
(1)r∈V是DTD图指定的根,对于任一结点v∈V,都存在惟一的从r到v的有向路径;
(2)结点v∈V对应元素或属性,边e∈E表示结点之间的包含父子关系,结点的标签名是元素或属性的名字;
所述的关键字查询图的定义、构造方法如下:
定义5.查询图QG是一个9元组QG=(V’,E’,∑’,λ’,η,ρ’,root’,S’,W)
(1)V’表示结点的有限集合;
(2)∑’表示结点标签的有限集合;
(3)λ’:V’→∑是标签函数;λ(n)返回结点n的标签名字;
(4)ρ’:V’→∑’∪ε是父亲函数,ρ’(n)返回n的父亲结点;
(5)root’∈V’是G’的根;
(6)W=w1,…,wn表示关键字列表;
(7)S’=s1,…,sm是直接包含W的结点;
查询图的构造方法为:给定一个输入XML树T的DTD,以及一个关键字查询Q(S),Q(S)包含的搜索项为t1,t2,t3…tn,搜索项中的关键字为w1,…,wn,包含关键字的标签为si,…,smm≤n,构造查询图的步骤如下:
(1)构造给定DTD的简化DTD图SDG;
(2)V是SDG中的结点集合,r∈V是SDG的根,对于每一个si∈V,可以找出从r到si的惟一有向路径Pi,从而得到一个路径集合P=P1,…,Pm,然后将每一个关键字w连接到路径中包含它的标签上;
(3)对每一个路径Pi∈P,通过共享它们的前缀将它们组合在一起,即可以得到查询图;
与所述的XML关键字查询图相关的定理1和定理2如下:
定理1.查询图QG是简化DTD图SDG=(V,E)的同根子图,其中,G’G,V’V,并且E’E ∩(V’×V’);
定理2.给定一个输入XML树T和一个关键字列表W=w1,…,wk,其中,VT表示T中的结点集合,S=s1,…,sk是包含关键字的结点;假定XML树T的简化DTD是SDG,并且由关键字W和SDG生成的查询图是QG;那么,如果XML树T与QG匹配,则与关键字W匹配,并且W在QG上的MISLCA对应于W在XML树T上的MISLCA;
所述的查询状态机的定义如下:
定义6.查询状态机,简称为QSM;是根据查询图G’(V’,E’,∑’,λ’,η’,ρ’,root’,S’,W)构造的元组QSM(Q,r,q0,F,I,δs,δe,∑,λ,ρ,S),其中:
(1)Q是有限状态标识符,包括q0和对应于G’中结点V’的状态;
(2)q0是QSM的初始状态;
(3)r是Q的一个成员,对应于G’中的root’;
(4)F是Q的一个子集,表示QSM的接受状态,对应于G’中的MISLCA;
(5)I是输入事件,其中tagName表示结点测试名,type表示事件类型,事件类型有startElement和closeElement;
(6)δs和δe表示转移函数,分别对应于startElement和endElement事件; 这些转移函数计算当前状态q的下一个状态q’,q称为q’的父状态,q’称为q的孩子状态;
(7)∑表示有限输入符号,对应于G’中的∑’;
(8)λ:Q-{q0}→∑是名字函数,返回状态的标签名;
(9)ρ:Q→∑∪ε是父亲函数,ρ(q)返回结点q的父状态;
(10)W是Q的子集,对应于一系列关键字。
2.根据权利要求1所述的方法,其特征在于所述的查询处理方法如下:
该方法在一个运行时栈的基础上处理XML数据流,每一个栈条目都由三个部分组成:ID,B=<flag1,…,flagn>,R,其中,ID是QSM中状态的标识;B是一个数组,包含一些标志:TURE or FALSE,对应于查询中的关键字,它们的初始值均为FALSE,当一个关键字匹配发生时,其对应的标志位设为TURE;R是树形结构,其中存储的是查询的候选输出;在查询匹配执行的过程中,当某些结点匹配发生时,需要将它先缓存下来,如果确定一个关键字搜索匹配成功,则R包含的是所有关键字的一个MIMCT,将它返回给用户;
给定一个输入XML树T和一个查询状态机QSM,QSM与T的匹配过程分为正向转移Forward和回溯Backward两部分,其中:
(a)在执行Forward部分时,首先将QSM的初始状态q0压入运行时栈中;对T中的每一个结点,遇到一个startElement事件时,若文档标记与当前状态q的名字λ(q)相同,则结点匹配发生,随即触发δs函数,计算当前状态q的下一个状态q’;QSM的状态从q转移到q’,将<q’,<F,…,F>,R>压入栈中,同时,将匹配的元素加入对应的R中;如果一个关键字匹配发生,则将栈条目中对应的标志设为TRUE,并且将包含该关键字的标签放入R中;
(b)在执行Backward部分时,对T中的每一个结点,closeElement事件触发δe函数,计算当前状态q的下一个状态q’;当δe函数被触发,处于栈顶的栈条目被弹出;如果被弹出的栈条目中某个标记为TRUE,则将当前栈顶对应的标记设为TRUE,并将R的内容连接到当前栈顶条目的R中;对于值为FALSE的标记,则不做处理;当遇到一个接受状态,如果它的所有标志都为TRUE,则找到一个满足关键字搜索的结果,该栈条目被弹出,将R中的结果发给用户;重复上面的步骤,直到整个XML文档被处理完毕,即回到查询状态机的初始状态。
3.根据权利要求1所述的方法,其特征在于所述的查询状态机的最终接受状态如下:
定义7.QSM的最终接受状态:fqsm是QSM中Q的一个元素,表示整个QSM的最终接受状态:
(1)fqsm对应于相应QG中的所有MISLCA的最低公共祖先;
(2)如果QSM经δe转移函数到达fqsm,并且fqsm对应的所有标记位都为TRUE,则整个QSM运行完毕。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA2007100477063A CN101201834A (zh) | 2007-11-01 | 2007-11-01 | 基于文档类型定义的xml数据流关键字搜索方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA2007100477063A CN101201834A (zh) | 2007-11-01 | 2007-11-01 | 基于文档类型定义的xml数据流关键字搜索方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101201834A true CN101201834A (zh) | 2008-06-18 |
Family
ID=39517003
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNA2007100477063A Pending CN101201834A (zh) | 2007-11-01 | 2007-11-01 | 基于文档类型定义的xml数据流关键字搜索方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101201834A (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102063474A (zh) * | 2010-12-16 | 2011-05-18 | 西北工业大学 | 基于语义相关的XML关键字top-k查询方法 |
CN101615190B (zh) * | 2009-07-31 | 2011-12-07 | 复旦大学 | 安全的xml关键字检索方法 |
CN102769610A (zh) * | 2012-04-26 | 2012-11-07 | 新奥特(北京)视频技术有限公司 | 一种从xml文件筛选信息的方法 |
CN105117640A (zh) * | 2015-07-10 | 2015-12-02 | 济南思尼特软件有限公司 | 一种用于刑侦的计算机内存中账号密码的提取方法 |
CN106611008A (zh) * | 2015-10-26 | 2017-05-03 | 中国移动通信集团公司 | 一种互联网内容标签的管理方法及装置 |
CN109977288A (zh) * | 2019-01-25 | 2019-07-05 | 广西建设职业技术学院 | 基于cuda并行和lca的xml关键字查询方法 |
CN112131434A (zh) * | 2020-09-24 | 2020-12-25 | 西安电子科技大学 | 基于匹配树的可扩展访问控制标记语言策略搜索方法 |
CN115329753A (zh) * | 2022-10-13 | 2022-11-11 | 北京谊慧信息技术有限公司 | 一种基于自然语言处理的智能数据分析方法和系统 |
-
2007
- 2007-11-01 CN CNA2007100477063A patent/CN101201834A/zh active Pending
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101615190B (zh) * | 2009-07-31 | 2011-12-07 | 复旦大学 | 安全的xml关键字检索方法 |
CN102063474A (zh) * | 2010-12-16 | 2011-05-18 | 西北工业大学 | 基于语义相关的XML关键字top-k查询方法 |
CN102063474B (zh) * | 2010-12-16 | 2012-10-10 | 西北工业大学 | 基于语义相关的XML关键字top-k查询方法 |
CN102769610A (zh) * | 2012-04-26 | 2012-11-07 | 新奥特(北京)视频技术有限公司 | 一种从xml文件筛选信息的方法 |
CN105117640A (zh) * | 2015-07-10 | 2015-12-02 | 济南思尼特软件有限公司 | 一种用于刑侦的计算机内存中账号密码的提取方法 |
CN106611008A (zh) * | 2015-10-26 | 2017-05-03 | 中国移动通信集团公司 | 一种互联网内容标签的管理方法及装置 |
CN106611008B (zh) * | 2015-10-26 | 2020-06-12 | 中国移动通信集团公司 | 一种互联网内容标签的管理方法及装置 |
CN109977288A (zh) * | 2019-01-25 | 2019-07-05 | 广西建设职业技术学院 | 基于cuda并行和lca的xml关键字查询方法 |
CN112131434A (zh) * | 2020-09-24 | 2020-12-25 | 西安电子科技大学 | 基于匹配树的可扩展访问控制标记语言策略搜索方法 |
CN115329753A (zh) * | 2022-10-13 | 2022-11-11 | 北京谊慧信息技术有限公司 | 一种基于自然语言处理的智能数据分析方法和系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Petrovic et al. | G-ToPSS: Fast filtering of graph-based metadata | |
KR100815563B1 (ko) | Dbms 기반 지식 확장 및 추론 서비스 시스템 및 그방법 | |
CN101201834A (zh) | 基于文档类型定义的xml数据流关键字搜索方法 | |
Suel et al. | ODISSEA: A Peer-to-Peer Architecture for Scalable Web Search and Information Retrieval. | |
CN101685444B (zh) | 用于实现元数据搜索的系统和方法 | |
US20060015843A1 (en) | Semantic system for integrating software components | |
WO2004053734A1 (en) | Evaluating relevance of results in a semi-structured data-base system | |
CN101655862A (zh) | 信息对象搜索的方法和装置 | |
Liu et al. | Returning clustered results for keyword search on XML documents | |
CN100558078C (zh) | Xml流数据的复杂小枝模式查询匹配方法 | |
Park et al. | Lineage encoding: an efficient wireless XML streaming supporting twig pattern queries | |
Abiteboul et al. | The xyleme project | |
Onizuka | Light-weight XPath processing of XML stream with deterministic automata | |
CN101183376A (zh) | 基于关系代数范围运算的xml数据库查询方法 | |
Lee et al. | A design and implementation of XML-Based mediation framework (XMF) for integration of internet information resources | |
Lu et al. | Parallel processing XML documents | |
Chen et al. | Scalable filtering of multiple generalized-tree-pattern queries over XML streams | |
Spyratos et al. | On Personalizing the Catalogs of Web Portals. | |
Chen et al. | A semantic based information retrieval model for blog | |
Diao | Query processing for large-scale XML message brokering | |
Di Martino | An ontology matching approach to semantic web services discovery | |
Yang et al. | Schema-aware keyword search over xml streams | |
Bou et al. | Path-based keyword search over XML streams | |
Sharma et al. | Deep web information retrieval process | |
Yang et al. | XKFitler: a keyword filter on XML stream |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Open date: 20080618 |