用于xml策略匹配的方法和装置的制作方法

文档序号:6477916阅读:124来源:国知局

专利名称::用于xml策略匹配的方法和装置的制作方法
技术领域
:本发明涉及面向应用的网络,具体地,涉及用于XML策略匹配的方法和装置。
背景技术
:终端用户逐渐用不同于传统的桌上型电脑内容浏览器的设备访问网页内容。这样的设备包括个人数码助理、蜂窝电话和有线电视机顶盒。由于这些设备缺乏与传统的桌上型电脑内容浏览器相同的浏览网页的能力,因此需要将网页内容从用于一种类型的设备的格式改写成适合于在另一种设备中呈现的另一种格式,称为"格式转换"。通过使用有关网页内容的信息可有助于格式转换过程,这些信息以下称为"元信息(meta-information)"。元信息通常随原始网页内容一起提供,并可用于在识别网页内容的特定部分方面协助格式转换过程。应当注意,如果元信息与网页内容分开描述,则元信息可以无需修改原始网页内容地创建。XML(可扩展标记语言)是由万维网联盟(W3C)规定的通用元语言,W3C是为开发通用协议而创建的国际产业联盟,解决对可扩展互操作网络和开发基于XML的其它跨行业规范的需求。XML允许定义用于文件或者数据交换的新词汇,并且优化无缝并迅速整合多种数据源的新信息内容的能力,数据源包括结构化和半结构化文件、关系数据库和对象库。XML允许用户使用任意字定义元素并将其组织在嵌套结构中。由于XML支持数据表达的灵活性,许多电子文件管理系统(E匿S)已将XML用作代表性的文件格式。XML数据模型和网络服务技术的迅速采用已引发了大量XML可识别网络设备的商用化,诸如XML防火墙、XML路由器和XML转换加速器。预计XML将构成超过一半的网络业务,高速内容可识别系统已由于其将网络驻留应用独立的应用级别附加值引入诸如QoS(服务质量)、安全、负载平衡等的网络服务特性中的潜力而获得关注。XML规定如何基于通过文件的逻辑结构或层级的路径、通过使用寻址语法来定位和处理项目。它能够存储其结构可被表示为树形结构的任何数量的文本或者任何数据;唯一不可缺少的语法要求是文本必须封装在根开启标签(openingtag)和对应的关闭标签(closingtag)之间(例如,〈message〉.text.〈/message)。被根标签封装的文本可包含任意数量的XML元素。一个元素的基本语法是〈messageattribute=〃value"〉content〈/root〉,其中"content"是可再次包含XML元素的某一文本。XPath是表达式语言,其提供用于识别XML文件的什么内容(元素和属性)是有兴趣使用或检索的机制。XPath将XML文件建模为节点树,并提供通过XML文件的分层结构巡视该树的能力,通过各种标准选择节点。XPath中的主要语法结构是表达式;XPath表达式通常简称为XPath。表达式被赋值以产生具有以下基本类型之一的对象节点集合(没有副本的无序节点集合),布尔(真或假);数字(浮点数);以及字符串(UCS字符序列)。换句话说,XPath是用于识别诸如XML格式化文件的文件的特定部分的语法。XQuery是用于向XML文件查询任何可看作XML数据的数据源的查询语言,诸如关系数据库或办公文件,用于提取并管理信息。XQuery使用XPath表达语法以寻址XML文件3的特定部分,并使用XML的结构以在所有这些类型的数据中智能地表达查询,不管数据是物理地存储在XML中还是通过中间件被看作XML。内容识别系统,诸如用于面向应用的网络的系统,依靠XPath/XQuery语言以对应用数据引入应用层规则和执行策略。
发明内容本发明针对对于高速网络业务执行(匹配)应用层策略的问题,或者换句话说,其涉及用于对高速XML文档匹配策略规则的方法和相关实体。因此,本发明提供一种对应用层格式化文件执行应用层策略的方法,每个策略定义一个规则和动作,包括a)分别在简单策略数据结构和复杂策略数据结构中有区别地存储适用于所述应用层格式化文件的简单策略和复杂策略;b)解析作为分层结构中流应用层数据接收的文件,用于能够对所述文件中的对象赋值;c)同时查询简单和复杂策略数据结构以识别与所述对象对应的策略;d)—旦与所述对象匹配的所有简单和复杂策略被识别,则停止在简单和复杂策略数据结构中对该对象的查询;以及e)执行由与所述对象对应的简单和复杂策略限定的动作。本发明还针对用于对XML文件执行应用层策略的系统,每个策略定义一个规则和动作,包括XML解析器,用于解析作为分层结构中流XML数据接收的XML文件,以能够对所述XML文件中的对象赋值;简单策略数据结构,用于存储不使用通配符"*"和后代"〃"表达式的XPath查询;复杂策略数据结构,用于存储使用通配符"*"和后代"〃"表达式的XPath查询;用于同时查询简单和复杂策略数据结构以识别与所述对象对应的所有策略的装置;以及用于执行由与在数据结构中识别的对象对应的策略限定的动作的装置。根据以下对如附图所示的优选实施例的更详细的描述,本发明的上述和其它目的、特征和优点将更加明显,其中图1图示了代表一些示例性查询的AxisView(轴视图)的例子;图2a、2b和2c示出了使用代表使用图1的图查询的XML文件的当前活动标签的StackBranch(堆栈分支)的运行时堆栈结构;即,图2a示出了在接收到任何标签之前的StackBranch堆栈,图2b示出了在接收到代表XML文件路径的一组标签〈aXdXaXb〉后的图2a的堆栈,图2c示出了在接收到一组标签〈aXdXaXbXc〉后的堆栈;图3是根据本发明的一个实施例的XML策略匹配系统的方框图;图4是根据本发明的确定性有限自动机(DFA)结构的例子;图5a、5b和5c示出了根据本发明的代表在图2a至2c中查询的相同XML文件中的当前活动标签的运行时堆栈结构的例子;即,图5a示出了在接收到任何标签之前的堆栈,图5b图示了在接收到一组标签〈aXdXa〉之后的堆栈,图5c示出了在接收到一组标签〈aXdXaXb〉之后的堆栈。具体实施例方式本发明旨在识别(匹配)能够应用于高速网络业务的应用层策略。策略包括规则4和动作;动作将对落入策略规则的边界内的文件执行。XML匹配引擎是用于存储应用层策略(规则_动作)并将流XML文件和与各自的策略相关联的规则匹配的数据处理模块和相关数据结构。XML匹配引擎对高速应用数据执行与QoS、安全、负载平衡、流量整形等相关的应用层规则。例如,本发明涉及在对线速XML有效载荷执行语义策略的匹配时将使用XPath/XQuery表达的策略规则与流XML文件匹配。下面将给出截至目前为止已就向内容识别系统提供XML匹配而提出的现有方法和数据结构的简要概述,以更好地理解本发明。这些以前的方案通常维持单个数据路径结构(单个策略信息数据库)以存储用于对流数据匹配策略数据的XPath查询。所有这些方法维持在过滤引擎从XML文件解析器接收元素标签时被遍历的XPath查询的状态机。因此,XFilter在Altinel、M.等的"EfficientFilteringofXMLDocumentsforSelectiveDisseminationofInformation"(第26届VLDB会议的会刊,开罗,±矣及,2000年)中进行了描述。XFilter是使用状态机表达XPath查询的早期尝试。然而,由于其对每一个查询都创建状态机,因此,该方案对于极大数量的查询不能扩展。YFilter在Diao等的"PathSharingandPredicateEvaluationforHigh-PerformanceXMLFiltering,ACMTransactionsonDatabaseSystems,,(第28巻,第4号,2003年12月,467-516页)进行了描述。YFilter通过将所有查询的状态机合并为单个大型非确定性有限自动机(NFA)结构来扩展XFilter。这样,由于重叠的查询的前缀仅仅被存储一次,因此减少了结构的内存,并且由于多个查询通过其状态机被同时推进,因此还改善了处理时间。然而,由于使用通配符("*")和后代("〃")表达式的NFA所引入的非确定性,YFilter不保证任何性能目标。通过加入所有可能性来使用下面描述的确定性有限自动机(DFA)以消除该非确定性是不实际的,因为使用通配符("*")和后代("〃")表达式可能会导致指数数量的状态。Green等在"ProcessingXMLStreamsWithDeterministicAutomataandStreamIndexes"(数据库系统的ACM事务,第29巻,第4号,2004年12月,第752-788页)中描述了DFA(确定性有限自动机)过滤。该论文的作者提出"懒散地"建立DFA。S卩,建立如同在YFilter中的NFA,并仅在需要时对DFA添加状态。然而,如果不考虑内存,Green等提出的DFA结构会执行得最快,因为将XML文件结构与XPath查询匹配是由到达XML标签驱动的简单路径遍历。然而,即使该"懒散的DFA"也证明是存储器非常密集的。因此,在所进行的一些测试中,作者仅仅用完2GB的内存,而YFilter可用低于100MB的内存处理相同数量的数据。Candan等在"AdaptableXMLfilteringwithPrefix-CachingandSuffix-Clustering"(第32届VLDB会议的会刊,2006年)中提出了AFilter。AFiliter稍微与NFA/DFA机制不同,因为它使用被称为AxisView和StackBranch的两个主要结构。AxisView是用于代表查询的图,而StackBranch用于代表XML文件的当前活动标签。AxisView只是对从一组XPath查询中观测到的每一组XML标签仅创建单个对象(节点)的压縮DFA(确定性有限自动机)结构。此外,AxisView只在查询内从子/后代到父/祖先的节点之间设置边缘。为每一个边缘保存具有关于查询识别、深度、父/祖先关系和触发状态的信息的多个标签。当触发事件发生时(当匹配XPath查询的最终定位步骤的标签被接收时),StackBranch用于遍历AxisView结构。图l和图2a-2c示出了AFilter如何执行对复杂策略的匹配的例子。图l图示了用于提供AFilter操作的例子的AxisView图。图2a_2c示出了当触发事件发生时StackBranch如何用于遍历AxisView结构。在该说明中,触发事件仅仅是匹配查询的最终定位步骤的标签。图1所示的AxisView结构在导致触发事件的标签到达时以从底部到顶部的方式(从查询的角度看)被遍历;如果没有触发事件发生,则AxisView结构不会被遍历。如以上所提到的,AxisView是用于代表查询的图,该图使用对从一组XPath查询观测到的每一组XML标签创建单个对象(节点集合、布尔、数字、字符串)的压縮DFA(确定性有限自动机)结构构成。当触发事件发生时,AFilter使用运行时堆栈(StackBranch)遍历AxisView结构。如以上所提到的,当匹配查询的最终定位步骤的标签被接收时,触发事件发生。该例子的AxisView图示了路径表达式{ql=〃d〃a〃b,q2=〃a〃b〃a〃b,q3=〃a〃b/c,q4=/a/*/c},其中字符〃或/在图中用符号tt或t表示,用于XPath查询的最终状态,II或I用于中间查询状态。StackBranch示出了该例中的所有活动标签,即当前XML文件路径的还没有被关闭的所有标签。XML根标签用q_root标记,并且从文件接收到4个标签a-d和1个通配符"*";术语"节点"和"标签"在该说明中可交换地使用。节点之间的边缘用el到e8表示。第一个查询ql=〃d〃a〃b由从节点d到根的边缘el、从节点a到节点d的e3以及从节点b到a的e4按该顺序显示。第二个查询q2=〃a〃b〃a〃b由从节点a到根的边缘e2、从节点b到节点a的边缘e4以及从节点a到b的边缘e5按该顺序显示。第三个查询q3=〃a〃b/c由从节点a到根节点的边缘e2、从节点b到节点a的e4从节点c到节点b的e6显示。最后,q4=/a/*/c由从节点a到根的边缘e2、从节点*到节点a的e8和从节点c到节点*的e7显示。StackBranch对在XPath查询中观察到的每个可能的XML标签维持一个堆栈。每当从XML解析器接收到标签时,为该元素创建一个堆栈对象,并且该对象被推向其对应的堆栈。同样,对于AxisView中的每个边缘,如果堆栈不是空的,则堆栈对象指向对应元素堆栈的顶端对象。由于轴'7"和"〃"在AxisView结构的节点之间的标签内指示,因此,仅仅需要处理通配符"*"。StackBranch具有专用于"*"元素的特殊堆栈,当元素被推向其自己的堆栈时,也创建堆栈对象并将其推向"*"堆栈,其中指针指向其它堆栈的顶端。从图l可见,节点"*"具有从节点a到c的边缘。"*"堆栈中的节点指向图2b和2c的StackBranch中的"a"和"c"堆栈的顶端。在所图示的例子中,初始的StackBranch结构如图2a所示,其中每个XML标签的空堆栈用Sq_root、Sd、Sa、Sb、S*和Sc表示。图2b示出了在迁移〈aXd〉〈aXb〉之后的StackBranch(a、b、c和d是来自正被解析的XML文件的标签/元素)。在该例中,标签b的接收是触发事件,因为它代表查询ql和q2的最终定位步骤。如图所示,堆栈Sq_r0ot包含一个对象,来自堆栈Sd和Sa的底部对象用各自的边缘el和e2指向根对象。堆栈Sd和Sb只包含一个对象,分别是dl和bl,因为这些标签只从解析器接收一次。堆栈Sa包含两个对象al和a2,因为标签a被接收两次。图2b还示出了标签如何按其接收顺序堆在S^中,即al、dl、a2、bl。6图2c示出了迁移〈aXdXaXbXc〉之后的StackBranch。在该例下,标签c的接收是触发事件,因为它代表查询q3和q4的最终定位步骤。堆栈Sc只包含一个对象cl,因为标签c只被接收一次。图2c示出了对象cl\其被放置在堆栈Sw中在图3b所示的迁移之后已放置在该堆栈中的对象的顶端。如上所示,当前可用的XML匹配算法在有限的环境下执行良好。AFilter对于复杂查询执行良好,YFilter/DFA对于简单查询执行良好。本发明通过对简单和复杂查询维持单独的数据库并同时在这些数据库上执行查询来达到高性能。图3是根据本发明的XML策略匹配系统10的方框图。该图一般性地示出了XML解析器15,其接收各个源的流XML数据,并使用Xpath将文件建模为节点树,以使匹配引擎20能够通过各个XML文件的分层结构经过该树。标记为24的动作模块执行与匹配引擎20所找到的策略对应的动作。根据本发明的XML策略匹配系统10同时使用两种数据结构,即-简单策略查找数据结构30,用于存储不使用通配符"*"和后代"〃"表达式的简单XPath;-复杂策略查找数据结构40,用于存储复杂查询(含有"*"或"〃")。每个数据库使用不同类型的过滤器查询。即,简单策略数据库30使用在此标记为22的简单过滤器进行过滤。例如,简单过滤器22可例如基于修正DFA(确定性有限自动机)结构。复杂策略数据库40使用复杂过滤器23进行过滤,该过滤器可以通过改进YFilter/DFA结构并修改AFilter通配符和后代结构来设计。当系统10从XML解析器接收XML标签时,匹配引擎20使用查询模块21同时查询两个策略数据结构30和40,用于将从XML处理器接收到的数据与策略匹配。查询模块21可以例如使用XQuery语言。简单策略数据结构(或模块)30存储简单策略,其使用更简单(和更快)的过滤机制查询,而复杂策略数据结构(或模块)40存储复杂策略,其语法包括诸如"*"的通配符和"〃"表达式。根据情况,策略被人工或自动地放入这些数据结构中。通过同时对两种数据结构执行查询,查询与策略的匹配比使用以上描述的现有方法执行得更快。如果与XML数据对应的策略在简单策略模块30中被识别并且对应的动作在该模块中被识别,则XML数据相应地被动作模块24处理。这时,由复杂过滤器23执行的并行搜索被终止。类似地,如果与XML数据对应的策略在复杂策略数据结构40中被识别,对应的动作在模块40中被识别,则XML数据相应地被动作模块24处理。这时,由简单过滤器22执行的并行搜索被终止。下面描述在本发明的一个优选实施例中的过滤器22和23的结构。应当注意,其它类型的过滤器可用作简单和复杂查询,并且修正DFA以及YFilter和AFilter结构的改变在此仅作为例子进行描述简单DFA结构如以上所指出的,更简单的XPath查询,即没有通配符或后代的查询,被存储在简单策略数据库30中。与以上给出的YFilter和DFA论文类似地,这些过滤器可找出XPath表达式中的共性。然而,根据本发明的用于匹配引擎20的过滤器22合并XPath查询路径的公共前缀,因此,这些查询只被处理一次。由于这是DFA结构,因此,对于在XML文件中处理的标签,最多一个边缘/迁移在DFA中遍历。此外,在迁移不能对与所接收的标签相关联的状态(不存在的状态)进行的时刻,沿着当前文件路径的进一步匹配是不可能的,在DFA中处理的进入标签事件可被忽略,直到接收到当前状态结束标签。简单XPath查询的一个例子在表1中示出。上述查询被存储在图4的例子所示的结构中。当标签a出现在所有查询中时,它被放置在该结构的顶端。在第二层,标签b、c和d被合并,因为它们对于采用各种组合的所有查询是共用的,因此只被处理一次。在下一层,标签d和e被合并,以致组合de只被处理一次。因此,标签a、b与Ql中的标签d—起出现(见最左侧分支),并与Q5中的标签e—起出现;标签a、c与Q2中的标签d—起出现,并与Q3中的标签e—起出现。由于标签a、d与只在查询Q4、Q7中的标签c一起出现,因此,沿着最右侧分支不可能有组合。下一层包括查询Q8、Q5、Q10和Q7的剩余标签,它们不会被再次合并。合并XPath查询的公共前缀导致结构内存的减少,因为重叠查询的前缀只被存储一次。该安排也提供了改善的处理时间,因为多个查询同时通过其状态机推进。复杂查询包括通配符"*"或后代"〃"的查询对复杂策略数据结构40执行。在现有的YFilter/DFA结构中,定位步骤元素可出现在整个结构中的多个位置上,如图1的例子所示。为了进一步加速查询过程并更好地使用内存空间,修正AFilter结构可根据本发明用作存储复杂查询;但是,其它类型的结构也是可以的。修正在于根据本发明的复杂查询结构合并定位步骤元素以节省存储空间的事实。与使用DFA机制相比,优选使用修正AFilter结构,因为现有的AFilter结构允许在试图遍历一组查询状态寻找XML文件结构匹配之前,简单地检查当前来自XML文件的将被处理的标签是否是最后一个,触发XPath查询的状态(定位步骤)。如果XML文件不包含触发状态,则AxisView"反向状态机"将不会被遍历。当前,用于AFilter的StackBranch结构对每个AxisView节点定义一个堆栈,包括通配符元素"*"的特殊堆栈,如图2a-2c所示。这似乎很浪费,因为AxisView结构中的节点数量可能非常多,而在所有StackBranch堆栈中的元素数量将最多只是XML文件的深度。本发明提出采用用于AxisView的所有节点的单个堆栈加上用S^示记的"*"堆栈实现StackBranch。这可以用很少的额外结构来实现。图5a至5c表示图2a_2c所示的例子中的当前活动标签。在此,图5a示出了在接收任何标签之前的堆栈,图5b示出了在接收一组标签〈aXdXa〉之后的堆栈,图5c示出了在接收一组标签〈aXdXaXb〉之后的堆栈。如图5a所示并如以上所提到的,只维持两个堆栈,S^用于堆叠通配符"大",另一个用于所有的文件路径标签。再次重申,可以理解,其它类型的过滤器可用于存储简单和复杂查询;根据本发明,简单和复杂查询被分开存储的事实使得能够同时对两个数据结构执行搜索,这显著加快了查询运行时间,并导致内存空间的节省。如上所述,本发明提供与以上描述的现有方案更重要的优点。即,本发明保持了用单次通过XML文件匹配所有查询的能力。而且,由于不匹配文件的屏蔽在前面执行,因此,遍历查询状态被延迟。由于XML解析事件触发/驱动匹配过程,因此,匹配过程的速度加快了。使得匹配过程加快的再一个特性通过使用修正AFilter过程而可行,其中,运行时存储量使用与文件的深度成比例。在本发明中,运行时堆栈的尺寸减小了,因此避免了YFilter的非确定性。本发明也是内存高效的,因为它避免了指数级的内存消耗以处理复杂查询。此外,根据本发明的策略匹配使用具有相同名字的状态组合存储,以进一步节省内存空间。与现有的匹配引擎相比,内存的更有效使用在于它对于谓词值匹配使用了基于组合范围的结构。权利要求一种对应用层格式化文件执行应用层策略的方法,每一个策略定义一个规则和动作,包括a)分别在简单策略数据结构和复杂策略数据结构中有区别地存储适用于所述应用层格式化文件的简单策略和复杂策略;b)解析作为分层结构中流应用层数据接收的文件,以能够对所述文件中的对象赋值;c)同时查询所述简单策略数据结构和复杂策略数据结构以识别与所述对象对应的所有策略;d)一旦匹配所述对象的所有简单策略和复杂策略都被识别,则停止在所述简单策略数据结构和复杂策略数据结构中对所述对象的查询;以及e)执行由与所述对象对应的简单和复杂策略限定的动作。2.如权利要求1所述的方法,其中,所述文件是XML文件,所述对象是XPath表达式的赋值结果。3.如权利要求2所述的方法,其中,所述简单数据结构存储不使用通配符"*"和后代"〃"表达式的XPath查询。4.如权利要求3所述的方法,其中,所述简单数据结构是确定性有限自动机(DFA)结构。5.如权利要求3所述的方法,其中,查询所述简单数据结构是使用确定性有限自动机(DFA)结构执行的,其中,具有公共前缀的两个或两个以上的XPath查询被合并。6.如权利要求2所述的方法,其中,所述复杂策略数据结构存储使用通配符"*"和后代"〃"表达式的XPath查询。7.如权利要求6所述的方法,其中,所述复杂策略数据结构包括用于表示查询的压縮确定性有限自动机(DFA)结构以及用于表示所述XML文件的当前活动标签的堆栈结构,其中所述堆栈结构用于在接收到所述文件中匹配查询的最终定位步骤的标签时遍历所述DFA结构。8.如权利要求7所述的方法,其中,所述堆栈结构使用用于从所述文件接收的所有标签的单个堆栈和用于所述通配符"*"的堆栈。9.一种对XML文件执行应用层策略的系统,每一个策略定义了一个规则和动作,包括XML解析器,用于解析作为分层结构中的流XML数据接收的XML文件,以能够对所述XML文件中的对象赋值;简单策略数据结构,用于存储不使用通配符"*"和后代"〃"表达式的XPath查询;复杂策略数据结构,用于存储使用通配符"*"和后代"〃"表达式的XPath查询;用于同时查询所述简单策略数据结构和复杂策略数据结构以识别与所述对象对应的所有策略的装置;以及用于执行由与在数据结构中识别的对象对应的策略限定的动作的装置。全文摘要提供了一种XML匹配引擎和方法,其中使用XPath/XQuery策略表达的策略规则与流XML文件匹配。使用两种不同的数据结构用于存储简单XPath查询(无通配符或后代)的组合修正DFA数据结构和用于存储复杂查询(有通配符或/和后代)的修正AFilter结构。当匹配引擎从XML解析器接收到XML标签时,在这两种结构中并行地执行匹配。文档编号G06F17/30GK101765842SQ200880100791公开日2010年6月30日申请日期2008年7月17日优先权日2007年7月30日发明者B·S·布-迪亚布,P·布恩申请人:阿尔卡特朗讯公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1