问题标签 [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.
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 方面的问题。
python - 推理后本体中的冗余超类(owlready)
我试图详细了解本体的rector-normalization-technique。我使用owlready来实现示例。
文章建议有一个断言的单继承结构,并通过推理引入多继承。例如,它使用的类为Protein
,Insulin
和Protein_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é,推断的类结构不包含这种冗余关系,如下所示:
有没有一种(规范的)方法来摆脱这种多余的子类关系?
或者,为什么我对多余的怀疑是错误的?
此问题的代码(另请参阅此笔记本的输出):
owl - 从知识图中获取联合实体
知识图中存在的一些实体/类对它们执行了操作,例如“联合”、“交集”等。下面是一个本体文件,它在其各种类上有很多联合操作。
本体->链接
问题:我想提取所有涉及同一个联合操作的类。例如,如果 A、B 和 C 类与联合操作相关联。我希望他们在一起。
到目前为止尝试过:我尝试过使用 rdflib 并经历了所有的三元组。但是没有一个三元组包含联合信息,即使文件中有联合操作。
我也尝试过 owlready2,它有一个列出所有不相交类的方法,但没有获得类联合的功能。
如果有一种方法可以让类参与特定的联合操作,那将是非常有帮助的。
PS:我在我的项目中使用 python
owl - 从命令行进行 OWL 推理,依赖最小
我有一个 rdf/xml 语法的 OWL 文件,其中包含一个断言的本体。我想应用 OWL DL 推理器来推导额外的公理。我知道我可以在 protegé 中打开文件并在那里应用推理器。但是,我寻找命令行解决方案,因为我想在脚本中自动化该过程。
我知道owlready2附带了推理器 Pellet 和 Hermite,它们作为二进制文件 ( .jar
) 包含在内,但它们似乎已经过时了(参见例如这个 repo),因为 Pellet 3.0 已经成为封闭源代码。
我尝试安装https://github.com/Galigator/openllet但未能在我的机器上构建它。
是否有任何可用的(首选 FLOSS 许可的)OWL DL 推理器,可以通过命令行轻松安装和应用?
python - 使用连续 load() 后出现 OwlReady2 错误
一直在使用 owlready2 来解析多个输入 OWL 本体。问题是:每次尝试加载第二个本体时都会出错。如果我只加载一个,一切正常。每当我尝试加载第二个时,我都会收到与 owlready load() 函数相关的错误:
相关信息:
- 在我的机器上,我可以做尽可能多的负载并且工作正常
- 仅当将我的代码移植到我部门的 linux 服务器以进行部署时,才会发生此错误。
有什么建议吗?
python - Owlready:Thing 的子类在不同于 default_world 的世界中?
我有以下代码(最小示例):
导致[onto0.Animal]
. 换句话说,在新世界w1
中定义的类不被识别为 的子类Thing
,尽管被这样定义。
→ 那么,我怎样才能获得在非默认世界中定义的子类?
python - Owlready:如何持久更改 base_iri 以使其保存?
如果我更改base_iri
本体的属性,则此更改在保存到文件后会丢失。如何更改 base_iri 以使此更改是永久性的?
自包含示例:
这输出
但我想要输出