QVT规范具有混合的声明/命令式特性。声明部分又被分成Relations和Core两层。QVT各metamodel之间的关系如下图所示:
1、Relations
MOF model之间关系的声明规范。Relations语言支持复杂对象的模式匹配,并且隐式地创建追踪类及它们的实例以记录在模型转换执行中发生了什么。
2、Core
一种小型模型语言。Core语言仅仅支持在评估变量的条件后,在变量集合上的模式匹配。
3、类比
可以在Java虚拟机上做类比,如果将Core语言看做是Java字节码,Core语义看做行为规范,那么Relations语言扮演的角色就是Java语言,从Relations到Core的转换标准就类似于Java编译器规范。
声明式的Relations和Core语言在两个不同的抽象层次上表达了相同的语义。除此之外,有两个从Relations或Core调用转换的命令式执行机制:
1)标准的语言Operational Mappings
2)非标准Black-box Implementations
一个完全用Mapping Operations写的转换称作操作转换。
4、执行场景
Core语言(进而Relations语言)的语义允许以下执行场景:
1)仅供查询的转换来验证模型在一个指定的方向上是相关的。
2)单方向转换。
3)双向转换。(实际上多个方向也是可能的,但是双向式最普遍的情况。)
4)不管是人工开发或是通过其他一些工具或机制建立已经存在的模型之间关系的能力。
5)初始化执行后当一个相关模型变化后,增量更新(任意方向)。
6)创建或者删除对象和值的能力,同时也能够确定那些对象和值需要修改。
operational mapping和black-box方法,即使配合执行Relations,通过只允许在单一方向上的转换规范来限制这些场景。双向转换只在一个反向的operational implementation被单独提供时才被允许。然而,所有上面定义的其他的能力在命令式和混合执行中都是可以的。