带有正向和反向轴的流式XPATH处理的方法技术

技术编号:2872036 阅读:174 留言:0更新日期:2012-04-11 18:40
一种用于处理文档的方法,其特征在于,文档包括树结构,树结构又包括许多分支,分支又包括许多节点,该方法包括下列步骤:接收包括搜索条件的查询,其中,该条件包括一组约束,这些约束指定节点之间的关系,其中,任何两个节点之间的关系可以是正向关 系,也可以是反向关系,以便在约束集中指定的关系可以是正向关系、反向关系或者两者都是;接收至少一部分文档;修改搜索条件,以便指定反向关系的约束可以重新表述为指定正向关系的约束,或者指定正向关系的约束可以重新表述为指定反向关系的 约束;使用修改的条件处理文档;以及定位满足搜索条件的一个或多个节点。(*该技术在2023年保护过期,可自由使用*)

【技术实现步骤摘要】
【国外来华专利技术】
本专利技术广泛地涉及信息处理系统的领域,具体来说涉及搜索数据结构的领域。
技术介绍
术语的定义XML-可扩展的标记语言(XML)描述一类叫做XML文档的数据对象,并部分地描述了处理它们的计算机程序的行为。XML文档由叫做实体的存储单位组成,实体包含已分析的或未分析的数据。每一个XML文档都包含一个或多个元素,元素之间的边界由开始标记和结束标记分隔,或者对于空的元素,由空元素标记分隔。来自www.XML.com网站。XPath-XML PATH语言。XPath 1.0作为一种解决XML文档的一部分的语言,是诸如可扩展的样式表语言转换(XSLT)和XQuery之类的进行XML处理的语言的整体组成部分。AlanFreedman,Computer Desktop Encyclopedia,9thEdition,Osborne/McGraw-Hill(2001)(下文将简称为“Freedman”)。XSLT-可扩展的样式表语言转换。一种将XML文档转换为其他XML文档的语言(来自http//www.w3.org/TR/xslt)。Xalan-Xalan是XSLT的Apache版本(请参阅http//xml.apache.org)。DOM-文档对象模型。文档对象模型是一种不依赖于平台和语言的接口,它允许程序和脚本动态地访问和更新XML文档的内容、结构和样式。文档可以被进一步地处理,该处理的结果可以重新放回呈现的页中(来自http//www.w3c.org/DOM)。SAX-XML的简单API。一种在XML分析器和XML应用程序之间的基于事件的编程接口(API)。基于对象的接口是由DOM提供的。Freedman。XML的流式处理-XML文档的流式处理是给予一种对XML文档进行处理的类型的名称,在这种处理方式中,文档不必存储在内存中,文档中的每一个节点至多被访问一次。流式是一个一般概念。流式XPath处理是指在XML文档中“流过”时对XPath表达式进行计算的过程。相关技术的描述基于事件的分析基于事件的分析器,例如,SAX分析器,对XML文档进行扫描,并在它识别到文档的元素标记以及其他组件时产生事件。每一个事件都传达对应元素的名称和级别。事件的产生相当于对文档树的深度优先、预先顺序的遍历,其中,对于每一个元素,生成开始元素事件,然后,以深度优先的顺序处理其子树,最后,生成结束元素事件。基于事件的分析器不会构建树,它们只是中继开始/结束标记(事件)是什么。这些事件由基于事件的分析器的客户端接收。客户端具有以它选择的任何方式处理这些事件的灵活性,包括存储一些事件,以及丢弃其它的事件。XPath如上所述,XPath是一种解决XML文档的一部分的语言,是诸如XSLT和XQuery之类的语言的整体组成部分。这些语言的版本的性能取决于基础XPath引擎的效率。XPath表达式也有被用作访问XML文档的组成部分的通用机制,例如,在文档对象模型(DOM)3中提供了基于XPath的应用程序编程接口(API),用于遍历DOM树。XPath表达式也已经在出版-预订系统中作为指定基于内容的预订的机制得到应用。最新的XPath引擎,例如,随Xalan一起提供的一个,要求整个文档必须在内存中才能对XPath表达式进行计算。对于较大的文档,此方法可能导致开销无法接受。此外,Xalan中的XPath引擎以自然的方式对XPath表达式进行计算,并可能对输入文档执行不必要的遍历。例如,假定有选择文档中的x元素的所有y祖先的诸如/descendant∷x/ancestorty之类的表达式。Xalan XPath引擎是这样对此表达式进行计算的,对整个文档进行一次遍历以定位所有x元素,然后对于每一个x元素,访问其每一个祖先以定位相应的y元素。结果,文档中的一些元素被访问好几次。假设一个人希望定位名为“John”的具有名为“Fred”的所有人(节点)。Xalan引擎将遍历整个文档以访问每一个“John”节点。对于每一个这样的“John”节点,它将遍历其每一个祖先节点以确定他们中是否有人名为“Fred”。然后它将返回所有这样的“Fred”节点。显而易见,“John”节点的每一个祖先都至少被访问两次,一次在遍历以便找出 “John”节点期间,一次在从“John”节点遍历以找出“Fred”节点期间。流式XPath处理在许多环境中,处理XML文档的自然方式是在文档中流动,即,在对输入文档进行分析时在输入文档上计算查询,只存储与查询的结果有关的文档的那些部分。流式XPath的前提是,在许多情况下,可以在对XML文档进行的一次深度优先、文档顺序的遍历中计算XPath表达式。流式XPath的主要优点是它通过在内存中只存储与XPath的计算有关的文档的那一部分,而不是存储整个文档来优化内存利用效率;它加快了执行时间,因为算法刚好访问文档中的每一个节点一次,从而避免了不必要的遍历。已知的处理流式XPath的方法所存在的局限性是,它只能在只包含正向轴的表达式上进行。如果表达式包含反向轴(如父母或祖先),则无法对这样的表达式使用已知的流式XPath处理算法。图1-XML文档的树状表示树是一个由节点组成的数据结构。其中一个节点特别地表示为根节点。树中的除了根节点之外的所有节点在树中都刚好具有一个父节点。XML文档可以表示为一个树,其节点表示文档元素、文本属性、注释和处理指令的结构组件。树中的父子边缘表示子组件包含在其父元素中,其中元素的范围由其开始和结束标记限定。对应于XML文档的树的根在一个包含文档元素的虚拟元素Root中。自此以后我们将就树状表示来讨论XML文档。一个人可以在树的节点上定义任意的顺序。一个这样的顺序可以基于对树的从左到右深度第一的遍历,对于XML文档的树状表示,这种遍历对应于文档顺序。给定树上的一个顺序,我们可以在树上定义一个正向和反向关系的概念。关系R是一个正向关系,如果两个节点x和y之间存在关系R,必须是在树的顺序上x在y前面。同样,关系是一个反向关系,如果每当x与y有关时,那么必须是在树的顺序上x在y后面。例如,假设XML文档的树状表示的文档顺序,子关系和子代关系两者都是正向关系,而父关系和祖先关系两者都是反向关系。图1说明了XML文档的树状表示。为简单起见,我们将专门讲述元素并忽略诸如属性和文本节点之类的项目。因此,树100由文档的虚拟根101和元素构成。为避免XML文档树100和XPath(稍后描述)的树状表示之间产生混淆,我们使用元素来指XML树100的节点。在XML树100中,方框中的标记表示对应的XML文档中的元素标记,标记旁边的括号中的数字表示基于事件的分析器访问节点的顺序。例如,节点102X(1)表示带有标记<X>的元素,是基于事件的分析器访问的第一个节点。对于此顺序,显然,每当一个元素(例如,102)是另一个元素(例如,101)的子元素时,那么,子元素就按此顺序位于父元素的后面。图2-流式XPath流式XPath引擎是如图2所示的结构。XPath表达式211经过分析并被表示为自动机203。XPath引擎201使用分析器205产生的事件(例如,SAX事件),对于每一个事件,自动机203可以进行状态本文档来自技高网...

【技术保护点】

【技术特征摘要】
【国外来华专利技术】

【专利技术属性】
技术研发人员:查尔斯·巴顿飞利浦·查尔斯蒂帕克·格瑶穆康德·瑞格哈瓦查瑞
申请(专利权)人:国际商业机器公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1
相关领域技术
  • 暂无相关专利