public Role objectRole(RelationshipType relType) { return tx.putRole(namer.objectRole(relType.getLabel())); }
public Role subjectRole(RelationshipType relType) { return tx.putRole(namer.subjectRole(relType.getLabel())); }
@Override public Concept visit(OWLInverseObjectPropertiesAxiom axiom) { if (!axiom.getFirstProperty().isOWLObjectProperty() || !axiom.getSecondProperty().isOWLObjectProperty()) { return null; } RelationshipType relation = migrator.relation(axiom.getFirstProperty().asOWLObjectProperty()); RelationshipType inverseRelation = migrator.relation(axiom.getSecondProperty().asOWLObjectProperty()); Map<Label, Label> roleMapFD = new HashMap<>(); roleMapFD.put(migrator.namer().subjectRole(relation.getLabel()), migrator.namer().objectRole(inverseRelation.getLabel())); roleMapFD.put(migrator.namer().objectRole(relation.getLabel()), migrator.namer().subjectRole(inverseRelation.getLabel())); ReasonerUtils.createSubPropertyRule("Sub Property Rule Between [" + relation.getLabel() + "] and [" + inverseRelation.getLabel() + "]", relation, inverseRelation, roleMapFD, migrator.tx()); Map<Label, Label> roleMapBD = new HashMap<>(); roleMapBD.put(migrator.namer().subjectRole(inverseRelation.getLabel()), migrator.namer().objectRole(relation.getLabel())); roleMapBD.put(migrator.namer().objectRole(inverseRelation.getLabel()), migrator.namer().subjectRole(relation.getLabel())); ReasonerUtils.createSubPropertyRule("Sub Property Rule Between [" + inverseRelation.getLabel() + "] and [" + relation.getLabel() + "]", inverseRelation, relation, roleMapBD, migrator.tx()); return null; }
@Override public Concept visit(OWLEquivalentObjectPropertiesAxiom axiom) { Set<OWLObjectPropertyExpression> properties = axiom.getAxiomWithoutAnnotations() .properties().filter(AsOWLObjectProperty::isOWLObjectProperty).collect(Collectors.toSet()); if (properties.size() != axiom.getAxiomWithoutAnnotations().properties().count()) { return null; } for (OWLObjectPropertyExpression property : properties) { RelationshipType relation = migrator.relation(property.asOWLObjectProperty()); properties.forEach(prop -> { RelationshipType eqRelation = migrator.relation(prop.asOWLObjectProperty()); if (!relation.equals(eqRelation)) { Map<Label, Label> roleMap = new HashMap<>(); roleMap.put(migrator.namer().subjectRole(relation.getLabel()), migrator.namer().subjectRole(eqRelation.getLabel())); roleMap.put(migrator.namer().objectRole(relation.getLabel()), migrator.namer().objectRole(eqRelation.getLabel())); ReasonerUtils.createSubPropertyRule("Sub Property Rule Between [" + relation.getLabel() + "] and [" + eqRelation.getLabel() + "]", relation, eqRelation, roleMap, migrator.tx()); } }); } return null; }
@Override public Concept visit(OWLSubPropertyChainOfAxiom axiom) { if (!axiom.getSuperProperty().isOWLObjectProperty()) { return null; } RelationshipType superRelation = migrator.relation(axiom.getSuperProperty().asOWLObjectProperty()); LinkedHashMap<RelationshipType, Pair<Label, Label>> chain = new LinkedHashMap<>(); axiom.getPropertyChain().forEach(property -> { RelationshipType relation = migrator.relation(property.asOWLObjectProperty()); chain.put(relation, new Pair<>(migrator.namer().subjectRole(relation.getLabel()), migrator.namer().objectRole(relation.getLabel()))); }); Label fromRoleLabel = migrator.namer().subjectRole(superRelation.getLabel()); Label toRoleLabel = migrator.namer().objectRole(superRelation.getLabel()); ReasonerUtils.createPropertyChainRule("Chain Rule Between [" + superRelation.getLabel() + "], [" + fromRoleLabel + "], and [" + toRoleLabel + "]", superRelation, fromRoleLabel, toRoleLabel, chain, migrator.tx()); return null; }
@Override public Concept visit(OWLTransitiveObjectPropertyAxiom axiom) { if (!axiom.getProperty().isOWLObjectProperty()) { return null; } RelationshipType relation = migrator.relation(axiom.getProperty().asOWLObjectProperty()); Label fromRoleLabel = migrator.namer().subjectRole(relation.getLabel()); Label toRoleLabel = migrator.namer().objectRole(relation.getLabel()); ReasonerUtils.createTransitiveRule( "Transitive Rule Between [" + relation.getLabel() + "], [" + fromRoleLabel + "] and [" + toRoleLabel + "]", relation, fromRoleLabel, toRoleLabel, migrator.tx()); return null; }
@Override public Concept visit(OWLSubObjectPropertyOfAxiom axiom) { if (!axiom.getSubProperty().isOWLObjectProperty() || !axiom.getSuperProperty().isOWLObjectProperty()) { return null; } RelationshipType subRelation = migrator.relation(axiom.getSubProperty().asOWLObjectProperty()); RelationshipType superRelation = migrator.relation(axiom.getSuperProperty().asOWLObjectProperty()); Map<Label, Label> roleMap = new HashMap<>(); roleMap.put(migrator.namer().subjectRole(superRelation.getLabel()), migrator.namer().subjectRole(subRelation.getLabel())); roleMap.put(migrator.namer().objectRole(superRelation.getLabel()), migrator.namer().objectRole(subRelation.getLabel())); ReasonerUtils.createSubPropertyRule("Sub Property Rule Between [" + superRelation.getLabel() + "] and [" + subRelation.getLabel() + "]", superRelation, subRelation, roleMap, migrator.tx()); migrator.subjectRole(subRelation).sup(migrator.subjectRole(superRelation)); migrator.objectRole(subRelation).sup(migrator.objectRole(superRelation)); subRelation.sup(superRelation); return null; }
@Override public Concept visit(OWLReflexiveObjectPropertyAxiom axiom) { if (!axiom.getProperty().isOWLObjectProperty()) { return null; } RelationshipType relation = migrator.relation(axiom.getProperty().asOWLObjectProperty()); Label fromRoleLabel = migrator.namer().subjectRole(relation.getLabel()); Label toRoleLabel = migrator.namer().objectRole(relation.getLabel()); ReasonerUtils.createReflexiveRule( "Reflexive Rule Between [" + fromRoleLabel + "] and [" + toRoleLabel + "]", relation, fromRoleLabel, toRoleLabel, migrator.tx()); return null; }