Я новичок в EMF M2M. У меня проблема с использованием ATL, когда целевая модель содержит сложные типы. Вот небольшой пример, чтобы показать это. Предположим, я перехожу из моделей Families.ecore (таких же, как пример Faimilies2Persons на веб-сайте ATL) в 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>