0

我有以下代码(最小示例):

import owlready2 as owr

# create ontology in the default_world
onto0 = owr.get_ontology("https://w3id.org/yet/undefined/onto0#")

with onto0:
    class Animal(owr.Thing):
        pass

# create a new world for a new ontology
w1 = owr.World()
onto1 = w1.get_ontology("https://w3id.org/yet/undefined/onto1#")

with onto1:
    class Plant(owr.Thing):
        pass

print(list(owr.Thing.subclasses()))

导致[onto0.Animal]. 换句话说,在新世界w1中定义的类不被识别为 的子类Thing,尽管被这样定义。

→ 那么,我怎样才能获得在非默认世界中定义的子类?

4

1 回答 1

0

写下问题后,我在11.7 节末尾的Ontologies with Python一书中找到了答案:

[...] OWL Thing 和 Nothing 类的 subclasses() 和 descendants() 方法假定它们是为 default_world 调用的(事实上,这些类被所有世界共享)。如果不是这种情况,则有必要将所需的世界作为参数传递[...]。

例如

print(list(owr.Thing.subclasses(world=w1)))
于 2022-03-01T17:15:43.290 回答