重置sync_reasoner推论

时间:2018-09-22 18:54:11

标签: python owlready hermit

我正在本地本体上使用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

感谢您考虑我的问题,
银杏叶

1 个答案:

答案 0 :(得分:0)

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

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

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

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 forum relevant discussion