使用 OWL 本体通过推理进行类传播

问题描述

我正在尝试编写一个本体,它将在连接的节点之间传播某些类。这种连接可以由任何属性完成。传播应该在这属性的域的方向上。

例如:

Node A -(any property)-> Node B
Node B -(rdfs:type)-> Sensitive Element

在这里我们可以看到两个节点 Node ANode B 由某个属性 any property 连接。 Node BSensitive Element。通过连接到敏感元素 Node B,我想推断 Node A 也是敏感元素:

Node A -(rdfs:type)-> Sensitive Element

那个三元组就是我要推断的那个三元组。你可以看到我已经在 Sensitive Element 的域的方向上传播了 any property 类。

是否有可能编写一个能够实现这种三元推理的 OWL 本体?

额外信息:

  • 作为推理引擎,我使用 Apache Jena 及其所有认设置
  • 为了方便起见,我想通过推理而不是 SPARQL 查询获得这样的结果

解决方法

如果您的知识库中有一对个体 tsconfig.json:NodeA,那么您可以推断:

:NodeB

假设你的规则成立,并且存在敏感元素,那么每件事都是敏感元素。这可能不是您想要的。

OWL 本体告诉您有关它所描述的宇宙的一些信息,但它没有定义宇宙。这意味着,如果您不描述 A 和 B 之间的关系,并不意味着它们之间没有关系。事实上,根据 OWL 语义的定义方式,任何 2 个实体之间总是存在关系。即使 :NodeA owl:topObjectProperty :NodeB . 在 OWL 中不存在(在 OWL 1 中就是这种情况),A 和 B 之间也可能存在未命名的关系。

您最可能想要的是表达仅使用命名属性的规则。为此,您可以使用 SPARQL 构造,或基于 RDFS 的规则语言。

另一种选择是为每个命名属性定义一个公理。这些公理可以很容易地以编程方式添加。准确地说,对于每个命名属性 owl:topObjectProperty,添加:

ppp

这样做的好处是您可以调整哪个属性使事物敏感。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...