CN102004631A - 信息文档的处理方法及装置 - Google Patents
信息文档的处理方法及装置 Download PDFInfo
- Publication number
- CN102004631A CN102004631A CN2010105198699A CN201010519869A CN102004631A CN 102004631 A CN102004631 A CN 102004631A CN 2010105198699 A CN2010105198699 A CN 2010105198699A CN 201010519869 A CN201010519869 A CN 201010519869A CN 102004631 A CN102004631 A CN 102004631A
- Authority
- CN
- China
- Prior art keywords
- current
- structure element
- subscript
- processing
- submodule
- 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
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明公开了一种信息文档的处理方法和装置,所述方法包括:A、将可扩展标记语言XML文档标签信息映射到可由下标访问的XML文档向量模型中;B、依据并行处理策略信息,通过下标访问并处理所述XML文档向量模型的结构元素,其中对于需要并行处理的结构元素采用并行方式进行处理。所述装置用于执行上述方法。利用本发明,可以加快XML文档返回处理结果的速度,提高软件的执行效率,减少用户等待XML文档处理结果的时间。
Description
技术领域
本发明涉及计算机数据处理技术领域,尤其涉及一种可扩展标记语言(XML)信息文档的处理方法及装置。
背景技术
XML文档是一种用来结构化数据的通用且适应性强的格式文档,目前已经大量应用在计算机软件工业领域。现有的对XML文档的处理方式中,主要采用针对XML的简单应用程序编程接口(SAX,Simple API for XML)事件驱动模式,直接在事件触发过程中处理文档。SAX事件驱动模式的主要处理方式为:以一种流线形事件驱动处理方式作用于XML文档,每遇到一个元素就会触发一个事件,由事件处理器进行处理,并直接在事件处理器中对文档内容进行处理且返回结果(即直接返回结果)。这种处理方式的优点是事件分析器按顺序读取XML文档,而不把整个文档读入内存,所以处理速度很快。
但是,现有这种处理方式的缺点是:从头到尾读取XML文档,必须通过一个个标签间的连续跳转才能处理下去,是一个不掉的阻塞式处理过程,所以导致整个文档的处理过程非常漫长,返回结果的速度很慢。当打开一个内容相对多的文档时(例如在WEB网页读取,办公文档格式读取过程中),程序将被XML文档的解析处理过程所阻塞,必须通过一个很长的时间才能将文档全部处理完毕,用户等待处理结果的时间很长,严重影响了软件的执行效率。
发明内容
有鉴于此,本发明的主要目的在于提供一种信息文档的处理方法,加快XML文档返回处理结果的速度,提高计算机软件的执行效率。
本发明的再一目的在于提供一种信息文档的处理装置,可加快XML文档返回处理结果的速度,提高计算机软件的执行效率。
为达到上述目的,本发明的技术方案是这样实现的:
一种信息文档的处理方法,该方法包括:
A、将可扩展标记语言XML文档标签信息映射到可由下标访问的XML文档向量模型中;
B、依据并行处理策略信息,通过下标访问并处理所述XML文档向量模型的结构元素,其中对于需要并行处理的结构元素采用并行方式进行处理。
在一种优选实施例中,所述步骤A中,将所述XML文档中的每一个标签所包含的信息对应映射到XML文档向量模型的一个结构元素中,其中一个标签映射的结构元素包含有以下内容信息:
1)当前标签在XML文档中的顺序编号;
2)当前标签到包含此标签的父标签顺序编号的距离;
3)当前标签包含的子标签个数;
4)当前标签的标签名;
5)当前标签的属性信息;
6)当前标签包含的起始文本内容;
7)当前标签包含的结束文本内容。
在一种优选实施例中,所述步骤A以基于事件驱动分析处理的方式进行处理,具体包括以下事件驱动处理过程:
起始文档事件驱动处理:建立或清理一个可以通过下标访问的数据结构作为所述XML文档向量模型,初始化当前处理标签下标;
起始标签事件驱动处理:构建一个新标签的结构元素,并对该新结构元素的顺序编号、该新标签到父标签顺序编号的距离、该新结构元素的标签名称以及属性进行赋值,并将该新建的结构元素加入到可用下标访问的数据结构中,变更当前处理下标为当前结构元素的顺序编号;
内容处理事件驱动处理:判断当前遇到的内容是起始内容还是结束内容,如是起始内容,将对当前元素结构的起始内容赋值,否则对当前元素结构的结束内容赋值;
结束标签事件驱动处理:对当前处理结构元素的包含子元素数赋值,并将当前处理结构元素的父元素下标赋给当前处理标签下标。
在一种优选实施例中,所述步骤B具体包括:
B1、将所述XML文档向量模型的第一个结构元素作为当前结构元素,构建该结构元素对应的处理上下文作为当前处理上下文;
B2、在当前处理上下文中进行当前结构元素起始阶段的处理;
B3、在当前处理上下文中进行当前结构元素起始内容的处理,并为当前子结构元素下标赋值;
B4、判断当前子结构元素下标是否在当前结构元素的子结构元素范围内,如果是则进入到步骤B9,否则进入到步骤B5;
B5、在当前处理上下文中进行当前结构元素对应的结束内容的处理;
B6、在当前处理上下文中进行当前结构元素对应的结束阶段的处理;
B7、判断当前结构元素是否为根结构元素,如果是则结束本流程,否则进入步骤B8;
B8、将当前子结构元素下标设为当前结构元素的兄弟结构元素下标,并返回到当前结构元素的父结构元素的处理上下文中,进入步骤B4;
B9、依据预设的并行处理策略信息,判断当前结构元素的子结构元素是否可以并行处理,如果是则进入步骤B10,否则进入步骤B13;
B10、遍历查找出当前结构元素下所有的互为兄弟关系的子结构元素;
B11、对查找出的全部子结构元素采用并行方式进行处理;
B12、等待并行处理完所有子结构元素,进入步骤B5;
B13、将当前处理上下文进行相应的处理,将当前子结构元素作为当前处理结构元素,并构建当前处理结构元素对应的处理上下文作为当前处理上下文,返回步骤B2。
在一种优选实施例中,所述步骤B10的具体方法包括:
B401、记录当前子结构元素下标;
B402、将当前子结构元素下标设为其下一个兄弟结构元素下标;
B403、判断当前子结构元素下标是否在当前结构元素的子结构元素范围内,如果是则进入到步骤B401,否则执行步骤B404;
B404、将步骤B401所记录的子结构元素下标判定为可以并行处理的互为兄弟关系的子结构元素的下标集合,结束本遍历查找流程。
在一种优选实施例中,上述步骤B11中所述对查找出的每个子结构元素的处理具体包括:
B41、将步骤B10中查找到的需要并行处理的一子结构元素下标作为当前子结构元素下标;
B42、将当前子结构元素下标作为当前处理结构元素下标,并构建该结构元素对应的处理上下文,将该处理上下文作为当前处理上下文;
B43、在当前处理上下文中进行当前结构元素起始阶段的处理;
B44、在当前处理上下文中进行当前结构元素起始内容的处理,并为当前子结构元素下标赋值;
B45、判断当前子结构元素下标是否在当前结构元素的子结构元素范围内,如果是则进入到步骤B42,否则进入到步骤B46;
B46、在当前处理上下文中进行当前结构元素对应的结束内容的处理;
B47、在当前处理上下文中进行当前结构元素对应的结束阶段的处理;
B48、判断当前结构元素下标是否为所述步骤B41中所述的子结构元素下标,如果是则结束本流程,否则进入步骤B49;
B49、将当前子结构元素下标设为当前结构元素的兄弟结构元素下标,并返回到当前结构元素的父结构元素的处理上下文中,返回步骤45。
在一种优选实施例中,步骤B中所述的并行处理策略信息包括:为需要并行处理的标签设置并行处理标识;如果标签具有并行处理标识则判定可并行处理该标签内的互为兄弟关系的子标签。
一种信息文档的处理装置,该装置包括:
第一模块,用于将可扩展标记语言XML文档标签信息映射到可由下标访问的XML文档向量模型中;
第二模块,用于依据并行处理策略信息,通过下标访问并处理所述XML文档向量模型的结构元素,其中对于需要并行处理的结构元素采用并行方式进行处理。
在一种优选实施例中,所述第一模块具体包括以下事件驱动处理模块:
起始文档事件驱动处理模块,用于建立或清理一个可以通过下标访问的数据结构作为所述XML文档向量模型,初始化当前处理标签下标;
起始标签事件驱动处理模块,用于构建一个新标签的结构元素,并对该新结构元素的顺序编号、该新标签到父标签顺序编号的距离、该新结构元素的标签名称以及属性进行赋值,并将该新建的结构元素加入到可用下标访问的数据结构中,变更当前处理下标为当前结构元素的顺序编号;
内容处理事件驱动处理模块,用于判断当前遇到的内容是起始内容还是结束内容,如是起始内容,将对当前元素结构的起始内容赋值,否则对当前元素结构的结束内容赋值;
结束标签事件驱动处理模块,用于对当前处理结构元素的包含子元素数赋值,并将当前处理结构元素的父元素下标赋给当前处理标签下标。
在一种优选实施例中,所述第二模块具体包括以下子模块:
第B1子模块,用于将所述XML文档向量模型的第一个结构元素作为当前结构元素,构建该结构元素对应的处理上下文作为当前处理上下文;
第B2子模块,用于在当前处理上下文中进行当前结构元素起始阶段的处理;
第B3子模块,用于在当前处理上下文中进行当前结构元素起始内容的处理,并为当前子结构元素下标赋值;
第B4子模块,用于判断当前子结构元素下标是否在当前结构元素的子结构元素范围内,如果是则进入到第B9子模块,否则进入到第B5子模块;
第B5子模块,用于在当前处理上下文中进行当前结构元素对应的结束内容的处理;
第B6子模块,用于在当前处理上下文中进行当前结构元素对应的结束阶段的处理;
第B7子模块,用于判断当前结构元素是否为根结构元素,如果是则结束本流程,否则进入第B8子模块;
第B8子模块,用于将当前子结构元素下标设为当前结构元素的兄弟结构元素下标,并返回到当前结构元素的父结构元素的处理上下文中,进入第B4子模块;
第B9子模块,用于依据预设的并行处理策略信息,判断当前结构元素的子结构元素是否可以并行处理,如果是则进入第B10子模块,否则进入第B13子模块;
第B10子模块,用于遍历查找出当前结构元素下所有的互为兄弟关系的子结构元素;
第B11子模块,用于对查找出的全部子结构元素采用并行方式进行处理;
第B12子模块,用于等待并行处理完所有子结构元素,进入第B5子模块;
第B13子模块,用于将当前处理上下文进行相应的处理,将当前子结构元素作为当前处理结构元素,并构建当前处理结构元素对应的处理上下文作为当前处理上下文,返回第B2子模块。
在一种优选实施例中,所述第B10子模块的具体包括:
第B401子模块,用于记录当前子结构元素下标;
第B402子模块,用于将当前子结构元素下标设为其下一个兄弟结构元素下标;
第B403子模块,用于判断当前子结构元素下标是否在当前结构元素的子结构元素范围内,如果是则进入到第B401子模块,否则进入第B404子模块;
第B404子模块,用于将第B401子模块所记录的子结构元素下标判定为可以并行处理的互为兄弟关系的子结构元素的下标集合,结束本遍历查找流程。
在一种优选实施例中,所述第B11子模块中包括:
第B41子模块,用于第B10子模块中查找到的需要并行处理的一子结构元素下标作为当前子结构元素下标;
第B42子模块,用于将当前子结构元素下标作为当前处理结构元素下标,并构建该结构元素对应的处理上下文,将该处理上下文作为当前处理上下文;
第B43子模块,用于在当前处理上下文中进行当前结构元素起始阶段的处理;
第B44子模块,用于在当前处理上下文中进行当前结构元素起始内容的处理,并为当前子结构元素下标赋值;
第B45子模块,用于判断当前子结构元素下标是否在当前结构元素的子结构元素范围内,如果是则进入到第B42子模块,否则进入到第B46子模块;
第B46子模块,用于在当前处理上下文中进行当前结构元素对应的结束内容的处理;
第B47子模块,用于在当前处理上下文中进行当前结构元素对应的结束阶段的处理;
第B48子模块,用于判断当前结构元素下标是否为所述第B41子模块中所述的子结构元素下标,如果是则结束本流程,否则进入第B49子模块;
第B49子模块,用于将当前子结构元素下标设为当前结构元素的兄弟结构元素下标,并返回到当前结构元素的父结构元素的处理上下文中,之后进入第B45子模块。
由于本发明首先将XML文档的信息全部映射到可用下标访问的XML文档向量模型中,对该XML文档向量模型的访问可以不必是流线形、一个接一个元素地访问方式,而是可以随机移动访问其中所有的结构元素,因此本发明可以按照XML文档的规范和特点,设置并行处理策略,对于可以并行处理的标签,充分利用多线程资源在同一时刻并行处理多个子标签元素。从而减少处理XML文档的时间,提高XML文档的处理性能,加快XML文档返回处理结果的速度,提高软件的执行效率。本发明尤其适用于多核CPU的情况下,在处理过程中可实现将XML文档的处理有效分配给不同CPU,实现最大化利用系统资源的目的,进一步提高了软件执行效率。
附图说明
图1为本发明所述方法的核心处理流程;
图2a为本发明第一阶段起始文档事件驱动处理的流程图;
图2b为本发明第一阶段起始标签事件驱动处理的流程图;
图2c为本发明第一阶段内容处理事件驱动处理的流程图;
图2d为本发明第一阶段结束标签事件驱动处理的流程图;
图3为本发明一种实施例中所述第二阶段的详细处理流程图;
图4a为所述实施例中遍历查找出当前结构元素下所有的互为兄弟关系的子结构元素的处理流程图;
图4b为所述实施例在并行处理过程中,对每个子结构元素的处理流程图;
图5为现有SAX事件驱动处理一个XML文档实例的示意图;
图6为本发明第一阶段将该XML文档实例映射得到的可由下标访问的数据结构映射图;
图7为本发明第二阶段处理所述XML文档向量模型的示意图。
具体实施方式
下面通过具体实施例和附图对本发明做进一步详细说明。
图1为本发明所述方法的核心处理流程,该流程包括:
步骤101即第一阶段、将XML文档标签信息映射到可由下标访问的XML文档向量模型中;
步骤102即第二阶段、依据并行处理策略信息,通过下标访问并处理所述XML文档向量模型的结构元素,其中对于需要并行处理的结构元素采用并行方式进行处理。
在所述步骤101中,将所述XML文档中的每一个标签所包含的信息对应映射到XML文档向量模型的一个结构元素中,其中一个标签映射的结构元素包含有以下内容信息:
1)当前标签在XML文档中的顺序编号;
2)当前标签到包含此标签的父标签顺序编号的距离;
3)当前标签包含的子标签个数;
4)当前标签的标签名;
5)当前标签的属性信息;
6)当前标签包含的起始文本内容;
7)当前标签包含的结束文本内容。
下表1为一个标签对应的结构元素的内容示例:
表1
另外一个标签的内容还可以包括一个标识符bool m_bBegin,以便表示当前处理是标签是否为标签起始过程。
所述步骤101以基于事件驱动分析处理的方式进行处理,例如在一种优选实施例中可以基于针对XML的简单API接口(SAX,Simple API for XML)事件驱动模式进行事件驱动处理,在此SAX事件驱动模式中,实现的事件处理器先不直接处理返回结果,而是将XML文档内容处理成XML文档向量模型。
步骤101中,具体包括图2a~图2d所示的事件驱动处理过程。
图2a为起始文档事件驱动处理的流程图,参见图2a的步骤211~步骤212,该流程包括:建立或清理一个可以通过下标访问的数据结构作为所述XML文档向量模型,初始化当前处理标签下标变量。
图2b为起始标签事件驱动处理的流程图,参见图2b的步骤221~步骤226,该流程包括:构建一个新结构元素的结构元素,并对该新结构元素的顺序编号、该新标签到父标签顺序编号的距离、该新结构元素的标签名称以及属性进行赋值,并将该新建的结构元素加入到可用下标访问的数据结构中,变更当前处理下标为当前结构元素的顺序编号。
图2c为内容处理事件驱动处理的流程图,参见图2c的步骤231~步骤233,该流程包括:判断当前遇到的内容是起始内容还是结束内容,如是起始内容,将对当前元素结构的起始内容赋值,否则对当前元素结构的结束内容赋值。
图2d为结束标签事件驱动处理的流程图,参见图2d的步骤241~步骤242,该流程包括:对当前处理结构元素的包含子元素数赋值,并将当前处理结构元素的父元素下标赋给当前处理标签下标。
通过构建这样一个XML文档向量模型,就可以将XML文档信息记录到上述的一个数据结构中,从而可以随机的通过下标来访问标签的信息,而且根据结构元素当中的信息也可以将文档进行随机的分割。在步骤102中通过一个下标对应到所述文档向量模型中的每一个结构元素,以此得到文档中的每一个标签的内容信息。
通过上述步骤101的处理,XML文档的全部内容都已记录到XML文档向量模型的数据结构中,因此本发明在步骤102,对于XML文档的处理都将变为对于所述XML文档向量模型的处理。在步骤102中,对于XML文档的每一个标签内容的访问就变成了通过下标在XML文档向量模型中访问其中的结构元素。
图3为本发明一种实施例中所述第二阶段即步骤102的详细处理流程图。假设在该实施例中,已经构建了一个包含n个结构元素的XML文档向量模型为vector[n],c为当前处理的结构元素下标,s为当前子结构元素下标。参见图3,该流程具体包括:
步骤31、将所述XML文档向量模型的第一个结构元素作为当前结构元素,构建该结构元素对应的处理上下文作为当前处理上下文,在这里将c赋值为0。
步骤32、在当前处理上下文中进行当前结构元素起始阶段的处理;这里可以包括对当前结构元素的属性信息(vector[c]->mp_attributelist)的处理,及其它相关的处理。
步骤33、在当前处理上下文中进行当前结构元素起始内容的处理,并为当前子结构元素下标赋值,即对vector[c]->m_beginContent信息的处理,并将s赋值为c+1。
步骤34、判断当前子结构元素下标是否在当前结构元素的子结构元素范围内,即s是否大于等于c+1且小于等于c+vector[c]->m_count,如果是则进入到步骤39,否则进入到步骤35。
步骤35、在当前处理上下文中进行当前结构元素对应的结束内容的处理操作,即处理vector[c]->m_endContent信息。
步骤36、在当前处理上下文中进行当前结构元素对应的结束阶段的处理,通常是根据需要进行一些清理及其它相关的操作。
步骤37、判断当前结构元素是否为根结构元素,即c是否为0,如果是则结束本流程,返回处理结果给用户,否则进入步骤38。
步骤38、将当前子结构元素下标设为当前结构元素的兄弟结构元素,即s=c+vector[c]->m_count+1,并返回到当前结构元素的父结构元素的处理上下文中,即c=c-vector[c]->m_distance,之后进入步骤34;
步骤39、依据预设的并行处理策略信息,判断当前结构元素的子结构元素是否可以并行处理,如果是则进入步骤310,否则进入步骤313;
此处,所述的并行处理策略信息可以根据XML文档的自身特点进行设定。对于一个具体XML文档,其内容一般都有对应的标签规范。例如对于开放文档格式(ODF,Open Document Format)文档,有国际标准化组织(ISO)认定的标准的技术规范,在这个技术规范中设定了表示一个行、一个段落、一个页面等所对应的标签信息,也设定了其所对应的标签间的信息之间如何进行关联等信息。而每一个技术规范的实现者将根据这个技术规范对XML文档进行分类和判断,生成对应的并行处理策略。比如在电子表格中,表间之间的兄弟标签元素是平行的,可以进行并行处理,那么可以在并行处理策略信息中为这些兄弟标签的父标签设置并行处理标识,表明该父标签下的互为兄弟的子标签之间是可以进行并行处理的。
步骤310、遍历查找出当前结构元素下所有的互为兄弟关系的子结构元素。
步骤311、进入并发调度处理环境,对查找出的全部子结构元素采用多线程并发调度的方式进行并行处理。
步骤312、等待并行处理完所有子结构元素,并整理完相应信息之后,进入步骤35。
步骤313、将当前处理上下文进行相应的处理,以备当前子结构元素处理完后使用,然后将当前子结构元素作为当前处理结构元素,即c=s,并构建当前处理结构元素对应的处理上下文作为当前处理上下文,进入步骤32。
上述步骤310中,所述遍历查找出当前结构元素下所有的互为兄弟关系的子结构元素的具体流程参见图4a所示,该流程包括:
步骤401、记录当前子结构元素下标。
步骤402、将当前子结构元素下标设为其下一个兄弟结构元素下标,即s=s+vector[s]->m_count+1;
步骤403、判断当前子结构元素下标是否在当前结构元素的子结构元素范围内,即s是否大于等于c+1且小于等于c+vector[c]->m_count,如果是则进入到步骤401,否则执行步骤404。
步骤404、将步骤401所记录的子结构元素下标判定为可以并行处理的互为兄弟关系的子结构元素的下标集合,结束本遍历查找流程。
上述步骤311中,在并行处理过程中,所述对查找出的每个子结构元素的处理流程如图4b所示,具体包括:
步骤41、将步骤310中查找到的需要并行处理的一子结构元素下标作为当前子结构元素下标s。
步骤42、将当前子结构元素下标作为当前处理结构元素下标,即c=s,并构建该结构元素对应的处理上下文,将该处理上下文作为当前处理上下文。
步骤43、在当前处理上下文中进行当前结构元素起始阶段的处理。此处可以包括对当前结构元素的属性信息(vector[c]->mp_attributelist)的处理,及其它相关的处理。
步骤44、在当前处理上下文中进行当前结构元素起始内容的处理,并为当前子结构元素下标赋值;即对vector[c]->m_beginContent信息进行处理,并将s赋值为c+1。
步骤45、判断当前子结构元素下标是否在当前结构元素的子结构元素范围内,即s大于等于c+1且小于等于c+vector[c]->m_count,如果是则进入到步骤42,否则进入到步骤46。
步骤46、在当前处理上下文中进行当前结构元素对应的结束内容的处理,即vector[c]->m_endContent信息的处理。
步骤47、在当前处理上下文中进行当前结构元素对应的结束阶段的处理,通常是根据需要进行一些清理及其它相关的操作。
步骤48、判断当前结构元素下标是否为所述步骤41中所述的子结构元素下标,如果是则结束本图4b的流程,否则进入步骤49。
步骤49、将当前子结构元素下标设为当前结构元素的兄弟结构元素下标,即s=c+vector[c]->m_count+1;并返回到当前结构元素的父结构元素的处理上下文中,即c=c-vector[c]->m_distance,之后进入步骤45。
通过上述步骤102即第二阶段,在遇到无关联平行标签元素时可以采用多线程并行处理其子标签,从而将处理任务合理分配给多个线程同时处理。减少XML文档的处理时间,提高文档处理速度。
下面通过一个示例XML文档的处理过程,对本发明所述各个阶段的过程进行进一步详细的描述。该XML文档如下:
<A name=″a″>
<B name=″b1″>BeginContent1<C name=″c1″/>EndContent1</B>
<B name=″b2″>BeginContent2<C name=″c2″/>EndContent2</B>
<B name=″b3″>BeginContent3<C name=″c3″/>EndContent3</B>
<B name=″b4″>BeginContent4<C name=″c4″/>EndContent4</B>
<B name=″b5″>BeginContent5<C name=″c5″/>EndContent5</B>
<B name=″b6″>BeginContent6<C name=″c6″/>EndContent6</B>
</A>
图5为现有SAX事件驱动处理上述XML文档实例的示意图。参见图5,在处理这样一个XML文档时,在现有的SAX事件驱动过程中其处理流程必须通过一个个标签间的连续跳转才行,是一种流线形事件驱动处理,为一个不掉的阻塞式处理过程。这样在处理过程中,面对着多个重复的标签,如果对于标签<B>的处理时间很长,这样整个文档的处理过程将会非常漫长。但现阶段的处理无法跳过每一个过程。
然而利用本发明的方法,在处理上述这样一个XML文档(如文字处理)时,具体的过程如下。
首先,在第一阶段,通过SAX的事件驱动过程解析得到一个如图6所示的可由下标访问的数据结构,即XML文档向量模型。如图2a~图2d所示,每个事件驱动的具体过程表述如下:
对所述XML文档进行SAX事件驱动分析过程,最初驱动起始文档事件:建立或清理一个可以通过下标访问的数据结构,初始化当前处理标签下标变量,例如初始化下标变量为0。
接着遇到起始标签<A name=″a″>,驱动起始标签事件,包括:构建一个新标签的结构元素,并对该新建对象(即当前新建的这个结构元素)的顺序编号m_local赋值为0,对该新建对象的到父标签距离m_distance赋值为0,对该新建对象的标签名称m_name赋值为A,属性mp_attributelist赋值为name=″a″,并将该新建结构元素加入到可用下标访问的数据结构中,如图6中的m_local为0的那一行;变更当前处理下标为当前对象的顺序编号m_local的值0。
接着遇到起始标签<B name=″b1″>,此时驱动起始标签事件,包括:构建一个新标签的结构元素,并对该新建对象的顺序编号赋值为1,对该新建对象的到父标签距离赋值为1,对该新建对象的标签名称赋值为B,属性赋值为name=″b1″,将新建结构元素加入到可下标访问的数据结构中,如图6中的m_local为1的那一行;变更当前处理下标为当前对象的顺序编号的值1。
接着向下进行驱动分析,遇到内容BeginContent1,驱动内容处理事件,包括:判断当前遇到的内容是起始内容还是结束内容,此时是起始内容,将当前结构元素的起始内容赋值,即下标为1的结构元素的起始内容赋值为BeginContent1。
接下来遇到起始标签<C name=″c1″,驱动起始标签事件,包括:构建一个新标签的结构元素,并对该新建对象的顺序编号赋值为2,对该新建对象的到父标签距离赋值为1,对该新建对象的标签名称赋值为C,属性赋值为″c1″,将该新建结构元素加入到可下标访问的数据结构中;变更当前处理下标为当前对象的顺序编号的值2。
接下来遇到结束标签/>,驱动结束标签事件,包括:对当前处理结构元素(下标值为2)的包含子元素数m_count赋值为0,并将当前处理结构元素的父元素下标1赋给当前处理标签下标。
接下来遇到内容EndContent1,驱动内容处理事件,包括:判断当前遇到的内容是起始内容还是结束内容,此时是结束内容,将当前处理结构元素的结束内容赋值,即下标为1结构元素的结束内容赋值为EndContent1。
接下来遇到结束标签</B>,驱动结束标签事件,包括:对当前处理结构元素(下标值为1)的包含子元素数m_count赋值为1,并将当前处理结构元素的父元素下标0赋给当前处理标签下标。
接下来遇到起始标签<B_name=″b2″>,驱动起始标签事件,包括:构建一个新标签的结构元素,并对该新建对象的顺序编号赋值为3,对该新建对象的到父标签距离赋值为3,对该新建对象的标签名称赋值为B,属性赋值为name=″b2″,将该新建的结构元素加入到可下标访问的数据结构中;变更当前处理下标为当前对象的顺序编号的值3。
接下来遇到内容BeginContent2,驱动内容处理事件,包括:判断当前遇到的内容是起始内容还是结束内容,此时是起始内容,将当前处理结构元素的起始内容赋值,即下标为3的结构元素的起始内容赋值为BeginContent2。
接下来按照与上述流程类似的方式进行处理,直到SAX事件驱动分析处理过程结束,得到如图6所示的完整的XML文档向量模型。
然后,进入第二阶段的处理。按照如图3所示的流程,从下标为0的结构元素开始处理所述XML文档向量模型,处理过程的一种示意图如图7所示。此处,可以看到,对于标签元素<A>的所有子标签<B>相互之间没有信息的关联,并且可以通过下标1、3、5、7、9、11将其分为六个小区域,这样在处理标签<A>的子元素时就可以采取多线程并发调度的方式处理。
因此,在所述并行处理策略信息中,可以为所述标签元素<A>设置并行处理标识,以表示其子标签之间可以并行处理。在图3所述的流程的步骤39中,如果当前结构元素下标为c=0,即元素<A>的下标,则判定其子结构元素可以并行处理,之后按照步骤310所述的方法找到该结构元素的所有互为兄弟关系的子结构元素,即下标值为1、3、5、7、9、11的子结构元素,对这些子结构元素及其子结构元素并行处理,即并行分别执行图4b所述的流程,例如处理下标为3的子结构元素的具体过程如图4b所示具体为:
在步骤41中,将下标为3的子结构元素下标作为当前子结构元素下标s,即s=3。在步骤42中,将当前子结构元素下标3作为当前处理结构元素下标,即c=s=3,并构建该结构元素(下标为3)对应的处理上下文,将该处理上下文作为当前处理上下文。在步骤43中,在当前处理上下文中进行当前结构元素(下标为3)起始阶段的处理。在步骤44中、在当前处理上下文中进行当前结构元素(下标为3)起始内容的处理,并为当前子结构元素下标赋值为s=c+1=4。
进入步骤45,此时s=4大于等于c+1=4且小于等于c+vector[c]->m_count=4,所以进入到步骤42,将当前子结构元素下标4作为当前处理结构元素下标,即c=s=4,并构建该结构元素(下标为4)对应的处理上下文,将该处理上下文作为当前处理上下文。在步骤43中,在当前处理上下文中进行当前结构元素(下标为4)起始阶段的处理。在步骤44中、在当前处理上下文中进行当前结构元素(下标为4)起始内容的处理,并为当前子结构元素下标赋值为s=c+1=5。
再次进入步骤45,此时s=5,大于等于c+1=5,但是大于c+vector[c]->m_count=4,所以进入到步骤46,在当前处理上下文中进行当前结构元素(下标为4)对应的结束内容的处理,之后在步骤47中,在当前处理上下文中进行当前结构元素(下标为4)对应的结束阶段的处理。在步骤48中,判断当前结构元素下标(下标为4)不是步骤41所述的子结构元素下标(下标3),所以进入步骤49。在步骤49中、将当前子结构元素下标设为当前结构元素的兄弟结构元素下标,即s=c+vector[c]->m_count+1=5;并返回到当前结构元素的父结构元素的处理上下文中,即c=c-vector[c]->m_distance=3。
之后再次进入步骤45,此时s=5,大于等于c+1=4,但大于c+vector[c]->m_count=4,所以进入到步骤46。在步骤46中,在当前处理上下文中进行当前结构元素(下标3)对应的结束内容的处理。在步骤47中,在当前处理上下文中进行当前结构元素(下标3)对应的结束阶段的处理。
进入步骤48、判断当前结构元素下标(下标3)是步骤41所述的子结构元素下标(下标3),所以结束本流程。
以此类推,通过对下标值为1、3、5、7、9、11的子结构元素执行上述流程,可以并行处理下标1的结构元素及其子结构元素(即下标2的结构元素)、下标3的结构元素及其子结构元素(即下标4的结构元素)、下标5的结构元素及其子结构元素(即下标6的结构元素)、下标7的结构元素及其子结构元素(即下标8的结构元素)、下标9的结构元素及其子结构元素(即下标10的结构元素)、下标11的结构元素及其子结构元素(即下标12的结构元素),当上述下标为1、3、5、7、9、11的结构元素及其子结构元素都处理完毕后,再对下标为0的结构元素(即标签<A>)进行结束处理操作。
通过上述第二阶段的处理,使得在多核的情况下充分利用CPU资源在同一时刻处理多个子标签<B>元素。从而减少处理XML文档的时间;提高XML文档的处理性能。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
Claims (12)
1.一种信息文档的处理方法,其特征在于,该方法包括:
A、将可扩展标记语言XML文档标签信息映射到可由下标访问的XML文档向量模型中;
B、依据并行处理策略信息,通过下标访问并处理所述XML文档向量模型的结构元素,其中对于需要并行处理的结构元素采用并行方式进行处理。
2.根据权利要求1所述的方法,其特征在于,所述步骤A中,将所述XML文档中的每一个标签所包含的信息对应映射到XML文档向量模型的一个结构元素中,其中一个标签映射的结构元素包含有以下内容信息:
1)当前标签在XML文档中的顺序编号;
2)当前标签到包含此标签的父标签顺序编号的距离;
3)当前标签包含的子标签个数;
4)当前标签的标签名;
5)当前标签的属性信息;
6)当前标签包含的起始文本内容;
7)当前标签包含的结束文本内容。
3.根据权利要求2所述的方法,其特征在于,所述步骤A以基于事件驱动分析处理的方式进行处理,具体包括以下事件驱动处理过程:
起始文档事件驱动处理:建立或清理一个可以通过下标访问的数据结构作为所述XML文档向量模型,初始化当前处理标签下标;
起始标签事件驱动处理:构建一个新标签的结构元素,并对该新结构元素的顺序编号、该新标签到父标签顺序编号的距离、该新结构元素的标签名称以及属性进行赋值,并将该新建的结构元素加入到可用下标访问的数据结构中,变更当前处理下标为当前结构元素的顺序编号;
内容处理事件驱动处理:判断当前遇到的内容是起始内容还是结束内容,如是起始内容,将对当前元素结构的起始内容赋值,否则对当前元素结构的结束内容赋值;
结束标签事件驱动处理:对当前处理结构元素的包含子元素数赋值,并将当前处理结构元素的父元素下标赋给当前处理标签下标。
4.根据权利要求1所述的方法,其特征在于,所述步骤B具体包括:
B1、将所述XML文档向量模型的第一个结构元素作为当前结构元素,构建该结构元素对应的处理上下文作为当前处理上下文;
B2、在当前处理上下文中进行当前结构元素起始阶段的处理;
B3、在当前处理上下文中进行当前结构元素起始内容的处理,并为当前子结构元素下标赋值;
B4、判断当前子结构元素下标是否在当前结构元素的子结构元素范围内,如果是则进入到步骤B9,否则进入到步骤B5;
B5、在当前处理上下文中进行当前结构元素对应的结束内容的处理;
B6、在当前处理上下文中进行当前结构元素对应的结束阶段的处理;
B7、判断当前结构元素是否为根结构元素,如果是则结束本流程,否则进入步骤B8;
B8、将当前子结构元素下标设为当前结构元素的兄弟结构元素下标,并返回到当前结构元素的父结构元素的处理上下文中,进入步骤B4;
B9、依据预设的并行处理策略信息,判断当前结构元素的子结构元素是否可以并行处理,如果是则进入步骤B10,否则进入步骤B13;
B10、遍历查找出当前结构元素下所有的互为兄弟关系的子结构元素;
B11、对查找出的全部子结构元素采用并行方式进行处理;
B12、等待并行处理完所有子结构元素,进入步骤B5;
B13、将当前处理上下文进行相应的处理,将当前子结构元素作为当前处理结构元素,并构建当前处理结构元素对应的处理上下文作为当前处理上下文,返回步骤B2。
5.根据权利要求4所述的方法,其特征在于,所述步骤B10的具体方法包括:
B401、记录当前子结构元素下标;
B402、将当前子结构元素下标设为其下一个兄弟结构元素下标;
B403、判断当前子结构元素下标是否在当前结构元素的子结构元素范围内,如果是则进入到步骤B401,否则执行步骤B404;
B404、将步骤B401所记录的子结构元素下标判定为可以并行处理的互为兄弟关系的子结构元素的下标集合,结束本遍历查找流程。
6.根据权利要求4所述的方法,其特征在于,上述步骤B11中所述对查找出的每个子结构元素的处理具体包括:
B41、将步骤B10中查找到的需要并行处理的一子结构元素下标作为当前子结构元素下标;
B42、将当前子结构元素下标作为当前处理结构元素下标,并构建该结构元素对应的处理上下文,将该处理上下文作为当前处理上下文;
B43、在当前处理上下文中进行当前结构元素起始阶段的处理;
B44、在当前处理上下文中进行当前结构元素起始内容的处理,并为当前子结构元素下标赋值;
B45、判断当前子结构元素下标是否在当前结构元素的子结构元素范围内,如果是则进入到步骤B42,否则进入到步骤B46;
B46、在当前处理上下文中进行当前结构元素对应的结束内容的处理;
B47、在当前处理上下文中进行当前结构元素对应的结束阶段的处理;
B48、判断当前结构元素下标是否为所述步骤B41中所述的子结构元素下标,如果是则结束本流程,否则进入步骤B49;
B49、将当前子结构元素下标设为当前结构元素的兄弟结构元素下标,并返回到当前结构元素的父结构元素的处理上下文中,返回步骤45。
7.根据权利要求1或4所述的方法,其特征在于,步骤B中所述的并行处理策略信息包括:为需要并行处理的标签设置并行处理标识;如果标签具有并行处理标识则判定可并行处理该标签内的互为兄弟关系的子标签。
8.一种信息文档的处理装置,其特征在于,该装置包括:
第一模块,用于将可扩展标记语言XML文档标签信息映射到可由下标访问的XML文档向量模型中;
第二模块,用于依据并行处理策略信息,通过下标访问并处理所述XML文档向量模型的结构元素,其中对于需要并行处理的结构元素采用并行方式进行处理。
9.根据权利要求8所述的装置,其特征在于,所述第一模块具体包括以下事件驱动处理模块:
起始文档事件驱动处理模块,用于建立或清理一个可以通过下标访问的数据结构作为所述XML文档向量模型,初始化当前处理标签下标;
起始标签事件驱动处理模块,用于构建一个新标签的结构元素,并对该新结构元素的顺序编号、该新标签到父标签顺序编号的距离、该新结构元素的标签名称以及属性进行赋值,并将该新建的结构元素加入到可用下标访问的数据结构中,变更当前处理下标为当前结构元素的顺序编号;
内容处理事件驱动处理模块,用于判断当前遇到的内容是起始内容还是结束内容,如是起始内容,将对当前元素结构的起始内容赋值,否则对当前元素结构的结束内容赋值;
结束标签事件驱动处理模块,用于对当前处理结构元素的包含子元素数赋值,并将当前处理结构元素的父元素下标赋给当前处理标签下标。
10.根据权利要求8所述的装置,其特征在于,所述第二模块具体包括以下子模块:
第B1子模块,用于将所述XML文档向量模型的第一个结构元素作为当前结构元素,构建该结构元素对应的处理上下文作为当前处理上下文;
第B2子模块,用于在当前处理上下文中进行当前结构元素起始阶段的处理;
第B3子模块,用于在当前处理上下文中进行当前结构元素起始内容的处理,并为当前子结构元素下标赋值;
第B4子模块,用于判断当前子结构元素下标是否在当前结构元素的子结构元素范围内,如果是则进入到第B9子模块,否则进入到第B5子模块;
第B5子模块,用于在当前处理上下文中进行当前结构元素对应的结束内容的处理;
第B6子模块,用于在当前处理上下文中进行当前结构元素对应的结束阶段的处理;
第B7子模块,用于判断当前结构元素是否为根结构元素,如果是则结束本流程,否则进入第B8子模块;
第B8子模块,用于将当前子结构元素下标设为当前结构元素的兄弟结构元素下标,并返回到当前结构元素的父结构元素的处理上下文中,进入第B4子模块;
第B9子模块,用于依据预设的并行处理策略信息,判断当前结构元素的子结构元素是否可以并行处理,如果是则进入第B10子模块,否则进入第B13子模块;
第B10子模块,用于遍历查找出当前结构元素下所有的互为兄弟关系的子结构元素;
第B11子模块,用于对查找出的全部子结构元素采用并行方式进行处理;
第B12子模块,用于等待并行处理完所有子结构元素,进入第B5子模块;
第B13子模块,用于将当前处理上下文进行相应的处理,将当前子结构元素作为当前处理结构元素,并构建当前处理结构元素对应的处理上下文作为当前处理上下文,返回第B2子模块。
11.根据权利要求10所述的装置,其特征在于,所述第B10子模块的具体包括:
第B401子模块,用于记录当前子结构元素下标;
第B402子模块,用于将当前子结构元素下标设为其下一个兄弟结构元素下标;
第B403子模块,用于判断当前子结构元素下标是否在当前结构元素的子结构元素范围内,如果是则进入到第B401子模块,否则进入第B404子模块;
第B404子模块,用于将第B401子模块所记录的子结构元素下标判定为可以并行处理的互为兄弟关系的子结构元素的下标集合,结束本遍历查找流程。
12.根据权利要求10所述的装置,其特征在于,所述第B11子模块中包括:
第B41子模块,用于第B10子模块中查找到的需要并行处理的一子结构元素下标作为当前子结构元素下标;
第B42子模块,用于将当前子结构元素下标作为当前处理结构元素下标,并构建该结构元素对应的处理上下文,将该处理上下文作为当前处理上下文;
第B43子模块,用于在当前处理上下文中进行当前结构元素起始阶段的处理;
第B44子模块,用于在当前处理上下文中进行当前结构元素起始内容的处理,并为当前子结构元素下标赋值;
第B45子模块,用于判断当前子结构元素下标是否在当前结构元素的子结构元素范围内,如果是则进入到第B42子模块,否则进入到第B46子模块;
第B46子模块,用于在当前处理上下文中进行当前结构元素对应的结束内容的处理;
第B47子模块,用于在当前处理上下文中进行当前结构元素对应的结束阶段的处理;
第B48子模块,用于判断当前结构元素下标是否为所述第B41子模块中所述的子结构元素下标,如果是则结束本流程,否则进入第B49子模块;
第B49子模块,用于将当前子结构元素下标设为当前结构元素的兄弟结构元素下标,并返回到当前结构元素的父结构元素的处理上下文中,之后进入第B45子模块。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010105198699A CN102004631A (zh) | 2010-10-19 | 2010-10-19 | 信息文档的处理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010105198699A CN102004631A (zh) | 2010-10-19 | 2010-10-19 | 信息文档的处理方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102004631A true CN102004631A (zh) | 2011-04-06 |
Family
ID=43812015
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2010105198699A Pending CN102004631A (zh) | 2010-10-19 | 2010-10-19 | 信息文档的处理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102004631A (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1456990A (zh) * | 2002-05-09 | 2003-11-19 | 日本电气株式会社 | 应用程序并行处理系统和应用程序并行处理方法 |
CN1575464A (zh) * | 1999-06-18 | 2005-02-02 | 奔流系统公司 | 利用事务语义法分段和处理连续数据流 |
US20060015816A1 (en) * | 2004-07-14 | 2006-01-19 | International Business Machines Corporation | Framework for development and customization of web services deployment descriptors |
CN1825306A (zh) * | 2005-10-31 | 2006-08-30 | 北京神舟航天软件技术有限公司 | 基于关系数据库的xml数据存储与访问方法 |
CN101329665A (zh) * | 2007-06-18 | 2008-12-24 | 国际商业机器公司 | 解析标记语言文档的方法和解析器 |
CN101350007A (zh) * | 2007-06-26 | 2009-01-21 | 英特尔公司 | 具有低争用和负担均衡的并行xsl转换的方法和装置 |
-
2010
- 2010-10-19 CN CN2010105198699A patent/CN102004631A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1575464A (zh) * | 1999-06-18 | 2005-02-02 | 奔流系统公司 | 利用事务语义法分段和处理连续数据流 |
CN1456990A (zh) * | 2002-05-09 | 2003-11-19 | 日本电气株式会社 | 应用程序并行处理系统和应用程序并行处理方法 |
US20060015816A1 (en) * | 2004-07-14 | 2006-01-19 | International Business Machines Corporation | Framework for development and customization of web services deployment descriptors |
CN1825306A (zh) * | 2005-10-31 | 2006-08-30 | 北京神舟航天软件技术有限公司 | 基于关系数据库的xml数据存储与访问方法 |
CN101329665A (zh) * | 2007-06-18 | 2008-12-24 | 国际商业机器公司 | 解析标记语言文档的方法和解析器 |
CN101350007A (zh) * | 2007-06-26 | 2009-01-21 | 英特尔公司 | 具有低争用和负担均衡的并行xsl转换的方法和装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9298680B2 (en) | Display of hypertext documents grouped according to their affinity | |
CN108334585A (zh) | 一种网页爬虫方法、装置以及电子设备 | |
CN102880607A (zh) | 网络动态内容抓取方法及网络动态内容爬虫系统 | |
US20140149851A1 (en) | Method for data chunk partitioning in xml parsing and method for xml parsing | |
CN103092936B (zh) | 一种物联网动态页面实时信息采集方法 | |
CN109445773A (zh) | 一种基于编程语言提升浏览器性能的方法以及电子设备 | |
US20190187964A1 (en) | Method and Apparatus for Compiler Driven Bank Conflict Avoidance | |
US8601481B2 (en) | Workflow validation and execution | |
CN108536584A (zh) | 一种基于Sikuli的自动化测试方法 | |
US8719268B2 (en) | Utilizing metadata generated during XML creation to enable parallel XML processing | |
CN102004631A (zh) | 信息文档的处理方法及装置 | |
CN107643892B (zh) | 接口处理方法、装置、存储介质和处理器 | |
CN103389893A (zh) | 一种配置寄存器读写方法及装置 | |
CN105243020A (zh) | 一种适用于广域分布式实时数据库的自动化测试方法 | |
CN102004722B (zh) | 信息文档的处理方法及装置 | |
US20150186339A1 (en) | Profile-based optimization of xslt transformations | |
CN102508715A (zh) | 一种基于多线程的对象调用方法和装置 | |
Ding et al. | Design and implementation of web crawler based on coroutine model | |
US20180107634A1 (en) | Markup language parser | |
Pawlas et al. | Universal web pages content parser | |
CN111177633B (zh) | 网页表单自动填写方法、装置、存储介质及电子设备 | |
Ren et al. | Application of a Parallel FSM Parsing Algorithm for Web Engines | |
Somasundaram | Efficient File-Based Data Ingestion for Cloud Analytics: A Framework for Extracting and Converting Non-Traditional Data Sources | |
Kim et al. | A parallel approach to mobile web browsing | |
Qu et al. | Interoperable metadata semantics with meta-metadata: A use case integrating search engines |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
AD01 | Patent right deemed abandoned |
Effective date of abandoning: 20110406 |
|
C20 | Patent right or utility model deemed to be abandoned or is abandoned |