从图表访问语义模型元素(Capella 的 M2doc)

Access to semantic model elements from a diagram (M2doc for Capella)

我试图访问图表中引用的所有语义模型元素,代码类似于:

{m:for rep | pkg.representationByDescriptionName('Class Diagram Blank')}
{ m:for obj | rep.eContents().target }

{ m:endfor }
{ m:endfor }

而且,虽然在 sirius 解释器中 rep.eContents().target 工作正常,但在生成文档时我从模板中得到了这个错误:

无效的for语句:空集合:调用eContents后不会留下任何东西:只有EClass可以包含其他EClass而不是org.eclipse.sirius.viewpoint.DRepresentation Invalid for statement: Couldn't find the 'aqlFeatureAccess(Nothing(Nothing will be left after calling eContents: Only EClass can contain other EClasses not org.eclipse.sirius.viewpoint.DRepresentation),java.lang.String)' serviceInvalid for statement: The iteration variable types must be collections ([Nothing(Couldn't find the 'aqlFeatureAccess(Nothing(Nothing will be left after calling eContents: Only EClass can contain other EClasses not org.eclipse.sirius.viewpoint.DRepresentation),java.lang.String)' service)]).

迭代图中可见的模型对象的正确代码是什么? 谢谢。

您可能需要添加 Sirius 元模型。您可以使用 template properties wizard:

添加以下 nsURI

根据您使用的 Sirius 版本,您可能需要更改版本号。如果需要,您还可以为 Sirius 表和树添加 nsURI。

Sirius 为给定的表示提供了一个 EReference 列表语义元素,对于您可能想要检查元素是否可见的图表:

rep.representationElements->select(re | if re.oclIsKindOf(diagram::DDiagramElement) then re.visible else true endif)