生成关于模型的约束表达式的方法以及约束语言编辑器的制作方法

文档序号:6458252阅读:324来源:国知局
专利名称:生成关于模型的约束表达式的方法以及约束语言编辑器的制作方法
技术领域
本发明 一般地涉及计算机建模及相应的约束语言的领域,并且具体而 言涉及一种用于生成关于模型的约束表达式的方法以及约束语言编辑器。
背景技术
计算机建模,特别是软件建模主要是指在软件工程领域(诸如,统一
建模语言UML、 Eclipse建模框架EMF)中的对象建模,它从较高的层次 来描述应用程序,进而可以部分或全部地生成该应用的实现代码。绝大多 数模型是由许多方框箭头图和一些附随的文本所组成,这样的模型所传达 的信息是不够完整的,非正式的和不够精确的,甚至有些时候自相矛盾。 模型中的许多缺陷都是由于所使用的图形表达能力有限而造成的。仅仅通 过图形有时无法表达一些条件陈述,而该陈述本应该是一个完整的规约的 一部分。例如,假定对航班与乘客的关系进行UML建模,则航班与乘客 之间的关联可以表示一次航班的乘客是确定的一组人,这个一对多的关联 是多重关系,这意味着乘客的数目是无限的。但是实际上,乘客的数目不 可能超过执行这个航班的飞机上座位的数目。然而,在UML图上无法表 达这个约束。这时,需要向其中添加约束语言,诸如OCL(对象约束语言, Object Constraint Language ) 、 Schematron等。
以OCL为例,在OCL规范中提到,UML图(例如类图)通常不够 精细,无法提供与规范有关的所有相关部分。这其中就需要描述模型中关 于对象的附加约束。这些约束常常用自然语言描述。而实践表明,这样做 经常造成歧义。为了写出无歧义的约束,已经开发出几种所谓的"形式语 言,,。传统的形式语言的缺点是,仅适用于有相当数学背景的人员,而普
7通的商务或系统建模者则难以使用。OCL即为填补这一空白而开发。它是 一种保留了易读易写特点的形式语言。OCL通过提供表达式来支持UML,难。
使用诸如OCL的基于数学的、精确的语言写的表达式为图形表达的 系统模型提供了许多额外的利处,例如,这种表达式不会被不同的角色(诸 如分析员和程序员)理解为不同的意思。它们是明确的,并且使得模型更 为精确和详细。这些表达式也可以被自动化工具所检查,以保证它们是正 确的,并且与模型中的其它元素一致,使得代码生成变得更加有效。然而, 单纯使用表达式这种方式描述的模型常常是难于理解的。例如,尽管源代 码可以被认为是软件最终的模型,但是大多数人在第一次和系统打交道的 时候更希望看到一个图形化的模型,线框箭头图的好处在于,其含义可以 很容易理解。对于软件开发者来说,结合使用UML和OCL使得两方面相 得益彰。大量的不同的图形和OCL表达式可以被结合起来表示模型。注 意,对于一个完整的模型,图形和OCL表达式都是不可缺少的。没有OCL 表达式,模型可能会不够完善;没有UML图,OCL表达式可能引用不存 在的元素模型一一因为OCL中没有一种机制来表示类和关联。因此,只 有结合图形和约束,才能完整地表达一个模型。
Jos Warmer, Anneke Kleppe在其著作"Object Constraint Language, Getting Your Models Ready for MDA, Second Edition"中详细介绍了 OCL 的4个特性。
1. OCL是查询(Query)语言也是约束(Constraint)语言。
一个约束就是对一个(或部分的)面向对象模型或者系统的一个或多 个值的限制。UML类图中的所有值都可以被约束,而表达这些约束的方法 就是OCL。
在UML2标准中,OCL不仅用来写约束,还能够用来对UML图中 的任何元素写表达式。每个OCL表达式都能指出系统中的一个值或者对 象。因为OCL表达式能够求出一个系统中的任何值或者值的集合,因此
、、/








