Сбросьте выводы sync_reasoner
Я использую Python-модуль owlready2 в локальной онтологии.
Я подключил конечную точку 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
Спасибо за рассмотрение моего вопроса,
Argyris
1 ответ
Хотя я не использовал широко функциональные возможности 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 актуальное обсуждение