public void exportSymmetricRelations() throws ExceptionSymmetricRelation { HashMap<String, HashMap<String, HashMap<String, Integer>>> relationsPropertys = new HashMap<String, HashMap<String, HashMap<String, Integer>>>(); HashMap<String, HashMap<String, HashMap<String, Class>>> listRestrictions = new HashMap<String, HashMap<String, HashMap<String, Class>>>(); for (SymmetricRelation symmetricRelation : this.mobi.getAllSymmetricRelations().values()) { String nameJenaObjectProperty = this.mobi.getPropertyName( symmetricRelation.getName(), symmetricRelation.getClassA(), symmetricRelation.getClassB()); for (CompositionRelation cr : this.mobi.getAllCompositionRelations().values()) { if ((this.mobi .getPropertyName(cr.getNameA(), cr.getClassA(), cr.getClassB()) .equals(nameJenaObjectProperty)) || (cr.getNameB() != null && this.mobi .getPropertyName(cr.getNameB(), cr.getClassB(), cr.getClassA()) .equals(nameJenaObjectProperty))) throw new ExceptionSymmetricRelation( "Could not create OWL file. There is another composition relation with the name: " + nameJenaObjectProperty + " for this symmetric relation."); } OntClass classeA = this.createJenaClass(symmetricRelation.getClassA()); OntClass classeB = this.createJenaClass(symmetricRelation.getClassB()); if (!relationsPropertys.containsKey(nameJenaObjectProperty)) relationsPropertys.put( nameJenaObjectProperty, new HashMap<String, HashMap<String, Integer>>()); if (!((HashMap<String, HashMap<String, Integer>>) relationsPropertys.get(nameJenaObjectProperty)) .containsKey(symmetricRelation.getClassA().getUri())) ((HashMap<String, HashMap<String, Integer>>) relationsPropertys.get(nameJenaObjectProperty)) .put(symmetricRelation.getClassA().getUri(), new HashMap<String, Integer>()); if (!((HashMap<String, HashMap<String, Integer>>) relationsPropertys.get(nameJenaObjectProperty)) .containsKey(symmetricRelation.getClassB().getUri())) ((HashMap<String, HashMap<String, Integer>>) relationsPropertys.get(nameJenaObjectProperty)) .put(symmetricRelation.getClassB().getUri(), new HashMap<String, Integer>()); if (!listRestrictions.containsKey(nameJenaObjectProperty)) listRestrictions.put(nameJenaObjectProperty, new HashMap<String, HashMap<String, Class>>()); if (!listRestrictions .get(nameJenaObjectProperty) .containsKey(symmetricRelation.getClassA().getUri())) listRestrictions .get(nameJenaObjectProperty) .put(symmetricRelation.getClassA().getUri(), new HashMap<String, Class>()); if (!listRestrictions .get(nameJenaObjectProperty) .get(symmetricRelation.getClassA().getUri()) .containsKey(symmetricRelation.getClassB().getUri())) listRestrictions .get(nameJenaObjectProperty) .get(symmetricRelation.getClassA().getUri()) .put(symmetricRelation.getClassB().getUri(), symmetricRelation.getClassB()); if (!listRestrictions .get(nameJenaObjectProperty) .containsKey(symmetricRelation.getClassB().getUri())) listRestrictions .get(nameJenaObjectProperty) .put(symmetricRelation.getClassB().getUri(), new HashMap<String, Class>()); if (!listRestrictions .get(nameJenaObjectProperty) .get(symmetricRelation.getClassB().getUri()) .containsKey(symmetricRelation.getClassA().getUri())) listRestrictions .get(nameJenaObjectProperty) .get(symmetricRelation.getClassB().getUri()) .put(symmetricRelation.getClassA().getUri(), symmetricRelation.getClassA()); ObjectProperty objectProperty = this.jena.createObjectProperty(this.ontologyPrefix + nameJenaObjectProperty); SymmetricProperty p = objectProperty.convertToSymmetricProperty(); p.setInverseOf(p); p.setDomain(this.getJenaDomainsObjectProperty(nameJenaObjectProperty, false)); p.setRange(this.getJenaRangesObjectProperty(nameJenaObjectProperty, false)); for (InstanceRelation instanceRelation : symmetricRelation.getInstanceRelationMapA().values()) { Individual individual = this.jena.createIndividual( this.ontologyPrefix + instanceRelation.getInstance().getUri(), classeA); for (Instance instance : instanceRelation.getAllInstances().values()) { Individual individualv1 = this.jena.createIndividual(this.ontologyPrefix + instance.getUri(), classeB); individualv1.addProperty(objectProperty, individual); individual.addProperty(objectProperty, individualv1); if (!((HashMap<String, HashMap<String, Integer>>) relationsPropertys.get(nameJenaObjectProperty)) .get(symmetricRelation.getClassA().getUri()) .containsKey(instanceRelation.getInstance().getUri())) ((HashMap<String, HashMap<String, Integer>>) relationsPropertys.get(nameJenaObjectProperty)) .get(symmetricRelation.getClassA().getUri()) .put(instanceRelation.getInstance().getUri(), 1); else { Integer count = ((HashMap<String, HashMap<String, Integer>>) relationsPropertys.get(nameJenaObjectProperty)) .get(symmetricRelation.getClassA().getUri()) .get(instanceRelation.getInstance().getUri()); ((HashMap<String, HashMap<String, Integer>>) relationsPropertys.get(nameJenaObjectProperty)) .get(symmetricRelation.getClassA().getUri()) .put(instanceRelation.getInstance().getUri(), count + 1); } } } for (InstanceRelation instanceRelation : symmetricRelation.getInstanceRelationMapB().values()) { Individual individual = this.jena.createIndividual( this.ontologyPrefix + instanceRelation.getInstance().getUri(), classeB); for (Instance instance : instanceRelation.getAllInstances().values()) { Individual individualv1 = this.jena.createIndividual(this.ontologyPrefix + instance.getUri(), classeA); individual.addProperty(objectProperty, individualv1); individualv1.addProperty(objectProperty, individual); } } } Set<String> keysRestrictions = listRestrictions.keySet(); for (String keyRestriction : keysRestrictions) { HashMap<String, HashMap<String, Class>> listRestrictions2 = listRestrictions.get(keyRestriction); Set<String> keysRestrictions2 = listRestrictions2.keySet(); for (String keyRestriction2 : keysRestrictions2) { this.createJenaRestriction( this.jena.createObjectProperty(this.ontologyPrefix + keyRestriction), this.jena.createClass(this.ontologyPrefix + keyRestriction2), this.createUnionJenaClassFromMobiClass(listRestrictions2.get(keyRestriction2)), Mobi2OWL.RESTRICTION_ALLVALUES); } } this.convertToFunctionalOrInverseFunctionalProperty(relationsPropertys, false); }