我正在本地本体上使用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
感谢您考虑我的问题,
银杏叶
答案 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