在Python中使用Hermit reasoner对本体进行一致性检查

在Python中使用Hermit reasoner对本体进行一致性检查,python,ontology,reasoner,owlready,Python,Ontology,Reasoner,Owlready,我正在使用用于python的OWLReady2API加载一个本体,并使用sync_reasoner()函数检查该本体的一致性。但它似乎没有检查本体的一致性。虽然有一个错误,但它没有显示任何内容!知道如何使用owlready2或任何其他api检查python中本体的一致性吗 以下是我的小代码: from owlready2 import * onto = get_ontology("test.owl") sync_reasoner() 这是我得到的结果: 猫头鹰2*运行隐士。。。 java-X

我正在使用用于python的OWLReady2API加载一个本体,并使用sync_reasoner()函数检查该本体的一致性。但它似乎没有检查本体的一致性。虽然有一个错误,但它没有显示任何内容!知道如何使用owlready2或任何其他api检查python中本体的一致性吗

以下是我的小代码:

from owlready2 import *
onto = get_ontology("test.owl")
sync_reasoner()
这是我得到的结果:

  • 猫头鹰2*运行隐士。。。 java-Xmx2000M-cp C:\Users\44999038\AppData\Local\Programs\Python\Python36-32\lib\site packages\owlready2\hermit;C:\Users\44999038\AppData\Local\Programs\Python\Python36-32\lib\site packages\owlready2\hermit\hermit.jar org.semanticweb.hermit.cli.CommandLine-C-O-D-Ifile:///C:/Users/44999038/AppData/Local/Temp/tmptmcc_a79
  • 猫头鹰2*隐士花了0.48622655868530273秒
本体:

我的修改代码:

from owlready2 import *

onto = get_ontology("test.owl")
with onto:sync_reasoner()
onto.save()
我得到的输出owl文件:


您显示的输出仅仅是OWLReady从命令行调用HermiT reasoner的输出。因此,为什么“输出”是相同的

您需要的是分类后的推理结果。根据,您可以将推断直接指向文件,或从类中获取结果,如中所示


不明显的是,如何确定本体是否不一致。我能找到的最好结果是,您需要搜索推理结果,如果您能找到一个等价于
owl:Nothing
的类,那么您的本体是不一致的

您显示的输出仅仅是OWLReady从命令行调用HermiT reasoner的输出。因此,为什么“输出”是相同的

您需要的是分类后的推理结果。根据,您可以将推断直接指向文件,或从类中获取结果,如中所示


不明显的是,如何确定本体是否不一致。我能找到的最好结果是,您需要搜索推理结果,如果您能找到一个等价于
owl:Nothing
的类,那么您的本体是不一致的

基本上我错过了两件重要的事情

  • 我将.save()改为.save(“test\u t1.owl”)。虽然可以只放在.save()上,但放在.save(“test_t1.owl”)上会将输出保存在不同的文件中

  • 提到源本体时,我缺少了load()函数 onto=get\u ontology(“文件路径”)。load() 此文件路径可以是URL(如“”)或本地目录路径“C:\User\Desktop\test.owl”

  • 我的工作代码如下:

    from owlready2 import *
    import owlready2
    
    #owlready2.JAVE_EXE="C:\\Program Files\\Java\\jdk1.8.0_144\\bin\\java.exe"
    onto_path.append("C:\\User\\Desktop")
    onto = get_ontology("test.owl").load()
    #inferred_onto = get_ontology("http://test.org/my_inferrences.owl";)
    with onto: sync_reasoner()
    onto.save("test_t1.owl")
    

    基本上,我错过了两件重要的事情

  • 我将.save()改为.save(“test\u t1.owl”)。虽然可以只放在.save()上,但放在.save(“test_t1.owl”)上会将输出保存在不同的文件中

  • 提到源本体时,我缺少了load()函数 onto=get\u ontology(“文件路径”)。load() 此文件路径可以是URL(如“”)或本地目录路径“C:\User\Desktop\test.owl”

  • 我的工作代码如下:

    from owlready2 import *
    import owlready2
    
    #owlready2.JAVE_EXE="C:\\Program Files\\Java\\jdk1.8.0_144\\bin\\java.exe"
    onto_path.append("C:\\User\\Desktop")
    onto = get_ontology("test.owl").load()
    #inferred_onto = get_ontology("http://test.org/my_inferrences.owl";)
    with onto: sync_reasoner()
    onto.save("test_t1.owl")
    

    当然,owlready2必须公开OWLReasoner::isConsistent()方法。如果本体是一致的,那么该方法返回true。这也是我的想法,但不,事实并非如此!它实际上只是一个围绕命令行HermiT接口子集的Python包装器!当然,owlready2必须公开OWLReasoner::isConsistent()方法。如果本体是一致的,那么该方法返回true。这也是我的想法,但不,事实并非如此!它实际上只是一个围绕命令行HermiT接口子集的Python包装器!非常感谢。我按照你的指示做了,但没能得到想要的结果。它给了我一个空的owl文件。我的python代码:
    from owlready2 import*to=get_ontology(“test.owl”)with-to:sync_reasoner()on.save()
    ,我得到了一个如下的owl文件:
    无论如何,非常感谢您的帮助。因为OWLReady从命令行调用HermiT,您可以直接从命令行使用HermiT,并以这种方式对其进行调试,检查输出并确定如何从OWLReady解析输出。我确实尝试过阅读OWLReady代码,但我对Python的了解有限。坦白说,如果这是我的选择,我宁愿使用Java OWL API,我认为它有一个更优雅的API。谢谢。我按照你的指示做了,但没能得到想要的结果。它给了我一个空的owl文件。我的python代码:
    from owlready2 import*to=get_ontology(“test.owl”)with-to:sync_reasoner()on.save()
    ,我得到了一个如下的owl文件:
    无论如何,非常感谢您的帮助。因为OWLReady从命令行调用HermiT,您可以直接从命令行使用HermiT,并以这种方式对其进行调试,检查输出并确定如何从OWLReady解析输出。我确实尝试过阅读OWLReady代码,但我对Python的了解有限。坦白说,如果这是我的选择,我宁愿使用javaowlapi,我认为它有一个更优雅的API。