On 12/11/13 23:13, Miguel Bento Alves wrote:
> Dave,
>
> "Normally you would have other rules which extract the
> pieces of the functors that you want as normal triples (e.g. back into
> an n-ary relationships using bNodes) for query or access them
> programmatically.
> “
>
> I can’t find out how to implement a bNode. Can you give a short example,
> please?
>
>
> Is something like this:
> (?x fam:executeP01 ?a) <-
> (?x fam:p01 certainty(?y, ?c)),
> (?a fam:object ?y),
> (?a fam:confidence ?c),
> makeTemp(?a).
>
> Or this:
>
> (?a fam:object ?y),
> (?a fam:confidence ?c),
> (?x fam:executeP01 ?a) <-
> (?x fam:p01 certainty(?y, ?c)),
> makeTemp(?a).
Those seem to be intended to do different things so it's hard to be sure
which is intended but probably your mean the second one, except it isn't
legal. Backward rules only have a single head (left hand side) in Jena.
Assuming that's the version you want then to transform that into three
rules and use makeInstance or makeSkolem to ensure each rule creates the
same bNode:
(?x fam:executep01 ?a) <-
(?x fam:p01 certainty(?v, ?c)), makeInstance(?x, fam:executep01, ?a) .
(?a fam:object ?v) <-
(?x fam:p01 certainty(?v, ?c)), makeInstance(?x, fam:executep01, ?a) .
(?a fam:confidence ?c) <-
(?x fam:p01 certainty(?v, ?c)), makeInstance(?x, fam:executep01, ?a) .
Dave
> On 12/11/13 18:29, "Dave Reynolds" <[email protected]> wrote:
>
>> On 12/11/13 15:13, Miguel Bento Alves wrote:
>>> Dave,
>>>
>>> "Alternatively, Jena rules has the notion of a "functor" (bad name)
>>> which
>>> is essentially a structured literal. So you can represent your Y/C pairs
>>> as certainty(Y,C) and write rules which generate and match triples whose
>>> object is a certainty(?x,?y) pair"
>>>
>>>
>>>
>>> You are saying something like:
>>> (?x exa:p1 certainty(?y, ?c)) <- (?x exa:p11 certainty(?y, ?c)).
>>>
>>> (?x exa:p1 certainty(?y, ?c)) <- (?x exa:p12 certainty(?y, ?c)).
>>>
>>> (?x exa:p11 certainty(exa:o1, 0.8)) <- (?x exa:qvalue ?v),
>>> lessThan(?v,
>>> 10).
>>>
>>> (?x exa:p12 certainty(exa:o2, 0.7)) <- (?x exa:qvalue ?v), ge(?v,
>>> 100).
>>>
>>>
>>> ?
>>>
>>> Is this possible?
>>
>> Yes. For example the rules for the OWL rule reasoner use this for
>> brevity and a bit of efficiency. They glue the OWL RDF triples that
>> make up restrictions into a functor, then make deductions on the basis
>> of those functors, the functors are an intermediate step only.
>>
>>> How can I invoke a "structured literal” in a Sparql
>>> command?
>>
>> You can't (other than as a literal with an odd data type), they are a
>> non-standard datatype, which is why by default they are hidden from
>> external access. Normally you would have other rules which extract the
>> pieces of the functors that you want as normal triples (e.g. back into
>> an n-ary relationships using bNodes) for query or access them
>> programmatically.
>>
>> [I'm not sure this whole mechanism was worth it in retrospect, and if
>> designing a new rule engine I wouldn't include it but there are no plans
>> to remove it.]
>>
>> Dave
>>
>>>
>>> MBA
>>>
>>> On 12/11/13 14:31, "Dave Reynolds" <[email protected]> wrote:
>>>
>>>> On 12/11/13 11:54, Miguel Bento Alves wrote:
>>>>> Dear Dave,
>>>>>
>>>>> Can I express myself in Prolog?
>>>>>
>>>>> I want something like:
>>>>>
>>>>> v(s1, 8).
>>>>> v(s2, 120).
>>>>>
>>>>> p1(X, Y, C):-
>>>>> p11(X, Y, C).
>>>>>
>>>>>
>>>>> p1(X, Y, C):-
>>>>> p12(X, Y, C).
>>>>>
>>>>>
>>>>> p11(X, o1, 0.8):-
>>>>> v(X, V),
>>>>> V < 10.
>>>>>
>>>>>
>>>>> p12(X, o1, 0.7):-
>>>>> v(X, V),
>>>>> V >= 100.
>>>>>
>>>>>
>>>>> p1(s1, Y, C)?
>>>>> Y = o1, C = 0.8
>>>>>
>>>>> p1(s2, Y, C)?
>>>>> Y = o1, C = 0.7
>>>>>
>>>>>
>>>>>
>>>>> In best of my knowledge, is not possible what I want. But I¹m new in
>>>>> Jena
>>>>> and perhaps there are a solution that I can¹t figure out. I think that
>>>>> is
>>>>> not possible because I need a quad: Subject, Property, Object,
>>>>> Confidence.
>>>>> I tried with blank nodes but I didn¹t had success.
>>>>
>>>> If that's really what you want then that is more or less possible,
>>>> however I think you'll find you need more.
>>>>
>>>> The issue is that in your example there is no overlap of rules. So p11
>>>> and p12 never occur together, indeed for values of V between 10 and 99
>>>> there's no value for p1. Normally once you have uncertainty measures
>>>> you
>>>> find cases where there are multiple routes to a conclusion, each of
>>>> which contributes some confidence/certainty/belief/whatever. In which
>>>> case you need to trace out all the possible routes and combine the
>>>> confidence measures from each route, which in turn requires dependency
>>>> assumptions. If that's where you are headed them I would start with a
>>>> tool designed for that job, not start with a rule based system and hope
>>>> to extend it.
>>>>
>>>> However, if there are *really* no overlaps, and only ever a single
>>>> deduction path for a single conclusion, and that won't change, then you
>>>> could do something in Jena.
>>>>
>>>> There are two options for handling n-ary relations in Jena rules.
>>>>
>>>> First you can represent them as groups of triples. To deduce an
>>>> instance
>>>> of an n-ary relationship from a rule then you need to create a bNode to
>>>> represent the instance. For this you can use makeTemp (which a guard to
>>>> prevent multiple instantiation) or makeSkolem. The latter is probably
>>>> the better choice.
>>>>
>>>> Alternatively, Jena rules has the notion of a "functor" (bad name)
>>>> which
>>>> is essentially a structured literal. So you can represent your Y/C
>>>> pairs
>>>> as certainty(Y,C) and write rules which generate and match triples
>>>> whose
>>>> object is a certainty(?x,?y) pair. By default these literals are kept
>>>> internal to the inference engine but there is an option to make them
>>>> visible to external queries (PROPenableFunctorFiltering).
>>>>
>>>> Dave
>>>>
>>>>
>>>>>
>>>>> MBA
>>>>>
>>>>>
>>>>> On 12/11/13 11:19, "Dave Reynolds" <[email protected]> wrote:
>>>>>
>>>>>> Depending on exactly what semantics you want for confidence
>>>>>> coefficients
>>>>>> then you probably want to look at a Bayesian network software.
>>>>>>
>>>>>> Dave
>>>>>>
>>>>>> On 12/11/13 09:04, Miguel Bento Alves wrote:
>>>>>>>
>>>>>>>
>>>>>>> I want to introduce a confidence coefficient in my rules. For
>>>>>>> instance,
>>>>>>> in
>>>>>>> the example below, let's consider that p11 has a confidence
>>>>>>> coefficient
>>>>>>> of
>>>>>>> 0.8 while p12 has a confidence coefficient of 0.7. When ?x exa:p1 ?y
>>>>>>> happens
>>>>>>> I want to know the confidence of this conclusion. Any ideas? I have
>>>>>>> been
>>>>>>> study but I couldn't figure out a good solution.
>>>>>>>
>>>>>>> (?x exa:p1 ?y) <- (?x exa:p11 ?y).
>>>>>>>
>>>>>>> (?x exa:p1 ?y) <- (?x exa:p12 ?y).
>>>>>>>
>>>>>>> (?x exa:p11 exa:o1) <- (?x exa:qvalue ?v), lessThan(?v, 10).
>>>>>>>
>>>>>>> (?x exa:p12 exa:o2) <- (?x exa:qvalue ?v), ge(?v, 100).
>>>>>>>
>>>>>>> MBA
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>
>>>
>>>
>>
>
>