【问题标题】:Consistency checking using Hermit reasoner in Python for an Ontology在 Python 中使用 Hermit 推理器对本体进行一致性检查
【发布时间】:2018-12-11 08:35:11
【问题描述】:

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

这是我的小代码:

from owlready2 import *
onto = get_ontology("test.owl")
sync_reasoner()

这是我得到的输出:

  • Owlready2 * 正在运行 HermiT... 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 -I file:///C:/Users/44999038/AppData/Local/Temp /tmptmcc_a79
  • Owlready2 * HermiT 耗时 0.48622655868530273 秒

本体:

我修改后的代码:

from owlready2 import *

onto = get_ontology("test.owl")
with onto:sync_reasoner()
onto.save()

我得到的输出 owl 文件:

【问题讨论】:

  • 当然 owlready2 必须公开 OWLReasoner::isConsistent() 方法。如果本体一致,则该方法返回 true。
  • 我也是这么想的,但不,不是这样的!它实际上只是命令行 HermiT 接口子集的 Python 包装器。
  • 终于成功了!

标签: python ontology reasoner owlready


【解决方案1】:

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

  1. 我使用了 on.save() 而不是 on.save("test_t1.owl")。虽然可以只放 on.save() 但 on.save("test_t1.owl") 将输出保存在不同的文件中。

  2. 我在提到源本体时缺少 load() 函数 on = get_ontology("文件路径").load() 此文件路径可以是 URL,例如“https://protege.stanford.edu/ontologies/pizza/pizza.owl”或本地目录路径“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")

【讨论】:

    【解决方案2】:

    您显示的输出仅仅是 OWLReady 从命令行调用 HermiT 推理器的输出。因此,“输出”的原因是相同的。

    你需要的是分类后的推理结果。根据documentation,您可以将推理定向到文件,或从您的类中获取结果,如this example 所示。

    不明显的是,如何判断本体是否不一致。我能找到的最好的是你需要搜索推理结果,如果你能找到一个相当于owl:Nothing的类,你的本体是不一致的。

    【讨论】:

    • 谢谢。我按照您的指示进行操作,但无法获得所需的输出。它给了我一个空的 owl 文件。我的python代码:from owlready2 import * onto = get_ontology("test.owl") with onto:sync_reasoner() onto.save()
    • 我得到一个这样的 owl 文件:<?xml version="1.0"?> <rdf:RDF xml:base="test.owl" xmlns="test.owl#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xsd="http://www.w3.org/2001/XMLSchema#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:owl="http://www.w3.org/2002/07/owl#"> <owl:Ontology rdf:about="test.owl"/> </rdf:RDF> 无论如何,非常感谢您的帮助。
    • 由于 OWLReady 从命令行调用 HermiT,您可以直接从命令行使用 HermiT 并以这种方式调试它并检查输出并找出如何解析 OWLReady 的输出。我确实尝试过浏览 OWLReady 代码,但我对 Python 的了解有限。
    • 坦率地说,如果是我的选择,我宁愿使用 Java OWL API,我认为它的 API 更优雅。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多