@@ -87,6 +87,8 @@ class UML2OWLWriter(val umlClassDiagram: UMLClassDiagram):
8787 owlProperty = createOWLDataProperty(umlClassAttribute, errorMessages, domain, attributeType)
8888 case UMLClassIdentityType (attributeType) =>
8989 owlProperty = createOWLObjectProperty(umlClassAttribute, errorMessages, domain, attributeType)
90+ case UMLEnumerationIdentityType (attributeType) =>
91+ owlProperty = createOWLObjectProperty(umlClassAttribute, errorMessages, domain, attributeType)
9092 case CurieBasedUMLClassAttributeType (attributeType) =>
9193 owlProperty = createOWLObjectPropertyBasedOnConfiguredPrefix(umlClassAttribute, errorMessages, domain, attributeType)
9294 case UndefinedUMLClassAttributeType =>
@@ -157,6 +159,56 @@ class UML2OWLWriter(val umlClassDiagram: UMLClassDiagram):
157159 case UMLMultiplicity (UMLInfiniteCardinality (_), UMLInfiniteCardinality (_)) =>
158160 objectProperty
159161
162+ private def createOWLObjectProperty (umlClassAttribute : UMLClassAttribute ,
163+ errorMessages : mutable.Seq [String ],
164+ domain : OWLClass ,
165+ umlEnumerationIdentity : UMLEnumerationIdentity ): OWLObjectProperty =
166+ logger.debug(s " createOWLObjectProperty: umlClassAttribute= $umlClassAttribute, errorMessages = $errorMessages, " +
167+ s " domain= $domain, umlEnumerationIdentity= $umlEnumerationIdentity ${Code .source}" )
168+ val objectProperty = dataFactory.getOWLObjectProperty(umlClassAttribute.attributeIdentity.attributeIRI.iri)
169+ val domainChangeApplied = manager.addAxiom(ontology, dataFactory.getOWLObjectPropertyDomainAxiom(objectProperty, domain))
170+ if domainChangeApplied != SUCCESSFULLY then
171+ errorMessages :+ s " Domain axiom for object property ${objectProperty.getIRI} could not be added for " +
172+ s " ${umlClassAttribute.attributeIdentity.attributeIRI.iri}"
173+ val rangeChangeApplied = manager.addAxiom(ontology, dataFactory.getOWLObjectPropertyRangeAxiom(objectProperty,
174+ dataFactory.getOWLClass(umlEnumerationIdentity.enumerationIRI.iri)))
175+ if rangeChangeApplied != SUCCESSFULLY then
176+ errorMessages :+ s " Range axiom for data property ${objectProperty.getIRI} could not be added for " +
177+ s " ${umlClassAttribute.attributeIdentity.attributeIRI.iri}"
178+ umlClassAttribute.multiplicity match
179+ case UMLMultiplicity (UMLNonNegativeCardinality (minCardinality), UMLNonNegativeCardinality (maxCardinality)) =>
180+ logger.trace(s " minCardinality= $minCardinality ${Code .source}" )
181+ val axiom =
182+ if minCardinality == maxCardinality && minCardinality != 0 then
183+ dataFactory.getOWLSubClassOfAxiom(domain, dataFactory.getOWLObjectExactCardinality(maxCardinality, objectProperty,
184+ dataFactory.getOWLClass(umlEnumerationIdentity.enumerationIRI.iri)))
185+ else if minCardinality > 0 then
186+ dataFactory.getOWLSubClassOfAxiom(domain,
187+ dataFactory.getOWLObjectIntersectionOf(
188+ dataFactory.getOWLObjectMinCardinality(minCardinality, objectProperty,
189+ dataFactory.getOWLClass(umlEnumerationIdentity.enumerationIRI.iri)),
190+ dataFactory.getOWLObjectMaxCardinality(maxCardinality, objectProperty,
191+ dataFactory.getOWLClass(umlEnumerationIdentity.enumerationIRI.iri))))
192+ else
193+ dataFactory.getOWLSubClassOfAxiom(domain, dataFactory.getOWLObjectMaxCardinality(maxCardinality, objectProperty,
194+ dataFactory.getOWLClass(umlEnumerationIdentity.enumerationIRI.iri)))
195+ if manager.addAxiom(ontology, axiom) != SUCCESSFULLY then
196+ errorMessages :+ s " Could not add subclass axiom representing cardinalities [ $minCardinality, $maxCardinality] for " +
197+ s " ${umlClassAttribute.attributeIdentity.attributeLabel}"
198+ case UMLMultiplicity (UMLNonNegativeCardinality (minCardinality), UMLInfiniteCardinality (_)) =>
199+ if minCardinality > 0 then
200+ val axiom = dataFactory.getOWLSubClassOfAxiom(domain,
201+ dataFactory.getOWLObjectMinCardinality(minCardinality, objectProperty,
202+ dataFactory.getOWLClass(umlEnumerationIdentity.enumerationIRI.iri)))
203+ if manager.addAxiom(ontology, axiom) != SUCCESSFULLY then
204+ errorMessages :+ s " Could not add subclass axiom representing cardinalities for [ $minCardinality, *] " +
205+ s " ${umlClassAttribute.attributeIdentity.attributeLabel}"
206+ case UMLMultiplicity (UMLInfiniteCardinality (_), UMLNonNegativeCardinality (maxCardinality)) =>
207+ errorMessages :+ s " Multiplicity error found with multiplicity = [*, $maxCardinality] for attribute = " +
208+ s " ${umlClassAttribute.attributeIdentity.attributeLabel}. "
209+ case UMLMultiplicity (UMLInfiniteCardinality (_), UMLInfiniteCardinality (_)) =>
210+ objectProperty
211+
160212 private def createOWLObjectProperty (umlClassAttribute : UMLClassAttribute ,
161213 errorMessages : mutable.Seq [String ],
162214 domain : OWLClass ): OWLObjectProperty =
0 commit comments