CN101499003A - 生成关于模型的约束表达式的方法以及约束语言编辑器 - Google Patents

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

Info

Publication number
CN101499003A
CN101499003A CNA2008100089503A CN200810008950A CN101499003A CN 101499003 A CN101499003 A CN 101499003A CN A2008100089503 A CNA2008100089503 A CN A2008100089503A CN 200810008950 A CN200810008950 A CN 200810008950A CN 101499003 A CN101499003 A CN 101499003A
Authority
CN
China
Prior art keywords
model
navigation
relevant
assisting device
constraint
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
Application number
CNA2008100089503A
Other languages
English (en)
Inventor
毛佳音
邱杰
罗景
李影
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Priority to CNA2008100089503A priority Critical patent/CN101499003A/zh
Priority to US12/362,829 priority patent/US8566783B2/en
Publication of CN101499003A publication Critical patent/CN101499003A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/427Parsing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/35Creation or generation of source code model driven

Abstract

一种用于在约束语言编辑器中帮助生成针对导航的约束语言代码的方法和导航帮助器,其中约束语言编辑器用于根据所加载的模型/实例和相关约束,生成关于模型/实例的约束表达式,导航是实现约束的路径,包括模型/实例元素的序列,所述方法包括:解析所加载的模型/实例;通过模型/实例中与导航有关的元素的类型,计算与元素有关的可能的关联;以及通过关联计算出可能的导航路径。一种用于在约束语言编辑器中帮助生成约束语言代码的方法和约束语言编辑器,所述方法包括:加载模型/实例;加载用于存储参数和约束代码模板的约束模式;根据约束模式中存储的参数类型,调用相应的帮助器,以基于模型/实例来帮助生成参数;根据所生成的参数和约束代码模板,生成约束代码。

Description

