0

我在本地本体上使用 owlready2 python 模块。
我已经连接了一个 API 端点,以提交对此本体的查询。
我需要提交一些关于原始本体的查询和一些关于更新(带有推论)本体的查询。

当我使用该sync_reasoner()函数时,本体会根据 HermiT(即默认推理器)的推论进行更新。

我的问题是,推理器所做的推论在对附加函数的不同调用中仍然存在。

是否有强制重置推断属性的解决方法?

def function():
    onto = get_ontology("file:///path/file.owl").load()
    namespace = onto.get_namespace("http://namespace")
    do_operations_with_original_ontology()
    with namespace:
       sync_reasoner()
       do_operations_with_UPDATED_ontology()
       return None

谢谢你考虑我的问题,
阿吉里斯

4

1 回答 1

0

尽管我没有广泛使用 owlready2 的推理器功能,但我相信这与使用 owlready2 的任何本体更新相同。

基本上在 owlready2 中,要分离不同的本体或同一本体的不同版本(可能使用不同的命名空间),您需要将它们放在不同的“世界”中。语法在此处描述。

这是一些基于文档示例的代码,可让您了解语法

from owlready2 import *

world = World()
onto = world.get_ontology("http://test.org/onto.owl")

with onto:
    class Drug(Thing):
        pass
    class ActivePrinciple(Thing):
        pass
    class has_for_active_principle(Drug >> ActivePrinciple):
        pass
    class someActivePrinciple(ActivePrinciple):
        pass
    class MyDrug(Drug):
        has_for_active_principle = [someActivePrinciple] #this one has some property restriction

# let's separate the worlds
world2 = World()
onto2 = world2.get_ontology("http://test.org/onto.owl")

with onto2:
    class Drug(Thing):
        pass
    class ActivePrinciple(Thing):
        pass
    class has_for_active_principle(Drug >> ActivePrinciple):
        pass
    class someActivePrinciple(ActivePrinciple):
        pass
    class MyDrug(Thing): # not a subClass of Drug
        pass  # missing the has_for_active_principle restriction


# now we can save without mixing the ontologies
onto.save(file=r"c:\temp\owlready.rdf", format="rdfxml")
onto2.save(file=r"c:\temp\owlready2.rdf", format="rdfxml") 

请注意,目前存在一个无法直接保存“世界”的错误,只能保存本体,但该错误已在开发版本中得到纠正。见owlready论坛相关讨论

于 2018-10-01T13:16:51.833 回答