一种结构化模型的合并方法及系统的制作方法

文档序号:6612900阅读:189来源:国知局
专利名称:一种结构化模型的合并方法及系统的制作方法
技术领域
本发明涉及软件技术,特别是涉及一种结构化模型的合并方法及系统。
技术背景在业务系统的并行开发环境下,常出现这样的情况在客户二次开发业务 系统时,同时开发出来的多个版本需要进行合并。因此,为了支持并行开发, 通常都需要实现业务系统的源代码合并机制。合并的概念是指同 一信息实体可 以同时被不同的主体修改,然后会形成这个信息实体的多个修改变体,当需要 把多个变体的修改意图累加在一起的时候,就需要对这些变体进行合并,得到 这个信息实体一个新的完整意义的版本。在一般的软件开发模式下,开发产品主要为软件源代码,业界一般采取基 于文本方式的源代码合并。这种合并机制的准确度较低,语义正确性得不到保 证, 一般都需要在合并后由开发人员对合并结果进行大量的调整。而在基于模型开发架构的模式下,主要的开发产品为模型。软件源代码与 结构化模型在合并过程中的不同之处主要体现在信息结构特征,源代码在合并 过程中一般体现为行文本信息,结构化模型则体现为特有结构化的信息。由于 模型的结构比一般的源代码更复杂,如果仍采用文本方式合并复杂的模型结 构,在合并的过程中随着行信息的合并(包括增删改才乘作),合并的结果可能 不满足模型的结构化需求,从而破坏了模型的基本结构,同时也破坏了模型想 要表达的信息,其合并效果非常差,基本无可用性。发明内容本发明所要解决的技术问题是提供一种结构化模型的合并方法及系统,以 解决采用文本方式合并结构化模型,破坏了模型结构的问题。为解决上述技术问题,根据本发明提供的具体实施例,本发明公开了以下 技术方案一种结构化模型的合并方法,包括按照结构定义解析参与合并的实体结构,得到原子信息的集合;
根据所述解析后得到的实体结构,构造一个空的合并后实体结构;根据原子信息标识,在各个合并实体查找拥有同 一标识的对等原子信息;合并对等原子信息,并保存到所述合并后的实体结构中。所述方法还包括按照结构定义保存合并后实体。其中,所述查找对等原子信息的步骤包括所述原子信息标识包括语义标 识和位置标识;根据语义标识查找每个合并实体的原子信息,无语义标识的实 体结构按照原子信息在实体结构中的位置标识查找。其中,所述合并对等原子信息的步骤包括比较对等原子信息,将发生改 变的原子信息确定为合并后的原子信息;如果对等原子互不相同,则进行人工 调整。其中,参与合并的各个实体结构相同,所述实体结构特定于模型,模型的 实体结构不同,解析方式也不同。一种结构化模型的合并系统,包括结构解析单元,用于按照结构定义解析参与合并的实体结构,得到原子信 息的集合;并根据所述解析后得到的实体结构,构造一个空的合并后实体结构;合并单元,用于根据原子信息标识,在各个合并实体查找拥有同一标识的 对等原子信息;合并对等原子信息,并保存到所述合并后的实体结构中。所述系统还包括存储单元,用于保存合并后的实体结构信息。其中,所述原子信息标识包括语义标识和位置标识;所述合并单元才艮据语 义标识查找每个合并实体的原子信息,无语义标识的实体结构则按照原子信息 在实体结构中的位置标识查找,获得拥有同 一标识的对等原子信息。其中,所述合并单元比较对等原子信息,将发生改变的原子信息确定为合 并后的原子信息;如果对等原子互不相同,则进行人工调整。其中,参与合并的各个实体结构相同,所述实体结构特定于模型;所述结 构解析单元针对不同模型的实体结构进行不同解析。根据本发明提供的具体实施例,本发明公开了以下技术效果 本发明实施例提供的合并方式,针对结构化的模型实体,以模型的结构特 征为基础进行合并。在实际执行合并过程的时候,首先按照结构定义将参与合 并的实体结构解析为原子信息的集合,并构造一个空的合并后实体结构,然后 根据每个合并实体的原子信息标识,查找拥有同一标识的对等原子信息,合并 对等原子信息,并保存到所述合并后的实体结构中,从而完成结构化模型的合 并。所述合并过程以实体结构的原子信息为单位进行合并,保证合并后的信息 结构保持完整性,从而消除了文本合并方式对模型结构的破坏。图1是本发明实施例所述结构化模型合并方法的步骤流程图; 图2是本发明实施例所述结构化模型的合并系统结构框图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式
对本发明作进一步详细的说明。现有技术中基于文本的合并主要是基于文本的行结构信息,如果合并的目 标信息结构不是基于行结构,则釆用文本合并后的结果可能会不符合目标信息 结构。本发明实施例提供了一种针对模型的结构化信息进行合并的方法,以模 型的结构特征为基础进行合并,能够保证在合并过程中目标信息结构的完整 性,消除合并过程对信息结构的破坏。下面先介绍结构化模型,如前所述,结构化模型体现为特有结构化的信息,举例i兌明一段简单的模型源代码如果以文本结构来解释,它是由4行文本构成。而且,为了表述相同语义, 这一段样例代码还可以有多种文本表现形式,如public class HelloWorld {public static void main (String [] args) { System, out. println("Hello World.");)


如果以Java程序语言的结构来解释,它是由以下的结构组成 一个类定义包含一个方法定义包含方法i方问限定定义 方法返回值定义 方法参lt定义 方法体定义包含 一个语句针对以上样例模型,如果按照文本方式解析,就会解析成不同的内容,即 可以解析为4行文本,也可以解析为3行文本;如果按照模型结构解析,则会 得到相同的结构化信息。因此,本发明基于所述原理,,提出了一种以模型的结 构特征为基础的合并方式。参照图1,是所述结构化模型合并方法的步骤流程图。举例说明一个模型的原始版本如下 VerOpackage foojpublic class HelloWorld {public static void main(String[] args) { String name = fullName("bill", "gates"); Sys tem. out. print In (name);private static String fullName(String firstName, String lastName) { return firstName + ". " + lastName;一个开发流做如下的修改,vO->vl: Verlpackage fooj
public class HelloWorld {public static void main (String[] args) { String name = fulIName("Bi11", "gates"); System, out. println(name);private static String fullName (String firstName, String lastName) return firstName + ". 11 + lastName;一个开发流^t如下的》务改,v0->v2: Ver2package foo;public class HelloWorld {public static void main(String[] args) { String name = fullName ("bill", "Gates"); System, out. print In (name)private static String fullName (String firstName, String lastName) return firstName + ". " + lastName;在进行合并的时候,需要把vl相对于vO的修改以及v2相对于vO的修改 合在一起,形成一个包含两部分修改语义的新版本v,。合并过程如下步骤IOI,输入参与合并的多份实体及其结构信息。示例中,参与合并的 实体指vO、 vl和v2,实体的结构信息指分别对应vO、 vl和v2的源代码VerO、 Verl和Ver2。步骤102,输入实体结构定义。在不同的应用场景下,实体结构是特定于 模型的,没有一个通用的实体结构,即模型不同,实体结构类型也不同,而每 种模型都具有特定的结构定义。
步骤103,按照所述结构定义解析输入的实体。由于实体结构特定于模型, 所以实体的解析方式也是特定于模型的,即针对不同模型结构,采取的解析方式也不同。如果以Java程序语言的结构来解释,实体vO的Java Source结构 如下—个package声明包含一个包名称 一个类声明包含一个类访问范围声明 包含一个类名称 包含一个方法声明包含一个方法访问范围声明 包含一个static声明 包含一个返回值类型声明 包含一个方法名称 包含一个方法参数声明 包含一个参数类型 包含一个参数名称 包含方法体声明包含一个变量声明包含变量类型声明 包含变量名称 包含赋值表达式右值声明 包含一个方法调用包含被调用方法声明 包含方法调用参数声明 包含参数"bill" 包含参数"gates"包含一个方法调用包含被调用方法声明
包含方法调用参数声明 包含参数包含一个方法声明分析上述实体结构的示例可知,实体结构是多个原子信息的集合,所述原 子信息是描述实体结构信息的最小单位。由于实体的信息是由更小单位的信息 组合而成,实体结构信息就是用来描述这种组合关系的,所述组合关系是一种 层级关系,每一层级代表一个原子信息。需要说明的是,参与合并的多份实体是具有相同结构的实体。因此,实体vl和v2解析出来的结构与实体v0的结构现同,只是内容值不同实体vl的 内容值为"Bill,,、 "gates",实体v2的内容值为"bill"、 "Gates"。步骤104,根据解析出来的实体结构,构造一个空的合并后实体结构。即 根据实体v0的结构构造合并后实体v'的结构。步骤105,按照结构定义遍历所有实体的原子信息,根据原子信息标识, 在各个合并实体查找拥有同一标识的对等原子信息。遍历实体信息就是根据结 构组合关系,按照一定的顺序访问所有的原子信息。在合并的过程中,同一实 体会有多个变体版本,对等原子信息就是分别在多个变体中,表示同一个语义 的一组原子信息。而在实体结构信息中,每个原子信息都通过标识来区别,通 常以语义标识信息查找原子信息,如果实体结构中没有语义标识,则通过原子 信息在结构中的位置标识进行查找。示例中,循环遍历vO中的每一个原子信息,并同时找到在另外两个版本 vl和v2中的对等体。寻找对等体的方法查找相同结构类型的原子信息,当 同类型的原子信息可能有多个实例的时候(即存在vO、 vl和v2),需要才艮据 语义标识信息找到表示相等的信息;无语义标识信息的时候根据在结构中的位 置信息标识查找。这样,对于每个原子信息都有一组包含3个信息值的查找结 果。步骤106,将对等原子进行合并,合并后的原子信息保存在合并后的实体 结构中,并保持合并前的原子信息标识。合并过程是在每组信息值中互相比 较所述3个值的相等性,然后选取一个值作为合并值复制到v,结构中;如果
InfoO != Infol, InfoO != Info2,而且Infol != Info2,那么就出现了合 并沖突,需要人工决定选取Infol还是Info2。其中,InfoO、 Infol、 Info2 分别表示v0、 vl和v2中的对等原子信息。
在示例中,除了参数"bill"和参数"gates,,这两个原子信息,其他所有 的原子信息都是InfoO = Infol = Info2,所以v,中直接复制InfoO;参数"M11" 的情况是InfoO != Infol, InfoO = Info2,则v,取Infol的值"Bill";参 数"gates,,的情况是InfoO = Infol, InfoO != Info2,则v,取Info2的值 "Gates"。
步骤107,按照结构定义保存所述合并后的实体。合并完所有的原子信息, 得到完整的合并后实体v,,然后把v,输出成外部存储形式就是合并结果。 示例中,合并后的结果为
package fooj
public class HelloWorld {
public static void main (String [] args) { String name = fulIName ("Bi1 ", "Gates"); System, out. print In (name);
private static String fullName(String firstName, String lastName) { return firstName + ". " + lastName;
通过上述合并方法获得的合并后结果,可以保证合并后的信息结构符合目 标信息结构,从而保证合并过程中模型结构的完整性,消除了合并过程对信息 结构的破坏。
将上述以模型结构为基础的合并方式与文本合并方式相比较,按照行结构
信息解析vO、 vl、 v2,得到3份结构化的信息 VO的内容 行01: package foo; 行02: public class HelloWorld {
public static void main (String [] args) { String name = fulIName ("bi11", "gates"); System, out. print In (name);
private static String ful IName (String f irstName, String
return firstName + ". " + lastName;
行03 行04 行05 行06 行07 lastName) 行08 行09 行10
VI、 v2解析出来的结果也是相同结构,只是内容值不一样。 合并后的结果为 package foo;
public class HelloWorld {
public static void main (String [] args') {System, out. println(name);
private static String fulIName(String firstName, String lastName) return firstName + ". 11 + lastName;
在以上行文本合并的结果中,"?"表示无法得到准确的结果。因此,采 用两种合并方法的结果是不一样的,其实现的关键不同点结构合并需要针对 不同的目标结构有专门的解析逻辑以及数据结构支持;而行结构是固定的简单 结构,可以通用处理;而且,结构化合并的合并语义更准确。
针对以模型结构为基础的合并方法,本发明还提供了结构化模型的合并系 统实施例。参照图2,是所述合并系统的结构框图,所述系统主要包括结构解 析单元201、合并单元202和存储单元203。
所述结构解析单元201用于按照结构定义解析参与合并的实体结构,得到
原子信息的集合;并根据所述解析后得到的实体结构,构造一个空的合并后实 体结构。由于实体结构特定于模型,所以实体的解析方式也是特定于模型的, 即针对不同模型结构,采取的解析方式也不同。
所述合并单元202用于根据原子信息标识,在各个合并实体查找拥有同一
标识的对等原子信息;合并对等原子信息,并保存到所述合并后的实体结构中, 然后将合并后的实体保存到存储单元203。查找过程是遍历所有实体的原子信 息,根据语义标识信息找到表示相等的信息,无语义标识信息的时候才艮据在结 构中的位置信息查找。查找到对等原子信息后,所述合并单元比较对等原子信 息,将发生改变的原子信息确定为合并后的原子信息;如果对等原子互不相同, 则进行人工调整。
图2所示系统中未详述的部分可以参见图1所示方法的相关部分,为了篇 幅考虑,在此不再详述。
以上对本发明所提供的一种结构化模型的合并方法及系统,进行了详细介
例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的 一般技术人员,依据本发明的思想,在具体实施方式
及应用范围上均会有改变 之处。综上所述,本说明书内容不应理解为对本发明的限制。
权利要求
1、一种结构化模型的合并方法,其特征在于,包括按照结构定义解析参与合并的实体结构,得到原子信息的集合;根据所述解析后得到的实体结构,构造一个空的合并后实体结构;根据原子信息标识,在各个合并实体查找拥有同一标识的对等原子信息;合并对等原子信息,并保存到所述合并后的实体结构中。
2、 根据权利要求1所述的方法,其特征在于,还包括按照结构定义保 存合并后实体。
3、 根据权利要求1所述的方法,其特征在于,所述查找对等原子信息的 步骤包括所述原子信息标识包括语义标识和位置标识;根据语义标识查找每个合并实体的原子信息,无语义标识的实体结构按照 原子信息在实体结构中的位置标识查找。
4、 根据权利要求1所述的方法,其特征在于,所述合并对等原子信息的 步骤包括比较对等原子信息,将发生改变的原子信息确定为合并后的原子信 息;如果对等原子互不相同,则进行人工调整。
5、 根据权利要求1所述的方法,其特征在于参与合并的各个实体结构 相同,所述实体结构特定于模型,模型的实体结构不同,解析方式也不同。
6、 一种结构化模型的合并系统,其特征在于,包括 结构解析单元,用于按照结构定义解析参与合并的实体结构,得到原子信息的集合;并根据所述解析后得到的实体结构,构造一个空的合并后实体结构; 合并单元,用于根据原子信息标识,在各个合并实体查找拥有同一标识的 对等原子信息;合并对等原子信息,并保存到所述合并后的实体结构中。
7、 根据权利要求6所述的系统,其特征在于,还包括存储单元,用于 保存合并后的实体结构信息。
8、 根据权利要求6所述的系统,其特征在于所述原子信息标识包括语 义标识和位置标识;所述合并单元根据语义标识查找每个合并实体的原子信 息,无语义标识的实体结构则按照原子信息在实体结构中的位置标识查找,获 得拥有同 一标识的对等原子信息。
9、 根据权利要求6所述的系统,其特征在于所述合并单元比较对等原 子信息,将发生改变的原子信息确定为合并后的原子信息;如果对等原子互不 相同,则进行人工调整。
10、 根据权利要求6所述的系统,其特征在于参与合并的各个实体结构 相同,所述实体结构特定于模型;所述结构解析单元针对不同^f莫型的实体结构 进行不同解析。
全文摘要
本发明公开了一种结构化模型的合并方法及系统,解决采用文本方式合并结构化模型,破坏了模型结构的问题。所述方法包括按照结构定义解析参与合并的实体结构,得到原子信息的集合;根据所述解析后得到的实体结构,构造一个空的合并后实体结构;根据原子信息标识,在各个合并实体查找拥有同一标识的对等原子信息;合并对等原子信息,并保存到所述合并后的实体结构中。所述合并过程以实体结构的原子信息为单位进行合并,保证合并后的信息结构保持完整性,从而消除了文本合并方式对模型结构的破坏。
文档编号G06F9/44GK101126983SQ200710163898
公开日2008年2月20日 申请日期2007年10月11日 优先权日2007年10月11日
发明者杜华兵 申请人:金蝶软件(中国)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1