生成关于模型的约束表达式的方法以及约束语言编辑器
技术领域
本发明一般地涉及计算机建模及相应的约束语言的领域,并且具体而言涉及一种用于生成关于模型的约束表达式的方法以及约束语言编辑器。
背景技术
计算机建模,特别是软件建模主要是指在软件工程领域(诸如,统一建模语言UML、Eclipse建模框架EMF)中的对象建模,它从较高的层次来描述应用程序,进而可以部分或全部地生成该应用的实现代码。绝大多数模型是由许多方框箭头图和一些附随的文本所组成,这样的模型所传达的信息是不够完整的,非正式的和不够精确的,甚至有些时候自相矛盾。模型中的许多缺陷都是由于所使用的图形表达能力有限而造成的。仅仅通过图形有时无法表达一些条件陈述,而该陈述本应该是一个完整的规约的一部分。例如,假定对航班与乘客的关系进行UML建模,则航班与乘客之间的关联可以表示一次航班的乘客是确定的一组人,这个一对多的关联是多重关系,这意味着乘客的数目是无限的。但是实际上,乘客的数目不可能超过执行这个航班的飞机上座位的数目。然而,在UML图上无法表达这个约束。这时,需要向其中添加约束语言,诸如OCL(对象约束语言,Object Constraint Language)、Schematron等。
以OCL为例,在OCL规范中提到,UML图(例如类图)通常不够精细,无法提供与规范有关的所有相关部分。这其中就需要描述模型中关于对象的附加约束。这些约束常常用自然语言描述。而实践表明,这样做经常造成歧义。为了写出无歧义的约束,已经开发出几种所谓的“形式语言”。传统的形式语言的缺点是,仅适用于有相当数学背景的人员,而普通的商务或系统建模者则难以使用。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。
在UML 2标准中,OCL不仅用来写约束,还能够用来对UML图中的任何元素写表达式。每个OCL表达式都能指出系统中的一个值或者对象。因为OCL表达式能够求出一个系统中的任何值或者值的集合,因此它具有了和SQL同样的能力。
2.OCL是基于数学的,但没有使用数学符号。
OCL的基础是数学中的集合论和谓词逻辑,并且它有一个形式化的数学语义,但是它并没有使用某种数学符号。因为虽然数学符号能够清晰地、无歧义地表达事物,但是只有极少的专家可以看懂。所以数学符号并不适用于一种广泛应用的标准语言。
自然语言是最易懂的,但是它是含混不清晰的,且无法被计算机自动处理。OCL取了自然语言和数学符号的折衷方案,使用普通的ASCII字符来表达数学中同样的概念。如果你不喜欢当前的OCL表达方法,OCL规范还允许你定义自己的OCL符号集。这点是可以理解的,因为OCL有一个清晰的数学语义。
3.强类型的语言
OCL是一种类型语言,任何表达式的值都是属于一个类型的。这个类型可以是预定义的标准类型例如Boolean或者Integer,也可以是UML图中的元素例如对象。也可以是这些元素组成的集合,例如对象的集合、包、有序集合等等。
4.宣言式(declarative)的语言
与宣言式语言相对应的是过程式(procedural)的语言。过程式语言(诸如Java)是一类编程语言,描述了动作执行的步骤。而在宣言式语言中,表达式仅仅描述了应该去做“什么”,而不是应该“怎样”去做。为了保证这一点,OCL的表达式是没有副作用的,也就是说,计算一个OCL表达式的值不会对系统的状态产生任何改变。
OCL是用于描述应用于UML模型的规则的宣言式语言,因此UML中的表达式被提升到了纯建模的领域,而不必理会实现的细节和实现的语言。表达式在高的抽象层次上规定了系统的值,从而保留了100%的精确。
OCL也是一种用于基于图形的模型的导航(navigation)语言。但是对于约束的文字表达式则是复杂的。约束表达式为文本形式,用户必须了解其语法结构才能写出,而这些约束语言往往用户不是很熟悉,写表达式可能要花费很多精力,且质量不高。但现有的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.1Database),然后需要导航到数据库的名字,最后要求该名字等于“tradedb”。导航过程在图中由元素DB2Database/DB2 Database(201)到元素DB2 Database(202),以及连接201和202的实线箭头即为导航。该语义可以被若干种不同的语法所实现,例如OCL表达式和Schematron表达式。图的下半部分分别使用OCL和Schematron两种约束语言表达了这个约束,表达式中关于导航的部分用黑色框标出,其中,框210内的OCL表达式和框220内的Schematron表达式为导航所需的。由此可见,在一个完整的约束表达式中,导航表达式占据了大部分篇幅。在写约束表达式时,用户需要在编辑器提供的整个元素列表中找到导航方法/关联,并且需要手动进行类型转换。这需要很多步骤,因此导航帮助变得尤为重要。在现有编辑器中,并不提供针对导航的帮助,用户需要逐个步骤地实现导航路径。并且,某些有效的导航路径可能无法被提供。因此,需要一种用于提取约束语义、提供导航帮助、并生成针对不同语法的不同约束代码的新颖技术。
发明内容
为了克服现有技术中所存在的缺陷,并使得用户能够便利地通过导航帮助来生成关于模型的约束表达式,进而解除用户编写语言的负担、提高用户工作效率,而提出了本发明。
根据本发明的一个方面,提出了一种用于在约束语言编辑器中帮助生成针对导航的约束语言代码的方法,其中所述约束语言编辑器用于根据所加载的模型/实例和相关约束,生成关于模型/实例的约束表达式,所述导航是实现约束的路径,包括模型/实例元素的序列,所述方法包括:
解析所加载的模型/实例;
通过所解析的模型/实例中的与导航有关的元素的类型,计算与所述元素有关的可能的关联;以及
通过所述关联计算出可能的导航路径。
根据本发明的另一方面,提出了一种在约束语言编辑器中用于帮助生成针对导航的约束语言代码的导航帮助器,其中所述约束语言编辑器用于根据所加载的模型/实例和相关约束,生成关于模型/实例的约束表达式,所述导航是实现约束的路径,包括模型/实例元素的序列,所述导航帮助器包括:
模型解析器,用于解析所加载的模型;
实例解析器,用于解析所加载的实例;
关联数据库,用于存储与所述所加载的模型/实例中的关联有关的数据;
导航路径计算器,用于通过所解析的模型/实例中的与导航有关的元素的类型,计算与所述元素有关的可能的关联,并通过所述关联计算出可能的导航路径。
根据本发明的又一方面,提出了一种用于在约束语言编辑器中帮助生成约束语言代码的方法,其中所述约束语言编辑器用于根据所加载的模型/实例和相关约束,生成关于模型/实例的约束表达式,所述方法包括:
加载模型/实例;
加载约束模式,所述约束模式用于存储与约束语义相关的参数和约束代码模板;
根据所述约束模式中存储的参数的类型,调用相应的帮助器,以基于所述约束模式生成与所加载的模型/实例有关的具体约束参数;以及
根据所生成的约束参数和所述约束模式中的约束代码模板,生成约束代码。
根据本发明的再一方面,提出了一种约束语言编辑器,用于根据所加载的模型/实例和相关约束,生成关于模型/实例的约束表达式,所述约束语言编辑器包括:
约束模式,用于存储与约束语义相关的参数和约束代码模板;
帮助器,用于基于所述约束模式生成与所加载的模型/实例有关的具体约束参数;以及
代码生成器,根据所述帮助器生成的约束参数和所述约束模式中的约束代码模板,生成约束代码。
本发明所提出的用于生成关于模型的约束表达式的约束语言编辑器及其方法,能够提取约束语义、向用户提供导航帮助、并生成针对不同语法的不同约束代码,从而用户仅需关注模型设计,而无需了解各种约束语言的语法,减少用户手动写导航表达式的负担,提高工作效率。
附图说明
在附带的权利要求中阐明了被认为是本发明新颖特性的特征。然而,通过参考以下结合附图的说明性实施例的详细描述,将最好地理解本发明本身以及其优选使用模式、另外的目的和优点,在附图中:
图1示出了SQL语句编辑器(RAD)的示例性示图;
图2示出了两种不同的约束语法共享相同的模型和约束语义的示例;
图3A-3C更清楚地阐述在不同情形中对导航的多种实现;
图4是根据本发明实施例的约束语言编辑器的体系结构;
图5描述了根据本发明实施例的约束表达式生成的方法工作流的流程图;
图6描述了根据本发明的约束语言编辑器的约束提取的实现;
图7描述了根据本发明实施例的约束语言编辑器中的导航帮助器的体系结构;
图8示出了根据本发明的导航帮助器在模型层的工作流;
图9示出了根据本发明的导航帮助器在实例层的工作流;以及
图10A和10B详细示出了通过所选择的类型计算可能的关联的过程。
需要注意,在全体附图中,相同或相似的标号指代的是相同或相似的单元或组件。
具体实施方式
在下文中将结合附图对本发明的示范性实施例进行描述。为了清楚和简明起见,在说明书中并未描述实际实现方式的所有特征。然而,应该了解,在开发任何这种实际实施例的过程中必须做出很多实现方式所特定的决定,以便实现开发人员的具体目标,例如符合与系统及业务相关的那些限制条件,其中,这些限制条件会随着实施方式的不同而改变。此外,还应该了解,虽然开发工作有可能是非常复杂和费时的,但对得益于这个公开内容的本领域技术人员来说,这种开发工作仅仅是例行的任务。
此外,还需要说明的一点是,为了避免因不必要的细节而混淆了本发明,在附图中仅仅示出了与根据本发明的方案密切相关的装置结构和/或处理步骤,而省略了与本发明关系不大的其它细节。
为了更好地理解本发明,以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->DependencyLink->Capability->Unit。显而易见,该导航的表达式将会是冗长和复杂的。
图3B描述了关联关系之上的继承,说明由于面向对象的继承性,一个导航的终点的类型可能有多种选择:父类或子类。例如图3B中包括了继承与关联的结合。如所示,“linuxHosting(linux托管)”关系就是继承了“hosting(托管)”关系;WAS on Linux(Linux上的WAS)是从WAS Unit(WAS单元)继承而来。在这种模型中,从一个元素出发的导航路径就可能覆盖多个层次,如从“WAS on Linux”出发,选择“hosting”和“linuxHosting”就会到达不同层次的元素。因此,OCL编辑器应该提供这样的导航帮助器,其可以把不同层次的元素和属性都找出来,并且分类。当以WAS on Linux作为导航的开始元素时,导航帮助器应该能够列出Linux与OS Unit两个选择,因为Linux是从OS Unit(OS单元)继承而来。
图3C描述了含有集合关系的模型,说明了对于导航终点为元素集合的情况,其中根据不同的目的地,导航属于不同的层次。“WAS群集”元素作为一个集合元素包含其他三个模型元素:WAS V6单元(id:0)、WAS V6单元(id:1)以及WAS V5单元(id:0),即,这三个模型元素是元素“WAS群集”的成员。因此,从“WAS群集”出发可以到达不同种类的元素。
图3B和3C都给出了从一个元素出发,到达不确定目标的情况,在这种情况下,就需要导航帮助工具做出判断或者给用户适当的选择和提示。因此导航不但需要找到集合的每一个元素,还需要找到它们的共同父类,因为对于元素集合的约束往往是加在具有共同属性的父类这一层次的。
由此可以看出,在对于诸如OCL的约束语言的表达式进行编写时,导航是常见的,也是十分复杂的。导航可以通过下述方式来实现,所述方式包括:在模型和实例上定义的关联、属性、方法,由约束语言定义的集合操作,以及类型转换代码。导航代码通常与其它操作符和操作数(模型元素和属性)相结合。并且在实践中,模型设计者往往对模型很熟悉,而不熟悉约束语言的语法(例如集合操作、类型转换),或者仅熟悉一种约束语言,而无法应用其它的约束语言。因此,导航帮助对于用户便利地写出所需的约束表达式是必要的,导航帮助应该与语法帮助相集成以作为实用工具进行提供,并且导航帮助是一种用于实现独立于语言的表达式生成的不可缺少的功能。根据本发明的约束语言编辑器能够向用户提供导航帮助,从而减少用户手动编写导航表达式的负担,提高工作效率。
在阐述了导航帮助在约束语言编辑器中的重要性以及其复杂性之后,下文将详细描述本发明将如何实现约束语言编辑器以及其中的导航帮助器。在本发明中,使用“模式(pattern)”将约束语义从其所实现的约束语言中分离出来,所述约束语义包括:模型元素/属性、导航(包括实例层导航和类型层导航)、操作符、用户定义值(常数)、以及集合操作。本发明可以基于模型和实例信息,帮助进行导航检测、分类和表达式生成。具体而言,本发明可以基于模型和实例信息检测导航候选,使用关于导航的模式信息来过滤所述导航候选(例如:导航目的地必须属于OS Unit类型,则其他类型的导航目的地被抛弃),根据模型/实例层、继承层对导航候选进行分类,以及通过用户选择来决定导航路径。本发明还可以使用约束代码模板和代码生成器来将所确定的约束语义转换成不同语言的约束表达式,诸如OCL或Schematron。
下面参见图4,图4是根据本发明实施例的约束语言编辑器的体系结构。结合图4,本领域技术人员可以更清楚地了解根据本发明的约束语言编辑器的工作原理。在图4中,约束语言编辑器包括约束模式420、帮助器430和代码生成器440。约束模式420包括与约束语义相关的下述参数422:模型元素/属性类型、导航类型(包括实例层导航子类型和类型层导航子类型)、操作符类型、用户定义值(常数)、以及集合(指代模型元素/属性的集合)操作符。约束模式420还可以包括约束代码模板424,其中存储了约束代码的模板。在用户确定了必需的参数从而确定了约束语义之后,可以基于所述模板生成所需的约束语言代码。约束语言编辑器将模型图410加载进来,并将其中的模型及实例连同约束模式420的参数一同传递到帮助器430。
帮助器430包括元素/属性帮助器431、导航帮助器432、操作符帮助器433、常数帮助器434以及集合帮助器435。上述五种帮助器分别用于帮助上述五种参数的生成,即,它们可以基于预定义的规则自动选择可用的相关参数,并在存在多个可能的参数的时候例如以窗口方式列出所述参数由用户进行选择。上述五种帮助器并不一定同时需要。根据所定义的约束可以确定所需要的参数。在通过帮助器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)。
下面通过示例,结合图6说明根据本发明的约束语言编辑器的约束提取的简要实现。图6左边是用于描述应用程序部署情况的实例图。假定约束可被描述为:DB2Inst.Username必须等于与DB2Inst相关的User.UserId。从中可以看出,该约束中的关键参数涉及:模型元素/属性、导航以及操作符。具体而言,框610示出了DB2Inst的用户名,即,元素DB2Inst.Username;框620中示出了与DB2Inst相关的User.UserId。二者是约束中的模型元素/属性参数。实线箭头630表示从元素DB2Inst到元素db2admin的导航,其是约束中的导航参数。实线箭头640表示从Username到UserId的赋值(derive)关系,其是约束中的操作符参数。由此,在根据本发明的约束语言编辑器中,示出了约束模式的用户界面,如框650所示。框650示出了创建属性约束的窗口图,其中向用户提示将创建针对Username的新的属性约束。在该窗口图中,可以由用户选择两种属性参数以及操作符参数。在用户确定了这些参数之后,可以由约束语言编辑器自动计算导航路径,并在存在多种可能的导航路径的情况下由用户进行最终的选择。所述导航路径计算过程将在下文中详细描述。该界面是直观的和易于操作的,从而用户只需要关注模型设计,而无需知道具体的约束语法。在确定了这些参数和导航路径之后,即可通过约束代码模板和代码生成器得到最终的约束表达式。
上文中已经详细描述了根据本发明的约束语言编辑器及其工作流,下面将结合图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判断所述元素不是集合,则所述流程直接进行到步骤830。在步骤830完成对关联的计算后,接着在步骤835获得可能的已连接类型,并将其提供给用户。在步骤840,用户选择其中的一个类型。接着在步骤845,确定用户是否选择导航的下一步骤。如果是,则导航仍未结束,所述流程返回步骤810,继续判断下一步骤所涉及的元素是否是集合,并重复上述流程。如果否,则所述导航没有下一步骤,所述流程在步骤850结束。
以下结合图9示出了根据本发明的导航帮助器在实例层的工作流。在实例层,导航帮助器需要从实例出发得到其类型,即,首先进到模型层计算可能到达的类型,然后再回到实例层找出属于可达类型的实例。之所以需要这样做是因为,可达实例在写约束的时候可能还没有和当前元素相连,如果简单地查看和当前元素连接的元素可能丢失一些可达元素。所述流程开始于框905,从开始元素进行导航。接着所述流程进行到步骤910,判断该元素是否是集合。如果是,则在步骤915通过该集合的实例获得所有的相应类型。并在步骤920计算出所述集合的父类型,并将所有的类型相结合。以上步骤与图8的相应步骤类似。接着在步骤925将所有的类型(包括所述父类型)以及实例作为候选提供给用户,并由用户进行选择。如果用户选择了一个类型,则所述流程进行到步骤930,通过所选择的类型计算可能的关联。步骤930涉及的具体过程将在下文中进行详细描述。
如果在步骤910判断所述元素不是集合,则所述流程直接进行到步骤930。在步骤930完成对关联的计算后,接着在步骤935获得可能的已连接类型。在步骤940,根据可能的已连接类型计算实例层上的关系。接着在步骤950将可能的已连接实例提供给用户。在步骤955,用户选择其中的一个实例。接着在步骤960,确定用户是否选择了导航的下一步骤。如果是,则导航仍未结束,所述流程返回步骤910,继续判断下一步骤所涉及的元素是否是集合,并重复上述流程。如果否,则所述导航没有下一步骤,所述流程在步骤965结束。
返回步骤925,如果用户选择的不是一个类型而是一个实例,则接着在步骤945获得该实例相应的类型。接着所述流程直接进行到步骤940,根据该类型计算实例层上的关系。
以上分别描述了导航帮助器在模型层和实例层的工作流程,通过所述工作流程,可以基于用户选择来生成所需要的导航。下面将通过示例,结合图10A和10B详细描述图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,作为可达元素的候选,如图10A右侧与第一步相对应的框中所示。
第二步,读取从元素F出发的类继承,参见F与B之间的短划线箭头,结果得到元素B。
第三步,读取从元素B出发的关联,参见B与A和C之间的两条实线箭头,结果得到元素A和C。
第四步,检查元素C及其子元素G、H是否存在与F的直接关联;在本例中,这三个元素均不存在与F的直接关联,则将所述三个元素添加到可达元素的候选中,如图10A右侧与第四步相对应的框中所示。
第五步,检查元素A及其子元素D、E是否存在与F的直接关联;在本例中,由于元素E存在与F的直接关联,则将元素E的父亲A添加到候选中,如图10B右侧与第五步相对应的框中所示。除了E之外,元素A的所有孩子(元素D)不能作为可达元素的候选,因为E和F已经有直接关联。
第六步,如果元素B还有父类的话,还需要继续前进到元素B的父类(出于简明的目的未示出),针对B的父类继续计算可达元素,并重复上述过程。这一过程是不断递归的。
在此之后,即完成了通过所选择的类型计算可能的关联的过程。
以上详细描述了根据本发明的约束语言编辑器和其中的导航编辑器以及二者的工作流程。应该注意,尽管某些实施例针对OCL约束语言进行了描述,但本领域技术人员可以预期,所述实施例及其技术方案均可以针对Schematron或其它约束语言来实现,而不会脱离本发明的精神和范围。
如本领域普通技术人员可以了解的,本发明可以体现为方法、系统和/或计算机程序产品。因此,本发明可以呈现为完全硬件实施形式、完全软件实施形式或者软件和硬件组合实施形式。此外,本发明可以被呈现为在机器可读媒体上包括的计算机程序产品,机器可读媒体上存储了用于对计算机系统进行编程以执行根据本发明的过程的机器可执行程序指令。这里所使用的术语“机器可读媒体”包括向计算机系统提供用于执行的指令的任意媒体。这种媒体可以采用多种形式,包括但是不局限于:非易失性媒体、易失性媒体和传输媒体。非易失性媒体的常见形式例如包括软盘、软磁盘、硬盘、磁带或者任何其它磁媒体、光盘ROM(CD-ROM)或者任何其它光媒体、打孔卡或者任何其它带有孔图案的物理媒体、可编程ROM(PROM)、可擦写PROM(EPROM)、电EPROM(EEPROM)、闪速存储器、任何其它存储芯片或者盒式磁带(cartridge)、或者计算机系统可以读取并适合存储指令的任何其它媒体。
此外,可以理解,方框图和/或流程图中的每个方框以及方框图和流程图中的一些方框的组合可以用一些计算机程序指令实现。这些计算机程序指令可以提供给一通用计算机、专用计算机或其它可编程数据处理设备的处理器以产生一机器,使得这些指令通过计算机或其它可编程数据处理设备的处理器的执行创建用于实现在方框图和/或流程图内或者方框内所指定的功能的装置。
尽管已经参考优选实施例具体地示出并描述了本发明,但其不是为了以公开的形式穷举或限制本发明。对于本领域的普通技术人员,可以在形式上和细节上进行各种改变而不会背离本发明的精神和范围。选择并描述了实施例是为了最好地解释本发明的原理和实际的应用,以及为了使本领域的其它普通技术人员能够理解对于各种实施例的本发明,所述实施例具有适合于预期的具体使用的各种修改。

