我编写了一个接口,例如给出了 Pizza 本体,它可以区分断言和推断的公理。例如,假设Class: Food SubClassOf: Thing
它会告诉你它是推断出来的。我的问题是,如果我有一个无法满足的类 TomatoTopping,并且我想知道Class: TomatoTopping SubClassOf: Nothing
是断言、推断还是没有,我会得到公理不存在的响应。虽然我可以在层次结构中的 Nothing 下看到 TomatoTopping。问题是什么?我不能查询这样的公理还是我的逻辑有缺陷?
这是识别Class: Food SubClassOf: Thing
但不识别的代码Class: TomatoTopping SubClassOf: Nothing
// parsing input
Set<OntologyAxiomPair> frame = parsingProcess(tool, input);
Iterator<OntologyAxiomPair> frameit = frame.iterator();
while (frameit.hasNext()) {
OntologyAxiomPair newPair = frameit.next();
OWLAxiom tempAx = newPair.getAxiom();
// the axiom type must be anything but declaration
if (!tempAx.isOfType(AxiomType.DECLARATION)) {
// get asseted and inferred axioms
Set<OWLAxiom> asserted = getOntology().getAxioms();
if (asserted.contains(tempAx)) {
Result = "System: this axiom is an asserted axiom.";
displayUserMessage(Result, asetBlue);
break;
}
// Use an inferred axiom generators
else
{
// Calling TrOWL
RELReasoner reasoner = relfactory.createReasoner(getOntology());
if(reasoner.isEntailed( tempAx)){
Result = "System: this axiom is an inferred axiom.";
displayUserMessage(Result, asetMagenta);
break;
}
}
}
}
我想我发现了问题所在。曼彻斯特语法解析器需要一个数据工厂。
OWLOntologyManager manager = inputOntology.getOWLOntologyManager();
this.dataFactory = manager.getOWLDataFactory();
由于经理没有被推理机分类,OWL:Nothing 不会出现。您知道一种对经理进行分类然后提取数据工厂的方法吗?