/** * Связывает концепт-субаксиому с другими концептами в ОПП. * * @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; }