Claims (20)

1.一种用于在约束语言编辑器中帮助生成针对导航的约束语言代码的方法,其中所述约束语言编辑器用于根据所加载的模型/实例和相关约束,生成关于模型/实例的约束表达式,所述导航是实现约束的路径,包括模型/实例元素的序列,所述方法包括:
解析所加载的模型/实例;
通过所解析的模型/实例中的与导航有关的元素的类型,计算与所述元素有关的可能的关联;以及
通过所述关联计算出可能的导航路径。
2.根据权利要求1所述的方法,进一步包括:
在所述所加载的模型中存在关联继承的情形中,计算与所述元素有关的可能的关联继承;
计算与所述关联继承相关的元素有关的可能的关联;以及
通过与所述元素有关的可能的关联以及与所述关联继承相关的元素有关的可能的关联计算出可能的导航路径。
3.根据权利要求1所述的方法,进一步包括:
在所述所加载的模型中存在类继承的情形中,计算与所述元素有关的可能的类继承;
对类继承相关数据进行类型转换;
计算与所述类继承相关的元素有关的可能的关联;以及
通过与所述元素有关的可能的关联以及与所述类继承相关的元素有关的可能的关联计算出可能的导航路径。
4.根据权利要求1所述的方法,进一步包括:
在所述所加载的模型中存在集合元素的情形中,通过该集合的实例获得所有的相应类型;
找到所述实例的共同父类;
将包括所述父类型的所有类型作为候选提供给用户,并由用户选择其中之一;以及
通过所述类型计算与所述元素有关的可能的关联。
5.根据权利要求1所述的方法,进一步包括:
在所加载的是通过模型建模而成的实例的情形中,解析所加载的实例;
通过所解析的实例中的与导航有关的元素的类型,计算与所述元素有关的可能的关联;
计算与所解析的实例对应的模型层次上的可能的类型;
根据所述模型层次上的可能的类型计算属于该类型的实例;以及
通过所述与所述元素有关的可能的关联以及所述属于所述模型层次上的可能的类型的实例计算出可能的导航路径。
6.一种在约束语言编辑器中用于帮助生成针对导航的约束语言代码的导航帮助器,其中所述约束语言编辑器用于根据所加载的模型/实例和相关约束,生成关于模型/实例的约束表达式,所述导航是实现约束的路径,包括模型/实例元素的序列,所述导航帮助器包括:
模型解析器,用于解析所加载的模型;
实例解析器,用于解析所加载的实例;
关联数据库,用于存储与所述所加载的模型/实例中的关联有关的数据;
导航路径计算器,用于通过所解析的模型/实例中的与导航有关的元素的类型,计算与所述元素有关的可能的关联,并通过所述关联计算出可能的导航路径。
7.根据权利要求6所述的导航帮助器,进一步包括:关联继承数据库,用于存储与所述所加载的模型中的关联继承有关的数据,其中在所述所加载的模型中存在关联继承的情形中,所述导航路径计算器进一步用于:
计算与所述元素有关的可能的关联继承;
计算与所述关联继承相关的元素有关的可能的关联;以及
通过与所述元素有关的可能的关联以及与所述关联继承相关的元素有关的可能的关联计算出可能的导航路径。
8.根据权利要求6所述的导航帮助器,进一步包括:
类继承数据库,用于存储与所述所加载的模型中的类继承有关的数据;以及
类类型转换器,用于对于类数据进行类型转换,
其中在所述所加载的模型中存在类继承的情形中,所述导航路径计算器进一步用于:
计算与所述元素有关的可能的类继承;
计算与所述类继承相关的元素有关的可能的关联;以及
通过与所述元素有关的可能的关联以及与所述类继承相关的元素有关的可能的关联计算出可能的导航路径。
9.根据权利要求6所述的导航帮助器,在所述所加载的模型中存在集合元素的情形中,所述导航路径计算器进一步用于:
通过该集合的实例获得所有的相应类型;
找到所述实例的共同父类;
将包括所述父类型的所有类型作为候选提供给用户,并由用户选择其中之一;以及
通过所述类型计算与所述元素有关的可能的关联。
10.根据权利要求6所述的导航帮助器,进一步包括:
实例连接映射表,用于显示实例之间的关系,
其中在所加载的是通过模型建模而成的实例的情形中,所述导航路径计算器进一步用于:
通过所解析的实例中的与导航有关的元素的类型,计算与所述元素有关的可能的关联;
计算与所解析的实例对应的模型层次上的可能的类型;
根据所述模型层次上的可能的类型计算属于该类型的实例;以及
通过所述与所述元素有关的可能的关联以及所述属于所述模型层次上的可能的类型的实例计算出可能的导航路径。
11.一种用于在约束语言编辑器中帮助生成约束语言代码的方法,其中所述约束语言编辑器用于根据所加载的模型/实例和相关约束,生成关于模型/实例的约束表达式,所述方法包括:
加载模型/实例;
加载约束模式,所述约束模式用于存储与约束语义相关的参数和约束代码模板;
根据所述约束模式中存储的参数的类型,调用相应的帮助器,以基于所述约束模式生成与所加载的模型/实例有关的具体约束参数;以及
根据所生成的约束参数和所述约束模式中的约束代码模板,生成约束代码。
12.根据权利要求11所述的方法,其中所述约束模式存储包括下述参数的组中的任一种参数:模型元素/属性类型、导航类型、操作符类型、用户定义值、以及集合操作符。
13.根据权利要求11所述的方法,其中所述帮助器包括下述帮助器的组中的任一种帮助器:元素/属性帮助器、导航帮助器、操作符帮助器、常数帮助器以及集合帮助器,其中每一种帮助器针对所述约束模式存储的参数中的一种进行工作。
14.根据权利要求11所述的方法,进一步包括:根据权利要求1-5中任一项所述的用于在约束语言编辑器中帮助生成针对导航的约束语言代码的方法。
15.根据权利要求11所述的方法,所述生成约束代码的步骤进一步包括:如果所述约束代码包括导航,其中所述导航是实现约束的路径,包括模型/实例元素的序列,则调用所述导航帮助器生成导航路径表达式。
16.一种约束语言编辑器,用于根据所加载的模型/实例和相关约束,生成关于模型/实例的约束表达式,所述约束语言编辑器包括:
约束模式,用于存储与约束语义相关的参数和约束代码模板;
帮助器,用于基于所述约束模式生成与所加载的模型/实例有关的具体约束参数;以及
代码生成器,根据所述帮助器生成的约束参数和所述约束模式中的约束代码模板,生成约束代码。
17.根据权利要求16所述的约束语言编辑器,其中所述约束模式存储包括下述参数的组中的任一种参数:模型元素/属性类型、导航类型、操作符类型、用户定义值、以及集合操作符。
18.根据权利要求16所述的约束语言编辑器,其中所述帮助器包括下述帮助器的组中的任一种帮助器:元素/属性帮助器、导航帮助器、操作符帮助器、常数帮助器以及集合帮助器,其中每一种帮助器针对所述约束模式存储的参数中的一种进行工作。
19.根据权利要求16所述的约束语言编辑器,其中所述导航帮助器为根据权利要求6-10中任一项所述的导航帮助器。
20.根据权利要求16所述的约束语言编辑器,其中,如果所述约束代码包括导航,其中所述导航是实现约束的路径,包括模型/实例元素的序列,则所述导航帮助器用于生成导航路径表达式。
CNA2008100089503A 2008-01-31 2008-01-31 生成关于模型的约束表达式的方法以及约束语言编辑器 Pending CN101499003A (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CNA2008100089503A CN101499003A (zh) 2008-01-31 2008-01-31 生成关于模型的约束表达式的方法以及约束语言编辑器
US12/362,829 US8566783B2 (en) 2008-01-31 2009-01-30 Determining a navigation path for a constraint language editor

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CNA2008100089503A CN101499003A (zh) 2008-01-31 2008-01-31 生成关于模型的约束表达式的方法以及约束语言编辑器

Publications (1)

Publication Number Publication Date
CN101499003A true CN101499003A (zh) 2009-08-05

Family

ID=40932991

Family Applications (1)

Application Number Title Priority Date Filing Date
CNA2008100089503A Pending CN101499003A (zh) 2008-01-31 2008-01-31 生成关于模型的约束表达式的方法以及约束语言编辑器

Country Status (2)

Country Link
US (1) US8566783B2 (zh)
CN (1) CN101499003A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103488477A (zh) * 2013-09-02 2014-01-01 用友软件股份有限公司 Java接口的可视化编辑系统和可视化编辑方法
CN112673343A (zh) * 2018-08-30 2021-04-16 英迈国际有限公司 分析与生成导航模式的系统和方法

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110246870A1 (en) * 2010-04-02 2011-10-06 Microsoft Corporation Validating markup language schemas and semantic constraints
US9250925B2 (en) * 2010-04-13 2016-02-02 Sybase, Inc. Adding inheritance support to a computer programming language
EP2598989B1 (en) * 2010-07-30 2020-03-11 National Instruments Corporation Developing programs in a graphical specification and constraint language
US10184798B2 (en) 2011-10-28 2019-01-22 Microsoft Technology Licensing, Llc Multi-stage dead reckoning for crowd sourcing
US9183501B2 (en) * 2013-05-11 2015-11-10 International Business Machines Corporation Upper merged ontology for it architecture
US11640282B2 (en) * 2019-10-24 2023-05-02 Here Global B.V. Method, apparatus, and system for providing a broker for data modeling and code generation
CN113655996B (zh) * 2021-08-04 2024-02-20 北京航空航天大学 一种基于需求模型的企业级系统生成方法

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1995003586A1 (en) * 1993-07-21 1995-02-02 Persistence Software, Inc. Method and apparatus for generation of code for mapping relational data to objects
IE20010964A1 (en) * 2000-11-03 2002-05-29 Wilde Technologies Ltd A software development process
US7328212B2 (en) * 2001-05-31 2008-02-05 Oracle International Corporation Generalized method for modeling complex ordered check constraints in a relational database system
US7827524B2 (en) * 2003-04-22 2010-11-02 Computer Associates Think, Inc. System and method for integrating object-oriented model profiles and object-oriented programming languages
JP2005129015A (ja) * 2003-09-30 2005-05-19 Fujitsu Ltd シミュレーションにおけるモデルパラメータ決定プログラム、および決定装置
US20050262115A1 (en) * 2004-05-05 2005-11-24 Jingkun Hu Extensible constraint markup language
US20060064667A1 (en) * 2004-09-20 2006-03-23 Freitas Jose D System and method of model-driven development using a transformation model
US7421699B2 (en) * 2004-12-08 2008-09-02 Sap Ag Service meta model for an enterprise service architecture
US7814427B2 (en) * 2005-01-05 2010-10-12 Microsoft Corporation Object model tree diagram
US20060195460A1 (en) * 2005-02-28 2006-08-31 Microsoft Corporation Data model for object-relational data
US7921452B2 (en) * 2005-08-23 2011-04-05 The Boeing Company Defining consistent access control policies
US20080059944A1 (en) * 2006-08-15 2008-03-06 Zeligsoft Inc. Deployment-aware software code generation

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103488477A (zh) * 2013-09-02 2014-01-01 用友软件股份有限公司 Java接口的可视化编辑系统和可视化编辑方法
CN103488477B (zh) * 2013-09-02 2016-09-28 用友网络科技股份有限公司 Java接口的可视化编辑系统和可视化编辑方法
CN112673343A (zh) * 2018-08-30 2021-04-16 英迈国际有限公司 分析与生成导航模式的系统和方法

Also Published As

Publication number Publication date
US20090199156A1 (en) 2009-08-06
US8566783B2 (en) 2013-10-22

Similar Documents

Publication Publication Date Title
Meinicke et al. Mastering software variability with FeatureIDE
CN101499003A (zh) 生成关于模型的约束表达式的方法以及约束语言编辑器
Lucassen et al. Forging high-quality user stories: towards a discipline for agile requirements
Iung et al. Systematic mapping study on domain-specific language development tools
Albin The art of software architecture: design methods and techniques
Overmyer et al. Conceptual modeling through linguistic analysis using LIDA
Ducasse et al. Software architecture reconstruction: A process-oriented taxonomy
Burge The systems engineering tool box
Wachsmuth et al. Language design with the spoofax language workbench
Mayer et al. Cross-language code analysis and refactoring
JP2011060277A (ja) 統合環境生成器
Gabmeyer et al. A feature-based classification of formal verification techniques for software models
Karam et al. A cataloging framework for software development methods
Sridhara Automatic generation of descriptive summary comments for methods in object-oriented programs
Letsholo et al. TRAM: A tool for transforming textual requirements into analysis models
Mazanek et al. Business process models as a showcase for syntax-based assistance in diagram editors
Nan et al. Hisyn: human learning-inspired natural language programming
Borowski et al. Graph Buddy—an interactive code dependency browsing and visualization tool
Sadilek et al. Testing metamodels
Savic et al. Use case specification at different levels of abstraction
Oubelli et al. A scalable model based approach for data model evolution: Application to space missions data models
Sunitha et al. Enhancing UML activity diagrams using OCL
Lin A model transformation approach to automated model evolution
Hoisl et al. A catalog of reusable design decisions for developing UML/MOF-based domain-specific modeling languages
Cole et al. Conceptual Analysis of Software Structure.

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: 20090805