I¹m doing some tests with jena reasoner and I concluded, that I cannot have
a rule in the head of a forward rule. In a forward rule I only can have
assert data, not deducted data.

I¹m right? Why the reason?

In the example that I give below, we can rewrite the rule well to get the
same result. However, I have a situation in a project where I have:
c1, c2 -> c3, c4 - where c1 is a rule. I cannot rewrite in this form, c3, c4
<- c1, c2 because backward rules only can have one clause on the head. To
overcome this, I only see one solution, materialize c1.
Any other idea?

In the follow example, r2, r3, and r4 works fine but r5 doesn¹t work.

[r1: (?x exa:sportPartner ?y) <-
(?x exa:playSport ?z),
(?y exa:playSport ?z),
notEqual(?x, ?y)]

[r2: (?x exa:seaPartner ?y) <-
(?x exa:playSport ?s1),
(?y exa:playSport ?s2),
notEqual(?x, ?y), 
(?s1 rdf:type exa:SeaSport),
(?s2 rdf:type exa:SeaSport)]

[r3: (?x exa:seaPartner1 ?y) <-
(?x exa:sportPartner ?y),
(?x rdf:type exa:ManOfSea),
(?y rdf:type exa:ManOfSea)
]

[r4: (?x exa:playSport ?s1),
(?y exa:playSport ?s2),
notEqual(?x, ?y), 
(?s1 rdf:type exa:SeaSport),
(?s2 rdf:type exa:SeaSport) ->
(?x exa:seaPartner2 ?y)]

[r5: (?x exa:sportPartner ?y),
(?x rdf:type exa:SeaMan),
(?y rdf:type exa:SeaMan) ->
(?x exa:seaPartner3 ?y)]



Reply via email to