语义网规则使用 "all"

semantic web rule use "all"

假设我有以下语句:

A p B, A p C, B p C  ( p is a symmetric property, i.e.  B p A, C p A and C p B)
A v 2, B v 1, C v 1,

我想使用规则来做类似的事情:

?a p all(?b)
if ?b v 1
than ?a q 'Yes'

这意味着你可以推断 (A q 'Yes'),但 B 不能,因为 B p A 和 A v 2(尽管 B p C 和 C v 1)。

[rule: (?a eg:p ?b), (?b eg:v 1) -> (?a eg:q 'Yes')]

我在耶拿使用了上面的规则,但是我得到了 A,B,C eg:q 'Yes',这是错误的。 任何帮助将不胜感激。

更新(最初作为答案发布)

(?a p all(?b))的意思是我想得到一个集合,这个集合中的所有?mem都满足(?a p ?mem)。并且所有成员必须满足 (?mem v 1) 才能推断 (?a q 'Yes').

例如,

A p B 和 A p C,所以我得到一个包含 (B, C) 的集合。因为 B 和 C v 1,所以 A q '是。

B p A 和 B p C,所以我得到一个集合(A,C),但是 A v 2,所以不能推断 B q 'Yes'。

问题已解决

感谢约书亚·泰勒。

首先,这两个规则不能同时使用time.Therule2应该在rule1之后使用。

而且,rule2 应该是 [rule2: (?s ?p ?o) noValue(?s, connectedToNonOne) -> (?s q 'Yes')].

but I got A,B,C eg:q 'Yes', which is wrong.

您在 Jena 中实际编写的规则说

对于任意两个个体 X 和 Y,if (X p Y) and (Y v 1) then (X q 'Yes').

根据您编写的规则,这是正确的,作者:

(A p C), (C v 1) 右箭头; (阿q'Yes')
(B p C), (C v 1) 右箭头; (Bq'Yes')
(C p B), (B v 1) 右箭头; (Cq'Yes')

您实际上想说的是:

对于任何个体 X,if 对于每个个体 Y,(X p Y) 意味着 (Y v 1),然后(Xq'Yes').

在一阶逻辑中,您的原始规则可以写为:

∀ x,y ([p(x,y) ∧ v(y,1)] → q(x,'yes')

您实际要捕获的是:

∀x[(∀y[p(x,y) → v(y,1)]) → q(x,'yes')]

这在 Jena 规则中更难捕获,因为要检查 (∀y[p(x,y) → v(y,1)]) 是否成立,Jena 所能做的就是检查是否有目前任何反例。如果后面加了一个,可能会出现错误的推论。

使用规则推理器中可用的内置函数,您可以使用 noValue and notEqual 执行以下操作:

#-- If an individual is disqualified by being
#-- connected to a something that is connected
#-- to something that is not equal to 1, then 
#-- add a connectedToNonOne triple.
[rule1: 
  (?x p ?y), (?y v ?z), notEqual(?z,1)
  ->
  (?x connectedToNonOne true)]

#-- Mark everything that is *not* disqualified
#-- with `q 'Yes'`.
[rule2:
  noValue(?x, connectedToNonOne)
  ->
  (?x q 'Yes')