【发布时间】:2015-05-05 03:04:48
【问题描述】:
我是 EMF M2M 的初学者。当目标模型包含复杂类型时,我在使用 ATL 时遇到问题。这是一个小例子来展示它。假设我从 Families.ecore(与 ATL 网站示例 Faimilies2Persons 相同)的模型转移到 Graph.ecore(关键部分如下所示)。我想创建一个图表,其中每个家庭成员都是一个节点,如果他们都是男性或女性,则两个节点是连接的。然后我从这个模板开始,如下所示。结果,每个成员都是一个节点,但同时我得到多个图,每个图只有一个节点。所以任何人都可以给我一些帮助如何将所有节点放入一个图中?原则上,我认为当 ATL 处理具有层次复杂类型的模型时,这是一个非常普遍的问题。非常感谢!
module families2graph;
create OUT : graph from IN : Families;
entrypoint rule myrule() {
to
t: graph!Graph (
name <- 'mygraph',
type <- #Directed
)
}
rule Member2Female {
from
s : Families!Member
to
t1 : graph!Graph (
nodes <- t2
),
t2 : graph!Node (
name <- s.firstName
)
}
<eClassifiers xsi:type="ecore:EClass" name="Graph">
<eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
<details key="name" value="Graph" />
<details key="kind" value="elementOnly" />
</eAnnotations>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">
<eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
<details key="kind" value="element" />
<details key="name" value="name" />
</eAnnotations>
</eStructuralFeatures>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="type" lowerBound="1" eType="#//EdgeDirection" unsettable="true">
<eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
<details key="kind" value="element" />
<details key="name" value="type" />
</eAnnotations>
</eStructuralFeatures>
<eStructuralFeatures xsi:type="ecore:EReference" name="nodes" upperBound="-1" eType="#//Node" containment="true" resolveProxies="false">
<eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
<details key="kind" value="element" />
<details key="name" value="nodes" />
</eAnnotations>
</eStructuralFeatures>
<eStructuralFeatures xsi:type="ecore:EReference" name="edges" upperBound="-1" eType="#//Edge" containment="true" resolveProxies="false">
<eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
<details key="kind" value="element" />
<details key="name" value="edges" />
</eAnnotations>
</eStructuralFeatures>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Node">
<eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
<details key="name" value="Node" />
<details key="kind" value="elementOnly" />
</eAnnotations>
<eStructuralFeatures xsi:type="ecore:EReference" name="connectedEdges" upperBound="-1" eType="#//Edge" resolveProxies="false">
<eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
<details key="kind" value="element" />
<details key="name" value="ConnectedEdges" />
</eAnnotations>
</eStructuralFeatures>
<eStructuralFeatures xsi:type="ecore:EReference" name="properties" upperBound="-1" eType="#//Property" containment="true" resolveProxies="false">
<eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
<details key="kind" value="element" />
<details key="name" value="properties" />
</eAnnotations>
</eStructuralFeatures>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">
<eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
<details key="kind" value="attribute" />
<details key="name" value="name" />
</eAnnotations>
</eStructuralFeatures>
</eClassifiers>
【问题讨论】: