我使用Papyrus工具定义了一个my_profile.di,并将文件保存为"my_profile.di“。如何在QVTo转换中使用此配置文件?
是否可以这样做(我不确定文件的路径应该如何指定)?
modeltype UMLProfile uses 'platform:/resource/QVT_project_test/my_profile.di';如果这是个愚蠢的问题,我很抱歉,但我对QVT完全陌生。我希望外面的人能启发我,谢谢!
发布于 2016-01-22 14:27:07
使用QVTo (或任何基于EMF的转换语言)的UML有点棘手。简单地说,您只需要处理UML元模型,但是按照这种情况,处理配置文件的方法有点不同。基本上,有两种情况:
第一个场景
您只需注册UML元模型,并且需要使用UML提供的操作(getAppliedStereotypes(),.)。实际上,应用刻板印象的元素不被认为是原型的实例。例如,假设您有一个带有原型EAttribute的EAttribute,QVTo将把prop看作一个具有额外信息的Property实例,您可以恢复而不是EAttribute实例。
下面是一个考虑一种ecore配置文件的小示例。我考虑了一个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());而且,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版本中被删除),只需使用select:
self.applyStereotype(profile.objects()[Stereotype]->selectOne(name = 'EAttribute'));还请查看setValue()操作;)。
Final Note
正如您所看到的,在整个转换过程中处理概要文件可能有点麻烦。明智的做法可能是从配置文件和代码中派生元模型,这是第一个转换,它接受您的概要模型,并将其转换为派生元模型的一个实例。这样,您将能够处理元模型实例,而不是“带有额外信息的UML实例”。
EDIT>
为了简化原型处理,您还可以用最常用的原型定义全局属性:
property mystereotype : Stereotype = profile.objects()[Stereotype]![name = 'EAttribute'];https://stackoverflow.com/questions/34928313
复制相似问题