2016-05-06 2 views
0

У меня есть небольшая онтология с людьми. Некоторые из этих людей должны быть связаны друг с другом через симметричный ObjectProperty.Как синхронизировать разум в OWLAPI

Мне нужно использовать аргумент Pellet, чтобы он мог синхронизировать и прикреплять симметричные ObjectProperty к людям.

Я использую OWLAPI для создания онтологии. Мой код для создания ObjectProperty является:

// create the OWLObjectProperty isLinkedTo 
OWLObjectProperty isLinkedTo = factory.getOWLObjectProperty(IRI.create(ontologyIRI + "#" +hasLinkStr)); 
// create a set for the axioms (OPAS - Obj.Prop.Axioms Set) 
Set<OWLAxiom> isLinkedOPAS = new HashSet<OWLAxiom>(); 
// add the OWLObjectProperty isLinkedTo to the set isLinkedOPAS 
OWLNamedIndividual prevNamedInd = factory.getOWLNamedIndividual(prevIndividual, pm); 
isLinkedOPAS.add(factory.getOWLSymmetricObjectPropertyAxiom(isLinkedTo)); 
//setting the object property for the current (namedInd) and previous (prevNamedInd)individuals 
isLinkedOPAS.add(factory.getOWLObjectPropertyAssertionAxiom(isLinkedTo, namedInd, prevNamedInd)); 
manager.addAxioms(ontology, isLinkedOPAS); 

Особи создаются один за другим. Каждый следующий человек isLinkedTo предыдущий с симметричным свойством.

Затем я начинаю рассуждающий, но я не уверен, если я делаю это в правильном направлении:

OWLReasoner reasoner = reasonerFactory.createReasoner(ontology, config); 
// I am not sure which of these commands is necessary for checking the ObjectProperty assertions 
reasoner.precomputeInferences(); 
reasoner.precomputeInferences(InferenceType.OBJECT_PROPERTY_ASSERTIONS); 
reasoner.precomputeInferences(InferenceType.OBJECT_PROPERTY_HIERARCHY); 
boolean consistent = reasoner.isConsistent(); 
System.out.println("Consistent: " + consistent); 

Когда я открываю эту онтологию в Protege, он показывает мне человек, но не «подключен "симметрично с ObjectProperty isLinkedTo:

enter image description here

Это показывает правильный путь только после бега мыслителя в Protege:

enter image description here

Итак, вопрос: что я должен написать в коде, чтобы получить онтологию, где свойство объекта синхронизируется по мыслителю?

ответ

1

Эти три линии:

reasoner.precomputeInferences(); 
reasoner.precomputeInferences(InferenceType.OBJECT_PROPERTY_ASSERTIONS); 
reasoner.precomputeInferences(InferenceType.OBJECT_PROPERTY_HIERARCHY); 

Может быть заменен:

reasoner.precomputeInferences(InferenceType.OBJECT_PROPERTY_ASSERTIONS, 
           InferenceType.OBJECT_PROPERTY_HIERARCHY); 

Однако для большинства рассуждений это не отличается от:

reasoner.precomputeInferences(InferenceType.values()); 

Для того, чтобы см. выведенные аксиомы без использования аргументатора, вы можете использовать org.semanticweb.owlapi.util.InferredPropertyAssertionGenerator:

InferredPropertyAssertionGenerator generator = new InferredPropertyAssertionGenerator(); 
Set<OWLAxiom> axioms = generator.createAxioms(factory, reasoner); 

Это обеспечит выведенные аксиомы добавить в онтологию.

Смежные вопросы