use of fr.lirmm.graphik.graal.api.core.RuleSet in project graal by graphik-team.
the class BackwardChainingTest method constantInRulesIssue62.
@Theory
public void constantInRulesIssue62(RulesCompilation compilation, RewritingOperator operator) throws IteratorException, ParseException {
RuleSet rules = new LinkedListRuleSet();
rules.add(DlgpParser.parseRule("p(X,a) :- q(X)."));
ConjunctiveQuery query = DlgpParser.parseQuery("?(X,Y) :- p(X,Y).");
compilation.compile(rules.iterator());
PureRewriter bc = new PureRewriter(operator, true);
CloseableIterator<? extends ConjunctiveQuery> it = bc.execute(query, rules, compilation);
boolean found = false;
int i = 0;
while (it.hasNext()) {
ConjunctiveQuery next = it.next();
CloseableIteratorWithoutException<Atom> atomIt = next.getAtomSet().iterator();
while (atomIt.hasNext()) {
if (atomIt.next().getPredicate().equals(Predicate.EQUALITY)) {
found = true;
}
}
++i;
}
Assert.assertTrue(found);
Assert.assertEquals(2, i);
}
use of fr.lirmm.graphik.graal.api.core.RuleSet in project graal by graphik-team.
the class BackwardChainingTest method issue34_1.
@Theory
public void issue34_1(RulesCompilation compilation, RewritingOperator operator) throws IteratorException {
try {
RuleSet rules = new LinkedListRuleSet();
rules.add(DlgpParser.parseRule("p(X,Y) :- q(Y,X)."));
rules.add(DlgpParser.parseRule("r(X,Z) :- p(X,Y)."));
rules.add(DlgpParser.parseRule("r(X,Z) :- q(X,Y)."));
ConjunctiveQuery query = DlgpParser.parseQuery("? :- r(a,Y).");
compilation.compile(rules.iterator());
PureRewriter bc = new PureRewriter(operator, true);
CloseableIterator<? extends ConjunctiveQuery> it = bc.execute(query, rules, compilation);
int i = Iterators.count(it);
Assert.assertEquals(4, i);
} catch (Throwable t) {
Assert.assertFalse("There is an error.", true);
}
}
use of fr.lirmm.graphik.graal.api.core.RuleSet in project graal by graphik-team.
the class PureRewriter method execute.
// /////////////////////////////////////////////////////////////////////////
// METHODS
// /////////////////////////////////////////////////////////////////////////
@Override
public CloseableIteratorWithoutException<ConjunctiveQuery> execute(ConjunctiveQuery query, Iterable<Rule> rules) {
RuleSet newRulSet = new LinkedListRuleSet(rules);
RulesCompilation compilation = new IDCompilation();
compilation.compile(newRulSet.iterator());
RewritinCloseableIterator it = new RewritinCloseableIterator(true, query, newRulSet, compilation, this.operator);
it.setProfiler(this.getProfiler());
return it;
}
use of fr.lirmm.graphik.graal.api.core.RuleSet in project graal by graphik-team.
the class BackwardChainingTest method issue35.
@Theory
public void issue35(RulesCompilation compilation, RewritingOperator operator) throws IteratorException {
try {
RuleSet rules = new LinkedListRuleSet();
Predicate p = new Predicate("p", 2);
Predicate q = new Predicate("q", 3);
Predicate r = new Predicate("r", 2);
rules.add(DlgpParser.parseRule("q(X,Y,X) :- p(X,Y)."));
ConjunctiveQuery query = DlgpParser.parseQuery("? :- q(X,Y,Y), r(X,Y).");
compilation.compile(rules.iterator());
PureRewriter bc = new PureRewriter(operator, true);
CloseableIterator<? extends ConjunctiveQuery> it = bc.execute(query, rules, compilation);
int i = 0;
while (it.hasNext()) {
ConjunctiveQuery next = it.next();
InMemoryAtomSet atomSet = next.getAtomSet();
Set<Predicate> predicates = atomSet.getPredicates();
Assert.assertTrue(predicates.contains(r));
if (predicates.contains(p)) {
Assert.assertEquals(1, atomSet.getTerms().size());
} else if (predicates.contains(q)) {
Assert.assertEquals(query, next);
} else {
Assert.assertFalse(true);
}
++i;
}
Assert.assertEquals(2, i);
} catch (Exception e) {
Assert.assertFalse("There is an error.", true);
}
}
use of fr.lirmm.graphik.graal.api.core.RuleSet in project graal by graphik-team.
the class BackwardChainingTest method forbiddenFoldingTest.
/**
* folding on answer variables
*
* @throws IteratorException
* @throws ParseException
*/
@Theory
public void forbiddenFoldingTest(RulesCompilation compilation, RewritingOperator operator) throws IteratorException, ParseException {
RuleSet rules = new LinkedListRuleSet();
rules.add(DlgpParser.parseRule("q(Y,X) :- p(X,Y)."));
rules.add(DlgpParser.parseRule("p(X,Y) :- q(Y,X)."));
ConjunctiveQuery query = DlgpParser.parseQuery("?(X,Y,Z) :- p(X,Y), q(Y,Z).");
compilation.compile(rules.iterator());
PureRewriter bc = new PureRewriter(operator, true);
CloseableIterator<? extends ConjunctiveQuery> it = bc.execute(query, rules, compilation);
int i = count(it);
Assert.assertEquals(4, i);
}
Aggregations