我想以编程方式在一致的本体中获得对推断公理的解释,就像在 Protégé UI 中可以做的那样。我找不到任何直接的方法。我找到了owlexplanation repo,但我无法终生解决依赖问题来设置owlexplanation
环境。我还浏览了有关解释的 owlapi 的javadoc(以完全避免其他 repo),但除了浏览 Java 源代码已经看到的内容之外,我没有看到任何有用的东西。
我曾想过简单地否定推断的公理,以通过不一致来获得解释,但我更喜欢更干净的东西,而且我不确定这种方法是否正确。
其他(可能)有用的上下文:
- 几年前我使用过一些 Java,但我现在主要使用 Python(我尝试将 OWL API 与 JPype 一起使用,而 OWL 通常与 Owlready2 一起使用)。
- 我正在使用 HermiT 推理器(再次通过 JPype)(根据 build.xml 文件,
最新稳定版本 1.3.8)。 - 我已经设法从 HermiT 源代码中获得了对我的设置中的不可满足性和不一致的解释,而没有
owlexplanation
遵循这个示例。 - 我掉进了兔子洞,想要制作一个可用的
.jar
文件owlexplanation
,以便将它添加到我的 JPype 类路径中。当我一开始无法构建 Java 项目时,我的计划就落空了。 - 我正在使用 Intellij IDE。
我将不胜感激任何见解或提示。
2022 年 1 月 6 日更新:
我决定用干净的头脑再次尝试owlexplanation
代码,所以这就是我所在的位置:
- 从 github 下载源代码并解压缩 zip。
- 启动 IntelliJ,而不是从“从现有源创建项目”,我单击“打开”并选择提取的目录。
- 我建立了这个项目,它成功了。
- 从 Maven 工具中,我成功运行干净、验证、编译和测试。
- 如果我运行“包”Maven 操作,它会抛出“环境变量 JAVA_HOME 未正确设置”的错误。问题是,如果我去 File>Project Structure,我看到 SDK 设置为 11,它不是空的。
- 此外,从
pom.xml
文件中我得到这些问题:Plugin 'org.apache.maven.plugins:maven-gpg-plugin:1.5' not found
Plugin 'org.sonatype.plugins:nexus-staging-maven-plugin:1.6.6' not found
2022 年 1 月 8 日更新:(尝试@Ignazio 的回答)
我创建了一个新的 IntelliJ 项目,并添加了 @Ignazio 提到的 Maven 依赖项(加上其他一些类似slf4j
等),我得到了一个工作示例(我认为)。转到我的主要项目(使用 JPype),我必须手动下载一些 .jar 以包含在类路径中(因为这里不能使用 maven)。这些是目前下载的:
caffeine-3.0.5.jar hppcrt-0.7.5.jar org.semanticweb.hermit-1.4.5.519.jar slf4j-api-1.7.32.jar
commons-rdf-api-0.5.0.jar javax.inject-1.jar owlapi-distribution-5.1.9.jar slf4j-nop-1.7.32.jar
google-collect-1.0.jar owlexplanation-5.0.0.jar
接下来,NullPointerException
在尝试使用时会抛出a loadOntologyFromOntologyDocument()
。我已尝试按照此处的建议重新下载 jar ,但仍然存在异常。可能是缺少一些 .jar 吗?我根据NoClassDefFoundError
将发生的抛出下载了它们。
这发生在一个pizza.owl
可以正常工作的通用文件中。
编辑:我曾经mvn dependency:copy-dependencies -DoutputDirectory=OUTPUT_DIR
获取依赖项并使用 OUTPUT_DIR 作为类路径,但NullPointerException
它已经消失了,所以看来我确实缺少一些 .jar 文件。
作为记录,然后我遇到了其他问题(gen.getExplanations()
抛出NoSuchMethodError
错误),但我没有更多时间来调试它。我将抛弃 JPype,不管它多么方便,只需从 Python 中调用 Java,使用subprocess
. 这些是(我猜)Jpype 问题,所以我接受 Ignazio 的回答,因为它解决了我的 Java/OWL API/owlexplanation 方面的问题。