首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在QVTo转换中使用UML吗?

在QVTo转换中使用UML吗?
EN

Stack Overflow用户
提问于 2016-01-21 15:54:39
回答 1查看 487关注 0票数 3

我使用Papyrus工具定义了一个my_profile.di,并将文件保存为"my_profile.di“。如何在QVTo转换中使用此配置文件?

是否可以这样做(我不确定文件的路径应该如何指定)?

代码语言:javascript
复制
modeltype UMLProfile uses 'platform:/resource/QVT_project_test/my_profile.di';

如果这是个愚蠢的问题,我很抱歉,但我对QVT完全陌生。我希望外面的人能启发我,谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-22 14:27:07

使用QVTo (或任何基于EMF的转换语言)的UML有点棘手。简单地说,您只需要处理UML元模型,但是按照这种情况,处理配置文件的方法有点不同。基本上,有两种情况:

  1. 您希望使用使用配置文件/构造型的源UML模型,
  2. 您希望从另一个UML模型中创建一个新的UML模型(或者修改一个现有的UML模型),并在模型上应用一个概要文件/原型。

第一个场景

您只需注册UML元模型,并且需要使用UML提供的操作(getAppliedStereotypes(),.)。实际上,应用刻板印象的元素不被认为是原型的实例。例如,假设您有一个带有原型EAttributeEAttribute,QVTo将把prop看作一个具有额外信息的Property实例,您可以恢复而不是EAttribute实例。

下面是一个考虑一种ecore配置文件的小示例。我考虑了一个inout转换,这意味着定义为inout的模型将被修改。

代码语言:javascript
复制
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
}

并提出一个小请求,列出由特定刻板印象形成的所有元素:

代码语言:javascript
复制
model.objects()[Element]->select(e | not e.getAppliedStereotype('ecore::EAttribute').oclIsUndefined());

而且,stereotypedBy(...)操作看起来不错,但还没有实现(在我的QVTo版本上)。

第二个场景

这一次,您需要将配置文件作为转换的新参数传递(如果您的概要文件是在另一个文件中定义的)。您的概要文件也是一个UML模型,您的转换签名变成:

代码语言:javascript
复制
transformation testProfile(inout model : UML, in profile : UML);

首先,您需要将您的配置文件应用于您的模型:

代码语言:javascript
复制
model.objects()[Model].applyProfile(profile.objects()![Profile]);

当您想要将原型应用于元素时:

代码语言:javascript
复制
-- in context of an element
self.applyStereotype(profile.objects()[Stereotype]![name = 'EAttribute']);

如果双过滤器不能工作(我认为它将在未来的QVTo版本中被删除),只需使用select:

代码语言:javascript
复制
self.applyStereotype(profile.objects()[Stereotype]->selectOne(name = 'EAttribute'));

还请查看setValue()操作;)。

Final Note

正如您所看到的,在整个转换过程中处理概要文件可能有点麻烦。明智的做法可能是从配置文件和代码中派生元模型,这是第一个转换,它接受您的概要模型,并将其转换为派生元模型的一个实例。这样,您将能够处理元模型实例,而不是“带有额外信息的UML实例”。

EDIT>

为了简化原型处理,您还可以用最常用的原型定义全局属性:

代码语言:javascript
复制
property mystereotype : Stereotype =  profile.objects()[Stereotype]![name = 'EAttribute'];
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34928313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档