CN102622334B - 多线程环境下并行xslt转换方法和装置 - Google Patents
多线程环境下并行xslt转换方法和装置 Download PDFInfo
- Publication number
- CN102622334B CN102622334B CN201210119271.XA CN201210119271A CN102622334B CN 102622334 B CN102622334 B CN 102622334B CN 201210119271 A CN201210119271 A CN 201210119271A CN 102622334 B CN102622334 B CN 102622334B
- Authority
- CN
- China
- Prior art keywords
- modular converter
- xslt
- conversion
- modular
- parallel
- 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.)
- Expired - Fee Related
Links
- 238000006243 chemical reaction Methods 0.000 title claims abstract description 129
- 238000000034 method Methods 0.000 title claims abstract description 87
- 230000009466 transformation Effects 0.000 title claims abstract description 24
- 238000012549 training Methods 0.000 claims abstract description 21
- 230000008569 process Effects 0.000 claims description 48
- 238000011156 evaluation Methods 0.000 claims description 19
- 238000012854 evaluation process Methods 0.000 claims description 3
- 238000000638 solvent extraction Methods 0.000 abstract description 30
- 238000005457 optimization Methods 0.000 abstract description 8
- 238000005192 partition Methods 0.000 abstract description 4
- 238000011161 development Methods 0.000 abstract description 2
- 230000007547 defect Effects 0.000 abstract 1
- 210000004027 cell Anatomy 0.000 description 46
- 230000007704 transition Effects 0.000 description 35
- 238000013519 translation Methods 0.000 description 14
- 238000012546 transfer Methods 0.000 description 10
- 238000009795 derivation Methods 0.000 description 7
- 238000004458 analytical method Methods 0.000 description 6
- 238000004422 calculation algorithm Methods 0.000 description 6
- 230000008859 change Effects 0.000 description 6
- 238000010586 diagram Methods 0.000 description 6
- 239000012634 fragment Substances 0.000 description 6
- 239000011159 matrix material Substances 0.000 description 6
- 238000012545 processing Methods 0.000 description 6
- 238000005516 engineering process Methods 0.000 description 5
- 238000002474 experimental method Methods 0.000 description 5
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 2
- 230000007812 deficiency Effects 0.000 description 2
- 235000013399 edible fruits Nutrition 0.000 description 2
- 239000000203 mixture Substances 0.000 description 2
- 230000007935 neutral effect Effects 0.000 description 2
- 230000008520 organization Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 241001269238 Data Species 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 239000000047 product Substances 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 239000013589 supplement Substances 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Images
Abstract
随着XML文档的规模越来越大,结构越来越复杂,XSLT的转换性能问题则成了限制其继续发展的一个重要问题。本发明提供的并行XSLT转换方法及装置通过将XSLT文件划分为多个转换模块,利用多线程环境来进行并行XSLT转换来提高转换效率。本发明通过对XSLT文件本身以及各转换模块对训练数据的转换情况的分析,可以实现XSLT文件的自动化并行划分,避免了人工划分的不足;并且,划分得到的各个转换模块数量优化、转换代价均衡,可以在多线程环境下有效地提高对源文档进行XSLT转换的性能和效率。
Description
技术领域
本发明涉及计算机文档处理技术,尤其涉及一种在多线程环境自动地对XSLT文件进行并行化划分以及转换结果合并以提高对XML文档进行XSLT转换效率的方法和装置。
背景技术
文档是使用最普遍的信息资源,但是目前世界上有1万多种文档,常用文档格式有300多种,彼此的兼容性很差。为了使得各种文档格式之间具有较好的兼容性,现有技术中提供了很多文档标准。可扩展标记语言XML(eXtensible Markup Language)由于可验证性、可扩展性和互操作性等特性,成为描述各类文档格式标准的基础。
XSLT(eXtensible Style sheet Language Transformation)是一种基于规则的转换语言,能将XML文档从一种逻辑结构转换为另一种逻辑结构,被广泛地应用于异构平台间基于XML格式的数据转换。XSLT定义了一组转换规则,实现从一个输入产生一个输出。一个XSLT式样单由一系列模板组成,模板包含一个表达式,用于描述某些XML片段的形式,这些表达式采用XPath技术帮助XSLT在XML源文档中查找定位信息,通过路径定位文档中需要表示的节点,找到与表达式相匹配的所需节点后,指令就会生成输出的内容。XSLT不依赖于任何一种编程语言,处理XML文档时,首先XML文档被解析成DOM树存放在内存中,接着对文档进行分析,每一个DOM树中的节点都会与模板表达式相比较,当二者匹配时,就会按照模板定义的规则进行转换,否者继续往下匹配,如此循环,直到整个文档处理完毕,这种方式简洁高效地实现了XML文档之间的转换。如附图1所示,XSLT的转换过程就是一个将输入文档树转换为结果文档树的过程。目前XSLT的转换性能问题则成了限制其继续发展的一个重要问题,亟待人们解决。
目前,已经存在了一些提高XSLT转换效率的优化方法。Ce Dong等提出XSLT样式表的静态分析方法,可以过滤掉转换执行时用不到的模板template。KWONG April等提出对Xpath表达式进行优化,可以基于DTD而提高Xpath的查询效率。Ce DONG等还提出template实例化的方法,可以节省解析器在转换源文件过程中动态搜寻相匹配template的时间。杭州电子科技大学的陈如昌从XSLT样式表元素间关联关系的角度出发,提出了一种以样式表关联图为中心、面向特定转换过程的优化方法,在一定条件下,该方法在很大程度上提高了XSLT的转换效率。北京大学的高军等提出了一种基于DTD的XPath逻辑优化方法,提出了一种新 的XPath树自动机和DTD树自动机的乘积运算,能够有效地提高目前XPath执行器的执行效率。这些方法中,Xpath查询优化方法主要处理复杂Xpath表达式所导致的冗余路径查询的效率问题,在很大程度上提高了搜索XML源文档的效率,但偏向于XPath表达式的优化,而不是完全针对XSLT进行根本性的性能优化。采用XSLT元素关联图的优化方法是面向特定转换过程的,当XML源文档的覆盖率在70%以上时,这种方法可能会产生相反的效果,反而使转换效率降低。Ce Dong、Bailey James提出模板实例化的方法,主要针对服务器端高数据量的交换和查询情况,在一定程度上减少了运行时间,提高了转换效率,但是在静态分析的时候需要花费一些时间,并且该方法没有考虑XPath中包含在“[”与“]”之间的表达式的情况。
为了更好地提高XSLT的转换性能,Peng-Sheng Chen,Fu-Shun Chu提出了利用多线程环境来提高XSLT转换效率的方法。将XSLT中可并行的部分划分出来,映射到多线程转换模型中并行转换,从而降低转换的总时间,达到加快转换效率的目的。然而,要将转换过程通过多线程并行化,则首先需要对XSLT文档进行分析,从而确定如何将XSLT文档划分为可并行的部分,而该项划分XSLT的工作往往是由人工来完成的。针对这个问题,本发明公开了一种分析XSLT文件本身和对训练数据的转换情况来将其自动划分以及将转换结果有效合并的方法及其装置。
发明内容
本发明的目的是针对现有技术中存在的问题,提供了一种自动对XSLT文件进行并行化划分以及将转换结果有效合并的方法和装置,该方法和装置可以在多线程环境下有效地提高对XML源文档进行XSLT转换的性能和效率。
为了实现上述目的,本发明提供了一种多线程环境下并行XSLT转换方法,该方法包括:
自动划分步骤,其将XSLT文件自动地划分为多个可并行运算的并行转换模块;
并行转换步骤,其利用所述并行转换模块分别对待转换的XML源文档同时进行XSLT转换,并得到多个中间转换结果;
转换结果合并步骤,其将所述多个中间转换结果进行有序合并,并输出最终的转换后目标文档;
其中,所述自动划分步骤具体包括:
初始化步骤,其将转换模块集合初始化为整个所述XSLT文件对应的转换模块;
代价评估步骤,其评估转换模块集合中各个转换模块的转换代价,如果各个转换模块的转换代价均衡,则执行结果输出步骤,否则执行合并与再分步骤;
合并与再分步骤,其将转换代价高的转换模块再次划分,而将转换代价低的转换模块进行合并;所述转换代价用转换模块转换训练数据的时间消耗来衡量;
更新步骤,其更新当前的转换模块集合,将其中再次划分前的转换模块替换为划分后的多个转换模块,并将其中合并前的转换模块替换为合并后的转换模块,然后重新执行代价评估步骤;
结果输出步骤,其输出转换模块集合中的各个转换模块作为所述并行转换模块。
进一步的,所述代价评估步骤利用各个所述转换模块转换训练数据消耗的转换时间来评估各个所述转换模块的转换代价。
进一步的,所述代价评估步骤根据各个转换模块的转换时间是否超过设置的波动范围来判断其转换代价是否均衡。
进一步的,所述代价评估步骤判断是否存在转换时间大于波动范围最大阈值的转换模块,如果存在,则将该转换模块作为转换代价高的模块来将其划分为多个转换模块;否则,继续判断是否存在转换时间小于波动范围最小阈值的转换模块,如果存在则将转换时间最小的两个转换模块作为转换代价低的转换模块来进行合并,否则判断为转换代价均衡。
进一步的,所述代价评估骤还判断当前转换模块集合中的转换模块数量是否超过最大转换模块数,如果超过则合并当前的转换模块集合中转换代价最小的两个转换模块,并继续判断当前的转换模块集合中的转换模块数量是否超过最大转换模块数;当转换模块集合中的转换模块数量不大于最大转换模块数后,再判断各转换模块的转换代价是否均衡。
进一步的,所述最大转换模块数等于处理器逻辑核心数的两倍。
为了实现上述目的,本发明提供了一种多线程环境下并行XSLT转换装置,该装置包括:
自动划分装置,其将XSLT文件自动地划分为可并行运算的多个转换模块;
并行转换装置,其利用所述多个转换模块分别对待转换的XML源文档同时进行XSLT转换,并得到多个中间转换结果;
转换结果合并装置,其将所述多个中间转换结果进行有序的合并,并得到最终的XSLT转换后目标文档;
其中,所述自动划分装置还包括:
初始化单元,其将转换模块集合初始化为整个所述XSLT文件对应的转换模块;
代价评估单元,其评估转换模块集合中各个转换模块的转换代价,如果各个转换模块的转换代价均衡,则由结果输出单元输出并行转换模块,否则由合并与再分单元执行再次划分和合并;
合并与再分单元,其将转换代价高的转换模块再次划分,而将转换代价低的转换模块进行合并;所述转换代价用转换模块转换训练数据的时间消耗来衡量;
更新单元,其更新当前的转换模块集合,将其中再次划分前的转换模块替换为划分后的多个转换模块,并将其中合并前的转换模块替换为合并后的转换模块,然后重新由代价评估单元执行转换代价评估处理;
结果输出单元,其输出转换模块集合中的各个转换模块作为所述并行转换模块。
本发明的有益效果是:通过将XSLT文件划分为多个转换模块,利用多线程环境来进行并行XSLT转换来提高转换效率。本发明通过对XSLT文件本身以及各转换模块对训练数据的转换情况的分析,可以实现XSLT文件的自动化并行划分,避免了人工划分的不足;并且,划分得到的各个转换模块数量优化、转换代价均衡,可以在多线程环境下有效地提高对源文档进行XSLT转换的性能和效率。
附图说明
图1所示为XSLT转换过程。
图2所示为本发明XSLT多线程并行转换过程。
图3所示为本发明对XML源文件并行XSLT转换过程及结构的示意图。
图4所示为一个XSLT文档的根模板代码片段实例。
图5所示为XSLT文档构造的转换树片段。
图6所示为N3为划分节点的转换树分支。
图7所示为划分算法流程图。
图8所示为通用转换分支树形图。
图9所示为划分出的三个转换模块树形图。
图10所示为划分出的三个转换模块对应的XSLT文档。
图11所示为合并过程流程图。
图12所示为动态调整算法流程图。
图13所示为一个记录K’集合的样例文档。
图14所示为某合并单元的中间转换结果树M。
图17所示为中间结果合并模型。
图18所示为合并实例。
图17所示为实验XSLT文件根模板。
图18所示为与图17根模板对应的树形图。
图19所示为训练过程中各个转换模块之间再分与合并过程。
图20所示为匹配“p:spTree”节点的模板。
具体实施方式
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
XSLT的转换过程就是一个将输入文档树转换为结果文档树的过程,过程如附图1。XSLT并行转换的原理是将单一的XSLT文件拆分为多个可并行的XSLT模块,在并行模型中,比如多线程的方式,用多个转换模块对待转换的XML源文档同时进行转换,利用并行执行的优势来减少转换的总时间,从而达到提高性能的目的。
附图2为多线程环境中XSLT并行转换的模型图。其中,每一个转换线程的任务都是利用一个XSLT文件对所需要转换的XML源文档进行转换。由于每一个转换线程所采用的XSLT文件都是原始XSLT文件中的一部分,那么其转换后生成的转换结果自然也只是结果文档中的一部分。这里将不完整的结果文档称作中间转换结果,即结果树的一个分支。从图中可以看出,转换线程的数量和XSLT文件划分后的模块数量是一致的,都为n,而每一个输入文档经过多线程转换后也会同样生成n个中间结果。
利用多线程来进行并行计算,并不是线程的数量越多越好。随着开启的线程数增多,用于线程启停、维护和切换上的开销也将越来越大。当线程数达到一个阈值后,线程数的增多不但不会提升性能,反而会增加系统的负担。在实现XSLT多线程转换程序时,设最大线程数等于最大转换模块数TC。为了获得较佳的计算性能,TC将根据当前CPU的情况确定(例如TC=2*cpu逻辑核心数)。最终XSLT划分得到的最终转换模块数量需要不超过TC。
在本实施例中,多线程环境下并行XSLT转换过程如附图3所示,主要包括三个步骤:自动划分步骤,其将XSLT文件自动地划分为对应的多个可并行运算的并行转换模块;并行转换步骤,其利用所述并行转换模块分别对待转换的XML源文档同时进行XSLT转换,并得到多个中间转换结果;转换结果合并步骤,其将所述多个中间转换结果进行有序合并,并输出最终的转换后目标文档。
其中,所述自动划分步骤具体包括:初始化步骤,其将转换模块集合初始化为整个所述XSLT文件对应的转换模块;代价评估步骤,其评估转换模块集合中各个转换模块的转换代价,如果各个转换模块的转换代价均衡,则执行结果输出步骤,否则执行合并与再分步骤;合并与再分步骤,其将转换代价高的转换模块再次划分,而将转换代价低的转换模块进行合 并;更新步骤,其更新当前的转换模块集合,将其中已划分的转换模块替换为划分后的多个转换模块,并将其中已合并的转换模块替换为合并后的转换模块,然后重新执行代价评估步骤;结果输出步骤,其输出转换模块集合中的各个转换模块作为所述并行转换模块。
相应地,本发明提供的多线程环境下并行XSLT转换装置的具体组成和结构关系同样如附图3所示,该装置主要包括:自动划分装置,其将XSLT文件自动地划分为可并行运算的多个转换模块;并行转换装置,其利用所述多个转换模块分别对待转换的XML源文档同时进行XSLT转换,并得到多个中间转换结果;转换结果合并装置,其将所述多个中间转换结果进行有序的合并,并得到最终的XSLT转换后目标文档。
其中,所述自动划分装置具体包括:初始化单元,其将转换模块集合初始化为整个所述XSLT文件对应的转换模块;代价评估单元,其评估转换模块集合中各个转换模块的转换代价,如果各个转换模块的转换代价均衡,则由结果输出单元输出并行转换模块,否则由合并与再分单元执行再次划分和合并;合并与再分单元,其将转换代价高的转换模块再次划分,而将转换代价低的转换模块进行合并;更新单元,其更新当前的转换模块集合,将其中已划分的转换模块替换为划分后的多个转换模块,并将其中已合并的转换模块替换为合并后的转换模块,然后重新由代价评估单元执行转换代价评估处理;结果输出单元,其输出转换模块集合中的各个转换模块作为所述并行转换模块。
以下对本发明提供的多线程环境下并行XSLT转换方法的各个具体步骤进行详细说明。
步骤一、自动划分步骤
对于一个典型的XSLT文件,一般情况下是可以找到其中相互独立的转换单元或者说转换模块的,它们可以并行执行而互不影响。这些相互独立的转换模块就可以被分别映射到一个转换线程上,同时开始转换任务。XSLT的转换过程就是一个将输入文档树转换为结果文档树的过程,而其中的一个转换模块,应该能够相对独立的完成一个或多个输入文档树分支到一个或多个结果文档树分支的转换。
(1)相关概念和定义
为了清楚地描述XSLT文件划分过程,下面对其涉及的概念进行说明。
定义1:根模板。XSLT文件是由一组template定义的集合组成的。在转换源文档过程中,第一个被调用的template被定义为根模板。这是XSLT的入口template。由于本划分方法考虑的是转换结果文档树为XML文档的情况,所以结果文档树只存在一个根节点,而根模板下子节点就是描述这个根节点的,所以也是唯一的。例如,附图4为一个XSLT文档的实例片段,为了说明方便,分别给其中的每个节点指定了一个名字,如图中N1,N2,....。图中名 为的“root”的template就是根模板,N1节点即为结果树中的根节点。
定义2:转换树。转换树是根据待拆分的XSLT文档建立的一颗树,这棵树以根模板下唯一子节点为根(例如附图4中的N1),此节点下后代节点都为此树的后代节点。当其中某一后代节点为模板调用节点(xsl:apply-templates或xsl:call-template)时,那么对应的被调用模板的所有节点(除xsl:template节点)将作为此节点的后代节点。附图5展示了按照附图4中的XSLT文档建立的转换树片段。可以看到,N4节点为一个模板调用节点,被调用的模板为t2模板,按照建树的原则,模板t2下的所有后代节点(N10及其后代节点)均为N4节点的后代节点。
定义3:转换分支划分节点。在将输入源文档转换为结果文档的过程中,完成整棵树中一个子分支的转换任务的部分为一个转换分支,而此分支的根节点即为此转换分支的划分节点。这里,一个转换分支即此XSLT文档所对应的转换树中的一个分支。
定义4:转换模块。一个转换模块将包括一个转换分支。为了让各转换分支都能独立完成转换任务,转换模块除包含转换分支的所有节点外,还将包含转换分支划分节点的祖先节点。如附图5所示,如果转换任务完成的是N3节点及其后代节点的转换,那么N3节点即为本转换分支的划分节点。此转换模块如附图6所示。当转换模块只包含一个转换分支时,此转换分支划分节点也为本转换模块的划分节点。这里,把所有的转换模块转换后得到的结果树有序地合并起来,应当是一个完整的结果树。设转换模块为S,其中S可以形式化地描述为一个三元组S=<T,K,R>,其中:
T为本模块S的转换代价。影响转换代价的因素有很多种,这里只用转换训练数据的时间消耗来衡量。
K为一个序号集合。当本转换模块包含多个分支时,此集合置空;当本转换模块中只包含一个转换分支时,此集合是从XSLT对应转换树的树根开始到本转换分支划分节点所经历的各层节点序号集合。利用这个序号集合,应当能从转换树的根节点开始成功找到本转换分支划分节点。节点的编号方式是,具有同一父节点的所有兄弟节点按照在XSLT文档转换树中从左到右的顺序从1开始递增编号。这样,从转换树根节点开始,到本转换分支划分节点为止,所经历的所有节点的编号就组成了本转换模块的序号集合K。例如附图4所示根模板片段中,转换分支若为N2的话,其K集合就是{1,1}。反过来,通过K即可确定某转换模块划分的节点。
R也为一个集合,其为转换模块S所包含的子转换模块的集合。这里,子转换模块可以再包含其它转换模块。初始情况下,转换模块的R集合都为空。只有当两个转换模块合并为一个新的转换模块时,新生成的转换模块的R集合才不为空。如S1与S2合并为S12,则S12 的R集合为R={S1,S2}。
定义5:不可划分节点。在XSLT文件的节点元素中,不能再继续深入划分的节点定义为不可划分节点。当节点至少满足如下规则中的一条时,该节点为不可划分节点。
1)此节点除包含xsl:variable或xsl:param外,不再包含任何子节点(或为叶子节点);
2)此节点为xsl:choose、xsl:for-each或xsl:if;
3)此节点为xsl:apply-templates节点,且存在多于一个的模板和此节点对应。
定义6:原子转换模块。假如某转换模块只包含一个转换分支,且此转换分支的划分节点为不可划分节点,则称此转换模块为原子转换模块。
定义7:独立转换模块。不包含任何子转换模块的转换模块称为独立转换模块。它的R集合为空。这里,原子转换模块为特殊的独立转换模块,其划分节点为不可划分节点。
定义8:复合转换模块。包含子转换模块的转换模块定义为复合转换模块。它的R集合不为空,其包含的转换模块可以是独立转换模块,也可以是复合转换模块。
定义9:最大转换模块数TC。假设划分后得到的转换模块数为N,则N满足N≤TC。
定义10:训练数据。训练数据为在XSLT划分过程中,用来测量转换模块的T值时用到的XML源文档。在实际应用中,可以在待转换的源文档中随机抽取一小部分作为训练数据。
(2)转换模块划分规则
对转换模块进行划分时分两种情况:
当被划分的转换模块为复合转换模块时,按照定义可知其R集合不为空。设被划分转换模块为S=<T,K,R>,其中R={S1,S2,…,Sn},则转换模块S可被划分为{S1,S2,…,Sn};
当被划分的转换模块为独立转换模块时,划分较为复杂,附图7为其算法流程图。下面将用一个通用的例子来说明。
附图8为一个通用的转换分支的树形图,图中省略了N1到N11节点之间经过的路径节点,其中N11节点为其划分节点。设附图8表示的转换分支为转换模块S=<T,K,R>,其中 K={1,…,2}。初始化划分位置节点N0=N11,进行划分的步骤如下:
1)确定此转换模块划分节点是否可划分
判断转换模块划分节点N0是否为可划分节点。假如此节点为不可划分节点,则标记此转换模块为原子转换模块,结束本转换模块的划分;否则,标记此转换分支划分节点为本转换模块的划分位置。
2)判断转换模块划分位置
判断划分位置节点N0的子节点情况。假设N0节点的子节点个数(不包括xsl:variable或 xsl:param节点)为n。若n=1则划分位置节点N0变为N0的子节点,记录此节点路径,即在原k集合中追加{1},继续返回步骤1);当n>1(如附图8所示N11节点包含3个子节点)则转步骤3)。
3)进行模块划分
4)得到转换模块对应XSLT文档
本步骤需要按照划分后转换模块的K集合,从转换树中得到其包含的所有节点。这些节点包括本转换模块中,从划分位置节点开始到转换树根节点的路径上的所有节点、这些节点的名为xsl:variable或xsl:param的兄弟节点以及划分节点的所有后代节点。
5)测量划分出的转换模块的T值
分别利用每个转换模块对应的XSLT文档转换训练数据,分别记录转换时间T。
以附图4所示XSLT文档的划分为例,附图5为其转换树图形,按照划分规则,其可被划分为3个转换模块:其对应的树形图如附图9所示,相应的XSLT文档如附图10所示。
(3)转换模块合并规则
转换模块的合并过程就是将多个转换模块合并为一个复合转换模块,附图11为合并过程流程图。设待合并的转换模块为S1和S2,具体合并过程如下:
1)将S1和S2合并为新的转换模块S1_2=<T,K,R>,其中R={S1,S2}。
2)得到转换模块S1_2对应的XSLT文档。按照合并后转换模块的所有子转换模块的K集合,从转换树中得到其包含的所有节点。这些节点同样包括本转换模块包含的所有子转换模块中,从划分位置节点开始到根节点的路径上的所有节点、这些节点的名为xsl:variable或xsl:param的兄弟节点以及划分位置节点的所有后代节点。
3)测量合并后转换模块的T值。利用合并后转换模块对应的XSLT文档转换训练数据,记录转换时间T。
(4)完整的XSLT并行划分算法
为了达到各个转换模块整体性能的平衡,完整的XSLT并行划分算法应是一个划分和合并的循环动态过程,直至到达预先设定的平衡条件才结束,附图12为其算法流程图。具体步骤描述如下:
设转换模块集合为SS={Si|1≤i≤N},其中转换模块Si=<Ti,Ki,Ri>,具体含义见定义4。N为转换模块的数量。
初始情况下,XSLT文件并未被拆分,即只存在一个转换模块。设SS={S0},S0=<T0,K0,R0>,其中K0={1},这个转换模块代表未被拆分的XSLT文档。转换模块S0划分后得到转换模块集合SS’={Si|i=1,2,…,n},在集合SS中去掉转换模块S0,并将集合SS’并入集合SS。计算集合SS中各个转换模块T值的平均值确定波动范围P=(Tavg*(1-η),Tavg*(1+η)),其中η的取值范围是(0,1),这里取0.2。
依次判断集合SS中各个转换模块的T值是否都落在波动范围P内。判断步骤如下:
1)判断集合SS中转换模块数量是否超出TC:
是,转步骤4);否,转步骤2)。
2)判断集合SS中是否存在T值超出波动范围的转换模块:
存在:假设集合SS中存在转换模块Sj,其转换代价Tj超出了波动范围P,则将Sj再次进行划分。当Sj不是原子转换模块,设其划分后可得到转换模块集合SS’’,在集合SS中去掉转换模块Sj,将集合SS’’并入集合SS,计算Tavg和波动范围P,转步骤1)重新开始判断SS集合;当Sj是原子转换模块,则Tavg=Tj,计算波动范围,转步骤1)重新开始判断SS集合。
不存在:转步骤3)。
3)判断集合SS是否存在T值小于波动范围P的转换模块:
存在:转步骤4)。
不存在:结束。
4)在集合SS中选出T值最小的两个转换模块,假设为S1和S2,则将其合并为S1_2,并在集合SS中去掉转换模块S1和S2,填入转换模块S1_2。返回步骤1),继续判断。
当动态调整过程结束后,则表示转换模块集合SS中的各个转换模块的转换代价基本均衡,最终形成的这些转换模块将分别被映射到一个转换线程中,进行对待转换数据的并行转换。需要指出的是,并不是所有的XSLT文件都是可以被并行划分的。当利用此划分模型,最终确定的转换模块只有一个的话,那么此XSLT文档将被认为是不可并行划分的。对于这样的文档,将来并不会被映射到并行转换模型中,其转换任务将仍使用传统的串行转换方式来完成。
步骤二、并行转换步骤
划分结束后,转换模块集合SS中的每一个转换模块都将被映射到一个转换线程中,进行并行XSLT转换。
另外,为了便于转换后对各个中间转换结果进行合并,这里还需要记录各个转换模块在完成转换任务后,得到的中间转换结果在最终转换结果中的位置。这些位置信息就包含在各个转换模块所包含的所有独立转换模块的K集合中。假如将转换模块与其子模块的包含关系看成一个树形图的话,那么处在叶子节点上的模块必为独立转换模块,而只有独立转换模块存在K集合。因此,对于SS集合中的每个转换模块,它能得到的K集合的数量等于其包含的独立转换模块数。
设SS集合中的一个转换模块Si包含J个独立转换模块,则其中存在J个K集合,表示为Kij,j=1,2,...,J。设用转换模块Si对应的XSLT文件转换源文档得到的节点在最终转换结果中的路径信息用集合Kij’描述,则Kij’可由Kij经过处理后得到。处理步骤是:
1)初始化Kij’=Kij
2)在K’中去掉某些内容。去掉的规则是:从根节点到转换模块分支Si对应的节点所经历的节点中(不包括Si对应的节点),只要其为XSLT的指令节点(其命名前缀为xsl),那么就从K’集合中去掉此节点的编号(xsl:element节点除外)。采用上述处理原则是因为,XSLT中的这些被去除的节点不会出现在结果文档中。
这里采用XML的形式来描述多个K’,称为路径描述文档。其中使用路径元素Num表示K’中每一个元素,转换模块中每一个独立转换模块都对应一个表示路径信息的K’,每一个K’将成为本转换模块中的一个路径单元元素(对应在路径描述文档中的元素Unit),本转换模块中的所有路径单元组成一个转换模块单元元素(对应在路径描述文档中的元素Split)。附图13为一个记录K’的路径描述文档。其中表示存在两个转换模块,分别为转换模块S1,所包含的独立转换模块是S11,S12,S13,其相应的K’分别为K11’={1,1},K12’={1,2,1},K13’={1,2,2};转换模块S2,所包含的独立转换模块为S21,S22,其相应的K’集合为K21’={1,3},K22’={1,2,3}。
步骤三、转换结果合并步骤
当并行转换结束之后,对于一个XML源文档将会得到多个中间转换结果树,其数量对应于上节中得到的最终转换模块的数量。要想得到最终的转换结果文档,则需要对这些中间转换结果进行有序的合并。
(1)合并相关定义
这里主要对结果合并过程中用到的概念进行定义。
定义:合并单元。在中间结果合并过程中,任何一个最终结果树中的一个分支都被定义为一个合并单元。路径描述文档中每一个Split对应一个转换模块,而其中包含的每个Unit所描述的路径都对应转换结果树中的一个分支,称其为一个合并单元。因此,合并单元的数量等同于描述文档中Unit节点的数量P。合并过程所要做的就是将这些合并单元合并成最终的结果树。合并单元H可以形式化地描述为一个三元组H=<M,K,LK>,其中:
M为与本合并单元对应的转换模块转换产生的中间结果树;
K是一个序号集合,用于表示本合并单元在最终转换结果中的位置。这个序号集合来源于前述路径描述文档中某一个Unit所包含的序号集合。
LK是一个本地序号集合,它描述了本合并单元所指的节点在M中的实际位置,其值可以由K推导得到。
假设矩阵A为M值相同的合并单元的K集合组成的矩阵,其形式如下:
设变量y,tmp;设i为行标,j为列标;操作f(z,x),用于取第z行中从第1个元素到第x个元素组成的数组。对矩阵A按列从上到下处理,步骤如下:
1)遇到第一个不为零的元素kij,则y=1,tmp=kij,kij=y;
2)按列处理下一个元素,遇到为零元素,略过;遇到不为零的元素ki’j,转第三步;无下一个元素则移到j+1列,转步骤1);
3)判断f(i,j)是否等于f(i’,j),相等转步骤4),不等转步骤5);
4)判断Ki’j是否等于tmp,相等则Ki’j=y;不等,则y=y+1,tmp=ki’j,ki’j=y;转步骤2);
5)y=1,tmp=ki’j,ki’j=y;
经过上述步骤处理后,矩阵A的每一行除去零元素后即为其相应的合并单元的LK集合。例如,设Ka={1,2,3}和Kb={1,3}分别为Ha和Hb的K集合,其组成的矩阵A为:
(2)合并前预处理
假设前面得到的转换模块集合SS包含N个模块,那么经过并行转换后将会得到N个中间转换结果。设中间转换结果树为MRi,i=1,2,…,N。通过前述分析得到的路径描述文档,可以将其包含的每个Unit构造为一个合并单元。那么,就得到了一个合并单元的集合HH={Hi|i=1,2,…,N’},其中N’为所有Unit的个数。由前述定义,每个合并单元的K集合即为其Unit节点所包含的Num序列,LK集合可按上节方法由K集合推导得到,M则为Unit所属的Split代表的那个转换模块转换源XML文档得到的中间转换结果树。
对合并单元的预处理将分为两个步骤:
1)按照合并单元的LK集合对其M进行修整。
修整的目的是让此合并单元中的M文档树只包含LK集合所描述的节点。修整是基于合并单元的LK集合来进行的。即,从中间转换结果树M的根节点开始,按照合并单元的LK集合开始遍历节点,除最后遍历到的节点的所有子孙节点外,将过程中没有被遍历到的节点剪掉。例如,附图14a为合并单元H的中间转换结果树M,其LK集合为LK={1,2},按照LK集合遍历此树后,要被剪掉的为第二层编号为1和3的两个分支,其处理后的结果如附图14b所示。
2)按照合并单元的K集合对所有的合并单元进行排序。
(3)结果合并操作
经过上步的预处理后,合并单元已经为有序排列。设合并单元序列为HH={H1,H2,…,Hn}。合并的方式是将合并单元序列中的第一个合并单元H1作为基准合并单元BH1,对于基准单元不做任何操作,那么H1中的M即为基准文档树。然后将其他合并单元经处理后依次合并进来。假设合并操作定义为Mer,对被合并的单元进行的处理定义为D,那么这个结果合并过程可用公式表示:
BHn=Mer(BHn-1,D(Hn))
中间结果的合并模型如附图15所示,其中D和Mer是操作。
合并过程是按照顺序进行的,假设以将合并单元Hn合并到基准合并单元BHn-1中为例,下面描述了合并的主要步骤:
1)比较基准合并单元的K集合Kn-1与被合并单元的K集合Kn中的元素。这里是要找到第一个对应位不相等的元素。假设两个K集合中第一个不相等的元素为第x个元素。那么,对Hn中的Mn文档树进行D操作,即删除Mn文档树第x层以上的所有祖先节点(设Mn的根 节点为第一层节点),得到文档树Mn’。
2)取出基准合并单元K集合Kn-1的前x个元素组成集合G。Mer操作过程为:(A)按照集合G在基准合并单元的Mn-1文档树中从根节点开始遍历,每一个元素代表M文档树中不同层上某一个节点的编号。设遍历到的最后一个节点为E;(B)将上步中得到的文档树Mn’作为节点E的子节点,添加到基准合并单元的文档树中。
经过上面两个步骤后,合并单元Hn就被合并到基准合并单元BHn-1中了,得到的结果作为新的基准合并单元BHn,其K集合为Hn的K集合Kn,其M文档树为合并后的文档树。按照此方法依次将所有的合并单元都合并到基准合并单元后,最终得到的基准合并单元中的M文档树即为最终转换结果树。
附图16给出了一个合并的例子。其中16a表示基准合并单元BH1的文档树M1,其K集合K1={1,1},16b表示被合并单元H2的文档树H2,其K集合K2={1,2,1}。可以看到,两个K集合是在第二个元素开始不同的,那么D操作为去掉M2中第二层以上的祖先节点,得到M2’,Mer操作为利用集合G={1}遍历M1文档树,最后遍历到的节点为根节点N1,并将M2’作为N1节点的子节点添加到M1中,最后得到的文档树如图16c所示。
为了进一步阐述本发明提供的并行转换方法,以下以项目的具体实验为例来予以说明。
实验内容来源于微软、北京航空航天大学和北京信息科技大学等合作的“UOF转换器”第四期项目。“UOF转换器”是开源项目,用于实现UOF与OOXML文档格式间的双向转换。主要实现文字处理、电子表格、演示文稿部分功能点的转换。第四期项目开始于2010年9月,主要实现UOF1.0与OOXML(ISO29500)、UOF1.1与OOXML(ISO29500)的双向转换。
UOF转换器主要采用XSLT的技术来实现核心部分的格式转换。本实验将采用其中演示文稿OOXML向UOF方向转换的XSLT文件作为测试。待转换的XML源文档为此项目中提供的220个OOXML文档,转换过程是利用XSLT文件将这些文档转换为UOF1.1格式文档。
从附图17给出的XSLT文件根模板,可以从中大致了解转换的结构。附图18给出了与之对应的树形图。
本实验中,在220个待转换文档中随机选取10个文档作为XSLT自动划分时的训练数据。附图19给出了训练过程中各个转换模块之间再分与合并过程。图中每个单元后的数字为本部分单独转换10个训练数据的时间消耗,单位是毫秒。从图中可以看出,第一次划分后,最大的转换模块为“对象集”。按照XSLT自动划分方法,这部分将在其子节点上继续划分。从附图19可以看出,“对象集”的子节点只有一个,并且是模板调用。找到匹配“p:spTree”节点的模板如附图20所示。其中第一个子节点是局部变量定义,不作为节点参与划分,第二个 节点是一个“for-each”的XSLT指令,按照前述定义,这是个不可划分的节点,从而得出转换模块“对象集”为不可再分模块。然后训练模型转入合并阶段。从附图19可以看出,最终形成了三个转换模块。
分别利用单线程方式和多线程方式,对220个待测试数据进行10次转换,单位是毫秒。其中转换“式样集”的线程称作线程1,转换“对象集”的线程称作线程2,转换“元数据、链接集、演示文稿、扩展区”的线程称作线程3。具体数据如表1。
表1
实验结果表明,在一定条件下,该方法可以自动找到比较合适的划分方式,能够将中间转换结果合并为正确的目标文档,且总体性能相对于传统的串行转换模式也有了大幅的提升。
由此可知,本发明提供的多线程环境下并行XSLT转换方法和装置可以有效地通过分析XSLT文件本身及其对训练数据的转换情况,而将单一XSLT自动划分为多个可并行的较小的XSLT文件;利用这些划分后的XSLT小文件参与对源文档的多线程并行转换;将不同线程中转换出的中间转换结果有序地合并为最终的目标文档。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件和软件来完成,前述的程序可以存储于计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上实施例仅用以说明本发明的技术方案而非对其进行限制,尽管参照较佳实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对本发明的技术方案进行修改或者等同替换,而这些修改或者等同替换亦不能使修改后的技术方案脱离本发明技术方案的精神和范围。
Claims (8)
1.一种多线程环境下并行XSLT转换的方法,该方法将XML源文档通过并行XSLT转换成目标文档,其特征在于,该方法包括步骤:
自动划分步骤,其将XSLT文件自动地划分为多个能够并行运算的并行转换模块;
并行转换步骤,其利用所述并行转换模块分别对待转换的XML源文档同时进行XSLT转换,并得到多个中间转换结果;
转换结果合并步骤,其将所述多个中间转换结果进行有序合并,并输出最终的转换后的目标文档;
其中,所述自动划分步骤具体包括:
初始化步骤,其将转换模块集合初始化为整个所述XSLT文件对应的转换模块;
代价评估步骤,其评估转换模块集合中各个转换模块的转换代价,如果各个转换模块的转换代价均衡,则执行结果输出步骤,否则执行合并与再分步骤;所述转换代价用转换模块转换训练数据的时间消耗来衡量;
合并与再分步骤,其将转换代价高的转换模块再次划分,而将转换代价低的转换模块进行合并;
更新步骤,其更新当前的转换模块集合,将其中再次划分前的转换模块替换为划分后的多个转换模块,并将其中合并前的转换模块替换为合并后的转换模块,然后重新执行代价评估步骤;
结果输出步骤,其输出转换模块集合中的各个转换模块作为所述并行转换模块。
2.根据权利要求1所述的方法,其特征在于,所述代价评估步骤根据各个转换模块的转换时间是否超过设置的波动范围来判断其转换代价是否均衡。
3.根据权利要求2所述的方法,其特征在于,所述波动范围根据各个转换模块的转换时间平均值来设置。
4.根据权利要求2所述的方法,其特征在于,所述代价评估步骤判断是否存在转换时间大于波动范围最大阈值的转换模块,如果存在,则将该转换模块作为转换代价高的模块来将其划分为多个转换模块;否则,继续判断是否存在转换时间小于波动范围最小阈值的转换模块,如果存在则将转换时间最小的两个转换模块作为转换代价低的转换模块来进行合并,否则判断为转换代价均衡。
5.根据权利要求1所述的方法,其特征在于,所述代价评估步骤还判断当前的转换模块集合中的转换模块数量是否超过最大转换模块数,如果超过则合并当前的转换模块集合中转 换代价最小的两个转换模块,并继续判断当前的转换模块集合中的转换模块数量是否超过最大转换模块数;当转换模块集合中的转换模块数量不大于最大转换模块数后,再判断各转换模块的转换代价是否均衡。
6.根据权利要求5所述的方法,其特征在于,所述最大转换模块数等于处理器逻辑核心数的两倍。
7.根据权利要求1所述的方法,其特征在于,所述并行转换步骤还记录各个并行转换模块在完成转换任务后得到的中间转换结果在最终转换结果中的位置。
8.一种多线程环境下并行XSLT转换装置,该装置将XML源文档通过并行XSLT转换成目标文档,其特征在于,该装置包括:
自动划分装置,其将XSLT文件自动地划分为可并行运算的多个转换模块;
并行转换装置,其利用所述多个转换模块分别对待转换的XML源文档同时进行XSLT转换,并得到多个中间转换结果;
转换结果合并装置,其将所述多个中间转换结果进行有序的合并,并得到最终的XSLT转换后目标文档;
其中,所述自动划分装置具体包括:
初始化单元,其将转换模块集合初始化为整个所述XSLT文件对应的转换模块;
代价评估单元,其评估转换模块集合中各个转换模块的转换代价,如果各个转换模块的转换代价均衡,则由结果输出单元输出并行转换模块,否则由合并与再分单元执行再次划分和合并;所述转换代价用转换模块转换训练数据的时间消耗来衡量;
合并与再分单元,其将转换代价高的转换模块再次划分,而将转换代价低的转换模块进行合并;
更新单元,其更新当前的转换模块集合,将其中再次划分前的转换模块替换为划分后的多个转换模块,并将其中合并前的转换模块替换为合并后的转换模块,然后重新由代价评估单元执行转换代价评估处理;
结果输出单元,其输出转换模块集合中的各个转换模块作为所述并行转换模块。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210119271.XA CN102622334B (zh) | 2012-04-20 | 2012-04-20 | 多线程环境下并行xslt转换方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210119271.XA CN102622334B (zh) | 2012-04-20 | 2012-04-20 | 多线程环境下并行xslt转换方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102622334A CN102622334A (zh) | 2012-08-01 |
CN102622334B true CN102622334B (zh) | 2014-04-16 |
Family
ID=46562257
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210119271.XA Expired - Fee Related CN102622334B (zh) | 2012-04-20 | 2012-04-20 | 多线程环境下并行xslt转换方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102622334B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103412819B (zh) * | 2013-08-28 | 2016-01-27 | 北京信息科技大学 | 一种基于关联度分析的文档转换器测试方法及装置 |
CN103544260A (zh) * | 2013-10-16 | 2014-01-29 | 银江股份有限公司 | 一种大型xml文档转换方法 |
CN106293634A (zh) * | 2015-05-13 | 2017-01-04 | 阿里巴巴集团控股有限公司 | 数据处理的方法及系统 |
CN107679027B (zh) * | 2017-10-10 | 2021-03-19 | 中国航发控制系统研究所 | Excel测试用例表格转换为Word测试用例表格的方法及装置 |
CN108682047B (zh) * | 2018-05-23 | 2022-04-12 | 北京唐吉诃德科技有限公司 | 一种三维建筑模型文件转换方法和系统 |
CN112765108B (zh) * | 2020-11-19 | 2024-05-07 | 统信软件技术有限公司 | 一种文档加载方法、计算设备及可读存储介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101350007A (zh) * | 2007-06-26 | 2009-01-21 | 英特尔公司 | 具有低争用和负担均衡的并行xsl转换的方法和装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090094606A1 (en) * | 2007-10-04 | 2009-04-09 | National Chung Cheng University | Method for fast XSL transformation on multithreaded environment |
-
2012
- 2012-04-20 CN CN201210119271.XA patent/CN102622334B/zh not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101350007A (zh) * | 2007-06-26 | 2009-01-21 | 英特尔公司 | 具有低争用和负担均衡的并行xsl转换的方法和装置 |
Non-Patent Citations (1)
Title |
---|
罗文甜等.基于XML的主流办公文档格式间的转换器研制情况概述.《北京信息科技大学学报(自然科学版)》.2010,第25卷(第S2期),第109-116页. * |
Also Published As
Publication number | Publication date |
---|---|
CN102622334A (zh) | 2012-08-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102622334B (zh) | 多线程环境下并行xslt转换方法和装置 | |
DE102018006735A1 (de) | Prozessoren und Verfahren für konfigurierbares Clock-Gating in einem räumlichen Array | |
CN103116493B (zh) | 一种应用于粗粒度可重构阵列的自动映射方法 | |
Raveendran et al. | A high performance scalable fuzzy based modified Asymmetric Heterogene Multiprocessor System on Chip (AHt-MPSOC) reconfigurable architecture | |
CN102176200A (zh) | 一种软件测试用例自动生成方法 | |
CN105022670A (zh) | 一种云计算平台中的异构分布式任务处理系统及其处理方法 | |
CN102855153B (zh) | 面向片式多核处理器的流编译优化方法 | |
CN101901161A (zh) | 一种面向能耗相关软/硬件划分的层次化控制数据流图建模方法 | |
CN102043886A (zh) | 集成电路下层硬件映射方法、数据控制流时序约束方法及装置 | |
Ouyang et al. | Hardware/software partitioning for heterogenous mpsoc considering communication overhead | |
CN110162297A (zh) | 一种源代码段自然语言描述自动生成方法及系统 | |
CN113673192A (zh) | 一种超大规模集成电路spef寄生参数的并行加速提取方法 | |
CN105242907B (zh) | Arm二进制代码的neon向量化转换方法 | |
CN105373424A (zh) | 一种基于机器学习的推测多线程划分方法 | |
CN105404611A (zh) | 一种基于矩阵模型的多计算引擎的自动选择方法 | |
CN101655783A (zh) | 前瞻多线程划分方法 | |
CN111143038A (zh) | Risc-v架构微处理器内核信息模型建模及生成方法 | |
KR101962250B1 (ko) | 재구성가능 아키텍처를 위한 스케줄러 및 스케줄링 방법 | |
CN102054109A (zh) | 集成电路下层硬件映射方法、数据控制流生成方法及装置 | |
CN104573331B (zh) | 一种基于MapReduce的K近邻数据预测方法 | |
CN103559069B (zh) | 一种基于代数系统的跨文件过程间优化方法 | |
CN103984794B (zh) | 一种针对软模块的固定边框的集成电路布图规划方法 | |
CN102222274A (zh) | 基于调度编码的免疫克隆选择作业车间调度方法 | |
CN116628136A (zh) | 基于声明式推理的协同查询处理方法、系统、电子设备 | |
CN103140853A (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 | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C53 | Correction of patent of invention or patent application | ||
CB03 | Change of inventor or designer information |
Inventor after: Hou Xia Inventor after: Li Ning Inventor after: Gao Xiaoguang Inventor before: Gao Xiaoguang Inventor before: Hou Xia Inventor before: Li Ning |
|
COR | Change of bibliographic data |
Free format text: CORRECT: INVENTOR; FROM: GAO XIAOGUANG HOU XIA LI NING TO: HOU XIA LI NING GAO XIAOGUANG |
|
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20140416 |