/**
   * Связывает концепт-субаксиому с другими концептами в ОПП.
   *
   * @param sbAx суаксиома
   * @param sbAxInd экземпляр субаксиомы
   */
  private void bindingConceptOfComplexSubAxiomWithOther(
      OWLNamedIndividual sbAxInd, UserPresenOnt upo) {
    /*
     * связать концепт субаксиомы с объектными и типизированными свойствами
     * классов субаксиомы разобраться с объектными свойсвами внутри аксиомы
     * ! Решил убрать привязку объектных свойств классов в субаксиоме к ней
     * т.к. ранее убрал привязку к классам (простым субаксиомам) по
     * домену/радиусу свойства
     */

    LOGGER.info("   ===bindingConceptOfComplexSubAxiomWithOther================");
    LOGGER.info("   Subaxiom:<" + this.getTitle() + ">");
    /*
     * Убираем привязку объектных свойств
     * LOGGER.info("   =Binding sbAx with obj properties:"); for
     * (Iterator<PairOfIRI> it = sbAx.getIteratorOfObjectPropertyList();
     * it.hasNext();) { PairOfIRI pair = (PairOfIRI) it.next();
     * LOGGER.info("   ObjPrp:"+ pair.fIRI + " Val:" + pair.sIRI);
     * this.makeObjPrpOBetweenElements(sbAxInd.getIRI(), pair.fIRI,
     * pair.sIRI, false); }
     */
    LOGGER.info("   =Binding sbAx with dtp properties:");
    for (Iterator<PairOfIRI> it = this.getIteratorOfDataPropertyList(); it.hasNext(); ) {
      PairOfIRI pair = (PairOfIRI) it.next();
      LOGGER.info("   DtpPrp:" + pair.getFirst() + " Val:" + pair.getFirst());
      /*
       * Добавляем новый концеп-радиус т.к. старый (если существует)
       * связан с другим СКОС концептом, а договорились что у радиусов
       * будем генерить новый
       */
      OWLNamedIndividual newRange = upo.addDatatypeRangeToUPO(pair.getFirst(), pair.getFirst());
      upo.makeObjPrpOBetweenElements(sbAxInd.getIRI(), pair.getFirst(), newRange.getIRI(), false);
    }

    /* * Привязывем к субаксиоме ее именованные классы */
    for (ArrayList<IRI> prpAndCls : this.getBindedClassList()) {
      // Карта пар: свойство --> именованный класс (входящий в субаксиому
      // * и потому привязываемый к ней).
      IRI clsIndIRI = upo.getConceptOfSubAxiomFromUPObyIRIinHiddenLabel(prpAndCls.get(1));
      IRI prpIRI = prpAndCls.get(0);
      upo.makeObjPrpOBetweenElements(sbAxInd.getIRI(), prpIRI, clsIndIRI, false);
    }

    /* Привязываем субаксиомы */
    LOGGER.info("   =Binding sbAx with other Subaxiom:");
    for (Iterator<PrpIRIandSubAxiom> it = this.getIteratorOfprpFromAxList(); it.hasNext(); ) {
      PrpIRIandSubAxiom pair = (PrpIRIandSubAxiom) it.next();
      LOGGER.info("   PRP:" + pair.propIRI + " SbAx:" + pair.subax.getTitle());
      OWLNamedIndividual newSbAx = pair.subax.addRelatedSubAxiom(sbAxInd, pair.propIRI, upo);
      /*-
      OWLNamedIndividual newSbAx = this.addSubAxiom(pair.subax);
      this.makeObjPrpOBetweenElements(sbAxInd.getIRI(), pair.propIRI, newSbAx.getIRI(), false);
      */
      LOGGER.info("	Subaxiom:" + newSbAx.toString());
    }
    LOGGER.info("   ===END-bindingConceptOfComplexSubAxiomWithOther================");
  }
  /**
   * Добавление субаксиомы + привязка ее к передаваемому экземпляру, переданным отношением.
   *
   * @param ind
   * @param relationIRI
   * @return
   */
  @Override
  public OWLNamedIndividual addRelatedSubAxiom(
      OWLNamedIndividual mainSubaxInd, IRI relationIRI, UserPresenOnt upo) {
    OWLNamedIndividual sbaxInd = this.addSubaxiom(upo);

    /*
     * Соединяем левую и правую субаксиому отношением (по умолчанию
     * SKOS:Related)
     */
    upo.makeObjPrpOBetweenElements(mainSubaxInd.getIRI(), relationIRI, sbaxInd.getIRI(), false);
    return sbaxInd;
  }
  /**
   * Добавляет концепт, соответствующий субаксиоме, в ОПП.
   *
   * @param sbAx
   * @return
   */
  private OWLNamedIndividual addConceptOfComplexSubAxiomToUPO(UserPresenOnt upo) {

    /* Создаем концепт-субаксиому в ОПП */
    OWLNamedIndividual newConcept = upo.addConcept(upo.getNewComplexSbAxiomIRI(this).toString());

    /* Создаем соответвующую концепту переменную */
    String varSparql = this.getSparqlVar();

    /* Создаем соответвующий видимый Label - короткий IRI */
    String label = this.getTitle();

    /*
     * Создаем соответвующий фрагмент запроса (типа ?var RDF:type
     * "http:\\ontology#car)
     */
    String fragmentOfQuery = this.getSparqlQueryPart();

    // В вписываем инф-ю в SKOS-концепт
    OWLLiteral labelLiteral = upo.df.getOWLLiteral(label, "en");
    OWLLiteral fragmentOfQuerylLiteral = upo.df.getOWLLiteral(fragmentOfQuery, "en");
    // OWLTypedLiteral hiddenLabelLiteral =
    // upo.df.getOWLTypedLiteral(IRIasString, OWL2Datatype.XSD_ANY_URI);
    OWLLiteral varlLiteral = upo.df.getOWLLiteral(varSparql, "en");

    upo.addAnnotation(ConstantsOntConverter.RDF_LABEL, labelLiteral, (OWLEntity) newConcept);
    // upo.addAnnotation(SKOS_Hidden_label, hiddenLabelLiteral, (OWLEntity)
    // newConcept);
    upo.addAnnotation(
        ConstantsOntConverter.UPO_SPARQL_VARIABLE_LABEL, varlLiteral, (OWLEntity) newConcept);
    upo.addAnnotation(
        ConstantsOntConverter.UPO_SPARQL_QUERY_FRAGMENT_LABEL,
        fragmentOfQuerylLiteral,
        (OWLEntity) newConcept);

    return newConcept;
  }