Сбросьте выводы sync_reasoner - PullRequest
       27

Сбросьте выводы sync_reasoner

0 голосов
/ 22 сентября 2018

Я использую 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

Спасибо, что рассмотрели мой вопрос,
Аргирис

1 Ответ

0 голосов
/ 01 октября 2018

Хотя я не использовал широко функциональные возможности 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 актуальное обсуждение

...