コード例 #1
0
ファイル: Mobi2OWL.java プロジェクト: ramonmluz/Kernel-Mobi
  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);
  }