-- @atlcompiler emftvm -- @nsURI UML2 http://www.eclipse.org/uml2/3.0.0/UML -- @nsURI OWL http:///org/eclipse/owl.ecore -- $Id$ -- Transforms a UML2 model to an API OWL ontology containing all the packages -- as pre-classified OWL classes. module UML2ToClassifiedPackageAPIOntology; --extends UML2ToPackageAPIOntology create OUT : OWL from IN : UML2, PLATFORM : OWL, ISA : OWL, JAVA : OWL; uses UML2ToAPIOntology; uses UML2ToPackageAPIOntology; -- ====================================================================== -- helper attributes begin -- ====================================================================== helper def : UML2ToClassifiedPackageAPIOntologyVersionString : String = '$Id$'; -- ====================================================================== -- helper attributes end -- ====================================================================== -- ====================================================================== -- helper methods begin -- ====================================================================== helper def : versionString() : String = 'Generated by ' + thisModule.UML2ToClassifiedPackageAPIOntologyVersionString + ', ' + thisModule.UML2ToPackageAPIOntologyVersionString + ', ' + thisModule.UML2ToAPIOntologyVersionString + ', and ' + thisModule.UML2ComparisonVersionString; -- ====================================================================== -- helper methods end -- ====================================================================== -- ====================================================================== -- transformation rules begin -- ====================================================================== rule Package { from s : UML2!"uml::Package" (thisModule.includedPackages->includes(s)) using { superClasses : Sequence(OWL!"owl::OWLClass") = s.compatibleClasses->select(c|s.equivalentClasses->excludes(c)); apiSuperClasses : Sequence(OWL!"owl::OWLClass") = s.compatibleApiClasses->select(c|s.equivalentApiClasses->excludes(c)); librarySuperClasses : Sequence(OWL!"owl::OWLClass") = s.compatibleLibraryClasses->select(c|s.equivalentLibraryClasses->excludes(c)); } to apiPartClass : OWL!"owl::OWLClass" ( localName <- (s.ontClassName).debug(thisModule.modelName.prefix + 'Package'), RDFSSubClassOf <- if superClasses->isEmpty() then thisModule.javaAPIPart else superClasses endif, OWLEquivalentClass <- s.equivalentClasses, RDFSComment <- Sequence{apiPartComment}, RDFSSeeAlso <- s.references, namespace <- s.getModel()), apiPartComment : OWL!"rdfs::PlainLiteral" ( language <- 'en', lexicalForm <- 'Java API part implementing the ' + s.javaQualifiedName + ' package for ' + thisModule.modelName), apiClass : OWL!"owl::OWLClass" ( localName <- s.ontClassName + 'API', RDFSSubClassOf <- if apiSuperClasses->isEmpty() then Sequence{thisModule.javaAPI} else apiSuperClasses endif, OWLEquivalentClass <- Sequence{apiRestriction}->union(s.equivalentApiClasses), RDFSComment <- Sequence{apiComment}, namespace <- s.getModel()), apiComment : OWL!"rdfs::PlainLiteral" ( language <- 'en', lexicalForm <- 'JavaLibrary implementing the ' + s.javaQualifiedName + ' package for ' + thisModule.modelName), apiRestriction : OWL!"owl::SomeValuesFromRestriction" ( OWLOnProperty <- thisModule.comprisesInterfacePart, OWLSomeValuesFrom <- apiPartClass, namespace <- s.getModel()), apiPart : OWL!"owl::Individual" ( localName <- 'the' + s.ontClassName + 'Part', RDFType <- apiPartClass, namespace <- s.getModel()), libraryClass : OWL!"owl::OWLClass" ( localName <- s.ontClassName + 'ClassLibrary', RDFSSubClassOf <- if librarySuperClasses->isEmpty() then Sequence{thisModule.javaLibrary} else librarySuperClasses endif, OWLEquivalentClass <- Sequence{libraryRestriction}->union(s.equivalentLibraryClasses), RDFSComment <- Sequence{libraryComment}, namespace <- s.getModel()), libraryComment : OWL!"rdfs::PlainLiteral" ( language <- 'en', lexicalForm <- 'JavaLibrary implementing the ' + s.javaQualifiedName + ' package for ' + thisModule.modelName), libraryRestriction : OWL!"owl::SomeValuesFromRestriction" ( OWLOnProperty <- thisModule.implementsInterface, OWLSomeValuesFrom <- apiClass, namespace <- s.getModel()) } rule APIClass(s : UML2!"uml::Model") { using { superClasses : Sequence(OWL!"owl::OWLClass") = s.compatibleApiClasses->select(c|s.equivalentApiClasses->excludes(c)); } to apiClass : OWL!"owl::OWLClass" ( localName <- s.name.legalOntClassName + 'API', RDFSSubClassOf <- thisModule.includedPackages->collect(p|thisModule.resolveTemp(p, 'apiClass')) ->union(superClasses), OWLEquivalentClass <- Sequence{apiRestriction} ->union(s.equivalentApiClasses), RDFSComment <- Sequence{apiComment}, namespace <- s), apiComment : OWL!"rdfs::PlainLiteral" ( language <- 'en', lexicalForm <- s.name + ' API'), apiRestriction : OWL!"owl::IntersectionClass" ( OWLIntersectionOf <- thisModule.includedPackages ->collect(p|thisModule.APIRestriction(p)), namespace <- s) do { apiClass; } } rule LibraryClass(s : UML2!"uml::Model", apiClass : OWL!"owl::OWLClass") { using { superClasses : Sequence(OWL!"owl::OWLClass") = s.compatibleLibraryClasses->select(c|s.equivalentLibraryClasses->excludes(c)); } to libraryClass : OWL!"owl::OWLClass" ( localName <- s.name.legalOntClassName + 'ClassLibrary', RDFSSubClassOf <- thisModule.includedPackages->collect(p|thisModule.resolveTemp(p, 'libraryClass')) ->union(superClasses), OWLEquivalentClass <- Sequence{libraryRestriction} ->union(s.equivalentLibraryClasses), RDFSComment <- Sequence{libraryComment}, namespace <- s), libraryComment : OWL!"rdfs::PlainLiteral" ( language <- 'en', lexicalForm <- 'Java class library implementing the ' + s.name + ' API'), libraryRestriction : OWL!"owl::SomeValuesFromRestriction" ( OWLOnProperty <- thisModule.implementsInterface, OWLSomeValuesFrom <- apiClass, namespace <- s) do { Sequence{apiClass, libraryClass}; } } -- ====================================================================== -- transformation rules end -- ======================================================================