博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
QVT之The Relations Language(Part 二)
阅读量:4313 次
发布时间:2019-06-06

本文共 1237 字,大约阅读时间需要 4 分钟。

The Relations Language(二)

3、模式匹配

用一个例子来讨论与domain相关联的模式匹配,被称为对象模板表达式(object template expressions)。

c:Class {

namespace = p:Package {},

kind='Persistent',

name=cn

}

一个模板表达式匹配导致了候选模型中模型元素到domain中所声明变量的绑定。一个模板表达式匹配可以在一些domain变量已经绑定了模型元素的情况下执行。在这种情况下,模板表达式匹配只为未绑定的domain变量寻找绑定。

4、Key和用模式创建对象

前面提到过,模板表达式可以当做模板来创建目标模型中的一个对象。当对于一个给定的源domain模式的有效匹配时,目标domain模式中不存在一个有效的匹配,最后会用目标domain的模板表达式当做模板来创建目标模型中的对象。

t:Table {

schema = s:Schema {},

name = cn,

column = cl:Column {name=cn+'_tid', type='NUMBER'},

primaryKey = k:PrimaryKey {name=cn+'_pk', column=cl}

}

然而,当创建对象时,我们需要保证要创建的对象已经存在时不能重复创建。引入Key的概念,Key定义了一组属性唯一的标识了一个模型中类的对象实例。一个类也可以由多个Key。

例如对于前面提到过的关系ClassToTable,我们也许希望在simpleRDBMS模型中一个table被两个属性唯一的标识——它的name以及所属的schema。我们可以这样声明:key Table {schema, name};

在对象创建时,如果一个对象模板表达式中的属性匹配了相关联类中的一个key,然后用key来定位模型中匹配的对象。仅仅当不存在匹配的对象时才会创建新的对象。

5、对表达式的限制

为了保证可执行性(即存在一个受约束的算法朝着一个给定的目标模型执行relation),在relation中出现的表达式需要满足以下条件:

1)when字句,源domain,where字句中的表达式需要满足以下形式:

a、<object>.<property> = <variable>

b、<object>.<property> = <expression>

c、其他的表达式中不会有自由变量出现(所有出现的变量应该都已限制在前面的表达式中)。

2、目标domain中的表达式需要满足以下形式:

a、<object>.<property> = <expression>

b、其他的表达式中不会有自由变量出现(所有出现的变量应该都已限制在前面的表达式中)。

转载于:https://www.cnblogs.com/tianzibobo/archive/2013/03/22/2976338.html

你可能感兴趣的文章
CENTOS7配置静态IP
查看>>
P3332 [ZJOI2013]K大数查询
查看>>
Linux 批量管理工具
查看>>
# 20175333曹雅坤《Java程序设计》第四周学习总结
查看>>
[转]在Ogre中如何关联textunit 与 cg/hlsl/glsl 语言中的 uniform sampler 关联
查看>>
JavaScript跨域实现
查看>>
模拟Visual Studio中的完全匹配查找
查看>>
fa下载器总结
查看>>
【数据结构】红黑树
查看>>
FOJ 2232 匈牙利算法找二分图最大匹配
查看>>
zbb20190605 maven windows配置maven私服以及使用
查看>>
sqoop 补充
查看>>
什么是好代码?
查看>>
简易五子棋AI算法分析
查看>>
2018.12.1 web项目中解决乱码问题的一个工具类
查看>>
JSP 中 forward 和 redirect 的区别_2014.12.31
查看>>
解释性语言,编译性语言,脚本语言
查看>>
Yii处理流程
查看>>
第四周学习进度总结
查看>>
js设计模式-原型模式
查看>>