Dave,

Will do.

The adding a model on top, solves the problem.  If I remove the line...

I will build test case.

Scott


On Fri, Nov 9, 2012 at 11:52 AM, Dave Reynolds <[email protected]>wrote:

> On 09/11/12 16:33, Scott Streit wrote:
>
>> Ok.  I got it.
>>
>>          model = ModelFactory.createInfModel(**model.getReasoner(),
>> model);
>>
>> Need to add one to re-create the model, which seems to re-fire the rules.
>> What is your understanding?
>>
>
> That is creating one InfModel on top of another which should not be needed.
>
> However, I can't follow you description of what you are doing.
>
> If you need help with this then please create a complete minimal test
> case. "Minimal" means just enough data and code to illustrate and test the
> issue, no more.  In particular, try to create a testcase without using your
> builtin in order to separate the issues about how you are driving the rules
> system from the issues about how you have implemented this
> application-specific builtin.
>
> Dave
>
>
>  On Fri, Nov 9, 2012 at 9:49 AM, Scott Streit <[email protected]>
>> wrote:
>>
>>  Very Strange.
>>>
>>> I made the change.
>>>
>>> Now when I ask for all of the statements for an indivudal "Beachely" that
>>> require the forward chain rule, I get the backward chain, but nothign
>>> from
>>> the previous rule.  In other words. when I ask, what groups is beachley
>>> part of, I get nothing.
>>>
>>> Now when I do a listStatements(), then the rule fires, and I get beachley
>>> is a member of the group, (backward chain rule), but I get none of the
>>> things that implies, (the first forward chain rule).
>>>
>>> So I get..
>>>
>>> [IndividualGetsGroupInterests:   (?x ie:memberOf ?y), (?y
>>> ie:hasGroupInterestOf ?z)  -> (?x ie:hasIndividualInterestOf ?z)]
>>>
>>> and when I ask for statements, it works.
>>>
>>> I only get
>>>
>>>
>>> [InferredMembership:  (?u ie:memberOf ?g)
>>>      <-  (?g ie:**mandatoryInterestsForGroupIncl**usion ?i)
>>>          (?i ie:helpsIndividualDefine ?u)
>>>
>>>           allValue(?g ie:**mandatoryInterestsForGroupIncl**usion
>>>                            ie:helpsIndividualDefine ?u)]
>>>
>>> when I ask for all staements, before it does not fire,  and even when I
>>> ask for all the statemetns, I do not get
>>>
>>>
>>> [IndividualGetsGroupInterests:   (?x ie:memberOf ?y), (?y
>>> ie:hasGroupInterestOf ?z)  -> (?x ie:hasIndividualInterestOf ?z)]
>>>
>>>
>>> To fire again.
>>>
>>> I need the
>>>
>>>
>>> [IndividualGetsGroupInterests:   (?x ie:memberOf ?y), (?y
>>> ie:hasGroupInterestOf ?z)  -> (?x ie:hasIndividualInterestOf ?z)]
>>>
>>> to fire frist,
>>>
>>> then I need,
>>>
>>> [InferredMembership:  (?u ie:memberOf ?g)
>>>      <-  (?g ie:**mandatoryInterestsForGroupIncl**usion ?i)
>>>          (?i ie:helpsIndividualDefine ?u)
>>>
>>>           allValue(?g ie:**mandatoryInterestsForGroupIncl**usion
>>>                            ie:helpsIndividualDefine ?u)]
>>>
>>> Then I need.
>>>
>>> [IndividualGetsGroupInterests:   (?x ie:memberOf ?y), (?y
>>> ie:hasGroupInterestOf ?z)  -> (?x ie:hasIndividualInterestOf ?z)]
>>>
>>> For the result to be right.  What can I do to get this?
>>>
>>>
>>>
>>> On Thu, Nov 8, 2012 at 5:00 PM, Dave Reynolds <[email protected]
>>> >**wrote:
>>>
>>>  The basic issue here is that you have to decide what binding pattern
>>>> your
>>>> primitive supports.
>>>>
>>>> Jena rules is not full prolog, the builtins are only usable as filters
>>>> or
>>>> deterministic predicates, they don't support iteration over results.
>>>>
>>>> So you are calling your primitive with one or both of ?u and ?g unbound
>>>> and your code does not bind them as a result.
>>>>
>>>> One option is to do the binding in your calling rule and just use your
>>>> primitive as a filter:
>>>>
>>>>
>>>> [InferredMembership:  (?u ie:memberOf ?g)
>>>>      <-  (?g ie:****mandatoryInterestsForGroupIncl****usion ?i)
>>>>          (?i ie:helpsIndividualDefine ?u)
>>>>
>>>>           allValue(?g ie:****mandatoryInterestsForGroupIncl****usion
>>>>
>>>>                            ie:helpsIndividualDefine ?u)]
>>>>
>>>> So the first two terms find possible groups and users to check and the
>>>> allValue primitive does the check.
>>>>
>>>> (I've no idea what ie:helpsIndividualDefine means so the example may not
>>>> be right.)
>>>>
>>>> Dave
>>>>
>>>>
>>>> On 08/11/12 20:50, Scott Streit wrote:
>>>>
>>>>  Dave,
>>>>>
>>>>> I simplified my code, removing reification and just down to the bare
>>>>> essentials.
>>>>>
>>>>> Rule:
>>>>>
>>>>>
>>>>> [InferredMembership:  (?u ie:memberOf ?g)
>>>>>             <- allValue(?g ie:****mandatoryInterestsForGroupIncl**
>>>>> **usion
>>>>>
>>>>>                            ie:helpsIndividualDefine ?u)]
>>>>>
>>>>> Code:
>>>>>
>>>>> AllValue.java
>>>>>
>>>>> public class AllValue extends BaseBuiltin {
>>>>> final static Logger logger = Logger.getLogger(AllValue.****class
>>>>>
>>>>> .getName());
>>>>>
>>>>>       /**
>>>>>        * Return a name for this builtin, normally this will be the
>>>>> name of
>>>>> the
>>>>>        * functor that will be used to invoke it.
>>>>>        */
>>>>>       @Override
>>>>>       public String getName() {
>>>>>           return "allValue";
>>>>>       }
>>>>>
>>>>>       /**
>>>>>        * This method is invoked when the builtin is called in a rule
>>>>> body.
>>>>>        * @param args the array of argument values for the builtin, this
>>>>> is an
>>>>> array
>>>>>        * of Nodes, some of which may be Node_RuleVariables.
>>>>>        * @param length the length of the argument list, may be less
>>>>> than
>>>>> the
>>>>> length of the args array
>>>>>        * for some rule engines
>>>>>        * @param context an execution context giving access to other
>>>>> relevant
>>>>> data
>>>>>        * @return return true if the buildin predicate is deemed to have
>>>>> succeeded in
>>>>>        * the current environment
>>>>>        */
>>>>>       @Override
>>>>>       public boolean bodyCall(Node[] args, int length, RuleContext
>>>>> context) {
>>>>>           if (length !=4) {
>>>>>               throw new BuiltinException(this, context, "builtin " +
>>>>> getName() + " requires 4 arguments but saw " + length);
>>>>>           }
>>>>>           Node subj = getArg(0, args, context);
>>>>>           // Allow variables in subject position to correspond to wild
>>>>> cards
>>>>>           if (subj.isVariable()) {
>>>>>               subj = null;
>>>>>           }
>>>>>           Node pred = getArg(1, args, context);
>>>>>           if (pred.isVariable()) {
>>>>>               pred = null;
>>>>>           }
>>>>>           Node pred2 = getArg(2, args, context);
>>>>>           if (pred.isVariable()) {
>>>>>               pred = null;
>>>>>           }
>>>>>
>>>>>           Node obj = getArg(3, args, context);
>>>>>           logger.info(" subject is " + subj + " pred is " + pred + "
>>>>> pred2
>>>>>    is " + pred2 + " obj is " + obj);
>>>>>
>>>>>           ClosableIterator<Triple> ti =  context.find(subj, pred,
>>>>> (Node)
>>>>> null);
>>>>>           while (ti.hasNext()) {
>>>>>           Triple triple = ti.next();
>>>>>           logger.info(" got a triple of " + triple);
>>>>>           logger.info(" looking for subject (triple.getObject()" +
>>>>> triple.getObject() + " pred2 is " + pred2 + " obj is " + obj);
>>>>>           if (!context.contains(triple.****getObject(), pred2, obj)) {
>>>>>
>>>>>           logger.info(" returning false");
>>>>>           return false;
>>>>>           }
>>>>>           }
>>>>>
>>>>>
>>>>>           logger.info(" returning true");
>>>>>
>>>>>           return true;
>>>>>           //return !context.contains(subj, pred, obj);
>>>>>       }
>>>>>
>>>>>       /**
>>>>>        * Flag as non-monotonic so the guard clause will get rerun after
>>>>> deferal
>>>>>        * as part of a non-trivial conflict set.
>>>>>        */
>>>>>       @Override
>>>>>       public boolean isMonotonic() {
>>>>>           return false;
>>>>>       }
>>>>>
>>>>> }
>>>>>
>>>>> log file:
>>>>>
>>>>>       [java] INFO:  looking for subject (triple.getObject()
>>>>> http://www.compscii.com/****ontologies/0.1/AutoIE.owl#**<http://www.compscii.com/**ontologies/0.1/AutoIE.owl#**>
>>>>> InterestAreaFishing<http://**www.compscii.com/ontologies/0.**
>>>>> 1/AutoIE.owl#**InterestAreaFishing<http://www.compscii.com/ontologies/0.1/AutoIE.owl#InterestAreaFishing>
>>>>> >pred2
>>>>> is 
>>>>> http://www.compscii.com/****ontologies/0.1/AutoIE.owl#**<http://www.compscii.com/**ontologies/0.1/AutoIE.owl#**>
>>>>> helpsIndividualDefineobj<http:**//www.compscii.com/ontologies/**
>>>>> 0.1/AutoIE.owl#**helpsIndividualDefineobj<http://www.compscii.com/ontologies/0.1/AutoIE.owl#helpsIndividualDefineobj>
>>>>> >
>>>>> is *
>>>>>        [java] Nov 8, 2012 3:33:04 PM com.compscii.ontology.created.**
>>>>> **
>>>>>
>>>>> AllValue
>>>>> bodyCall
>>>>>        [java] INFO:  got a triple of
>>>>> http://www.compscii.com/****ontologies/0.1/AutoIE.owl#****
>>>>> GroupHemmingway<http://www.compscii.com/**ontologies/0.1/AutoIE.owl#**GroupHemmingway>
>>>>> <http://www.**compscii.com/ontologies/0.1/**AutoIE.owl#GroupHemmingway<http://www.compscii.com/ontologies/0.1/AutoIE.owl#GroupHemmingway>
>>>>> >@
>>>>> http://www.compscii.com/****ontologies/0.1/AutoIE.owl#**<http://www.compscii.com/**ontologies/0.1/AutoIE.owl#**>
>>>>> mandatoryInterestsForGroupIncl****usion<http://www.compscii.**
>>>>> com/ontologies/0.1/AutoIE.owl#**mandatoryInterestsForGroupIncl**usion<http://www.compscii.com/ontologies/0.1/AutoIE.owl#mandatoryInterestsForGroupInclusion>
>>>>> >
>>>>> http://www.compscii.com/****ontologies/0.1/AutoIE.owl#**<http://www.compscii.com/**ontologies/0.1/AutoIE.owl#**>
>>>>> InterestAreaBachelors<http://**www.compscii.com/ontologies/0.**
>>>>> 1/AutoIE.owl#**InterestAreaBachelors<http://www.compscii.com/ontologies/0.1/AutoIE.owl#InterestAreaBachelors>
>>>>> >
>>>>>        [java] Nov 8, 2012 3:33:04 PM com.compscii.ontology.created.**
>>>>> **
>>>>>
>>>>> AllValue
>>>>> bodyCall
>>>>>        [java] INFO:  looking for subject (triple.getObject()
>>>>> http://www.compscii.com/****ontologies/0.1/AutoIE.owl#**<http://www.compscii.com/**ontologies/0.1/AutoIE.owl#**>
>>>>> InterestAreaBachelorspred2<htt**p://www.compscii.com/**
>>>>> ontologies/0.1/AutoIE.owl#**InterestAreaBachelorspred2<http://www.compscii.com/ontologies/0.1/AutoIE.owl#InterestAreaBachelorspred2>
>>>>> >is
>>>>> http://www.compscii.com/****ontologies/0.1/AutoIE.owl#**<http://www.compscii.com/**ontologies/0.1/AutoIE.owl#**>
>>>>> helpsIndividualDefine<http://**www.compscii.com/ontologies/0.**
>>>>> 1/AutoIE.owl#**helpsIndividualDefine<http://www.compscii.com/ontologies/0.1/AutoIE.owl#helpsIndividualDefine>
>>>>> >obj
>>>>> is *
>>>>>        [java] Nov 8, 2012 3:33:04 PM com.compscii.ontology.created.**
>>>>> **
>>>>>
>>>>> AllValue
>>>>> bodyCall
>>>>>        [java] INFO:  returning true
>>>>>        [java] 15:33:04 ERROR RDFDefaultErrorHandler :: Internal error
>>>>> in
>>>>> LP
>>>>> reasoner: variable in triple result
>>>>>        [java] Nov 8, 2012 3:33:04 PM
>>>>> com.compscii.ontology.created.****LoadUserPreferences doFile
>>>>>
>>>>>        [java] INFO: completed processing, writing out RDF/XML-ABBREV
>>>>>        [java] 15:33:04 WARN  BaseXMLWriter        :: Workaround for
>>>>> bugs
>>>>> 803804 and 858163: using RDF/XML (not RDF/XML-ABBREV) writer  for
>>>>> unsafe
>>>>> graph class com.hp.hpl.jena.reasoner.****rulesys.FBRuleInfGraph
>>>>>        [java] Nov 8, 2012 3:33:04 PM com.compscii.ontology.created.**
>>>>> **
>>>>>
>>>>> AllValue
>>>>> bodyCall
>>>>>        [java] INFO:  subject is null pred is
>>>>> http://www.compscii.com/****ontologies/0.1/AutoIE.owl#**<http://www.compscii.com/**ontologies/0.1/AutoIE.owl#**>
>>>>> mandatoryInterestsForGroupIncl****usionpred2<http://www.**
>>>>> compscii.com/ontologies/0.1/**AutoIE.owl#**
>>>>> mandatoryInterestsForGroupIncl**usionpred2<http://www.compscii.com/ontologies/0.1/AutoIE.owl#mandatoryInterestsForGroupInclusionpred2>
>>>>> >
>>>>>    is
>>>>> http://www.compscii.com/****ontologies/0.1/AutoIE.owl#**<http://www.compscii.com/**ontologies/0.1/AutoIE.owl#**>
>>>>> helpsIndividualDefine<http://**www.compscii.com/ontologies/0.**
>>>>> 1/AutoIE.owl#**helpsIndividualDefine<http://www.compscii.com/ontologies/0.1/AutoIE.owl#helpsIndividualDefine>
>>>>> >obj
>>>>> is *
>>>>>        [java] Nov 8, 2012 3:33:04 PM com.compscii.ontology.created.**
>>>>> **
>>>>>
>>>>> AllValue
>>>>> bodyCall
>>>>>        [java] INFO:  got a triple of
>>>>> http://www.compscii.com/****ontologies/0.1/AutoIE.owl#****
>>>>> GroupHemmingway<http://www.compscii.com/**ontologies/0.1/AutoIE.owl#**GroupHemmingway>
>>>>> <http://www.**compscii.com/ontologies/0.1/**AutoIE.owl#GroupHemmingway<http://www.compscii.com/ontologies/0.1/AutoIE.owl#GroupHemmingway>
>>>>> >@
>>>>> http://www.compscii.com/****ontologies/0.1/AutoIE.owl#**<http://www.compscii.com/**ontologies/0.1/AutoIE.owl#**>
>>>>> mandatoryInterestsForGroupIncl****usion<http://www.compscii.**
>>>>> com/ontologies/0.1/AutoIE.owl#**mandatoryInterestsForGroupIncl**usion<http://www.compscii.com/ontologies/0.1/AutoIE.owl#mandatoryInterestsForGroupInclusion>
>>>>> >
>>>>> http://www.compscii.com/****ontologies/0.1/AutoIE.owl#**<http://www.compscii.com/**ontologies/0.1/AutoIE.owl#**>
>>>>> InterestAreaFishing<http://**www.compscii.com/ontologies/0.**
>>>>> 1/AutoIE.owl#**InterestAreaFishing<http://www.compscii.com/ontologies/0.1/AutoIE.owl#InterestAreaFishing>
>>>>> >
>>>>>        [java] Nov 8, 2012 3:33:04 PM com.compscii.ontology.created.**
>>>>> **
>>>>>
>>>>> AllValue
>>>>> bodyCall
>>>>>        [java] INFO:  looking for subject (triple.getObject()
>>>>> http://www.compscii.com/****ontologies/0.1/AutoIE.owl#**<http://www.compscii.com/**ontologies/0.1/AutoIE.owl#**>
>>>>> InterestAreaFishing<http://**www.compscii.com/ontologies/0.**
>>>>> 1/AutoIE.owl#**InterestAreaFishing<http://www.compscii.com/ontologies/0.1/AutoIE.owl#InterestAreaFishing>
>>>>> >pred2
>>>>> is 
>>>>> http://www.compscii.com/****ontologies/0.1/AutoIE.owl#**<http://www.compscii.com/**ontologies/0.1/AutoIE.owl#**>
>>>>> helpsIndividualDefineobj<http:**//www.compscii.com/ontologies/**
>>>>> 0.1/AutoIE.owl#**helpsIndividualDefineobj<http://www.compscii.com/ontologies/0.1/AutoIE.owl#helpsIndividualDefineobj>
>>>>> >
>>>>> is *
>>>>>        [java] Nov 8, 2012 3:33:04 PM com.compscii.ontology.created.**
>>>>> **
>>>>>
>>>>> AllValue
>>>>> bodyCall
>>>>>        [java] INFO:  got a triple of
>>>>> http://www.compscii.com/****ontologies/0.1/AutoIE.owl#****
>>>>> GroupHemmingway<http://www.compscii.com/**ontologies/0.1/AutoIE.owl#**GroupHemmingway>
>>>>> <http://www.**compscii.com/ontologies/0.1/**AutoIE.owl#GroupHemmingway<http://www.compscii.com/ontologies/0.1/AutoIE.owl#GroupHemmingway>
>>>>> >@
>>>>> http://www.compscii.com/****ontologies/0.1/AutoIE.owl#**<http://www.compscii.com/**ontologies/0.1/AutoIE.owl#**>
>>>>> mandatoryInterestsForGroupIncl****usion<http://www.compscii.**
>>>>> com/ontologies/0.1/AutoIE.owl#**mandatoryInterestsForGroupIncl**usion<http://www.compscii.com/ontologies/0.1/AutoIE.owl#mandatoryInterestsForGroupInclusion>
>>>>> >
>>>>> http://www.compscii.com/****ontologies/0.1/AutoIE.owl#**<http://www.compscii.com/**ontologies/0.1/AutoIE.owl#**>
>>>>> InterestAreaBachelors<http://**www.compscii.com/ontologies/0.**
>>>>> 1/AutoIE.owl#**InterestAreaBachelors<http://www.compscii.com/ontologies/0.1/AutoIE.owl#InterestAreaBachelors>
>>>>> >
>>>>>        [java] Nov 8, 2012 3:33:04 PM com.compscii.ontology.created.**
>>>>> **
>>>>>
>>>>> AllValue
>>>>> bodyCall
>>>>>        [java] INFO:  looking for subject (triple.getObject()
>>>>> http://www.compscii.com/****ontologies/0.1/AutoIE.owl#**<http://www.compscii.com/**ontologies/0.1/AutoIE.owl#**>
>>>>> InterestAreaBachelorspred2<htt**p://www.compscii.com/**
>>>>> ontologies/0.1/AutoIE.owl#**InterestAreaBachelorspred2<http://www.compscii.com/ontologies/0.1/AutoIE.owl#InterestAreaBachelorspred2>
>>>>> >is
>>>>> http://www.compscii.com/****ontologies/0.1/AutoIE.owl#**<http://www.compscii.com/**ontologies/0.1/AutoIE.owl#**>
>>>>> helpsIndividualDefine<http://**www.compscii.com/ontologies/0.**
>>>>> 1/AutoIE.owl#**helpsIndividualDefine<http://www.compscii.com/ontologies/0.1/AutoIE.owl#helpsIndividualDefine>
>>>>> >obj
>>>>> is *
>>>>>        [java] Nov 8, 2012 3:33:04 PM com.compscii.ontology.created.**
>>>>> **
>>>>>
>>>>> AllValue
>>>>> bodyCall
>>>>>        [java] INFO:  returning true
>>>>>        [java] Nov 8, 2012 3:33:04 PM
>>>>> com.compscii.ontology.created.****LoadUserPreferences main
>>>>>
>>>>>        [java] SEVERE: error processing file resultabsolute name
>>>>> /home/scott/ontology/trunk/****ontology/../result
>>>>>        [java] com.hp.hpl.jena.reasoner.****ReasonerException: Internal
>>>>>
>>>>> error in
>>>>> LP rea
>>>>>
>>>>> What in the world is the " and what does it mean?  I want to look for
>>>>> people that all the interests are part of.  What am I missing here.
>>>>>
>>>>> I want to start with all groups with mandatory interests.  Make sure
>>>>> the
>>>>> users have the mandatory interests before I allow them in a group via
>>>>> backward chaining.  I am check for the interests, get them, then want
>>>>> to
>>>>> get all users that have them and put them in with the
>>>>>
>>>>> ?g memberOf ?u   .... but all the ?u are *.  What am I missing here?
>>>>>
>>>>> I also tried
>>>>>
>>>>> [InferredMembership:  (?g ie:hasAsMember ?u)
>>>>>             <- allValue(?g ie:****mandatoryInterestsForGroupIncl**
>>>>> **usion
>>>>>
>>>>>                            ie:helpsIndividualDefine ?u)]
>>>>>
>>>>> And still got
>>>>>
>>>>> .owl#GroupHemmingway @
>>>>> http://www.compscii.com/****ontologies/0.1/AutoIE.owl#**<http://www.compscii.com/**ontologies/0.1/AutoIE.owl#**>
>>>>> mandatoryInterestsForGroupIncl****usion<http://www.compscii.**
>>>>> com/ontologies/0.1/AutoIE.owl#**mandatoryInterestsForGroupIncl**usion<http://www.compscii.com/ontologies/0.1/AutoIE.owl#mandatoryInterestsForGroupInclusion>
>>>>> >
>>>>> http://www.compscii.com/****ontologies/0.1/AutoIE.owl#**<http://www.compscii.com/**ontologies/0.1/AutoIE.owl#**>
>>>>> InterestAreaBachelors<http://**www.compscii.com/ontologies/0.**
>>>>> 1/AutoIE.owl#**InterestAreaBachelors<http://www.compscii.com/ontologies/0.1/AutoIE.owl#InterestAreaBachelors>
>>>>> >
>>>>>        [java] Nov 8, 2012 3:48:23 PM com.compscii.ontology.created.**
>>>>> **
>>>>>
>>>>> AllValue
>>>>> bodyCall
>>>>>        [java] INFO:  looking for subject (triple.getObject()
>>>>> http://www.compscii.com/****ontologies/0.1/AutoIE.owl#**<http://www.compscii.com/**ontologies/0.1/AutoIE.owl#**>
>>>>> InterestAreaBachelorspred2<htt**p://www.compscii.com/**
>>>>> ontologies/0.1/AutoIE.owl#**InterestAreaBachelorspred2<http://www.compscii.com/ontologies/0.1/AutoIE.owl#InterestAreaBachelorspred2>
>>>>> >is
>>>>> http://www.compscii.com/****ontologies/0.1/AutoIE.owl#**<http://www.compscii.com/**ontologies/0.1/AutoIE.owl#**>
>>>>> helpsIndividualDefine<http://**www.compscii.com/ontologies/0.**
>>>>> 1/AutoIE.owl#**helpsIndividualDefine<http://www.compscii.com/ontologies/0.1/AutoIE.owl#helpsIndividualDefine>
>>>>> >obj
>>>>> is *
>>>>>        [java] Nov 8, 2012 3:48:23 PM com.compscii.ontology.created.**
>>>>> **
>>>>>
>>>>> AllValue
>>>>> bodyCall
>>>>>        [java] INFO:  returning true
>>>>>        [java] Nov 8, 2012 3:48:23 PM
>>>>> com.compscii.ontology.created.****LoadUserPreferences main
>>>>>
>>>>>        [java] SEVERE: error processing file resultabsolute name
>>>>> /home/scott/ontology/trunk/****ontology/../result
>>>>>        [java] com.hp.hpl.jena.reasoner.****ReasonerException: Internal
>>>>>
>>>>> error in
>>>>> LP reasoner: variable in triple result
>>>>>
>>>>>
>>>>> I am out of ideas..  Help
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> On Wed, Nov 7, 2012 at 1:15 PM, Scott Streit <[email protected]>
>>>>> wrote:
>>>>>
>>>>>   Ok so here is the rule
>>>>>
>>>>>>
>>>>>> [InferredMembership:  (?u ie:memberOf ?g)
>>>>>>             <- allValue(?g ie:****mandatoryInterestsForGroupIncl**
>>>>>> **usion
>>>>>>
>>>>>>                            ie:helpsIndividualDefine ?u)]
>>>>>>
>>>>>>
>>>>>> And here is the code for AllValues
>>>>>>
>>>>>>         logger.info(" subject is " + subj + " pred is " + pred + "
>>>>>> pred2
>>>>>> is " + pred2 + " obj is " + obj);
>>>>>>
>>>>>>           ClosableIterator<Triple> ti =  context.find(subj, pred,
>>>>>> (Node)
>>>>>> null);
>>>>>>           while (ti.hasNext()) {
>>>>>>               Triple triple = ti.next();
>>>>>>               logger.info(" got a triple of " + triple);
>>>>>>               logger.info(" triple subject is " +
>>>>>> triple.getSubject());
>>>>>>               logger.info(" triple pred is " +
>>>>>> triple.getPredicate());
>>>>>>               logger.info(" triple object is " + triple.getObject());
>>>>>>               logger.info(" looking for subject (triple.getObject()"
>>>>>> +
>>>>>> triple.getObject() + " pred2 is " + pred2 + " obj is " + obj);
>>>>>>               if (!context.contains(triple.****getObject(), pred2,
>>>>>> obj)) {
>>>>>>
>>>>>>                   logger.info(" returning false");
>>>>>>                   return false;
>>>>>>               }
>>>>>>           }
>>>>>>
>>>>>>
>>>>>>           logger.info(" returning true");
>>>>>>
>>>>>>           return true;
>>>>>>
>>>>>>
>>>>>> When I have a case of true I get an error:
>>>>>>
>>>>>>       [java] com.hp.hpl.jena.reasoner.****ReasonerException: Internal
>>>>>>
>>>>>> error in
>>>>>> LP reasoner: variable in triple result
>>>>>>        [java]     at
>>>>>> com.hp.hpl.jena.reasoner.****rulesys.impl.LPInterpreter.**
>>>>>> derefPossFunctor(****LPInterpreter.java:784)
>>>>>>
>>>>>>
>>>>>>
>>>>>> I assume I have to bind ?u somewhere.  How?  Where ?
>>>>>>
>>>>>>
>>>>>> On Wed, Nov 7, 2012 at 9:06 AM, Dave Reynolds <
>>>>>> [email protected]>****wrote:
>>>>>>
>>>>>>
>>>>>>   On 07/11/12 13:44, Scott Streit wrote:
>>>>>>
>>>>>>>
>>>>>>>      (?u ie:memberOf ?g)
>>>>>>>
>>>>>>>>            <- (?g ie:******mandatoryInterestsForGroupIncl******usion
>>>>>>>> ?i)
>>>>>>>>
>>>>>>>>
>>>>>>>>               allValue(?i ie:#hasIndivudalInterestOf ?u)
>>>>>>>>
>>>>>>>> If I wrote an allValue builtIn, this would solve the problem
>>>>>>>> correct.
>>>>>>>>
>>>>>>>>
>>>>>>>>  You can't have an allValue predicate with that signature, what
>>>>>>> would it
>>>>>>> mean?
>>>>>>>
>>>>>>>
>>>>>>>    What I mean by this is all forward chaining would take place
>>>>>>> first,
>>>>>>> and
>>>>>>>
>>>>>>>  now
>>>>>>>> I could backward chain allValue.  All I need to do is write
>>>>>>>> allValue.
>>>>>>>>
>>>>>>>> This is correct, right?
>>>>>>>>
>>>>>>>>
>>>>>>>>  You could certainly do that bit of the work in code instead of in
>>>>>>> rules,
>>>>>>> sure. Though if you end up with just a few simple rules and a lot of
>>>>>>> special case builtins then the rule engine may not be offering you
>>>>>>> much
>>>>>>> value. You might just use code for everything or a sequenced set of
>>>>>>> SPARQL
>>>>>>> CONSTRUCT queries (SPARQL sub-queries, coupled with the unbound
>>>>>>> predicate,
>>>>>>> can do some closed world tests for you).
>>>>>>>
>>>>>>> If you do choose to go for a builtin then you'll need one that looks
>>>>>>> more
>>>>>>> like:
>>>>>>>
>>>>>>>     (?u ie:memberOf ?g)
>>>>>>>             <- allValue(?g ie:******mandatoryInterestsForGroupIncl**
>>>>>>> **
>>>>>>>
>>>>>>> **usion
>>>>>>>
>>>>>>>                            ie:hasIndivudalInterestOf ?u)
>>>>>>>
>>>>>>> Then the predicate allValue(root P Q u) would find all values ?x such
>>>>>>> that (root P ?x) and then pass if (u Q ?x) is true for all of those
>>>>>>> ?x.
>>>>>>>
>>>>>>> You would need to decide whether either or both of u and g can be
>>>>>>> unbound.
>>>>>>>
>>>>>>>
>>>>>>>    Now I looked at noValue and
>>>>>>>
>>>>>>>
>>>>>>>>           return !context.contains(subj, pred, obj);
>>>>>>>>
>>>>>>>> and this is where I would make the change correct?
>>>>>>>>
>>>>>>>>
>>>>>>>>  You'll need bigger changes than that, see above.
>>>>>>>
>>>>>>>
>>>>>>>    Also, how do I tell Jena of a new built in?
>>>>>>>
>>>>>>>
>>>>>>>>
>>>>>>>>       BuiltinRegistry.theRegistry.******register(new MyBuiltin());
>>>>>>>
>>>>>>> Dave
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>> --
>>>>>> "If you are lucky enough to have lived in Paris as a young man, then
>>>>>> wherever you go for the rest of your life, it stays with you, for
>>>>>> Paris
>>>>>> is
>>>>>> a moveable feast." -  Ernest Hemingway
>>>>>>
>>>>>> www.scottstreit.com
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>
>>> --
>>> "If you are lucky enough to have lived in Paris as a young man, then
>>> wherever you go for the rest of your life, it stays with you, for Paris
>>> is
>>> a moveable feast." -  Ernest Hemingway
>>>
>>> www.scottstreit.com
>>>
>>>
>>
>>
>>
>


-- 
"If you are lucky enough to have lived in Paris as a young man, then
wherever you go for the rest of your life, it stays with you, for Paris is
a moveable feast." -  Ernest Hemingway

www.scottstreit.com

Reply via email to