如果我们将一个变量放在 GenericRuleReasoner 的头部,而该变量没有出现在规则的主体中,会发生什么?
例如,如果我们有以下规则:
rule1: (?x rdf:type :Person) -> (?y :father ?x)
规则说每个人都有一个父亲。假设我们有一个三元组:a rdf:type :Person
,推理器在这里表现如何?它会创建一个带有空白节点的新三元组_x :father :a
吗?
如果我们将一个变量放在 GenericRuleReasoner 的头部,而该变量没有出现在规则的主体中,会发生什么?
例如,如果我们有以下规则:
rule1: (?x rdf:type :Person) -> (?y :father ?x)
规则说每个人都有一个父亲。假设我们有一个三元组:a rdf:type :Person
,推理器在这里表现如何?它会创建一个带有空白节点的新三元组_x :father :a
吗?
我认为它会抱怨这一点。毕竟,它是模棱两可的:你的意思是“有一个?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。