8它具有了和SQL同样的能力。
2.0CL是基于数学的,但没有使用数学符号。
OCL的基础是数学中的集合论和谓词逻辑,并且它有一个形式化的数 学语义,但是它并没有使用某种数学符号。因为虽然数学符号能够清晰地、 无歧义地表达事物,但是只有极少的专家可以看懂。所以数学符号并不适 用于一种广泛应用的标准语言。
自然语言是最易懂的,但是它是含混不清晰的,且无法被计算机自动 处理。OCL取了自然语言和数学符号的折衷方案,使用普通的ASCII字 符来表达数学中同样的概念。如果你不喜欢当前的OCL表达方法,OCL 规范还允许你定义自己的OCL符号集。这点是可以理解的,因为OCL有 一个清晰的数学语义。
3. 强类型的语言
OCL是一种类型语言,任何表达式的值都是属于一个类型的。这个类 型可以是预定义的标准类型例如Boolean或者Integer,也可以是UML图 中的元素例如对象。也可以是这些元素組成的集合,例如对象的集合、包、 有序集合等等。
4. 宣言式(declarative)的语言
与宣言式语言相对应的是过程式(procedural)的语言。过程式语言 (诸如Java)是一类编程语言,描述了动作执行的步骤。而在宣言式语言 中,表达式仅仅描述了应该去做"什么",而不是应该"怎样"去做。为 了保证这一点,OCL的表达式是没有副作用的,也就是说,计算一个OCL 表达式的值不会对系统的状态产生任何改变。
OCL是用于描述应用于UML模型的规则的宣言式语言,因此UML 中的表达式被提升到了纯建模的领域,而不必理会实现的细节和实现的语 言。表达式在高的抽象层次上规定了系统的值,从而保留了 100%的精确。
OCL也是一种用于基于图形的模型的导航(navigation)语言。但是 对于约束的文字表达式则是复杂的。约束表达式为文本形式,用户必须了 解其语法结构才能写出,而这些约束语言往往用户不是4艮熟悉,写表达式可能要花费很多精力,且质量不高。但现有的OCL编辑器对于表达式生 成仅具有有限的支持,其中不存在用于复杂元模型的导航表达式编辑,而 且表达式设计者除了元模型之外还必须面对OCL语法,所述"导航,,将 在下文中详细描述。
典型的OCL编辑器主要关注约束语法,导致用户体验比较差。用户 需要面对基于文本的约束编辑用户界面。尽管编辑器可以帮助用户部分地 自动完成表达式,即,在现有的OCL编辑器中,只能在用户选择一个元 素后,提示该元素的属性和方法,以及直接的关联(Association)元素, 但用户仍然需要知道OCL的语法才能写出表达式。
图1示出了 SQL语句编辑器(RAD)的示例性示图。其中,RAD提 供了模型层的视图并解除了用户进行SQL语句编辑的负担。即,用户只需 要进行模型编辑,而不用操心SQL语法。在用户完成模型设计之后,SQL 语法将通过应用自动生成。而在现有技术中不存在针对UML/EMF自动生 成OCL表达式的类似工具。
此外,尽管Schematron (可用于XQuery、 XPath、 XSLT )和OCL 可以提供类似的约束语义,但它们采用不同的语法,而现有技术中不存在 支持两类语言编辑的统一工具。例如参见图2,图2示出了两种不同的约 束语法共享相同的模型和约束语义的示例。图2是关于导航的具体实例。 图的上半部分是用于描述应用程序部署情况的实例,设计者希望添加一个 约束,要求WAS 6.0 AppServer ( WAS是WebSphere应用服务器的缩写) 的数据源DataSourceUnit所连接的数据库的名字等于"tradedb"。即, 约束语义是数据源需要所连接的数据库是tradeDB。该约束从数据源 DataSourceUnit出发,首先需要导航到它所连接的数据库(DB2 8.1 Database),然后需要导航到数据库的名字,最后要求该名字等于 "tradedb"。导航过程在图中由元素DB2Database/DB2 Database ( 201 ) 到元素DB2 Database (202),以及连接201和202的实线箭头即为导航。 该语义可以被若干种不同的语法所实现,例如OCL表达式和Schematron 表达式。图的下半部分分别使用OCL和Schematron两种约束语言表达了
10这个约束,表达式中关于导航的部分用黑色框标出,其中,框210内的OCL表达式和框220内的Schematron表达式为导航所需的。由此可见,在一个完整的约束表达式中,导航表达式占据了大部分篇幅。在写约束表达式时,用户需要在编辑器提供的整个元素列表中找到导航方法/关联,并且需要手动进行类型转换。这需要很多步骤,因此导航帮助变得尤为重要。在现有编辑器中,并不提供针对导航的帮助,用户需要逐个步骤地实现导航路径。并且,某些有效的导航路径可能无法被提供。因此,需要一种用于提取约束语义、提供导航帮助、并生成针对不同语法的不同约束代码的新颖技术。

发明内容
为了克服现有技术中所存在的缺陷,并使得用户能够便利地通过导航帮助来生成关于模型的约束表达式,进而解除用户编写语言的负担、提高用户工作效率,而提出了本发明。
根据本发明的一个方面,提出了一种用于在约束语言编辑器中帮助生成针对导航的约束语言代码的方法,其中所述约束语言编辑器用于根据所加载的模型/实例和相关约束,生成关于模型/实例的约束表达式,所述导航是实现约束的路径,包括模型/实例元素的序列,所述方法包括
解析所加栽的模型/实例;
通过所解析的4莫型/实例中的与导航有关的元素的类型,计算与所述元素有关的可能的关联;以及
通过所述关联计算出可能的导航路径。
根据本发明的另一方面,提出了一种在约束语言编辑器中用于帮助生成针对导航的约束语言代码的导航帮助器,其中所述约束语言编辑器用于根据所加载的模型/实例和相关约束,生成关于模型/实例的约束表达式,所述导航是实现约束的路径,包括模型/实例元素的序列,所述导航帮助器包括
模型解析器,用于解析所加栽的模型;实例解析器,用于解析所加载的实例;
关联数据库,用于存储与所述所加载的模型/实例中的关联有关的数
据;
导航路径计算器,用于通过所解析的模型/实例中的与导航有关的元素的类型,计算与所述元素有关的可能的关联,并通过所述关联计算出可能的导航路径。
根据本发明的又一方面,提出了 一种用于在约束语言编辑器中帮助生成约束语言代码的方法,其中所述约束语言编辑器用于根据所加栽的模型/实例和相关约束,生成关于模型/实例的约束表达式,所述方法包括
加载模型/实例;
加载约束模式,所述约束模式用于存储与约束语义相关的参数和约束代码模板;
根据所述约束模式中存储的参数的类型,调用相应的帮助器,以基于所述约束模式生成与所加载的模型/实例有关的具体约束参数;以及
根据所生成的约束参数和所述约束模式中的约束代码模板,生成约束代码。
根据本发明的再一方面,提出了一种约束语言编辑器,用于根据所加载的模型/实例和相关约束,生成关于模型/实例的约束表达式,所述约束语言编辑器包括
约束模式,用于存储与约束语义相关的参数和约束代码才莫板;帮助器,用于基于所述约束模式生成与所加载的模型/实例有关的具体约束参数;以及
代码生成器,根据所述帮助器生成的约束参数和所述约束模式中的约束代码才莫板,生成约束代码。
本发明所提出的用于生成关于模型的约束表达式的约束语言编辑器及其方法,能够提取约束语义、向用户提供导航帮助、并生成针对不同语法的不同约束代码,从而用户仅需关注模型设计,而无需了解各种约束语言的语法,减少用户手动写导航表达式的负担,提高工作效率。
1

