首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不返回注释和实例的OWLAPI

不返回注释和实例的OWLAPI
EN

Stack Overflow用户
提问于 2014-01-02 12:29:30
回答 1查看 414关注 0票数 1

在OWLAPI中,通过owl:imports语句导入的本体存在问题。问题是未检索和返回导入本体中包含的类和类注释的实例。

让我说我有本体室和本体建筑。

在本体的房间,然后我有以下的声明,应该是将建筑物本体加载到房间本体。

代码语言:javascript
复制
<owl:Ontology rdf:about="http://example.com/rooms.xml">
    <owl:imports rdf:resource="http://example.com/buildings.xml"/>
</owl:Ontology>

然后在OWLAPI中加载本体房间(其中应该自动包含建筑物)

代码语言:javascript
复制
manager = OWLManager.createOWLOntologyManager()
roomsOntology = manager.loadOntologyFromOntologyDocument(IRI.create("http://example.com/rooms.xml"))
reasoner = Reasoner.new(roomsOntology)
factory = manager.getOWLDataFactory()

在此之后,从建筑物本体检索类仍然可以正常工作:

代码语言:javascript
复制
buildingClass = factory.getOWLClass(IRI.create("http://example.com/buildings.xml#Building"))

当我想获得类构建的实例(这些实例的定义包含在导入的建筑物本体中)时,它将不返回任何内容:

代码语言:javascript
复制
instances = buildingClass.getIndividuals(roomsOntology)

变量“实例”现在是空的。

如果在建筑物本体中包含了此类类的定义,那么类注释也会出现同样的问题。

我能让它在以下情况下发挥作用:

  1. 我将实例定义直接移动到房间本体(这在生产中是不可能的,因为无论如何我将有两个分离的本体)。

  1. 我使用推理器类的函数(reasoner.getInstances(buildingClass, true)从这两种本体返回实例)

  1. 我把导入的本体传递给getIndividuals函数,而不是主程序本体(buildingClass.getIndividuals(manager.getImports(roomsOntology)))。

解决办法第一是不可能为我(这只是为了测试目的)。当我需要检索注释时,第2和第3条不起作用,因为不可能将多个本体传递给OWLClass.getAnnotations函数,而且推理者也没有获得注释的函数。

无论如何,我认为没有这些解决方案,一切都应该正常工作,因为所有本体,包括导入的本体,都是在manager.loadOntologyFromOntologyDocument函数开始时加载的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-02 22:56:49

问题是owlClass.getIndividuals(OWLOntology)不包括导入关闭。如果希望包含导入闭包,则需要使用另一种方法:

Set<OWLIndividual> getIndividuals(Set<OWLOntology> ontologies);

本体集可以是任意集合;若要使用导入闭包,请使用

ontology.getImportsClosure()

注意,这将返回,在所有情况下,只有个人断言是长的类。如果需要推理,您将需要使用推理器,正如您所提到的。

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

https://stackoverflow.com/questions/20883009

复制
相关文章

相似问题

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