问题标签 [owlready]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
74 浏览

java - 一致 OWL 本体中的解释

我想以编程方式在一致的本体中获得对推断公理的解释,就像在 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)。这些是目前下载的:

接下来,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 方面的问题。

0 投票
0 回答
80 浏览

python - 推理后本体中的冗余超类(owlready)

我试图详细了解本体的rector-normalization-technique。我使用owlready来实现示例。

文章建议有一个断言的单继承结构,并通过推理引入多继承。例如,它使用的类为Protein,InsulinProtein_Hormone, Hormone_Role

断言的事实:

  • Insulin is_subclass_of Protein
  • Insulin plays_role Hormone_Role
  • Protein_Hormone相当于 ( Protein and plays_role owl:someValuesFrom Hormone_Role) (定义的类)

在推理器运行后,Insulin被正确识别为Protein_Hormone (预期结果)的子类。

然而,它仍然被归类为蛋白质的直接亚类。我认为这种关系是多余的,因为根据定义,每个实例都Protein_Hormone必须是 a Protein。另外,如果我应用 Protegé,推断的类结构不包含这种冗余关系,如下所示:

保护出口

有没有一种(规范的)方法来摆脱这种多余的子类关系?

或者,为什么我对多余的怀疑是错误的?

此问题的代码(另请参阅此笔记本的输出):

0 投票
0 回答
25 浏览

owl - 从知识图中获取联合实体

知识图中存在的一些实体/类对它们执行了操作,例如“联合”、“交集”等。下面是一个本体文件,它在其各种类上有很多联合操作。

本体->链接

问题:我想提取所有涉及同一个联合操作的类。例如,如果 A、B 和 C 类与联合操作相关联。我希望他们在一起。

到目前为止尝试过:我尝试过使用 rdflib 并经历了所有的三元组。但是没有一个三元组包含联合信息,即使文件中有联合操作。

我也尝试过 owlready2,它有一个列出所有不相交类的方法,但没有获得类联合的功能。

如果有一种方法可以让类参与特定的联合操作,那将是非常有帮助的。

PS:我在我的项目中使用 python

0 投票
2 回答
27 浏览

owl - 从命令行进行 OWL 推理,依赖最小

我有一个 rdf/xml 语法的 OWL 文件,其中包含一个断言的本体。我想应用 OWL DL 推理器来推导额外的公理。我知道我可以在 protegé 中打开文件并在那里应用推理器。但是,我寻找命令行解决方案,因为我想在脚本中自动化该过程。

我知道owlready2附带了推理器 Pellet 和 Hermite,它们作为二进制文件 ( .jar) 包含在内,但它们似乎已经过时了(参见例如这个 repo),因为 Pellet 3.0 已经成为封闭源代码。

我尝试安装https://github.com/Galigator/openllet但未能在我的机器上构建它。

是否有任何可用的(首选 FLOSS 许可的)OWL DL 推理器,可以通过命令行轻松安装和应用?

0 投票
0 回答
5 浏览

python - 使用连续 load() 后出现 OwlReady2 错误

一直在使用 owlready2 来解析多个输入 OWL 本体。问题是:每次尝试加载第二个本体时都会出错。如果我只加载一个,一切正常。每当我尝试加载第二个时,我都会收到与 owlready load() 函数相关的错误:

相关信息:

  1. 在我的机器上,我可以做尽可能多的负载并且工作正常
  2. 仅当将我的代码移植到我部门的 linux 服务器以进行部署时,才会发生此错误。

有什么建议吗?

0 投票
1 回答
8 浏览

python - Owlready:Thing 的子类在不同于 default_world 的世界中?

我有以下代码(最小示例):

导致[onto0.Animal]. 换句话说,在新世界w1中定义的类不被识别为 的子类Thing,尽管被这样定义。

→ 那么,我怎样才能获得在非默认世界中定义的子类?

0 投票
0 回答
7 浏览

python - Owlready:如何持久更改 base_iri 以使其保存?

如果我更改base_iri本体的属性,则此更改在保存到文件后会丢失。如何更改 base_iri 以使此更改是永久性的?

自包含示例:

这输出

但我想要输出