2013-07-30 4 views
1

У меня есть две онтологии, фото 1 и индекс. Photo1 содержит утверждения ABox, а индекс содержит утверждения Tbox.Reasoner не возвращает экземпляров совы: Thing, но Abox содержит экземпляры

OWLOntologyManager manager = OWLManager.createOWLOntologyManager(); 
OWLOntology photo1 = manager.loadOntologyFromOntologyDocument(new File("files/ontologies/OBMA2/photo1.owl")); 
OWLDataFactory factory = manager.getOWLDataFactory(); 
reasoner = new FaCTPlusPlusReasonerFactory().createReasoner(photo1); 
reasoner = (FaCTPlusPlusReasoner) reasoner; 
System.out.println(reasoner.getInstances(factory.getOWLThing(), false)); 

Вышеприведенные напечатает:

Nodeset[ 
    Node(<http://www.semanticweb.org/noor/ontologies/2013/6/photo1.owl#photo1>), 
    Node(<http://www.semanticweb.org/noor/ontologies/2013/6/photo1.owl#photo1-tiger2>), 
    Node(<http://www.semanticweb.org/noor/ontologies/2013/6/photo1.owl#photo1-tiger1>) 
] 

Однако, сейчас, я загрузке Tbox и добавляя все аксиомы Abox из фото1, а затем получить экземпляры owl:Thing следующим образом:

OWLOntologyManager managerTbox = OWLManager.createOWLOntologyManager(); 
OWLOntology Tbox = manager.loadOntologyFromOntologyDocument(new File("files/ontologies/index.owl")); 
OWLDataFactory factoryTbox = manager.getOWLDataFactory(); 
OWLReasoner reasonerTbox = new FaCTPlusPlusReasonerFactory().createReasoner(Tbox); 

//adding the axioms from the photo1 abox to Tbox's abox 
managerTbox.addAxioms(Tbox, photo1.getABoxAxioms(true)); 
reasonerTbox = (FaCTPlusPlusReasoner) reasonerTbox; 
System.out.println(reasonerTbox.getInstances(factoryTbox.getOWLThing(), false)); 

Теперь, несмотря на то, что я добавил все аксиомы из ABox для фотошопа ABox в ABox TBox, я не получаю выход:

ответ

0

Я не являюсь пользователем OWL API, но я подозреваю, что то, что происходит, состоит в том, что аксиомы ABox, которые вы включаете во второй случай, не включают индивидуальные объявления для лиц, которые аксиомы говорить о, и что в результате аксиомы ABox игнорируются.

От источника OWLAPI, то ABoxAxiomTypes определяются как:

public static final Set<AxiomType<?>> ABoxAxiomTypes = new HashSet<AxiomType<?>>(
     Arrays.asList(CLASS_ASSERTION, SAME_INDIVIDUAL, 
       DIFFERENT_INDIVIDUALS, OBJECT_PROPERTY_ASSERTION, 
       NEGATIVE_OBJECT_PROPERTY_ASSERTION, 
       DATA_PROPERTY_ASSERTION, NEGATIVE_DATA_PROPERTY_ASSERTION, 
       DATATYPE_DEFINITION)); 

Я ожидаю, что если добавить фото1-х OWLDeclarationAxiom s первый (который он выглядит, как вы бы извлекать с помощью getAxioms(AxiomType<Declaration>), а затем добавить его ABoxAxioms, вы можете получить ожидаемые результаты.

1

Вы создаете аргумент буферизации с первым вызовом фабрики-основателя, а затем вы добавляете аксиомы в онтологию правильно, но разумник не увидит обновления до тех пор, пока вы звоните reasoner.flush().

Вы можете создать не-буферизующий аргумент с той же фабрикой (см. OWLReasonerFactory.createNonBufferingReasoner()), но это может иметь последствия для производительности, поскольку при каждом изменении может произойти переклассификация.