Home » Archived » M2M (model-to-model transformation) » [ATL] Rule inheritance
[ATL] Rule inheritance [message #88943] |
Mon, 25 August 2008 12:33  |
Eclipse User |
|
|
|
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 04:20   |
Eclipse User |
|
|
|
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.
>
|
|
| | |
Re: [ATL] Rule inheritance... Thanks [message #89138 is a reply to message #89110] |
Tue, 26 August 2008 08:19  |
Eclipse User |
|
|
|
Thank you very much William. It's work :
-- @atlcompiler atl2006
module sysml2uml; -- Module Template
create OUT : UML from IN : SYSML;
abstract rule package{
from package : SYSML!Package --(package.oclIsTypeOf(SYSML!Package))
to paquetage : UML!Package ( packagedElement <-package.packagedElement,
name <- package.name)
}
rule pack extends package{
from package : SYSML!Package
to paquetage : UML!Package
}
rule model extends package{
from package : SYSML!Model (package.oclIsTypeOf(SYSML!Model))
to paquetage : UML!Model(viewpoint <- package.viewpoint)
}
I obtain this hierarch:
-<Model> diagSysml
-<Package> diagSysml
Monica.
|
|
|
Goto Forum:
Current Time: Wed Jul 23 17:28:22 EDT 2025
Powered by FUDForum. Page generated in 0.03976 seconds
|