在QVTo转换中使用UML概要文件?
我使用Papyrus工具定义了一个UML概要文件,并将该文件保存为“my_profile.di”。如何在QVTo转换中使用此配置文件 可以这样做吗(我不确定应该如何指定文件的路径)在QVTo转换中使用UML概要文件?,uml,transformation,m2m,papyrus,qvt,Uml,Transformation,M2m,Papyrus,Qvt,我使用Papyrus工具定义了一个UML概要文件,并将该文件保存为“my_profile.di”。如何在QVTo转换中使用此配置文件 可以这样做吗(我不确定应该如何指定文件的路径) 如果这是一个愚蠢的问题,我很抱歉,但我对QVT完全陌生。我希望有人能启发我,提前谢谢 将UML概要文件与QVTo(或任何基于EMF的转换语言)一起使用有点棘手。简而言之,您只需要处理UML元模型,但是在这种情况下,处理概要文件的方法有点不同。基本上有两种情况: 您希望使用一个源UML模型,该模型使用概要文件/原型 您
如果这是一个愚蠢的问题,我很抱歉,但我对QVT完全陌生。我希望有人能启发我,提前谢谢 将UML概要文件与QVTo(或任何基于EMF的转换语言)一起使用有点棘手。简而言之,您只需要处理UML元模型,但是在这种情况下,处理概要文件的方法有点不同。基本上有两种情况:
getAppliedSetRotypes()
,…)。实际上,应用构造型的元素不被认为是构造型的实例。例如,假设您有一个带有原型EAttribute
的属性prop
,QVTo会将prop
视为一个Property
实例,其中包含您可以恢复的额外信息,而不是EAttribute
实例
下面是一个考虑一种ecore
Profile的小例子。我考虑了inout
转换,这意味着定义为inout
的模型将被修改
modeltype UML "strict" uses uml('http://www.eclipse.org/uml2/5.0.0/UML');
transformation testProfile(inout model : UML);
main() {
model.objects()[Property]->map copyme();
}
mapping Property::copyme() : Property
when {
-- You need to use the fully qualified name
not self.getAppliedStereotype('ecore::EAttribute').oclIsUndefined()
}
{
-- repr() is used at the end to get a String value from the tagged value
name := self.name + self.getValue(self.getApplicableStereotype('ecore::EAttribute'), 'attributeName').repr(); -- toString() also works
}
还有一个小请求,列出由特定原型定型的所有元素:
model.objects()[Element]->select(e | not e.getAppliedStereotype('ecore::EAttribute').oclIsUndefined());
property mystereotype : Stereotype = profile.objects()[Stereotype]![name = 'EAttribute'];
另外,stereotypedBy(…)
操作看起来不错,但它还没有实现(在我的QVTo版本上)
第二种情况
这一次,您需要将概要文件作为转换的新参数传递(如果您的概要文件是在另一个文件中定义的)。您的概要文件也是一个UML模型,您的转换签名变成:
transformation testProfile(inout model : UML, in profile : UML);
首先,您需要将您的配置文件应用于您的模型:
model.objects()[Model].applyProfile(profile.objects()![Profile]);
当您想对元素应用原型时:
-- in context of an element
self.applyStereotype(profile.objects()[Stereotype]![name = 'EAttribute']);
如果双过滤器不起作用(我认为它将在将来的QVTo版本中删除),只需使用选择:
self.applyStereotype(profile.objects()[Stereotype]->selectOne(name = 'EAttribute'));
另请看一下setValue()
操作;)
最后一个音符
正如您所看到的,在整个转换过程中处理概要文件可能有点麻烦。明智的做法可能是从您的概要文件et代码派生元模型—第一次转换将您的概要文件模型转换为派生元模型的实例。这样,您将能够处理元模型实例,而不是“具有额外信息的UML实例”
编辑>
为了简化原型处理,您还可以使用最常用的原型定义全局属性:
model.objects()[Element]->select(e | not e.getAppliedStereotype('ecore::EAttribute').oclIsUndefined());
property mystereotype : Stereotype = profile.objects()[Stereotype]![name = 'EAttribute'];