For goodness sake! A *minimal* example for this should be something like 10 lines of code, a data sample with 5-10 triples and a rule file with a couple of rules. The output should make it easy to tell whether the problem is solved or not.

NOT your entire project and NOT generating reams of irrelevant diagnostic output!!

However, having read your original message more closely I see that your problem is that you have different ordering requirements here from those in your very original question.

Remember that forward rules run before backward rules.

In your original postings it seemed like you wanted to infer some interests and then use the allValues test to infer group membership based on those interests. So in that case you needed to ensure the set of interest inference rules completed before doing the group membership tests. Hence my suggesting the forward/backward split.

In your current rules your group membership test doesn't use the results of forward inference of interests, instead it is using this ie:helpsIndividualDefine predicate (whatever that is). So there is no longer a need to run the interest inference completion before doing the allValues test. Indeed you now have a dependency the other way round in that your forward rule on interests needs to see the results of the group membership inference.

So the solution is to make both rules forward or both rules backward. For example:

[[[
@prefix ie: http://www.compscii.com/ontologies/0.1/AutoIE.owl#
[IndividualGetsGroupInterests:
    (?x ie:memberOf ?y), (?y ie:hasGroupInterestOf ?z)
   ->
    (?x ie:hasIndividualInterestOf ?z)]

[InferredMembership:
    (?g ie:mandatoryInterestsForGroupInclusion ?i)
    (?i ie:helpsIndividualDefine ?u)
     allValue(?g ie:mandatoryInterestsForGroupInclusion
                          ie:helpsIndividualDefine ?u)
  ->
   (?u ie:memberOf ?g) ]
]]]

Dave


On 09/11/12 18:03, Scott Streit wrote:
Ok Stripped code.

svn checkout https://www.scottstreit.com/svn/ontology

user dave
password dave

with statement commented out:

//        model = ModelFactory.createInfModel(model.getReasoner(), model);

get INFO:  Beachley's
http://www.w3.org/2006/vcard/ns#VCard-1066989103individual interests
are
Nov 9, 2012 12:57:13 PM com.compscii.ontology.created.LoadUserPreferences
printStatements
INFO: Statement is [http://www.w3.org/2006/vcard/ns#VCard-1066989103,
http://www.compscii.com/ontologies/0.1/AutoIE.owl#hasIndividualInterestOf,
http://www.compscii.com/ontologies/0.1/AutoIE.owl#InterestAreaFishing]
Nov 9, 2012 12:57:13 PM com.compscii.ontology.created.LoadUserPreferences
printStatements
INFO: Statement is [http://www.w3.org/2006/vcard/ns#VCard-1066989103,
http://www.compscii.com/ontologies/0.1/AutoIE.owl#hasIndividualInterestOf,
http://www.compscii.com/ontologies/0.1/AutoIE.owl#InterestAreaBachelors]
Nov 9, 2012 12:57:13 PM com.compscii.ontology.created.LoadUserPreferences
insertWithProvenance


Wrong.  Missing inferred assertions.

With statement uncommented get.
INFO:  Beachley's
http://www.w3.org/2006/vcard/ns#VCard-1066989103individual interests
are
Nov 9, 2012 1:00:52 PM com.compscii.ontology.created.LoadUserPreferences
printStatements
INFO: Statement is [http://www.w3.org/2006/vcard/ns#VCard-1066989103,
http://www.compscii.com/ontologies/0.1/AutoIE.owl#hasIndividualInterestOf,
http://www.compscii.com/ontologies/0.1/AutoIE.owl#InterestAreaBull_Fighting]
Nov 9, 2012 1:00:52 PM com.compscii.ontology.created.LoadUserPreferences
printStatements
INFO: Statement is [http://www.w3.org/2006/vcard/ns#VCard-1066989103,
http://www.compscii.com/ontologies/0.1/AutoIE.owl#hasIndividualInterestOf,
http://www.compscii.com/ontologies/0.1/AutoIE.owl#InterestAreaBoxing]
Nov 9, 2012 1:00:52 PM com.compscii.ontology.created.LoadUserPreferences
printStatements
INFO: Statement is [http://www.w3.org/2006/vcard/ns#VCard-1066989103,
http://www.compscii.com/ontologies/0.1/AutoIE.owl#hasIndividualInterestOf,
http://www.compscii.com/ontologies/0.1/AutoIE.owl#InterestAreaLiterature]
Nov 9, 2012 1:00:52 PM com.compscii.ontology.created.LoadUserPreferences
printStatements
INFO: Statement is [http://www.w3.org/2006/vcard/ns#VCard-1066989103,
http://www.compscii.com/ontologies/0.1/AutoIE.owl#hasIndividualInterestOf,
http://www.compscii.com/ontologies/0.1/AutoIE.owl#InterestAreaFishing]
Nov 9, 2012 1:00:52 PM com.compscii.ontology.created.LoadUserPreferences
printStatements
INFO: Statement is [http://www.w3.org/2006/vcard/ns#VCard-1066989103,
http://www.compscii.com/ontologies/0.1/AutoIE.owl#hasIndividualInterestOf,
http://www.compscii.com/ontologies/0.1/AutoIE.owl#InterestAreaBachelors]
Nov 9, 2012 1:00:52 PM com.compscii.ontology.created.LoadUserPreferences
insertWithProvenance


Correct.

I committed it with uncommented.  Small test case now.

Just run ant abox.  It creates an ontology0.log in your  home directory
with the messages.

Scott





On Fri, Nov 9, 2012 at 11:55 AM, Scott Streit <[email protected]> wrote:

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