Home » Archived » M2M (model-to-model transformation) » [ATL] Rule inheritance
[ATL] Rule inheritance [message #88943] |
Mon, 25 August 2008 16:33 |
Monica Cl�©ment Messages: 14 Registered: July 2009 |
Junior Member |
|
|
Hello, I am working about the transformation SYSML -> UML. SysML is a
metamodel based on UML. I have a question.
My code is:
abstract rule package{
from package : SYSML!Package (package.oclIsTypeOf(SYSML!Package))
to paquetage : UML!Package ( -- Package
nestedPackage <- package.nestedPackage,
packagedElement <-package.packagedElement,
--ownedType <-package.ownedType,
packageMerge <- package.packageMerge,
nestingPackage <- package.nestingPackage,
-- Package -> Namespace
elementImport <- package.elementImport,
-- importedMember<-package.importedMember,
--member <- package.member,
--ownedMember <- package.ownedMember,
ownedRule <- package.ownedRule,
packageImport <- package.packageImport,
-- NamesSpace -> NamedElement
name <- package.name,
--qualifiedName <- package.qualifiedName,
visibility <- package.visibility,
-- NamedElement -> Element
ownedComment <- package.ownedComment
--ownedElement <- package.ownedElement
--owner <- package.owner
-- Package -> PackageableElement
)
do {
if (not package.ownedType.oclIsUndefined())
paquetage.ownedType <- package.ownedType;
if (not package.ownedType.oclIsUndefined())
paquetage.nestedPackage <- package.nestedPackage;
}
}
rule model extends package{
from model : SYSML!Model (model.oclIsTypeOf(SYSML!Model))
to modele : UML!Model( -- Model
viewpoint <- model.viewpoint
)}
According to UML, the metaclass Model inherit of the metaclass Package
(Model -> Package).
In order to test my code, I insert a SysML diagram which contains a
model(m) which contains a package (p).
The transformation returns a UML diagram which contains a package (p), a
model (m) which contains a package (p).
I want the transformation returns a UML model(m) which contains a package
(p).
In fact, the same package is created 2 times... one time alone, and the
second time in the model.
How can I do in order to evoid this redundancy?
Thanks,
Monica.
|
|
|
Re: [ATL] Rule inheritance [message #89001 is a reply to message #88943] |
Tue, 26 August 2008 08:20 |
William Piers Messages: 301 Registered: July 2009 |
Senior Member |
|
|
Hello,
Comments below :
Monica Clement a écrit :
> Hello, I am working about the transformation SYSML -> UML. SysML is a
> metamodel based on UML. I have a question.
>
> My code is:
>
Just a check: did you add the header
--@atlcompiler atl2006
on the top of the file ? According to that page :
http://wiki.eclipse.org/ATL_Language_Troubleshooter#Rule_inh eritance
> abstract rule package{
> from package : SYSML!Package (package.oclIsTypeOf(SYSML!Package))
Here, the filter will limit the use of this abstract rule to Package. So
you better have to remove it in order to extend the rule to Model.
from package : SYSML!Package
> to paquetage : UML!Package ( -- Package
> nestedPackage <- package.nestedPackage,
> packagedElement <-package.packagedElement,
> --ownedType <-package.ownedType,
> packageMerge <- package.packageMerge,
> nestingPackage <- package.nestingPackage,
> -- Package -> Namespace
> elementImport <- package.elementImport,
> -- importedMember<-package.importedMember,
> --member <- package.member,
> --ownedMember <- package.ownedMember,
> ownedRule <- package.ownedRule,
> packageImport <- package.packageImport,
> -- NamesSpace -> NamedElement
> name <- package.name,
> --qualifiedName <- package.qualifiedName,
> visibility <- package.visibility,
> -- NamedElement -> Element
> ownedComment <- package.ownedComment
> --ownedElement <- package.ownedElement
> --owner <- package.owner
> -- Package -> PackageableElement
> )
> do {
> if (not package.ownedType.oclIsUndefined())
> paquetage.ownedType <- package.ownedType;
> if (not package.ownedType.oclIsUndefined())
> paquetage.nestedPackage <- package.nestedPackage;
> }
> }
>
>
> rule model extends package{
> from model : SYSML!Model (model.oclIsTypeOf(SYSML!Model))
A limitation of rule inheritance is that input pattern variables names
have to be the same in super and sub rules. So you need to use this
notation :
from package : SYSML!Model
to modele : UML!Model( -- Model
viewpoint <- package.viewpoint
)}
Best regards,
William
> to modele : UML!Model( -- Model
> viewpoint <- model.viewpoint
> )}
>
> According to UML, the metaclass Model inherit of the metaclass Package
> (Model -> Package).
>
> In order to test my code, I insert a SysML diagram which contains a
> model(m) which contains a package (p).
> The transformation returns a UML diagram which contains a package (p), a
> model (m) which contains a package (p).
>
> I want the transformation returns a UML model(m) which contains a
> package (p).
>
> In fact, the same package is created 2 times... one time alone, and the
> second time in the model.
>
> How can I do in order to evoid this redundancy?
>
>
> Thanks,
>
> Monica.
>
|
|
| | | |
Goto Forum:
Current Time: Mon May 06 17:19:52 GMT 2024
Powered by FUDForum. Page generated in 0.03877 seconds
|