0

如果我们将一个变量放在 GenericRuleReasoner 的头部,而该变量没有出现在规则的主体中,会发生什么?

例如,如果我们有以下规则:

rule1: (?x rdf:type :Person) -> (?y :father ?x)

规则说每个人都有一个父亲。假设我们有一个三元组:a rdf:type :Person ,推理器在这里表现如何?它会创建一个带有空白节点的新三元组_x :father :a吗?

4

1 回答 1

1

我认为它会抱怨这一点。毕竟,它是模棱两可的:你的意思是“有一个?y这样的......”还是“对于任何?y......”?

从您所说的很明显,您期望前者,即存在版本,因为这就是引入 bNode 所做的。所以试试:

rule1: makeTemp(?y), (?x rdf:type ex:Person)  -> (?y ex:fatherOf ?x)

或者

rule1: makeInstance(?y, ex:father, ?x), (?x rdf:type ex:Person) -> (?y ex:fatherOf ?x)

后者会给你一个一致的父节点,而前者只是引入一个bNode。

于 2014-09-22T13:39:25.057 回答