OWLAPI不返回注释和实例

时间:2014-01-02 12:29:30

标签: semantic-web owl owl-api

在OWLAPI中,我遇到了通过owl:imports语句导入的本体问题。问题是导入的本体中包含的类和类注释的实例不会被检索和返回。

假设我有本体房和本体建筑。

在本体房间,我接下来的声明应该将建筑物本体载入房间本体。

<owl:Ontology rdf:about="http://example.com/rooms.xml">
    <owl:imports rdf:resource="http://example.com/buildings.xml"/>
</owl:Ontology>

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

manager = OWLManager.createOWLOntologyManager()
roomsOntology = manager.loadOntologyFromOntologyDocument(IRI.create("http://example.com/rooms.xml"))
reasoner = Reasoner.new(roomsOntology)
factory = manager.getOWLDataFactory()

之后从Buildings本体中检索一个类仍然按预期工作:

buildingClass = factory.getOWLClass(IRI.create("http://example.com/buildings.xml#Building"))

当我想获取类Building的实例时(这些实例的定义包含在导入的建筑物本体中),那么它什么都不返回:

instances = buildingClass.getIndividuals(roomsOntology)

变量'实例'现在为空。

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

我能够在以下情况下使其发挥作用:

  1. 我将实例定义直接移动到Rooms本体(这在生产中是不可能的,因为无论如何我将有2个独立的本体)
  2. 我使用Reasoner类的函数(reasoner.getInstances(buildingClass, true)返回两个本体的实例)
  3. 我通过导入的本体来获取单个函数而不是main(Rooms)本体(buildingClass.getIndividuals(manager.getImports(roomsOntology))
  4. 解决方法没有。 1是不可能为我做的(它仅用于测试目的)。当我需要检索注释时,2号和3号不起作用,因为无法将多个本体传递给OWLClass.getAnnotations函数,并且Reasoner也没有函数来获取注释。

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

1 个答案:

答案 0 :(得分:4)

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

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

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

ontology.getImportsClosure()

请注意,在所有情况下,这将仅返回声称对课程很长的个人。如果需要进行推理,则需要使用推理器,如上所述。