Сбросьте выводы 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 актуальное обсуждение

Другие вопросы по тегам