首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Reasoner不返回owl:Thing的实例,但Abox包含实例

Reasoner不返回owl:Thing的实例,但Abox包含实例
EN

Stack Overflow用户
提问于 2013-07-31 00:43:37
回答 2查看 148关注 0票数 1

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

代码语言:javascript
复制
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));

上面的打印结果:

代码语言:javascript
复制
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的实例,如下所示:

代码语言:javascript
复制
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中,我仍然没有得到任何输出:

代码语言:javascript
复制
Nodeset[]
EN

回答 2

Stack Overflow用户

发布于 2013-07-31 04:06:17

我不是OWL API用户,但我怀疑发生的情况是,您在第二种情况中包含的ABox公理没有包括公理所讨论的个体的单独声明,因此,ABox公理被忽略了。

在OWLAPI源代码中,ABoxAxiomTypes被定义为:

代码语言:javascript
复制
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的OWLDeclarationAxiom(看起来你可以使用getAxioms(AxiomType)检索它,然后添加它的ABoxAxioms ),你可能会得到你所期望的结果。

票数 1
EN

Stack Overflow用户

发布于 2013-09-18 02:01:30

您在第一次调用推理程序工厂时创建了一个缓冲推理器;然后,您正确地将公理添加到了本体中,但是在您调用reasoner.flush()之前,推理器将看不到更新。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17952783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档