【问题标题】:semantic web rule use "all"语义网规则使用“全部”
【发布时间】:2015-05-03 02:43:12
【问题描述】:

假设我有以下陈述:

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')]

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

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

(?ap 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 'Yes。

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

问题已解决

感谢约书亚·泰勒。

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

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

【问题讨论】:

  • 不清楚你的规则应该是什么意思。 ?a p all(?b) 应该是什么意思? if ?b v 1 then ?a q 'Yes' 是可以理解的。

标签: jena semantic-web jena-rules


【解决方案1】:

但是我得到了 A,B,C eg:q 'Yes',这是错误的。

你在耶拿写的规则说

        对于任意两个人 X 和 Y,如果 (X p Y) 和 (Y v 1) 然后 (X q 'Yes')。

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

        (A p C), (C v 1) → (回答“是”)
(B p C), (C v 1) → (B q '是')
(C p B), (B v 1) → (C q '是')

你实际上想说的是:

        对于任何个体 X,如果对于每个个体 Y,(X p Y) 暗示 (Y v 1),那么 (X q '是')。

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

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

你真正想要捕捉的是:

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

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

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

#-- 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')

【讨论】:

  • 是的,我理解你的规则的含义。rule1 完美运行,但 rule2 不起作用。它返回一个(匿名节点,q,'Yes')语句。
  • 非常感谢。问题解决了。首先,这两个规则不能同时使用。rule2应该在rule1之后使用。而且,rule2 应该是 [rule2: (?s ?p ?o) noValue(?s, connectedToNonOne) -> (?s q 'Yes')]。
  • @JiamingLin 如果这回答了你的问题,你应该考虑accepting it
猜你喜欢
  • 1970-01-01
  • 2020-04-11
  • 2022-12-11
  • 2012-02-20
  • 1970-01-01
  • 1970-01-01
  • 2021-02-03
  • 1970-01-01
  • 2013-11-07
相关资源
最近更新 更多