CN101329665A - 解析标记语言文档的方法和解析器 - Google Patents
解析标记语言文档的方法和解析器 Download PDFInfo
- Publication number
- CN101329665A CN101329665A CNA2007101101847A CN200710110184A CN101329665A CN 101329665 A CN101329665 A CN 101329665A CN A2007101101847 A CNA2007101101847 A CN A2007101101847A CN 200710110184 A CN200710110184 A CN 200710110184A CN 101329665 A CN101329665 A CN 101329665A
- Authority
- CN
- China
- Prior art keywords
- node
- fragment
- tree
- bilateral
- name space
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/20—Natural language analysis
- G06F40/205—Parsing
- G06F40/221—Parsing markup language streams
Abstract
本发明提供了一种解析标记语言文档的解析方法和解析器。该解析方法包括以下步骤:将该标记语言文档的主体预分割为多个部分;扫描所述多个部分中的每个部分,其中当扫描每个部分时,仅在发现特定标记的情况下才停止对该部分的扫描,并且记录停止扫描的停止点;利用各个停止点将标记语言文档的主体分割为多个片段;并行地解析所述多个片段,并且产生对各个片段的解析结果;以及组合对各个片段的解析结果,形成对该标记语言文档的解析结果。还提出了一种支持名称空间的解析方法。所述解析方法和解析器通过利用多个处理器单元并行地解析单个文档而加快了解析标记语言文档的速度,并且还能够提供对名称空间的良好支持。
Description
技术领域
本发明涉及一种解析标记语言文档的方法和解析器,并且具体涉及一种用于解析可扩展标记语言(XML)文档的方法和解析器。
背景技术
目前,作为万维网联盟(W3C)推荐的通用标记语言,可扩展标记语言(XML)在诸如网络服务、数据库等的各种应用中获得了广泛的使用。XML定义了用于以简单的和人类可读的标记来表示数据的通用语法,并且例如可以表现为配置文件、数据库文件等。对于很多基于XML的应用(尤其是数据库和Webservice)而言,响应时间是一项重要的性能指标。不同的应用对响应时间的要求不同。例如,在大银行的在线交易处理(OLP)系统中,通常要求响应时间为100毫秒或更少,更大的响应时间将会使用户不适。
基于XML的应用的响应时间由很多部分组成,其中,用于XML解析的时间是不可避免的。由于XML解析涉及很多耗时的操作,例如编码转换、标志化(tokenization)、形式合格检查、以及文档类型定义(DTD)/XML大纲验证等,因此,在很多基于XML的应用中,XML解析成为一个性能瓶颈,并且占据了响应时间的主要部分。更严重的是,一些应用使用很大的XML文档。例如,在生命科学和内容管理中,上兆字节的XML文档非常常见,而在某些情况下,甚至需要上吉字节的XML文档。这种大XML文档进一步恶化了XML文档解析性能。通常情况下,在解析GB级别的文件上耗费的时间将多达数十秒,这通常是不可接受的。
因此,加快XML解析的速度以及减少等待时间可以显著提高XML应用的响应速度。为了实现这一目标,人们提出了很多方法,这些方法主要分为两类。一类是基于软件的方法,其可以获得1倍到2倍的性能提升;另一类是基于硬件的方法,其通常使用卸载(offload)引擎,并且能够获得高得多的性能提升。例如,在非专利文档1(B.Nag,“Acceleration Techniques for XMLprocessors”,Proc.XML Conference 2004)中,Nag设计了一种XML卸载引擎(XOE),其通过将标志化操作卸载到该XOE来加快XML解析,并且释放CPU上的计算资源。在非专利文档2(J.van Lunteren,J.Bostian,B.Carey et al,“Xmlaccelerator engine”Proc.the First International Conference Workshop on HighPerformance XML Processing,in conjunction with the 13th International WorldWide Web Conference(WWW2004),New York,NY,USA,May 2004)中,基于可编程状态机技术而提出了一种被称为ZUXA的XML加速引擎,其通过提供针对有条件执行进行了优化的处理模型、以及用于字符和字符串处理的专用指令,克服了基于软件的XML处理的性能瓶颈。此外,在网络服务应用中,大多数XML消息是由机器产生的,因此同一服务中的XML消息可具有非常相似的字节顺序。在观察到这一事实之后,在非专利文档3(T.Takase,H.Miyashita,T.Suzumura et al,“An Adaptive,Fast,and Safe XML Parser Based onByte Sequence Memorization”,Proc.the 14th International World Wide WebConference(WWW2005),May 2005)中,Takase等人实现了一种被称为Deltarser的XML解析器,其中,在以字节顺序给出新的XML文档之后,Deltarser通常不分析文档中的大多数XML语法,而是仅仅将该字节序列与已经处理过的字节序列进行比较,并且再次使用先前的处理结果,从而加快XML解析。然而,上述解析加速方法具有其局限性。前两种方法需要额外的硬件支持,而这些硬件支持在可预见的未来并不容易获得。第三种方法,即Deltarser仅仅针对网络应用的特殊情况进行了优化,对于XML文档结构可能差异很大的一般应用,Deltarser不能取得比传统解析器更好的性能。
近年来,由于单核处理器很快将达到可能的复杂度和速度的物理极限,因此多核处理器正日益成为行业趋势。目前,很多公司在不同领域的市场上提供了多核芯片,例如IBM Cell、IBM Power6、Sun Niagara、Intel Quad-coreprocessor、AMD Dual-core processor等。多核处理器的出现给XML处理带来了新的机会。
多核处理器包括多个处理器单元(PE),利用多个PE来并行地解析XML文档能够减少XML处理时间,从而提高XML应用的性能。根据并行解析的粒度,XML文档并行解析方法可分为两类,其分别在图1(a)和图1(b)中示出:
1.文件级并行解析(FLP)
如图1(a)所示(以两个PE为例),在FLP方法中,将两个XML文档分别分配给两个不同的处理器单元,每个处理器单元解析一个完整的XML文档。例如,非专利文档4(Stefan Letz,Michel Zedler,Tobias Thierer et al,“XMLOffload and Acceleration with Cell Broadband EngineTM”,XTech 2006:BuildingWeb 2.0,Amsterdam,the Netherlands,May 16-19,2006)提出了一种FLP方法,其利用在单个Cell上运行的8个解析线程来并行地解析8个XML文档,从而减少解析这些XML文档所需的总时间。然而,这种方法不能用于对单个XML文档进行并行解析。
2.文件内部级并行解析(IFLP)
如图1(b)所示(以两个PE为例),在IFLP模式中,将一个完整的XML文档分割为两个个片段,由两个PE同时解析这些片段。与FLP模式相比,IFLP模式可以更好地利用处理器资源,减少解析单个XML文档所需的时间。
对于IFLP,需要解决以下几个问题:
(1)如何分解解析任务
为了平衡各个PE之间的工作负荷并且使得能够分析每个片段,应该合理均匀地分割XML文档。
(2)如果解析XML文档片段
分割得到的XML片段往往不符合XML语法,因此,必须能够正确地解析XML文档片段。
(3)如何正确地组合解析结果
在得到对各个片段的解析结果之后,必须正确地组合这些解析结果,所得到的解析结果应当与使用传统的XML解析器来解析该文档的结果一致。
(4)如何支持XML名称空间
XML名称空间是XML文档的一个重要特性。XML文档中的元素从其祖先元素继承名称空间。然而,分割XML文档往往会导致一个元素与其祖先元素分别位于两个不同的片段中,此时,该元素难以通过继承得到其名称空间。在此情况下,IFLP解析器必须能够正确地处理名称空间。
非专利文档5(Wei Lu,Kenneth Chiu and Yufei Pan,“A parallel XMLparser”,http://www.cs.indiana.edu/~welu/pxp_grid06.pdf)提出了一种IFLP方法,其首先预解析整个XML文档以确定XML文档的骨架,并且根据所获得的骨架来分割XML文档以获得多个文档片段,然后由多个PE并行地解析多个文档片段。然而,在该IFLP方法中,由于预解析步骤需要不小的开销并且在并行解析期间各个解析线程之间需要进行复杂通信,因此该方法对于加快解析速度的效果有限,而且,当并行解析线程数目增大时,该方法的性能急剧下降。此外,该方法也不能支持XML名称空间。
发明内容
考虑到现有技术的上述问题而作出了本发明。本发明的一个目的是提供一种解析XML文档的方法和解析器,其能够利用多个处理器单元(PE)来并行解析单个XML文档,从而加快XML文档解析和减少解析时间。本发明的另一目的是提供一种支持名称空间的XML文档并行解析方法。
根据本发明的一个方面,提供了一种解析标记语言文档的方法,该方法包括:预分割步骤,将该标记语言文档的主体预分割为多个部分;扫描步骤,扫描所述多个部分中的每个部分,其中当扫描每个部分时,仅在发现特定标记的情况下才停止对该部分的扫描,并且记录停止扫描的停止点;分割步骤,利用各个停止点将标记语言文档的主体分割为多个片段;解析步骤,并行地解析所述多个片段,并且产生对各个片段的解析结果;以及组合步骤,组合对各个片段的解析结果,从而形成对该标记语言文档的解析结果。
根据本发明的另一方面,提供了一种解析标记语言文档的解析器,该解析器包括:预分割部件,将该标记语言文档的主体预分割为多个部分;扫描部件,扫描所述多个部分中的每个部分,其中当扫描每个部分时,仅在发现特定标记的情况下才停止对该部分的扫描,并且记录停止扫描的停止点;分割部件,利用各个停止点将标记语言文档的主体分割为多个片段;多个处理器单元,每个处理器单元被分配了所述多个片段中的一个,所述多个处理器单元并行地解析所述多个片段,并且产生各自的解析结果;以及组合部件,组合所述多个处理器单元的解析结果,从而形成对该标记语言文档的解析结果。
根据本发明的另一方面,提供了一种解析标记语言文档的方法,其中,该标记语言文档被分割为多个片段,所述方法包括以下步骤:1)并行地解析所述多个片段,并且产生利用双边(DE)树表示的对每个片段的解析结果,其中,在解析第一片段时,将对应于该片段的DE树中的节点的祖先节点变量设置为NULL,并且将其本地名称空间变量设置为从该DE树的根节点解析到该节点的名称空间集合,和在解析其它片段时,将对应于该片段的DE树的最左路径上的节点的祖先节点变量设置为NULL并将其本地名称空间变量设置为空,而将其余节点中的每个节点的祖先节点变量设置为所述最左路径上与其最近的节点,并将其本地名称空间变量设置为从该最近节点解析到该节点的名称空间集合;以及2)从左向右依次组合对应于各个片段的DE树,从而形成对该标记语言文档的解析结果,其中,在组合对应于两个相邻片段的双边树时,将组合后的节点的祖先节点变量设置为NULL,并且将其本地名称空间变量值设置为左侧片段相对应的双边树的对应节点的本地名称空间变量的值。
通过利用多核处理器的多个PE来并行地解析单个XML文档,根据本发明的XML文档解析方法和解析器加快了XML文档解析速度,并且减少了解析所需的时间。在XML文档较大的情况下,根据本发明的XML文档解析方法和解析器效果更加明显。此外,对于定义了不同的名称空间的XML文档,根据本发明的XML文档解析方法和解析器也能够提供良好的支持。
附图说明
通过结合附图对本发明的实施例进行详细描述,本发明的上述和其它目的、特征、优点将会变得更加清楚,其中:
图1(a)和图1(b)分别示出并行解析XML文档的两种粒度;
图2是示出根据本发明第一实施例的XML文档解析方法的流程图;
图3示出根据本发明第一实施例的、在图2中示出的步骤S20中的操作的流程图;
图4是示出利用传统的XML解析器解析整个XML文档时的下推自动机(PDA)中的状态转移图;
图5是示出利用传统的XML解析器解析示例XML文档1得到的解析结果;
图6示出利用根据本发明第一实施例的解析方法解析示例XML文档1的片段得到的解析结果;
图7示出根据本发明第一实施例的、在图2中示出的步骤S40中的操作的流程图;
图8示出根据本发明第一实施例的、通过组合图6所示的DE树T1和T2得到的新DE树;
图9示出根据本发明第一实施例的、通过组合图8所示的新DE树和图6所示的DE树T3得到的最终解析结果;
图10是根据本发明第二实施例的XML文档解析方法的流程图;
图11是添加了对名称空间的支持之后的示例XML文档1的第二片段的DE树;
图12示出了利用根据本发明第二实施例的XML文档解析方法解析示例XML文档2的片段而得到的各个DE树;
图13示出了根据本发明第二实施例的、组合图12所示的DE树T1和T2得到的新DE树;
图14示出了根据本发明第二实施例的、组合图13所示的新DE树和图12所示的DE树T3得到的最终解析结果;以及
图15是示出根据本发明的XML文档解析器的结构的框图。
具体实施方式
在下文中,将参照附图来详细地描述根据本发明的XML文档解析方法和解析器。
XML文档包括序言prolog部分和主体部分。序言部分指明该XML文档所使用的标准的版本号、编码类型以及文档类型定义等,主体部分是从第一个元素开始标签到文档末尾的部分,其包括XML文档的具体内容。在本发明中,仅对XML文档的主体部分进行并行解析。
(第一实施例)
首先,参照附图来描述根据本发明第一实施例的XML文档并行解析方法。假设多核处理器具有N个PE。所述方法使用被称为PParser的解析器来进行解析。
图2示出了根据本发明第一实施例的XML文档并行解析方法的流程图。
如图2所示,在步骤S10中,PParser在解析XML文档之前对该文档进行预处理,从该文档的序言中提取用于后续处理的必需信息,例如XML文档的版本、编码信息、文档类型定义(DTD)等。由于XML文档的序言部分与主体部分相比短得多,因此,与整个解析过程相比,该预处理步骤的时间开销很小。
接下来,在步骤S20中,PParser利用将根据本发明的随机切入然后扫描(RCTS)方法将XML文档分割为多个片段以便进行并行解析,所述RCTS方法将在后面进行描述。
然后,在步骤S30中,PParser利用多个PE来并行地解析所述多个片段,并且产生对各个片段的解析结果,其中,利用与文档对象模型(DOM)类似的树来表示对每个片段的解析结果。
最后,在步骤S40中,PParser组合每个片段的解析结果,从而形成对所述XML文档的最终解析结果。
下面,将参照附图来更详细地描述根据本发明的XML文档解析方法的各个步骤。
首先,参照图3来详细描述根据本发明第一实施例的XML文档解析方法的步骤S20。图3示出了图2中的步骤S20中的操作(即,利用RCTS方法来分割XML文档)的流程图。
在XML文档中,作为XML规范,左尖括号“<”是一个保留字符。尽管在XML主体部分中存在大量的左尖括号,但是总地来说,它只有以下两种可能出现在XML文档中:
(1)被用作标记定界符,即,位于以“<”开始的逻辑结构的开头,所述逻辑结构包括XML文档中的所有独立的结构,例如元素的开始标签和结束标签、注释、处理指令、CDATA等;
(2)位于三种特殊结构内部,这三种特殊结构包括注释、处理指令(PI)以及CDATA,其语法如下:
注释:<!--...-->
处理指令:<?Target...?>
CDATA:<![CDATA[...]]>
注意到以上事实,在根据本发明的RCTS方法中,可以使用左尖括号“<”作为分割点来分割XML文档的主体部分,从而可以将每个片段的初始解析状态限制为以上两种可能情况。
参照图3,在步骤S201中,由于多核处理器具有N个PE,因此PParser将XML文档的主体部分预分割为N个部分。优选地,PParser将XML文档的主体部分作为连续的字符序列而均等地预分割为N个部分。然而,应当认识到:均等地分割主体部分是为了平衡用于解析各个片段的PE的工作负荷;实际上,也可以不均等地分割主体部分。此外,尽管如上所述根据可用PE的数目N来预分割XML文档的主体部分,但是这只是为了充分利用所有可用的PE来进行并行解析,从而尽可能地加快解析速度;实际上,也可以将所述主体部分预分割为少于N个部分。
接下来,在步骤S202中,PParser对所述N个部分进行扫描,其中,PParser为所述N个部分中的每一个部分形成一个虚拟扫描器,每个虚拟扫描器负责扫描一个部分,并且,PParser以串行的方式依序执行这N个虚拟扫描器的扫描任务。具体地说,将每个虚拟扫描器的扫描起始位置设置为要扫描的相应部分的开头;在扫描该部分期间,虚拟扫描器从扫描起始位置从左向右扫描该部分的字符串;一旦遇到左尖括号“<”,虚拟扫描器就停止扫描该部分,并且记录此时的停止点。然后,PParser启动下一虚拟扫描器,以继续扫描下一部分。在扫描了这N个部分之后,获得M个停止点。由于虚拟扫描器在扫描期间可能不会遇到左尖括号“<”,因此,停止点的数目“M”可能等于或小于N。
随后,在步骤S203中,PParser使用所述M个停止点作为分割点(有一个停止点位于文档开头),将XML文档主体部分分割为M个片段。
应当认识到:在上述扫描步骤S202中,虚拟扫描器对每一部分的扫描方向不限于从左向右,而是也可以从右向左进行扫描,在此情况下,应当将虚拟扫描器的扫描起始位置相应地设置为每个部分的末尾。此外,作为停止扫描的标志,不仅可以使用左尖括号“<”,还可以使用右尖括号“>”;并且,当遇到所述标志时,虚拟扫描器可以立即停止扫描这一部分,也可以继续扫描若干个字符之后再停止扫描这一部分。
还应当认识到:可以仅使用一个PE来执行上述RCTS方法。即,利用一个PE来将XML文档预分割为N个部分,然后该PE以串行的方式依次执行N个虚拟扫描器的扫描任务,并且利用所得到的停止点来分割XML文档。
下面,结合具体的例子来说明根据本发明的RCTS方法。假设多核处理器有三个处理器单元。示例XML文档1如下:
[示例XML文档1]
1<?xml version=″1.0″?>
2 @§<INVENTORY>
3 <BOOK>
4 <TITLE>book1</TITLE>
5 <AUTHOR>
6 <NAME>author1</NAME>
7 <NAM@E>author2§</NAME>
8 </AUTHOR>
9 <PRICE>$21.95</PRICE>
10 </BOOK>
11 <BOOK>
12 <TITLE>book2</TITLE>
13 <AUT@HOR>
14 §<NAME>author3</NAME>
15 <NAME>author4</NAME>
16 </AUTHOR>
17 <PRICE>$4.25</PRICE>
18 </BOOK>
19 </INVENTORY>
在该示例XML文档1中,第1行为序言部分,第2-19行为主体部分。由于多核处理器具有三个处理器单元,因此,在步骤S201中,将XML文档的主体部分作为字符串序列而均等地预分割为三个部分。如上面所示,用符号“@”来表示每一部分的开头。可以看到,符号“@”分别位于第2行、第7行和第13行。应当注意:上述文档中的符号“@”仅仅是为了说明预分割点的位置,其实际上并不存在于该文档中。接下来,在步骤S202中,PParser为所述三个部分中的每个部分形成一个虚拟扫描器,将虚拟扫描器的扫描起始位置设置为相应部分的开头(即,符号“@”的位置),然后,以串行的方式依序执行每个虚拟扫描器的扫描任务,其中,每个虚拟扫描器从扫描起始位置起从左向右扫描每个部分的字符串序列,一旦遇到左尖括号“<”,虚拟扫描器就停止扫描该部分,记录相应的停止点。然后,启动下一虚拟扫描器以继续扫描下一部分。在上面的文档中,使用符号“§”来表示各个停止点;可以看到,所获得的三个停止点分别位于第2、7和14行,三个虚拟扫描器的扫描距离分别为1、10和7个字节(假设换行符也占用一个字节)。同样,符号“§”仅仅是为了说明停止点的位置,其实际上并不存在于文档中。最后,在步骤203中,PParser利用所得到的三个停止点作为分割点将示例XML文档1分割为三个片段。
与现有技术的其它分割方法相比,根据本发明的RCTS方法至少有以下优点:
(1)使用左尖括号“<”分割XML文档使得能够将每个片段的初始解析状态限制为仅仅两种可能状态,便于后续的解析。
(2)几乎避免了预扫描。由于左尖括号“<”在XML文档中出现的频率非常高,因此每个虚拟扫描器的扫描距离非常短,由此导致的时间开销和处理资源开销很小。
(3)片段长度相近,因此,在并行解析这些片段时,可以更加平衡地使用处理资源。
如上所述,在完成步骤S20之后,执行步骤S30,在这一步骤中,PParser将在步骤S20中获得的M个XML文档片段分别分配给M个PE,由这M个PE来并行地解析这些片段,并且产生相应的解析结果。下面,参照图4-6来详细描述在步骤S30中对每个片段进行解析的方法。
首先,需要确定每个片段的初始解析状态。
图4示出了用于解析整个XML文档的下推自动机(PDA)中的状态转移,其中,圆圈和有向弧分别表示解析状态和状态转移,矩形表示解析过程,该解析过程是状态和状态转移的集群(cluster)。
当利用传统的XML文档解析器解析整个XML文档时,解析以State_Start状态开始。在解析序言部分之后,解析进入State_CE(元素内容)状态,这意味着解析处于元素内部。在State_CE状态下,基于所读入的不同字符序列,PE调用不同的解析过程来解析不同的XML结构,例如元素的开始标签、结束标签、Comment(注释)、CDATA、PI、Reference(引用)、以及CharData。在解析了整个结构之后,解析状态再次返回State_CE状态。
此外,使用与State_CE相关联的堆栈来存储从根节点到当前节点的路径上的元素开始标签。当识别出元素开始标签时,将该开始标签推入堆栈中。当识别出元素结束标签时,弹出位于堆栈顶部的开始标签,并且将该开始标签与所识别的结束标签进行比较,如果此时堆栈为空或者开始标签与结束标签不匹配,则将报告错误。图5示出了利用传统的XML解析器解析示例XML文档1的解析结果,该结果是以DOM树来表示的。当利用根据本发明的XML文档并行解析方法来解析该XML文档时,应当获得与图5相同的解析结果。
如上所述,利用RCTS方法获得的XML文档片段均以左尖括号“<”开始,其初始解析状态处于State_CE(如图4中的灰色圆圈所示)或者解析三种特殊结构的内部(如图4中的灰色矩形所示)。由于不知道上下文,因此不能确定每个片段的初始解析状态。对此,考虑到左尖括号“<”出现在三种特殊结构的概率相当低这一事实,将每个片段的初始解析状态都假设为State_CE,然后仅对每个片段解析一次。在后续的组合过程中,如果发现对某个片段所做的假设是错误的,则重新解析该片段,同样,重新解析的概率相当低。
在确定了片段的初始解析状态之后,PE开始解析每个片段。
XML文档中的每个逻辑结构可以被视为被包括在开始标签和结束标签中。例如,在Comment结构中,其开始标签和结束标签分别为“<--”和“-->”。对于不具有开始标签和结束标签的结构,例如CharData,假设其开始标签和结束标签存在。因此,当解析XML文档片段时,将识别出一系列开始标签和结束标签。利用二元组来表示开始标签或结束标签:Tag={type,name}。其中,type字段表示标签类型,并且根据不同的逻辑结构而具有以下几种可能的值:
SE、EE:元素的开始标签和结束标签;
SCO、ECO:Comment的开始标签和结束标签;
SCD、ECD:CDATA的开始标签和结束标签;
SPI、EPI:PI的开始标签和结束标签;
SRE、ERE:Reference的开始标签和结束标签;
SCH、ECH:CharData的虚拟开始标签和虚拟结束标签。
并且,如果type字段的值是SE或EE,则使用name字段来存储元素名称;否则将name设置为NULL。
在本发明中,引入了一种新的数据结构,即,双边(DE)树。DE树采用与DOM树相似的树状结构,其节点的数据结构与DOM相同。二者不同之处在于:在DOM树中,所有解析信息都被存储在树的节点中,树的分支仅仅表示各个节点之间的关系;而在DE树中,在树的分支中也存储某些解析信息,包括标签类型、元素名称等,因此,也利用二元组来表示其分支的数据结构,即branch={type,name}。
利用五元组Ri={F,T,S,E,C}来表示对片段的解析结果,其中,F表示该片段自身,其被预留用于在所假设的初始解析状态错误的时候进行重新解析,T是解析该片段得到的DE树,S是指向T中的初始解析节点的指针,E是指向T中的结束解析节点的指针,C是表示解析结果是否有错误的标志,其具有3个可能的值:ERROR(在解析时发生至少一个错误)、CORRECTNESS_CE(解析结束于状态State_CE)、CORRECTNESS_SS(解析结束于特殊结构的解析状态下)。
在步骤S30中,每个PE按照以下原则来解析相应的片段:
1.如果识别出开始标签,则DE树向下生长;
2.如果识别出结束标签,则DE树向上生长。
具体地说,每个PE按照以下步骤来解析相应的片段:
1)在开始时,PE生成只有一个节点的DE树,将初始解析状态设置为State_CE状态,然后读入下一个字符;
2)在State_CE状态下,PE根据读入的不同字符序列而执行不同的操作:
(1)如果识别出元素开始标签,则从当前节点产生一个下行分支。将该下行分支的type字段设置为SE,并且将其name字段设置为所述元素开始标签中的元素名称。随后,解析状态返回State_CE,并且将当前节点设置为新生成的节点。
(2)如果识别出元素结束标签,则从当前节点产生一个上行分支。将该上行分支的type字段设置为EE,并且将其name字段设置为所述元素结束标签中的元素名称。如果此时发现在DE树中存在一个平行的下行分支,则比较这两个分支的type字段和name字段。如果二者匹配,则解析状态返回State_CE,并且将当前节点设置为上行分支指向的节点;如果二者不匹配,则报告错误。
(3)当识别出其它逻辑结构的开始标签时,首先从当前节点生成一个下行分支,并且将该分支的type字段设置为所解析的结构的开始标签,然后,按照以下两种情况进行操作:
A.如果在对该片段的解析完成之前没有发现对应的结束标签,则解析状态停止于对当前结构进行的解析内部,并且将当前节点设置为该下行分支指向的节点。
B.如果在对该片段的解析完成之前发现了对应的结束标签,则从当前节点生成上行分支,并且将该上行分支的type字段设置为该结束标签。然后,解析状态返回State_CE,并且将当前节点设置为该上行分支指向的节点。
PE从左向右依序读入相应XML文档片段的字符序列,并且如上所述构造DE树,直到解析了最后一个字符为止,在此期间,PE同步地更新包括S、E和C的其它解析参数。
应当注意,每个片段的结束解析状态仅有两种可能,即State_CE和解析三种特殊结构的内部。如果某个片段的结束解析状态不是这两种状态,则报告错误。
如上所述,根据本发明第一实施例的XML文档解析方法利用M个PE来并行地解析M个片段,从而得到作为解析结果的M个DE树。
仍然以上述示例XML文档1为例,通过利用根据本发明第一实施例的解析方法来解析其三个片段,可以得到三个DE树T1、T2、和T3,它们在图6中示出,其中,标有“S”的节点是初始解析节点,而标有“E”的节点是结束解析节点。
本领域技术人员应当认识到的是:尽管在上面给出了一种解析XML文档片段的特定方法,但是实际上,在本领域中有很多类似的方法能够解析所述片段,并且得到与本发明(例如,如图6所示)相似的解析结果和双边树,因此,解析XML文档片段的方法不限于上面给出的特定方法。
如上所述,在完成对每个XML文档片段的解析之后,在步骤S40中,PParser组合M个DE树,以得到对整个XML文档的解析结果。在组合阶段,需要考虑两个问题:
(1)如上所述,在解析每个片段时,将每个片段的初始解析状态均设置为State_CE。然而,对于某些片段,该假设有可能是错误的,此时,应当重新解析这些片段;
(2)开始标签和结束标签应当正确地嵌套。来自相同元素的开始标签和结束标签可能分布在两个不同的片段中,应当在组合阶段检查它们的嵌套。
此外,为了避免组合结果出现错误,应当按照从左到右的顺序组合DE树。具体地说,首先组合第一和第二DE树,然后将组合得到的新的DE树与第三DE树组合,依次类推,直到最后一个DE树被组合为止。
图7示出了在图2的步骤S40中组合DE树的方法的流程图。
如图7所示,在步骤S401中,PE按照从左向右的顺序读入两个DE树。假设C左是与左侧DE树相对应的、表示其解析结果是否有错误的标志,C右是与右侧DE树相对应的、表示其解析结果是否有错误的标志。在步骤S402中,PE检查C左和C右,以便确定它们中的任一个是否为ERROR。如果在步骤S402中确定C左和C右中的任一个或全部为ERROR,则这意味着相应片段的解析结果是错误的,组合过程终止,此后,PE将重新解析出现错误的片段。
另一方面,如果在步骤S402中确定C左和C右均不是ERROR,则组合过程进行到步骤S403,在步骤S404中,PE确定C左是否等于CORRECTNESS_SS。如果在步骤S403中确定C左等于CORRECTNESS_SS,则这意味着左侧DE树的终止解析状态停止在解析三种特殊结构的内部,因此对于右侧DE树的初始解析状态是错误的,此时,组合过程终止,此后,PE将重新解析右侧片段。另一方面,如果在步骤S403中确定C左不等于CORRECTNESS_SS,则这意味当前DE树的结束解析状态是State_CE,并且对于右侧DE树的初始解析状态的假设是正确的,此时,组合过程进行到步骤S404。
在步骤S404中,PE在右侧DE树中找出从其初始解析节点S到其根节点的上行路径作为第二组合路径,并且确定该上行路径上的节点的数目Pathlength。
接下来,在步骤S405中,PE在左侧DE树中,从其结束解析节点E起沿着朝向根节点的方向找出具有相同数目(即,Pathlength)的节点的上行路径,作为第一组合路径。
然后,在步骤S406中,PE将第一和第二组合路径上的分支的type字段和name字段进行比较以确定二者是否匹配。如果在步骤S406中确定二者不匹配,则报告错误,并且组合过程终止。另一方面,如果在步骤S406中确定二者匹配,则在步骤S407中,PE组合第一上行路径和第二上行路径上的节点,将组合后的分支的type字段和name字段值设置为第一组合路径(或第二组合路径)上的对应分支的type字段和name字段值,将组合后的新DE树的初始解析节点和结束解析节点分别设置为左侧DE树的初始解析节点和右侧DE树的结束解析节点,并且相应地修改其它内部解析信息。然后,组合过程结束。
为了便于理解上述组合方法,下面仍然结合上述示例XML文档1来说明该组合方法。对上述示例XML文档1的片段解析结果,即DE树T1、T2和T3已在图6中示出。
首先,PE按照从左到右的顺序读入位于左侧的第一DE树T1和位于右侧的第二DE树T2。然后,PE检查与DE树T1和T2相对应的标志C。在此示例中,DE树T1和T2的标志C均为CORRECTNESS_EC,因此,解析过程不存在错误,可以继续组合操作。接下来,PE在第二DE树T2中,找出从其初始解析节点S到其根节点的上行路径作为第二组合路径,并且确定此上行路径上的节点数目。如图6所示,第二组合路径位于第二DE树T2的最左侧,并且其上的节点(灰色节点)数目Pathlength为4。然后,PE在第一DE树T1中,从其结束解析节点起沿着朝向根节点的方向找出具有相同数目(即,4个)节点的上行路径,作为第一组合路径。如图6所示,第一组合路径位于第一DE树T1的最右侧(以灰色节点表示该组合路径上的节点)。
然后,将从第二DE树T2的初始解析节点开始的第二组合路径上的节点(4个)与从第一DE树T1的结束解析节点开始的第一组合路径上的对应节点(4个)分别组合,获得组合后的新节点,由此,将第一DE树T1与第二DE树T2相组合,形成组合后的新DE树T。该新DE树T在图8中示出。在此组合过程中,由于第一组合路径和第二组合路径上的分支的type字段和name字段互相匹配,因此将组合后的分支的type字段和name字段值设置为第一组合路径(或第二组合路径)上的对应分支的type字段和name字段值,将新DE树T的初始解析节点设置为第一DE树T1的初始解析节点,将新DE树T的结束解析节点设置为第二DE树T2的结束解析节点,并且相应地修改其它内部解析信息。至此,完成了第一DE树T1和第二DE树T2的组合。
接下来,按照同样的方式将DE树T与下一DE树T3相组合,得到最终的组合结果,其在图9中示出。比较图5和图9,可以发现使用根据本发明第一实施例的的并行解析方法得到的解析结果与传统XML解析方法一致。
在上文中描述了根据本发明第一实施例的并行解析XML文档的解析方法,其中并没有涉及XML名称空间。然而,由于XML名称空间是XML规范中的重要特性,因此对XML名称空间的支持是非常重要的。下面,将描述根据本发明第二实施例的、能够支持XML名称空间的XML文档解析方法。
(第二实施例)
XML名称空间用于解决XML文档中的名称冲突问题,它是XML规范中的一个重要特性。当XML文档中定义了不同的名称空间时,如果XML解析器不能支持名称空间,那么将导致最终解析结果错误。
在XML文档中,元素应当从其所有祖先元素继承名称空间。对于传统的XML解析器来说,由于解析是以串行的方式进行的,因此对名称空间的支持并不是问题。然而,对于并行解析来说,由于在分割XML文档时有可能将元素和其祖先元素划分到不同的片段中,因此在单独解析每个片段时,元素不能从其祖先元素继承名称空间。根据本发明第二实施例的XML文档并行解析方法解决了这个问题。
为了支持名称空间,在根据本发明第二实施例的XML文档并行解析方法中,在利用PE解析每个片段时,在DE树的每个节点上增加一个新的字段NS,其用于表示生成该节点时的所有可见名称空间。
一个节点的可见名称空间可由两部分组成,即基本名称空间和本地名称空间。基本名称空间是从一个祖先节点继承的名称空间,本地名称空间是在从该祖先节点解析到当前节点而获得的名称空间。因此,将节点的NS字段定义为具有两个变量,即变量pAncestor和变量localns。变量pAncestor是指向祖先节点的指针,其表示该祖先节点与当前节点之间的继承关系。变量localns是名称空间集合,其包括从祖先节点到当前节点的路径上的所有名称空间。因此,对于当前节点来说,pAncestor所指向的祖先节点的名称空间是基本名称空间,而localns中的名称空间是本地名称空间。
在定义了字段NS的变量pAncestor和变量localns之后,可以将DE树中的节点分为以下三类:
如果节点的pAncestor为NULL且localns为空,则该节点为未知名称空间节点;
如果节点的pAncestor为NULL且localns非空,这意味着可以从localns直接获得名称空间,因此该节点为直接名称空间节点;
其它节点(即pAncestor不为NULL的节点)为间接名称空间节点。通常情况下,为了获得间接名称空间节点的所有可见名称空间,需要进行若干次指针引用操作(当其祖先节点也是间接名称空间节点时),这将导致不可预测的操作代价。在根据本发明第二实施例的XML文档解析器中,只需要进行一次指针引用操作即可获得间接名称空间节点的名称空间。
图10示出了根据本发明第二实施例的并行解析XML文档的方法。在根据本发明第二实施例的XML文档解析方法中,预处理步骤S1010和分割步骤S1020与第一实施例相同,为简明起见,省略对这两个步骤的描述。
在解析步骤S1030中,除了对于第一实施例中的步骤S30描述的操作之外,还执行以下附加操作,为简明起见,省略对相同操作的描述。
假设p是指向当前解析节点的指针,root是指向当前片段的根节点的指针,则在解析过程中每次改变p时:
(1)如果当前片段是第一片段(最左侧的片段),则将当前节点的NS字段中的变量pAncestor设置为NULL,并将变量localns设置为从root解析到p获得的名称空间集合,即,节点p为直接名称空间节点;
(2)如果当前片段不是第一片段,则
a)如果p==root(即,当前节点是根节点),则将当前节点p的NS字段中的变量pAncestor设置为NULL,并变量localns设置为空。也就是说,当前节点p是未知名称空间节点;
b)如果p≠root(即,当前节点不是根节点),则将当前节点p的NS字段中的变量pAncestor设置为指向在该片段最左路径上并且距当前节点p最近的节点,并将变量localns设置为从所述最近节点解析到当前节点获得的名称空间,即当前节点p为间接名称空间节点。
与本发明第一实施例中的DE树相比,在利用根据本发明第二实施例的解析方法得到的DE树中,除了其它参数之外,其每个节点还具有所添加的NS字段,该NS字段具有指向祖先节点的变量pAncestor和表示本地名称空间的变量localns。
对于上述示例XML文档1,在如上所述添加了对名称空间的支持之后,其第二片段T2(参见图6)的DE树如图11所示,其中,以灰色节点示出组合路径上的节点。该组合路径位于DE树的最左侧,并且其上的点均为未知名称空间节点;T2上的其它节点均为间接名称空间节点,并且它们的名称空间可以通过引用组合路径上的点的名称空间获得。在图11中,节点之间的引用关系用虚线示出。
返回图10,在组合步骤S1040中,除了对于第一实施例的组合步骤S40描述的操作之外,还执行以下附加操作(同样,为简明起见,省略对相同操作的描述):
当组合在解析步骤S1030中得到的DE树时,按照与第一实施例相同的方式找出第一DE树(位于左侧)上的第一组合路径以及第二DE树(位于右侧)上的第二组合路径。将第一DE树上的节点表示为p1,并且将第二DE树上的节点表示为pr;
接下来,在组合第一组合路径和第二组合路径上的节点时,将第二组合路径上的节点pr合并到第一组合路径上的节点p1中;将合并后的节点的变量pAncestor设置为NULL,并且将其变量localns的值设置为p1的localns变量的值。
可以发现以下事实:在解析步骤S1030之后,DE树中的左组合路径上的节点均为未知名称空间节点;并且任何间接名称空间节点的NS字段中的变量pAncestor均指向一个未知名称空间节点。此外,在组合的任何阶段中,最左侧的DE树的所有节点都是直接名称空间节点或间接名称空间节点,而对于每个间接名称空间节点,其变量pAncestor都指向一个直接名称空间节点。
根据以上事实,可以推出以下结论:在两个DE树的每个组合中,最多需要一次指针引用操作来将组合后的节点转换为直接名称空间节点;在通过组合得到的最后的DE树中,最多需要一次指针引用操作来获得任一节点的名称空间。
因此,根据本发明第二实施例的XML文档并行解析方法能够很好地支持XML名称空间。
下面,将给出利用根据本发明第二实施例的XML文档解析方法来解析定义了名称空间的文档的具体示例。
[示例XML文档2]
<?xml version=″1.0″>
<k1:INVENTORY xmlns:k1=′AA′xmlns:k2=′BB′>
<k1:BOOK>
<k2:TITLE>BOOK</k2:TITLE>
<k2:AUTHOR>
<NAME>Author1</NAME>
<NAME>Author2</NAME>
@</k2:AUTHOR>
<k2:PRICE>$21.95</k2:PRICE>
</k1:BOOK>
<k1:BOOK xmlns:k2=′CC′>
<k2:TITLE>book2</k2:TITLE>
<k2:AUTHOR>
<k2:NAME>Author3</k2:NAME>
@ <k2:NAME>Author4</k2:NAME>
</k2:AUTHOR>
<k2:PRICE>$4.25</k2:PRICE>
</k1:BOOK>
</k1:INVENTORY>
在上面的示例文档中,利用符号“@”示出了将该XML文档分割为三个片段所使用的分割点。图12示出了在解析步骤S1030中解析三个片段得到的三个DE树。图13示出了在组合步骤S1040中组合前两个DE树得到的组合结果。图14示出了在组合步骤S1040中将图13所示的组合结果与第三个DE树组合得到的最终结果。该最终结果与使用传统XML解析器得到的解析结果是一致的。
应当注意:尽管在上面将根据本发明第二实施例的解析方法描述为在第一实施例中的片段解析步骤S30和组合步骤S40的基础上执行附加步骤以由此支持XML名称空间,但是本领域技术人员应当认识到:根据本发明第二实施例的解析方法的基础并不限于第一实施例所述的解析方法和组合方法,而是可以通过在任何片段解析方法和相应的组合方法的基础上执行所述附加步骤来实现对XML名称空间的支持,只要该片段解析方法产生与本发明所述的双边树相同或相似的树作为解析结果并且相应的组合方法通过将组合这些树来获得最终的解析结果即可。
在上文中,描述了根据本发明实施例的XML文档解析方法。下面,将参照附图来描述根据本发明的XML文档解析器。
图15是示出根据本发明的XML文档解析器PParser 100的结构的框图。如图15所示,PParser 100包括预处理部件110、预分割部件120、扫描部件130、分割部件140、多个处理器单元150-1、PE 150-2、...PE 150-N、以及组合部件160。
预处理部件110用于在解析XML文档之前从XML文档的序言中提取后续解析过程所需的信息,例如XML文档的版本、编码信息、文档类型定义(DTD)等。
预分割部件120、扫描部件130和分割部件140共同执行上文所述的RCTS方法,从而将XML文档分割为多个片段。
详细地讲,预分割部件120将XML文档的主体部分预分割为多个部分。优选地,预分割部件120根据可用处理器的数目N来将XML文档的主体部分预分割为N个部分。此外,预分割部件120最好均等地分割XML文档。
接下来,扫描部件130对所述N个部分进行扫描。扫描部件130为所述N个部分中的每个部分形成一个虚拟扫描器,每个虚拟扫描器负责扫描一个部分,然后,扫描部件130以串行的方式依序执行这N个虚拟扫描器的扫描任务。为此,扫描部件130将每个虚拟扫描器的扫描起始位置设置为要扫描的相应部分的开头;在扫描该部分期间,虚拟扫描器从该部分的开头起从左向右扫描该部分的字符串;一旦遇到左尖括号“<”,虚拟扫描器就停止扫描该部分,并且记录此时的停止点。然后,扫描部件130启动下一虚拟扫描器,并且继续扫描下一部分,直到扫描完最后一部分为止。在扫描完成之后,将获得M个停止点(如上文所述,M≤N)。
随后,分割部件140使用所获得的M个停止点作为分割点将XML文档主体分割为M个片段。
在所述分割完成之后,分割部件140将所得到的M个片段分别分配给M个处理器单元PE 150-1、PE 150-2、...PE 150-M,由这M个处理器单元并行地解析这些片段,并且产生各自的解析结果。每个处理器单元解析相应片段的方法与上面针对根据本发明的第一实施例和第二实施例的XML文档解析方法中的相应操作相同,为简单起见,在这里省略对其的描述。同样,应当认识到:处理器单元解析各个片段的方法并不限于在此给出的特定方法,实际上,在本领域中存储在很多片段解析方法能够得到本发明所述的双边树相同或相似的树作为解析结果。
接下来,组合部件160组合所述多个处理器单元的解析结果,从而形成对整个XML文档的解析结果。具体的组合方法与上面针对根据本发明的第一实施例和第二实施例的XML文档解析方法中的相应操作相同,为简单起见,在这里省略对其的描述。
应当认识到:扫描部件130的扫描方向不限于从左向右,而是也可以从右向左进行扫描。此外,作为停止扫描的标志,不仅可以使用左尖括号“<”,还可以使用右尖括号“>”;并且,当遇到所述标志时,虚拟扫描器可以立即停止扫描这一部分,也可以继续扫描若干个字符之后再停止扫描这一部分。
此外,尽管上面将执行根据本发明的RCTS方法的部件描述为三个独立的部件(即,预分割部件120、扫描部件130和分割部件140),但是也可以使用多核处理器中的单个处理器单元来实现这些部件的功能,即,该处理器单元首先将XML文档的主体部分预分割为N个部分,然后像扫描部件130那样依序扫描这N个部分以获得M个停止点,最后利用这M个停止点作为分割点来将XML文档分割为M个部分。同样,所述预处理部件110、组合部件160均可以用多核处理器的单个处理器单元来实现。
另外,尽管在上文中在XML语言的语境下描述了本发明,但是本领域技术人员应当理解:根据本发明的XML文档解析方法和解析器也适用于解析其它一些标记语言文档,例如HTML文档等。
尽管在上文中参考本发明的特定实施例具体示出和描述了本发明,但是本领域技术人员应该明白,在不脱离所附权利要求限定的本发明的精神和范围的情况下,可以对其进行形式和细节上的各种修改。
Claims (21)
1.一种解析标记语言文档的方法,包括:
预分割步骤,将该标记语言文档的主体预分割为多个部分;
扫描步骤,扫描所述多个部分中的每个部分,其中当扫描每个部分时,仅在发现特定标记的情况下才停止对该部分的扫描,并且记录停止扫描的停止点;
分割步骤,利用各个停止点将标记语言文档的主体分割为多个片段;
解析步骤,并行地解析所述多个片段,并且产生对各个片段的解析结果;以及
组合步骤,组合对各个片段的解析结果,从而形成对该标记语言文档的解析结果。
2.如权利要求1所述的解析标记语言文档的方法,还包括:
预处理步骤,用于在解析标记语言文档之前从所述标记语言文档的序言prolog中收集标记语言文档的版本、编码信息、和文档类型定义DTD。
3.如权利要求1或2所述的解析标记语言文档的方法,其中,在所述预分割步骤中,将标记语言文档的主体均等地预分割为所述多个部分。
4.如权利要求1-3中的任一项所述的解析标记语言文档的方法,其中,按照可用处理器的数目确定预分割后的部分的数目。
5.权利要求1-4中的任一项所述的解析标记语言文档的方法,其中,所述特定标记是左尖括号“<”或右尖括号“>”。
6.如权利要求1-5中的任一项所述的解析标记语言文档的方法,其中,当发现所述特定标记时,立即停止扫描,或者继续扫描若干字符之后才停止扫描。
7.如权利要求1-6中的任一项所述的解析标记语言文档的方法,其中,对每个片段的解析结果包括:双边树,其包含起始节点和结束节点;以及指示在分析该片段时是否发生错误的标志。
8.如权利要求7所述的解析标记语言文档的方法,其中,如果所述标志指示在解析片段时发生错误,则重新解析该片段。
9.如权利要求8所述的解析标记语言文档的方法,其中,按照以下方式,从左到右地依次组合各个片段的解析结果:
(1)在对应于右侧片段的第二双边树中,找出从其起始节点到其根节点的上行路径作为第二组合路径,并且确定该第二组合路径上的节点数目;
(2)在对应于左侧片段的第一双边树中,从其结束节点起向上找出具有与所述节点数目相同的数目的节点的上行路径作为第一组合路径;
(3)组合第一和第二组合路径上的对应节点,从而组合第一和第二双边树以得到组合后的双边树,并且修改该组合后的双边树的起始节点和结束节点;和
(4)对于该组合后的双边树和对应于下一片段的双边树,重复上述操作(1)-(3)。
10.如权利要求7-9中的任一项所述的解析标记语言文档的方法,其中,为所述双边树中的每个节点设置名称空间字段,该名称空间字段具有祖先节点变量和表示本地名称空间变量,并且其中,
在解析第一片段时,将对应于该片段的双边树中的节点的祖先节点变量设置为NULL,并且将本地名称空间变量设置为从该双边树的根节点解析到该节点的名称空间集合;以及
在解析其它片段时,将对应于该片段的双边树的最左路径上的节点的祖先节点变量设置为NULL并将其本地名称空间变量设置为空,而将其余节点中的每个节点的祖先节点变量设置为所述最左路径上与其最近的节点,并将其本地名称空间变量设置为从该最近节点解析到该节点的名称空间集合,并且,
在组合对应于两个相邻片段的两个双边树时,将组合后的节点的祖先节点变量设置为NULL,并且将其本地名称空间变量设置为与左侧片段相对应的双边树上的对应节点的本地名称空间变量值。
11.一种解析标记语言文档的解析器,包括:
预分割部件,将该标记语言文档的主体预分割为多个部分;
扫描部件,扫描所述多个部分中的每个部分,其中当扫描每个部分时,仅在发现特定标记的情况下才停止对该部分的扫描,并且记录停止扫描的停止点;
分割部件,利用各个停止点将标记语言文档的主体分割为多个片段;
多个处理器单元,每个处理器单元被分配了所述多个片段中的一个,所述多个处理器单元并行地解析所述多个片段,并且产生各自的解析结果;以及
组合部件,组合所述多个处理器单元的解析结果,从而形成对该标记语言文档的解析结果。
12.如权利要求11所述的解析器,还包括:
预处理部件,用于在解析标记语言文档之前从所述标记语言文档的序言prolog中收集标记语言文档的版本、编码信息、和文档类型定义DTD。
13.如权利要求11或12所述的解析器,其中,所述预分割部件将标记语言文档的主体均等地预分割为所述多个部分。
14.如权利要求11-13中的任一项所述的解析器,其中,按照可用处理器的数目来确定预分割后的部分的数目。
15.权利要求11-14中的任一项所述的解析器,其中,所述特定标记是左尖括号“<”或右尖括号“>”。
16.如权利要求11-15中的任一项所述的解析器,其中,当发现所述特定标记时,扫描部件立即停止扫描,或者继续扫描若干字符之后才停止扫描。
17.如权利要求11-16中的任一项所述的解析器,其中,对每个片段的解析结果包括:双边树,其包含起始节点和结束节点;以及指示在分析该片段时是否发生错误的标志。
18.如权利要求17所述的解析器,其中,如果所述标志指示在解析片段时发生错误,则对应的处理器单元重新解析该片段。
19.如权利要求18所述的解析器,其中,组合部件按照以下,从左到右地依次组合各个片段的解析结果:
(1)在对应于右侧片段的第二双边树中,找出从其起始节点到其根节点的上行路径作为第二组合路径,并且确定该第二组合路径上的节点数目;
(2)在对应于左侧片段的第一双边树中,从其结束节点起向上找出具有与所述节点数目相同的数目的节点的上行路径作为第一组合路径;
(3)组合第一和第二组合路径上的对应节点,从而组合第一和第二双边树以得到组合后的双边树,并且修改该组合后的双边树的起始节点和结束节点;和
(4)对于该组合后的双边树和对应于下一片段的双边树,重复上述操作(1)-(3)。
20.如权利要求17-19中的任一项所述的解析器,其中,为所述双边树中的每个节点设置名称空间字段,该名称空间字段具有祖先节点变量和本地名称空间变量,并且其中,
解析第一片段的处理器单元将对应于该片段的双边树中的节点的祖先节点变量设置为NULL,将其本地名称空间变量设置为从该双边树的根节点解析到该节点的名称空间集合;以及
解析其它片段的处理器单元将对应于该片段的双边树的最左路径上的节点的祖先节点变量设置为NULL并将其本地名称空间变量设置为空,而将其余节点中的每个节点的祖先节点变量设置为所述最左路径上与其最近的节点,并将其祖先节点变量设置为从该最近节点解析到该节点的名称空间集合,并且,
在组合对应于两个相邻片段的两个双边树时,还将组合后的节点的祖先节点变量设置为NULL,并且将其本地名称空间变量设置为与左侧片段相对应的双边树上的对应节点的本地名称空间变量值。
21.一种解析标记语言文档的方法,其中,该标记语言文档被分割为多个片段,所述方法包括以下步骤:
(1)并行地解析所述多个片段,并且产生利用双边树表示的对每个片段的解析结果,其中,
在解析第一片段时,将对应于该片段的双边树中的节点的祖先节点变量设置为NULL,并且将其本地名称空间变量设置为从该双边树的根节点解析到该节点的名称空间集合,和
在解析其它片段时,将对应于该片段的双边树中的最左路径上的节点的祖先节点变量设置为NULL并将其本地名称空间变量设置为空,而将其余节点中的每个节点的祖先节点变量设置为所述最左路径上与其最近的节点,并将其本地名称空间变量设置为从该最近节点解析到该节点的名称空间集合;以及
(2)从左向右依次组合对应于各个片段的双边树,从而形成对该标记语言文档的解析结果,其中,
在组合对应于两个相邻片段的双边树时,将组合后的节点的祖先节点变量设置为NULL,并且将其本地名称空间变量设置为与左侧片段相对应的双边树上的对应节点的本地名称空间变量值。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA2007101101847A CN101329665A (zh) | 2007-06-18 | 2007-06-18 | 解析标记语言文档的方法和解析器 |
US12/141,541 US8250464B2 (en) | 2007-06-18 | 2008-06-18 | Parsing a markup language document |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA2007101101847A CN101329665A (zh) | 2007-06-18 | 2007-06-18 | 解析标记语言文档的方法和解析器 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101329665A true CN101329665A (zh) | 2008-12-24 |
Family
ID=40162256
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNA2007101101847A Pending CN101329665A (zh) | 2007-06-18 | 2007-06-18 | 解析标记语言文档的方法和解析器 |
Country Status (2)
Country | Link |
---|---|
US (1) | US8250464B2 (zh) |
CN (1) | CN101329665A (zh) |
Cited By (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2011000165A1 (en) * | 2009-07-03 | 2011-01-06 | Hewlett-Packard Development Company,L.P. | Apparatus and method for text extraction |
CN101976244A (zh) * | 2010-09-30 | 2011-02-16 | 北京飞天诚信科技有限公司 | 对xml报文中的节点进行划分及其对其应用的方法 |
CN102004631A (zh) * | 2010-10-19 | 2011-04-06 | 北京红旗中文贰仟软件技术有限公司 | 信息文档的处理方法及装置 |
CN102402420A (zh) * | 2010-10-14 | 2012-04-04 | 微软公司 | 解析可观察集合 |
CN102708155A (zh) * | 2012-04-20 | 2012-10-03 | 西安电子科技大学 | 基于回溯自动机语法分析的jsax解析器和解析方法 |
WO2012167633A1 (zh) * | 2011-06-08 | 2012-12-13 | 中兴通讯股份有限公司 | 性能报表的生成方法及装置 |
CN103020176A (zh) * | 2012-11-28 | 2013-04-03 | 方跃坚 | Xml解析中数据块划分方法和xml解析方法 |
CN106919553A (zh) * | 2016-08-24 | 2017-07-04 | 阿里巴巴集团控股有限公司 | 文件解析方法和装置 |
CN109445784A (zh) * | 2018-09-29 | 2019-03-08 | Oppo广东移动通信有限公司 | 结构数据的处理方法、装置、存储介质及电子设备 |
CN110597512A (zh) * | 2019-08-23 | 2019-12-20 | 华为技术有限公司 | 显示用户界面的方法及电子设备 |
WO2020168521A1 (zh) * | 2019-02-21 | 2020-08-27 | 华为技术有限公司 | 报文解析的方法、数据发送端、数据接收端和系统 |
CN112069794A (zh) * | 2020-08-28 | 2020-12-11 | 北京百度网讯科技有限公司 | 文本预测方法、装置、设备以及存储介质 |
CN112182310A (zh) * | 2020-11-04 | 2021-01-05 | 上海德拓信息技术股份有限公司 | 一种内置实时搜索的通用树形组件实现方法 |
CN113033165A (zh) * | 2019-12-24 | 2021-06-25 | 腾讯科技(深圳)有限公司 | 电子表格文件解析方法、装置和计算机可读存储介质 |
CN117610536A (zh) * | 2024-01-23 | 2024-02-27 | 南京邮电大学 | 基于XML文档相似度的Office操作题自动判分方法及系统 |
Families Citing this family (25)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4899476B2 (ja) * | 2005-12-28 | 2012-03-21 | 富士通株式会社 | 分割プログラム、連結プログラム、情報処理方法 |
US8739022B2 (en) * | 2007-09-27 | 2014-05-27 | The Research Foundation For The State University Of New York | Parallel approach to XML parsing |
US8782514B1 (en) * | 2008-12-12 | 2014-07-15 | The Research Foundation For The State University Of New York | Parallel XML parsing using meta-DFAs |
US8150862B2 (en) * | 2009-03-13 | 2012-04-03 | Accelops, Inc. | Multiple related event handling based on XML encoded event handling definitions |
US8510432B2 (en) * | 2009-06-26 | 2013-08-13 | Accelops, Inc. | Distributed methodology for approximate event counting |
US8838626B2 (en) * | 2009-12-17 | 2014-09-16 | Intel Corporation | Event-level parallel methods and apparatus for XML parsing |
US8318807B2 (en) * | 2010-02-03 | 2012-11-27 | Laurus Labs Private Limited | Pterostilbene cocrystals |
US9110875B2 (en) * | 2010-02-11 | 2015-08-18 | International Business Machines Corporation | XML post-processing hardware acceleration |
EP2577497A4 (en) | 2010-05-24 | 2016-11-23 | Tata Consultancy Services Ltd | METHOD AND SYSTEM FOR DECOMPOSING XML DOCUMENT AND OBTAINING HIGH PARALLEL LEVEL |
US8719268B2 (en) | 2010-09-29 | 2014-05-06 | International Business Machines Corporation | Utilizing metadata generated during XML creation to enable parallel XML processing |
US9477651B2 (en) * | 2010-09-29 | 2016-10-25 | International Business Machines Corporation | Finding partition boundaries for parallel processing of markup language documents |
US8806656B2 (en) * | 2011-02-18 | 2014-08-12 | Xerox Corporation | Method and system for secure and selective access for editing and aggregation of electronic documents in a distributed environment |
US8510237B2 (en) | 2011-03-15 | 2013-08-13 | Qualcomm Incorporated | Machine learning method to identify independent tasks for parallel layout in web browsers |
US9087140B2 (en) | 2011-05-24 | 2015-07-21 | International Business Machines Corporation | Self-parsing XML documents to improve XML processing |
CN102325161B (zh) * | 2011-07-18 | 2013-04-17 | 北京航空航天大学 | 一种基于查询工作量估算的xml分片方法 |
US9009172B2 (en) | 2012-03-09 | 2015-04-14 | Infosys Limited | Methods, systems and computer readable media for comparing XML documents |
US9235650B2 (en) * | 2012-09-27 | 2016-01-12 | Siemens Product Lifecycle Management Software Inc. | Efficient conversion of XML data into a model using persistent stores and parallelism |
US10078626B1 (en) * | 2012-11-27 | 2018-09-18 | Amazon Technologies, Inc. | Automated layout testing of content |
US9898523B2 (en) | 2013-04-22 | 2018-02-20 | Abb Research Ltd. | Tabular data parsing in document(s) |
US20150135061A1 (en) * | 2013-11-08 | 2015-05-14 | Qualcomm Incorporated | Systems and methods for parallel traversal of document object model tree |
US9922023B2 (en) * | 2014-09-05 | 2018-03-20 | Oracle International Corporation | Parallel parsing of file partitions storing a single XML document |
US10169208B1 (en) * | 2014-11-03 | 2019-01-01 | Charles W Moyes | Similarity scoring of programs |
US10387563B2 (en) | 2015-03-30 | 2019-08-20 | International Business Machines Corporation | Parallel parsing of markup language data |
US9715375B1 (en) | 2016-01-27 | 2017-07-25 | International Business Machines Corporation | Parallel compilation of software application |
CN106383890B (zh) * | 2016-09-23 | 2019-09-17 | 安科讯(福建)科技有限公司 | 基于xpath的xml配置文件恢复方法及其系统 |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4547882A (en) * | 1983-03-01 | 1985-10-15 | The Board Of Trustees Of The Leland Stanford Jr. University | Error detecting and correcting memories |
US20020122060A1 (en) * | 2000-12-18 | 2002-09-05 | Markel Steven O. | Wizard generating HTML web pages using XML and XSL |
US20030069881A1 (en) * | 2001-10-03 | 2003-04-10 | Nokia Corporation | Apparatus and method for dynamic partitioning of structured documents |
US7225425B2 (en) * | 2002-08-29 | 2007-05-29 | Sap Aktiengesellschaft | Rapid application integration |
US7209925B2 (en) * | 2003-08-25 | 2007-04-24 | International Business Machines Corporation | Method, system, and article of manufacture for parallel processing and serial loading of hierarchical data |
US8166053B2 (en) | 2003-10-30 | 2012-04-24 | Ntt Docomo, Inc. | Method and apparatus for schema-driven XML parsing optimization |
EP1569104A3 (en) | 2004-01-09 | 2006-05-03 | Interuniversitair Microelektronica Centrum Vzw | An automated method for performing parallelization of sequential code and a computerized system adapted therefore |
US7376661B2 (en) * | 2004-12-03 | 2008-05-20 | Wings Software, Ltd | XML-based symbolic language and interpreter |
US7747588B2 (en) * | 2005-09-12 | 2010-06-29 | Microsoft Corporation | Extensible XML format and object model for localization data |
US9286272B2 (en) * | 2005-12-22 | 2016-03-15 | Xerox Corporation | Method for transformation of an extensible markup language vocabulary to a generic document structure format |
US7886223B2 (en) * | 2006-11-17 | 2011-02-08 | International Business Machines Corporation | Generating a statistical tree for encoding/decoding an XML document |
US7747633B2 (en) * | 2007-07-23 | 2010-06-29 | Microsoft Corporation | Incremental parsing of hierarchical files |
US8739022B2 (en) * | 2007-09-27 | 2014-05-27 | The Research Foundation For The State University Of New York | Parallel approach to XML parsing |
-
2007
- 2007-06-18 CN CNA2007101101847A patent/CN101329665A/zh active Pending
-
2008
- 2008-06-18 US US12/141,541 patent/US8250464B2/en not_active Expired - Fee Related
Cited By (30)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8924846B2 (en) | 2009-07-03 | 2014-12-30 | Hewlett-Packard Development Company, L.P. | Apparatus and method for text extraction |
WO2011000165A1 (en) * | 2009-07-03 | 2011-01-06 | Hewlett-Packard Development Company,L.P. | Apparatus and method for text extraction |
CN101976244A (zh) * | 2010-09-30 | 2011-02-16 | 北京飞天诚信科技有限公司 | 对xml报文中的节点进行划分及其对其应用的方法 |
CN101976244B (zh) * | 2010-09-30 | 2012-09-05 | 飞天诚信科技股份有限公司 | 对xml报文中的节点进行划分及其对其应用的方法 |
CN102402420A (zh) * | 2010-10-14 | 2012-04-04 | 微软公司 | 解析可观察集合 |
CN102402420B (zh) * | 2010-10-14 | 2015-08-26 | 微软技术许可有限责任公司 | 解析可观察集合 |
CN102004631A (zh) * | 2010-10-19 | 2011-04-06 | 北京红旗中文贰仟软件技术有限公司 | 信息文档的处理方法及装置 |
WO2012167633A1 (zh) * | 2011-06-08 | 2012-12-13 | 中兴通讯股份有限公司 | 性能报表的生成方法及装置 |
CN102215126B (zh) * | 2011-06-08 | 2017-11-03 | 中兴通讯股份有限公司 | 性能报表的生成方法及装置 |
CN102708155B (zh) * | 2012-04-20 | 2015-02-18 | 西安电子科技大学 | 基于回溯自动机语法分析的jsax解析器和解析方法 |
CN102708155A (zh) * | 2012-04-20 | 2012-10-03 | 西安电子科技大学 | 基于回溯自动机语法分析的jsax解析器和解析方法 |
CN103020176A (zh) * | 2012-11-28 | 2013-04-03 | 方跃坚 | Xml解析中数据块划分方法和xml解析方法 |
CN103020176B (zh) * | 2012-11-28 | 2015-07-15 | 方跃坚 | Xml解析中数据块划分方法和xml解析方法 |
CN106919553A (zh) * | 2016-08-24 | 2017-07-04 | 阿里巴巴集团控股有限公司 | 文件解析方法和装置 |
CN109445784A (zh) * | 2018-09-29 | 2019-03-08 | Oppo广东移动通信有限公司 | 结构数据的处理方法、装置、存储介质及电子设备 |
CN109445784B (zh) * | 2018-09-29 | 2020-08-14 | Oppo广东移动通信有限公司 | 结构数据的处理方法、装置、存储介质及电子设备 |
WO2020168521A1 (zh) * | 2019-02-21 | 2020-08-27 | 华为技术有限公司 | 报文解析的方法、数据发送端、数据接收端和系统 |
US11956337B2 (en) | 2019-02-21 | 2024-04-09 | Huawei Technologies Co., Ltd. | Message parsing method, data transmit end, data receive end, and system |
CN112740635A (zh) * | 2019-02-21 | 2021-04-30 | 华为技术有限公司 | 报文解析的方法、数据发送端、数据接收端和系统 |
CN112740635B (zh) * | 2019-02-21 | 2022-04-05 | 华为技术有限公司 | 报文解析的方法、数据发送端、数据接收端和系统 |
CN110597512A (zh) * | 2019-08-23 | 2019-12-20 | 华为技术有限公司 | 显示用户界面的方法及电子设备 |
CN110597512B (zh) * | 2019-08-23 | 2022-04-08 | 荣耀终端有限公司 | 显示用户界面的方法及电子设备 |
CN113033165B (zh) * | 2019-12-24 | 2024-03-01 | 腾讯科技(深圳)有限公司 | 电子表格文件解析方法、装置和计算机可读存储介质 |
CN113033165A (zh) * | 2019-12-24 | 2021-06-25 | 腾讯科技(深圳)有限公司 | 电子表格文件解析方法、装置和计算机可读存储介质 |
CN112069794A (zh) * | 2020-08-28 | 2020-12-11 | 北京百度网讯科技有限公司 | 文本预测方法、装置、设备以及存储介质 |
CN112069794B (zh) * | 2020-08-28 | 2024-04-30 | 北京百度网讯科技有限公司 | 文本预测方法、装置、设备以及存储介质 |
CN112182310B (zh) * | 2020-11-04 | 2023-11-17 | 上海德拓信息技术股份有限公司 | 一种内置实时搜索的通用树形组件实现方法 |
CN112182310A (zh) * | 2020-11-04 | 2021-01-05 | 上海德拓信息技术股份有限公司 | 一种内置实时搜索的通用树形组件实现方法 |
CN117610536A (zh) * | 2024-01-23 | 2024-02-27 | 南京邮电大学 | 基于XML文档相似度的Office操作题自动判分方法及系统 |
CN117610536B (zh) * | 2024-01-23 | 2024-04-09 | 南京邮电大学 | 基于XML文档相似度的Office操作题自动判分方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
US8250464B2 (en) | 2012-08-21 |
US20090006944A1 (en) | 2009-01-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101329665A (zh) | 解析标记语言文档的方法和解析器 | |
US6859810B2 (en) | Declarative specification and engine for non-isomorphic data mapping | |
US7251777B1 (en) | Method and system for automated structuring of textual documents | |
US8739022B2 (en) | Parallel approach to XML parsing | |
CN105531672B (zh) | 解析器生成 | |
US8464234B2 (en) | Pre-parsed headers for compilation | |
US20020111965A1 (en) | Methods and systems for direct execution of XML documents | |
US20020143823A1 (en) | Conversion system for translating structured documents into multiple target formats | |
CN106462425A (zh) | 复常量 | |
CN108563629B (zh) | 一种日志解析规则自动生成方法和装置 | |
US5822592A (en) | Method and system for determining source code location | |
CN111324619A (zh) | 微服务系统中的对象更新方法、装置、设备和存储介质 | |
CN111240772A (zh) | 一种基于区块链的数据处理方法、装置及存储介质 | |
US7882429B2 (en) | High-level virtual machine for fast XML parsing and validation | |
CN113987405A (zh) | 一种基于ast的数学表达式计算算法 | |
CN115576603B (zh) | 一种获取代码片段中的变量值的方法及装置 | |
CN113949749B (zh) | Xml报文处理方法及装置 | |
CN111597202B (zh) | 一种基于分形理论的战场态势信息按需提取方法 | |
US20080071735A1 (en) | Method, apparatus, and computer progam product for data transformation | |
CN113849781A (zh) | Go语言源代码混淆方法、系统、终端及存储介质 | |
US20090222447A1 (en) | Data processing apparatus and data processing method | |
CN111625749B (zh) | 参会公司网站详情页信息提取方法、装置、设备及介质 | |
CN117579726A (zh) | 一种以太网通讯报文协议的通用解析处理系统 | |
CN117130610A (zh) | 页面生成方法、相关装置及计算机存储介质 | |
CN114895886A (zh) | 一种编程语句转换方法、电子设备、存储介质 |
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: 20081224 |