MetaModelEngine:域模型定义

  每一个DSL的核心都是一个域模型,它定义了这一语言所代表的各种概念,以及这些概念的属性和它们之间的关系,在创建DSL每一个元素时都是使用域模型来描述。域模型还为语言的其他方面的建立提供了基础:图形符号、工具箱、资源管理器、属性窗口、验证、序列化和部署、代码生成等的定义。在MetaModelEngine:元模型引擎开发思路中介绍总体思路,本篇着重考虑一下域模型定义相关内容。

模型架构图

GOPRR为元元模型层、领域概念为元模型层、产品规格为模型层、实例为系统应用层。对于域模型定义,我们主要关注GOPRR这一层。

域模型概念:GOPPRR

  • Graph 图:一个独立模型,通常使用图来表示,我们还支持列表和矩阵两张表格方式的展现
  • Objects 对象:域类
  • Property 属性:图、对象、端口、角色和关系都可以拥有一些属性描述
  • Port 端口:定义角色如何连接对象的可能语义
  • Relationship 关系:域关系
  • Role 角色:连接关系与对象之间

属性和非属性对象

元模型对象分为属性和非属性对象,非属性对象都可以定义多个属性对象。Graph、Object、Port、Role和Relationship都是非属性对象。它们的属性定义如下:

对象 属性 附加信息 说明
Property Name   名称
Ancestor   父属性
Project   域模型基于存储库管理,这里指定所属项目 
Datatype String 字符串
Text 文本备注 
Number 数字 
Boolean  布尔 
Createion Timestamp 生成日期 
Collection:Item type 集合类型,指定集合项类型,可以为String、Graph...、Object...、Port...、Role...、Relationship…
Graph… 弹出选择【图形】对象对话框,选择项目中的一个图形对象
Object…  
Port…  
Role…  
Relationship…  
Widget Input Field 输入框
Editable List:Values 列表编辑
Fixed List:Values 枚举值
Default Value   默认值 
Value Regex   正则检查串 
Description   描述 
Object
Relation
Role
Port
Graph
的基本信息
Name   名称 
Ancestor   父对象 
Project   所属项目 
Properties[] Local name 属性作为公共对象存储,在对象本身中引用后可以设定属性在本对象中显示的名称
Unique? 是否唯一
Description   描述 

图形对象

在MetaEdit+中式通过如下窗口进行定义的:

 

它们之间是通过一个叫做绑定Bindings的虚拟对象关联起来的。在绑定中可以包含多个关系,每个关系可以包含两个或更多的角色,每个角色可以包含多个对象,关系如下图所示:


注:图中还可以定于约束,这个在现阶段不考虑。

域关系

图形对象由Relationship、Roles、Objects三种对象组成,关系链接多个对象,关系与关系之间不进行连接:

  • 关系是有方向的

在图中绑定设置中定义关系时,每个关系都是有先后顺序的,定义是第一个Role为关系的源,也就是我们画关系时连接的第一个对象代表的Role,其他顺序依次类推。

  • 重数(Cardinality)

对于关系绑定中对于Roles,我们可以指定重数(1,0..1,0..N,1..N),如下图所示:

 

欢迎转载,转载请注明:转载自周金根 [ http://zhoujg.cnblogs.com/ ]

Property Name    
Ancestor    
Project    
Datatype String  
Text  
Number  
Boolean   
Createion Timestamp  
Collection:Item type 集合类型,指定集合项类型,可以为String、Graph...、Object...、Port...、Role...、Relationship…
Graph…  
Object…  
Port…  
Role…  
Relationship…  
Widget Input Field 输入框
Editable List:Values 列表编辑
Fixed List:Values 枚举值
Default Value    
Value Regex    
Description    
Object
Relation
Role
Port
Graph
的基本信息
Name    
Ancestor    
Project    
Properties[] Local name 属性作为公共对象存储,在对象本身中引用后可以设定属性在本对象中显示的名称
Unique?  
Description    
Graph      
     
     
     
     
     

posted on 2010-09-14 14:40  周 金根  阅读(2456)  评论(6编辑  收藏  举报

导航