1

我有两个本体,photo1 和 index。Photo1 包含 ABox 断言, index 包含 Tbox 断言。

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 并从 photo1 添加所有 ABox 公理,然后获取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));

现在,即使我已将 Photo1 的 ABox 中的所有公理添加到 TBox 的 ABox,我也没有得到任何输出:

Nodeset[]
4

2 回答 2

1

您正在通过第一次调用推理器工厂来创建缓冲推理器;那么您正确地将公理添加到本体中,但推理器在您调用reasoner.flush().

您可以使用相同的工厂创建一个非缓冲推理器(请参阅 参考资料OWLReasonerFactory.createNonBufferingReasoner()),但这可能会对性能产生影响,因为每次更改都可能会重新分类。

于 2013-09-17T18:01:30.073 回答
1

我不是一个 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));

我希望如果您首先添加 photo1 的OWLDeclarationAxioms(看起来您会使用 检索它getAxioms(AxiomType<Declaration>),然后添加它的 ABoxAxioms,您可能会得到您期望的结果。

于 2013-07-30T20:06:17.310 回答