在附带的权利要求中阐明了被认为是本发明新颖特性的特征。然而,通过参考以下结合附图的说明性实施例的详细描述,将最好地理解本发明
本身以及其优选使用模式、另外的目的和优点,在附图中图l示出了 SQL语句编辑器(RAD)的示例性示图;图2示出了两种不同的约束语法共享相同的模型和约束语义的示例;图3A-3C更清楚地阐述在不同情形中对导航的多种实现;图4是根据本发明实施例的约束语言编辑器的体系结构;图5描述了才艮据本发明实施例的约束表达式生成的方法工作流的流程
图6描述了根据本发明的约束语言编辑器的约束提取的实现;图7描述了根据本发明实施例的约束语言编辑器中的导航帮助器的体系结构;
图8示出了根据本发明的导航帮助器在模型层的工作流;图9示出了才艮据本发明的导航帮助器在实例层的工作流;以及图IOA和IOB详细示出了通过所选择的类型计算可能的关联的过程。需要注意,在全体附图中,相同或相似的标号指代的是相同或相似的单元或组件。
具体实施例方式
在下文中将结合附图对本发明的示范性实施例进行描述。为了清楚和简明起见,在说明书中并未描述实际实现方式的所有特征。然而,应该了
决定,以便实现开发人员的具体目标,例如符合与系统及业务相关的那些限制条件,其中,这些限制条件会随着实施方式的不同而改变。此外,还应该了解,虽然开发工作有可能是非常复杂和费时的,但对得益于这个公开内容的本领域技术人员来说,这种开发工作仅仅是例行的任务。
13此外,还需要说明的一点是,为了避免因不必要的细节而混淆了本发明,在附图中仅仅示出了与根据本发明的方案密切相关的装置结构和/或处理步骤,而省略了与本发明关系不大的其它细节。
为了更好地理解本发明,以OCL编辑器为例,首先要说明为什么用户无法在传统的OCL编辑器的帮助下写出关于模型的约束。传统的OCL编辑器可以生成具有OCL语法信息和模型/实例信息的部分表达式。其中,OCL语法信息包括:操作符,诸如+、 <、 >;集合操作,诸如->any()、->select();以及类型转换,诸如oclAsType()。模型/实例信息包括对象的属性、对象的操作、对象间的关联、以及对象间的一般化(generalization )。传统的OCL编辑器在没有计算模型和实例信息的情况下无法为用户生成完整和有效的表达式。尤其是在存在继承(inheritance)的情形中,由于OCL编辑器无法找到对于孩子元素或父元素的导航,因此在不经过计算的情况下OCL编辑器无法提供所有可能的导航路径。并且OCL编辑器也无法帮助用户生成复杂的导航表达式,从而用户必须根据模型设计的要求利用他所了解的OCL语法知识手动完成导航表达式。
从上述描述中可以看出,导航对于OCL编辑器来说是重要的,也是困难的。其原因在于,在用户写模型表达式时,使用导航是很常见的,而导航是OCL表达式中最复杂的一部分。图3列出了三种不同层次的导航。下面参考图3A-3C可以更清楚地阐述在不同情形中对导航的多种实现。图3A是一个关于应用程序部署的模型,图中包含了若干模型元素如DeployObject、 Unit等,以及元素之间的继承、关联等关系。可以看出,在这样一个模型中,从一个元素到另一个元素可能有多种导航路径,有些路径包含多个关系,甚至有些路径包含了不同种类的关系,形成比较复杂的导航。由于模型的复杂性, 一个导航可能需要经过多个元素。例如,参见图3A, 考虑下述导航Unit -> Requirement -> Dependency Link ->Capability-> Unit。显而易见,该导航的表达式将会是冗长和复杂的。
图3B描述了关联关系之上的继承,说明由于面向对象的继承性,一个导航的终点的类型可能有多种选择父类或子类。例如图3B中包括了继承与关联的结合。如所示,"limixHosting (linux托管)"关系就是继承了 "hosting (托管),,关系;WAS on Linux (Linux上的WAS)是从WAS Unit (WAS单元)继承而来。在这种才莫型中,从一个元素出发的导航路径就可能覆盖多个层次,如从"WAS on Linux"出发,选择"hosting"和"IinuxHosting"就会到达不同层次的元素。因此,OCL编辑器应该提供这样的导航帮助器,其可以把不同层次的元素和属性都找出来,并且分类。当以WAS on Linux作为导航的开始元素时,导航帮助器应该能够列出Linux与OS Unit两个选择,因为Linux是从OS Unit ( OS单元)继承而来。
图3C描述了含有集合关系的模型,说明了对于导航终点为元素集合的情况,其中根据不同的目的地,导航属于不同的层次。"WAS群集"元素作为一个集合元素包含其他三个模型元素WAS V6单元(id: 0)、WASV6单元(id: 1)以及WASV5单元(id: 0),即,这三个模型元素是元素"WAS群集"的成员。因此,从"WAS群集"出发可以到达不同种类的元素。
图3B和3C都给出了从一个元素出发,到达不确定目标的情况,在这种情况下,就需要导航帮助工具做出判断或者给用户适当的选择和提示。因此导航不但需要找到集合的每一个元素,还需要找到它们的共同父类,因为对于元素集合的约束往往是加在具有共同属性的父类这一层次的。
由此可以看出,在对于诸如OCL的约束语言的表达式进行编写时,导航是常见的,也是十分复杂的。导航可以通过下述方式来实现,所述方式包括在^=莫型和实例上定义的关联、属性、方法,由约束语言定义的集合操作,以及类型转换代码。导航代码通常与其它操作符和操作数(模型元素和属性)相结合。并且在实践中,模型设计者往往对模型很熟悉,而
不熟悉约束语言的语法(例如集合操作、类型转换),或者仅熟悉一种约束语言,而无法应用其它的约束语言。因此,导航帮助对于用户便利地写出所需的约束表达式是必要的,导航帮助应该与语法帮助相集成以作为实用工具进行提供,并且导航帮助是一种用于实现独立于语言的表达式生成的不可缺少的功能。根据本发明的约束语言编辑器能够向用户提供导航帮助,从而减少用户手动编写导航表达式的负担,提高工作效率。
在阐述了导航帮助在约束语言编辑器中的重要性以及其复杂性之后,下文将详细描述本发明将如何实现约束语言编辑器以及其中的导航帮助
器。在本发明中,使用"模式(pattern),,将约束语义从其所实现的约束语言中分离出来,所述约束语义包括模型元素/属性、导航(包括实例层导航和类型层导航)、操作符、用户定义值(常数)、以及集合操作。本发明可以基于模型和实例信息,帮助进行导航检测、分类和表达式生成。具体而言,本发明可以基于模型和实例信息检测导航候选,使用关于导航
的模式信息来过滤所述导航候选(例如导航目的地必须属于OS Unit类型,则其他类型的导航目的地被抛弃),根据模型/实例层、继承层对导航
候选进行分类,以及通过用户选择来决定导航路径。本发明还可以使用约束代码模板和代码生成器来将所确定的约束语义转换成不同语言的约束表达式,诸如OCL或Sche腸tron。
下面参见图4,图4是根据本发明实施例的约束语言编辑器的体系结构。结合图4,本领域技术人员可以更清楚地了解根据本发明的约束语言编辑器的工作原理。在图4中,约束语言编辑器包括约束^^莫式420、帮助器430和代码生成器440。约束模式420包括与约束语义相关的下述参数422:模型元素/属性类型、导航类型(包括实例层导航子类型和类型层导航子类型)、操作符类型、用户定义值(常数)、以及集合(指代模型元素/属性的集合)操作符。约束模式420还可以包括约束代码模板424,其中存储了约束代码的模板。在用户确定了必需的参数从而确定了约束语义之后,可以基于所述模板生成所需的约束语言代码。约束语言编辑器将才莫型图410加载进来,并将其中的模型及实例连同约束模式420的参数一同传递到帮助器430。
帮助器430包括元素/属性帮助器431、导航帮助器432、操作符帮助器433、常数帮助器434以及集合帮助器435。上述五种帮助器分别用于帮助上述五种参数的生成,即,它们可以基于预定义的规则自动选择可用的
16相关参数,并在存在多个可能的参数的时候例如以窗口方式列出所述参数 由用户进行选择。上述五种帮助器并不一定同时需要。根据所定义的约束
可以确定所需要的参数。在通过帮助器430确定所需的参数并将其传递回 约束模式420之后,约束模式420将所生成的参数以及与约束语义相对应 的约束代码模板传递到代码生成器440,从而生成约束表达式450。在此实 施例中,代码生成器440包括OCL生成器,因此可以生成OCL语言的约 束表达式。本领域技术人员可以理解,代码生成器440也可以支持其它语 言(诸如Schematron ),从而生成其它语言的约束表达式。注意,这里所 述的约束模式的类型为通用属性约束类型,只包含一些基本的模式,如"等 于(equal)"、"包含(inRange ),,、"赋值(derive)"等,和应用层 语义相关的模式不包括在本发明中。通过所述约束模式可以基于所选择的 操作符进行参数类型验证。
图5描述了根据本发明实施例的用于生成约束表达式的方法工作流的 流程图。所述方法在步骤505开始,并继续进行到步骤510、 515和520。 其中,在步骤510,模型被加载;在步骤515,实例被加载;在步骤520, 模式被加栽。在步骤525,从所加栽的模式中获得一个参数。接着所述方 法继续进行到步骤530,获得帮助器列表。在步骤535,根据所获得的参数 确定所需要的帮助器,其包括上述的五种帮助器之一元素/属性帮助器、 导航帮助器、操作符帮助器、常数帮助器以及集合帮助器。接着在步骤540, 通过用户选择生成参数结果。所述方法继续进行到步骤545,确定所迷参 数是否是最后一个参数。如果否,则循环回到步骤525,从所加载的模式 中获得下一个参数。
如果在步骤545确定所获得的参数是最后一个参数,则所述方法继续 进行到步骤550,其中约束表达式被生成。接着在步骤555,确定该约束中 是否存在导航。如果是,则所述方法继续进行到步骤560,其中通过导航 帮助器生成路径表达式。之后所述方法继续进行到步骤565,所述方法结 束。如果该约束中不存在导航,则不再需要导航帮助器,所述方法直接结 束(步骤565 )。
17下面通过示例,结合图6说明根据本发明的约束语言编辑器的约束提 取的简要实现。图6左边是用于描述应用程序部署情况的实例图。假定约 束可被描述为DB2Inst.Username必须等于与DB2Inst相关的 User.Userld。从中可以看出,该约束中的关键参数涉及模型元素/属性、 导航以及操作符。具体而言,框610示出了 DB2Inst的用户名,即,元素 DB2InstUsername;框620中示出了与DB2Inst相关的User.Userld。 二 者是约束中的模型元素/属性参数。实线箭头630表示从元素DB2Inst到元 素db2admin的导航,其是约束中的导航参数。实线箭头640表示从 Username到Userld的赋值(derive)关系,其是约束中的操作符参数。 由此,在根据本发明的约束语言编辑器中,示出了约束模式的用户界面, 如框650所示。框650示出了创建属性约束的窗口图,其中向用户提示将 创建针对Username的新的属性约束。在该窗口图中,可以由用户选择两 种属性参数以及操作符参数。在用户确定了这些参数之后,可以由约束语 言编辑器自动计算导航路径,并在存在多种可能的导航路径的情况下由用 户进行最终的选择。所述导航路径计算过程将在下文中详细描述。该界面 是直观的和易于操作的,从而用户只需要关注模型设计,而无需知道具体 的约束语法。在确定了这些参数和导航路径之后,即可通过约束代码模板 和代码生成器得到最终的约束表达式。
上文中已经详细描述了4艮据本发明的约束语言编辑器及其工作流,下 面将结合图7详细介绍所述约束语言编辑器中的导航帮助器的体系结构和 工作原理。图7是根据本发明实施例的导航帮助器的体系结构。导航帮助 器包括模型解析器710、类继承数据库715、关联数据库720、关联继承数 据库725、类类型转换器730、导航路径计算器735、实例解析器740以及 实例连接映射表745。在工作中,模型701可以被加载到模型解析器710, 接着模型解析器710对所加载的模型进行解析,并根据所解析的模型确定 对类继承数据库715、关联数据库720以及关联继承数据库725中的一个 进行访问,以便从上述三个数据库中选择相应的数据库以读取可用的数据 列表。对于上述三个数据库的读取是基于所加载的模型的。例如,只有在模型图中存在类继承、关联继承的情况下才需要读取相应的类继承数据库
715和关联继承数据库725。
在从关联数据库720和关联继承数据库725中的一个读取数据的情形 中,所读取的关联数据或关联继承数据接着被加载到导航路径计算器735, 以计算出包括模型/实例元素的最终的导航路径704,所迷导航路径包括模 型/实例元素的序列。在从类继承数据库715读取类数据的情形中,所读取 的类数据接着通过类类型转换器730进行类型转换,并纟支加载到导航路径 计算器735,以计算出最终的导航路径704。通过导航路径计算器735,用 户还可以对导航路径计算器735输入其它参数703,诸如导航开始点、导 航结束点、导航最大步骤(即导航路径所经过的元素的步骤)等等,从而 使得导航路径计算器735所生成的导航路径更加精确,以符合用户对模型 设计的要求。
而通过模型701建模而成的实例702可以被加载到实例解析器740。 接着,实例解析器740对所加载的实例进行解析。所解析的实例可基于用 于显示实例之间的关系的实例连接映射表745进行计算以得到已连接的实 例,并将其加载到导航路径计算器735,以计算出最终的导航路径704,所 述导航路径包括模型/实例元素的序列。
以下结合图8示出了根据本发明的导航帮助器在模型层的工作流。所 述流程开始于框805,从开始元素进行导航。接着所述流程进行到步骤810, 判断该元素是否是集合。如果是,则在步骤815通过该集合的实例获得所 有的相应类型。如上所述,导航不但需要找到集合的每一个元素,还需要 找到它们的共同父类,因为对于元素集合的约束往往是加在具有共同属性 的父类这一层次的。接着在步骤820计算出所述集合的父类型,并将所有 的类型相结合。接着在步骤825将所有的类型(包括所述父类型)作为候 选提供给用户,并由用户选择其中之一。接着所述流程进行到步骤830, 通过所选择的类型计算可能的关联。步骤830涉及的具体过程将在下文中 结合图10A和10B进行详细描述。
如果在步骤810判断所述元素不是集合,则所述流程直接进行到步骤
19830。在步骤830完成对关联的计算后,接着在步骤835获得可能的已连接 类型,并将其提供给用户。在步骤840,用户选择其中的一个类型。接着
在步骤845,确定用户是否选择导航的下一步骤。如果是,则导航仍未结 束,所述流程返回步骤810,继续判断下一步骤所涉及的元素是否是集合, 并重复上述流程。如果否,则所述导航没有下一步骤,所述流程在步骤850 结束。
以下结合图9示出了根据本发明的导航帮助器在实例层的工作流。在 实例层,导航帮助器需要从实例出发得到其类型,即,首先进到模型层计 算可能到达的类型,然后再回到实例层找出属于可达类型的实例。之所以 需要这样做是因为,可达实例在写约束的时候可能还没有和当前元素相连, 如果简单地查看和当前元素连接的元素可能丢失一些可达元素。所述流程 开始于框卯5,从开始元素进行导航。接着所述流程进行到步骤910,判断 该元素是否是集合。如果是,则在步骤915通过该集合的实例获得所有的 相应类型。并在步骤920计算出所述集合的父类型,并将所有的类型相结 合。以上步骤与图8的相应步骤类似。接着在步骤925将所有的类型(包 括所述父类型)以及实例作为候选提供给用户,并由用户进行选择。如果 用户选择了一个类型,则所述流程进行到步骤930,通过所选择的类型计 算可能的关联。步骤930涉及的具体过程将在下文中进行详细描述。
如果在步骤910判断所述元素不是集合,则所述流程直接进行到步骤 930。在步骤930完成对关联的计算后,接着在步骤935获得可能的已连接 类型。在步骤940,根据可能的已连接类型计算实例层上的关系。接着在 步骤950将可能的已连接实例提供给用户。在步骤955,用户选择其中的 一个实例。接着在步骤960,确定用户是否选择了导航的下一步骤。如果 是,则导航仍未结束,所述流程返回步骤910,继续判断下一步骤所涉及 的元素是否是集合,并重复上述流程。如果否,则所述导航没有下一步骤, 所述流程在步骤965结束。
返回步骤925,如果用户选择的不是一个类型而是一个实例,则接着 在步骤945获得该实例相应的类型。接着所述流程直接进行到步骤940,根据该类型计算实例层上的关系。
以上分别描述了导航帮助器在模型层和实例层的工作流程,通过所述 工作流程,可以基于用户选择来生成所需要的导航。下面将通过示例,结
合图IOA和IOB详细描述图8和图9中的步骤830和930:通过所选择的 类型计算可能的关联。在图10A中示出的模型图中寻找针对"F"的可能 的导航帮助。该模型图通过该例子来描述如何找到针对F的可达元素。如 图所示,所选中的元素为F, E和F相关联,B是F的父类,B和A、 C 相关联,A是D、 E的父类,C是G、 H的父类。在图中,实线箭头表示 关联,短划线箭头表示类继承,而虚线箭头表示关联继承。下面详细描述 寻找导航帮助的具体步骤。
第一步,首先读取从元素F出发的关联,参见F与E之间的实线箭头, 结果得到元素E,作为可达元素的候选,如图IOA右侧与第一步相对应的 框中所示。
第二步,读取从元素F出发的类继承,参见F与B之间的短划线箭头, 结果得到元素B。
第三步,读取从元素B出发的关联,参见B与A和C之间的两条实 线箭头,结果得到元素A和C。
第四步,检查元素C及其子元素G、 H是否存在与F的直接关联;在 本例中,这三个元素均不存在与F的直接关联,则将所述三个元素添加到 可达元素的候选中,如图IOA右侧与第四步相对应的框中所示。
第五步,检查元素A及其子元素D、 E是否存在与F的直接关联;在 本例中,由于元素E存在与F的直接关联,则将元素E的父亲A添加到 候选中,如图IOB右侧与第五步相对应的框中所示。除了E之外,元素A 的所有孩子(元素D)不能作为可达元素的候选,因为E和F已经有直接 关联。
第六步,如果元素B还有父类的话,还需要继续前进到元素B的父类 (出于简明的目的未示出),针对B的父类继续计算可达元素,并重复上 述过程。这一过程是不断递归的。在此之后,即完成了通过所选择的类型计算可能的关联的过程。 以上详细描述了根据本发明的约束语言编辑器和其中的导航编辑器以
及二者的工作流程。应该注意,尽管某些实施例针对OCL约束语言进行 了描述,但本领域技术人员可以预期,所述实施例及其技术方案均可以针 对Schematron或其它约束语言来实现,而不会脱离本发明的精神和范围。
如本领域普通技术人员可以了解的,本发明可以体现为方法、系统和/ 或计算机程序产品。因此,本发明可以呈现为完全硬件实施形式、完全软 件实施形式或者软件和硬件组合实施形式。此外,本发明可以被呈现为在 机器可读媒体上包括的计算机程序产品,机器可读媒体上存储了用于对计 算机系统进行编程以执行根据本发明的过程的机器可执行程序指令。这里 所使用的术语"机器可读媒体"包括向计算机系统提供用于执行的指令的 任意媒体。这种媒体可以采用多种形式,包括但是不局限于非易失性々某 体、易失性媒体和传输媒体。非易失性媒体的常见形式例如包括软盘、软 磁盘、硬盘、磁带或者任何其它》兹媒体、光盘ROM (CD-ROM)或者任 何其它光士某体、打孔卡或者任何其它带有孔图案的物理+某体、可编程ROM (PROM)、可擦写PROM (EPROM)、电EPROM (EEPROM)、闪 速存储器、任何其它存储芯片或者盒式磁带(cartridge)、或者计算机系 统可以读取并适合存储指令的任何其它媒体。
此外,可以理解,方框图和/或流程图中的每个方框以及方框图和流程 图中的一些方框的组合可以用一些计算机程序指令实现。这些计算机程序 指令可以提供给一通用计算机、专用计算机或其它可编程数据处理设备的 处理器以产生一机器,使得这些指令通过计算机或其它可编程数据处理设 备的处理器的执行创建用于实现在方框图和/或流程图内或者方框内所指 定的功能的装置。
尽管已经参考优选实施例具体地示出并描述了本发明,但其不是为了 以公开的形式穷举或限制本发明。对于本领域的普通技术人员,可以在形 式上和细节上进行各种改变而不会背离本发明的精神和范围。选择并描迷 了实施例是为了最好地解释本发明的原理和实际的应用,以及为了使本领
22域的其它普通技术人员能够理解对于各种实施例的本发明,所述实施例具 有适合于预期的具体使用的各种修改。
权利要求
1. 一种用于在约束语言编辑器中帮助生成针对导航的约束语言代码的方法,其中所述约束语言编辑器用于根据所加载的模型/实例和相关约束,生成关于模型/实例的约束表达式,所述导航是实现约束的路径,包括模型/实例元素的序列,所述方法包括解析所加载的模型/实例;通过所解析的模型/实例中的与导航有关的元素的类型,计算与所述元素有关的可能的关联;以及通过所述关联计算出可能的导航路径。
2. 根据权利要求l所述的方法,进一步包括在所述所加载的模型中存在关联继承的情形中,计算与所述元素有关的可能的关联继承;计算与所述关联继承相关的元素有关的可能的关联;以及通过与所述元素有关的可能的关联以及与所述关联继承相关的元素有 关的可能的关联计算出可能的导航路径。
3. 根据权利要求l所述的方法,进一步包括 在所述所加载的模型中存在类继承的情形中,计算与所述元素有关的可能的类继承;对类继承相关数据进行类型转换; 计算与所述类继承相关的元素有关的可能的关联;以及 通过与所述元素有关的可能的关联以及与所述类继承相关的元素有关的可能的关联计算出可能的导航路径。
4. 根据权利要求l所述的方法,进一步包括 在所述所加载的模型中存在集合元素的情形中,通过该集合的实例获得所有的相应类型;找到所述实例的共同父类;将包括所述父类型的所有类型作为候选提供给用户,并由用户选择其中之一;以及通过所述类型计算与所述元素有关的可能的关联。
5. 根据权利要求l所述的方法,进一步包括在所加载的是通过模型建模而成的实例的情形中,解析所加载的实例;通过所解析的实例中的与导航有关的元素的类型,计算与所述元素有关的可能的关联;计算与所解析的实例对应的模型层次上的可能的类型;根据所述模型层次上的可能的类型计算属于该类型的实例;以及 通过所述与所述元素有关的可能的关联以及所述属于所述模型层次上 的可能的类型的实例计算出可能的导航路径。
6. —种在约束语言编辑器中用于帮助生成针对导航的约束语言代码的 导航帮助器,其中所述约束语言编辑器用于根据所加栽的模型/实例和相关 约束,生成关于才莫型/实例的约束表达式,所述导航是实现约束的路径,包 括模型/实例元素的序列,所述导航帮助器包括模型解析器,用于解析所加载的模型; 实例解析器,用于解析所加栽的实例;关联数据库,用于存储与所述所加载的模型/实例中的关联有关的数椐;导航路径计算器,用于通过所解析的^^莫型/实例中的与导航有关的元素 的类型,计算与所述元素有关的可能的关联,并通过所述关联计算出可能 的导航路径。
7. 根据权利要求6所述的导航帮助器,进一步包括关联继承数据库,用于存储与所迷所加载的模型中的关联继承有关的数据,其中在所述所加载的模型中存在关联继承的情形中,所述导航路径计算器进一步用于 计算与所迷元素有关的可能的关联继承;计算与所述关联继承相关的元素有关的可能的关联;以及通过与所迷元素有关的可能的关联以及与所述关联继承相关的元素有关的可能的关联计算出可能的导航路径。
8. 根据权利要求6所述的导航帮助器,进一步包括 类继承数据库,用于存储与所述所加载的模型中的类继承有关的数据;以及类类型转换器,用于对于类数据进行类型转换, 其中在所述所加载的模型中存在类继承的情形中,所述导航路径计算器进一步用于计算与所述元素有关的可能的类继承; 计算与所述类继承冲目关的元素有关的可能的关联;以及 通过与所述元素有关的可能的关联以及与所述类继承相关的元素有关的可能的关联计算出可能的导航路径。
9. 根据权利要求6所述的导航帮助器,在所述所加载的模型中存在集 合元素的情形中,所述导航路径计算器进一步用于通过该集合的实例获得所有的相应类型; 找到所述实例的共同父类;将包括所述父类型的所有类型作为候选提供给用户,并由用户选择其 中之一;以及通过所述类型计算与所述元素有关的可能的关联。
10. 根据权利要求6所述的导航帮助器,进一步包括 实例连接映射表,用于显示实例之间的关系,其中在所加栽的是通过模型建模而成的实例的情形中,所述导航路径 计算器进一步用于通过所解析的实例中的与导航有关的元素的类型,计算与所述元素有 关的可能的关联;计算与所解析的实例对应的模型层次上的可能的类型;根据所述模型层次上的可能的类型计算属于该类型的实例;以及 通过所述与所述元素有关的可能的关联以及所述属于所述模型层次上 的可能的类型的实例计算出可能的导航路径。
11. 一种用于在约束语言编辑器中帮助生成约束语言代码的方法,其中所述约束语言编辑器用于根据所加栽的模型/实例和相关约束,生成关于模型/实例的约束表达式,所述方法包括加栽才莫型/实例;加载约束模式,所述约束模式用于存储与约束语义相关的参数和约束代码模板;根据所述约束模式中存储的参数的类型,调用相应的帮助器,以基于所述约束模式生成与所加载的模型/实例有关的具体约束参数;以及根据所生成的约束参数和所述约束4莫式中的约束代码模板,生成约束 代码。
12. 根据权利要求ll所述的方法,其中所述约束模式存储包括下述参 数的组中的任一种参数模型元素/属性类型、导航类型、操作符类型、用 户定义值、以及集合操作符。
13. 根据权利要求ll所述的方法,其中所述帮助器包括下述帮助器的 组中的任一种帮助器元素/属性帮助器、导航帮助器、操作符帮助器、常 数帮助器以及集合帮助器,其中每一种帮助器针对所述约束模式存储的参 数中的一种进行工作。
14. 根椐权利要求ll所述的方法,进一步包括根据权利要求l-5中 任一项所述的用于在约束语言编辑器中帮助生成针对导航的约束语言代码 的方法。
15. 根据权利要求ll所述的方法,所述生成约束代码的步骤进一步包 括如果所述约束代码包括导航,其中所迷导航是实现约束的路径,包括 模型/实例元素的序列,则调用所述导航帮助器生成导航路径表达式。
16. —种约束语言编辑器,用于根据所加载的模型/实例和相关约束, 生成关于^^莫型/实例的约束表达式,所述约束语言编辑器包括约束模式,用于存储与约束语义相关的参数和约束代码模板; 帮助器,用于基于所述约束^^莫式生成与所加载的^^莫型/实例有关的具体 约束参数;以及代码生成器,根据所述帮助器生成的约束参数和所述约束模式中的约束代码模板,生成约束代码。
17. 根据权利要求16所述的约束语言编辑器,其中所述约束模式存储 包括下述参数的组中的任一种参数模型元素/属性类型、导航类型、操作 符类型、用户定义值、以及集合操作符。
18. 根据权利要求16所述的约束语言编辑器,其中所述帮助器包括下 述帮助器的组中的任一种帮助器元素/属性帮助器、导航帮助器、操作符 帮助器、常数帮助器以及集合帮助器,其中每一种帮助器针对所述约束模 式存储的参数中的一种进行工作。
19. 根据权利要求16所述的约束语言编辑器,其中所述导航帮助器为 根据权利要求6-10中任一项所述的导航帮助器。
20. 根据权利要求16所述的约束语言编辑器,其中,如果所述约束代 码包括导航,其中所述导航是实现约束的路径,包括模型/实例元素的序列, 则所述导航帮助器用于生成导航路径表达式。
全文摘要
一种用于在约束语言编辑器中帮助生成针对导航的约束语言代码的方法和导航帮助器,其中约束语言编辑器用于根据所加载的模型/实例和相关约束,生成关于模型/实例的约束表达式,导航是实现约束的路径,包括模型/实例元素的序列,所述方法包括解析所加载的模型/实例;通过模型/实例中与导航有关的元素的类型,计算与元素有关的可能的关联;以及通过关联计算出可能的导航路径。一种用于在约束语言编辑器中帮助生成约束语言代码的方法和约束语言编辑器,所述方法包括加载模型/实例;加载用于存储参数和约束代码模板的约束模式;根据约束模式中存储的参数类型,调用相应的帮助器,以基于模型/实例来帮助生成参数;根据所生成的参数和约束代码模板,生成约束代码。
文档编号G06F9/44GK101499003SQ200810008950
公开日2009年8月5日 申请日期2008年1月31日 优先权日2008年1月31日
发明者影 李, 毛佳音, 景 罗, 杰 邱 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1