java - 耶拿本体模型的只读文件实例

标签 java jena ontology

我正在使用 Jena Framework 阅读本体。我有一个包含实例和本体导入的文件(我在另一个文件中有)。这个本体有几个实例,但我只想在模型中读取我的实例文件中包含的实例,而不是本体文件中的实例。

我找到了这个方法:

Model base = myOntModel.getBaseModel();

但是这个方法返回 OntModel 中的所有内容......有什么办法吗?例如,读取完整模型然后删除我不想要的实例?或者,有什么方法可以在模型中区分本体的实例和不在本体中的实例吗?

最佳答案

加载实例本体之前

如果您阅读您的模型,但不处理导入,您将看不到导入本体中声明的任何实例。你仍然会有与你的本体相对应的本体对象,你仍然会有三元组

yourOntology owl:imports importedOntology

但是您不会拥有来自importedOntology 的三元组。好像是给OntModel.setDynamicImports打的电话(当然,使用 false)在调用读取文件之前应确保您不处理这些导入。

加载实例本体后

如果出于某种原因您无法阻止 OntModel 加载导入(从而使它们从实例本体中可见),您可以利用 Jena 将本体导入存储为子模型的方式一个 OntModel。您可以使用 OntModel.listSubModels 检查 OntModel 的子模型.当您确定由于 owl:imports 语句而存在的那个时,您可以使用 OntModel.removeSubModel将其从 OntModel 中删除。

检查实例是否在 BaseModel 中

如果由于某种原因上述两种方法都不适合你(但我很确定至少其中一种应该),而你仍然对这个问题感兴趣

is there any way to differentiate in the model between the instances of the ontology and those that are not in the ontology?

答案是“是的,你可以做到”。有两种方法,OntModel.isInBaseModel(Statement)OntModel.isInBaseModel(RDFNode)这将告诉您给定的 Statement 或 RDFNode 是否出现在基本模型中。当然,某些东西可能出现在两者中,所以即使 isInBaseModel(someIndividual) 对于 someIndividual 是真的,它并不一定意味着 someIndividual 在实例本体中声明;它可能已在导入本体中声明,但在导入本体中也提及

关于java - 耶拿本体模型的只读文件实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17292675/

相关文章:

java - 如何在java中创建一个自动关闭的消息框

java - JENA RDF/XML 格式 rdfs 示例

java - 如何使用 SPARQL 查询 SUMO 本体

rdf - 为什么将析取添加到 OWL EL 会使其计算更复杂?

java - JAX-WS 编码错误。 SomeClassV1R5 无法转换为 SomeClass 的目标类型

java - 如何为多模块 Maven 项目的每个模块创建自包含(独立)jar

java - 使用 Virtuoso 设置 RDF 本体

validation - 如何使用 RDF 模式验证 RDF

rdf - Schema.org 创建者与作者属性

运行 JFlex 生成的词法分析器时出现 Java 错误