use of fr.lirmm.graphik.graal.api.core.Rule in project graal by graphik-team.
the class DefaultKnowledgeBaseTest method testDefaultKnowledgeBaseAtomSetRuleSet.
/**
* Test method for
* {@link fr.lirmm.graphik.graal.kb.DefaultKnowledgeBase#DefaultKnowledgeBase(fr.lirmm.graphik.graal.api.core.AtomSet, fr.lirmm.graphik.graal.api.core.RuleSet)}.
* @throws AtomSetException
* @throws ParseException
*/
@Test
public void testDefaultKnowledgeBaseAtomSetRuleSet() throws AtomSetException, ParseException {
Atom aa = DlgpParser.parseAtom("q(a).");
Atom ab = DlgpParser.parseAtom("q(b).");
Atom ac = DlgpParser.parseAtom("q(c).");
Rule r = DlgpParser.parseRule("[R1] p(x) :- q(X).");
NegativeConstraint nc = DlgpParser.parseNegativeConstraint("[NC] ! :- q(X), p(X).");
AtomSet store = new DefaultInMemoryGraphStore();
store.add(aa);
store.add(ab);
store.add(ac);
RuleSet ruleset = new LinkedListRuleSet();
ruleset.add(r);
ruleset.add(nc);
KnowledgeBase kb = new DefaultKnowledgeBase(store, ruleset);
Assert.assertTrue(kb.getOntology().contains(r));
Assert.assertTrue(kb.getOntology().contains(nc));
Assert.assertTrue(kb.getFacts().contains(aa));
Assert.assertTrue(kb.getFacts().contains(ab));
Assert.assertTrue(kb.getFacts().contains(ac));
kb.close();
}
use of fr.lirmm.graphik.graal.api.core.Rule in project graal by graphik-team.
the class Analyser method ruleProperties.
public List<Map<String, Integer>> ruleProperties() {
if (this.ruleProperties == null) {
this.ruleProperties = new LinkedList<Map<String, Integer>>();
for (Rule r : this.ruleSet) {
AnalyserRuleSet subAnalyser = new AnalyserRuleSet(r);
this.ruleProperties.add(computeProperties(subAnalyser));
}
}
return this.ruleProperties;
}
use of fr.lirmm.graphik.graal.api.core.Rule in project graal by graphik-team.
the class MFAProperty method translateToMFA.
public static RuleSet translateToMFA(Iterable<Rule> rules) {
RuleSet R = new LinkedListRuleSet();
for (Rule r : rules) {
for (Rule r2 : translateRuleToMFA(r)) R.add(r2);
}
DefaultRule rule = new DefaultRule();
Atom s = new DefaultAtom(S);
s.setTerm(0, DefaultTermFactory.instance().createVariable("X1"));
s.setTerm(1, DefaultTermFactory.instance().createVariable("X2"));
Atom d = new DefaultAtom(D);
d.setTerm(0, DefaultTermFactory.instance().createVariable("X1"));
d.setTerm(1, DefaultTermFactory.instance().createVariable("X2"));
rule.getBody().add(s);
rule.getHead().add(d);
R.add(rule);
s = new DefaultAtom(S);
d = new DefaultAtom(D);
Atom d2 = new DefaultAtom(D);
d.setTerm(0, DefaultTermFactory.instance().createVariable("X1"));
d.setTerm(1, DefaultTermFactory.instance().createVariable("X2"));
s.setTerm(0, DefaultTermFactory.instance().createVariable("X2"));
s.setTerm(1, DefaultTermFactory.instance().createVariable("X3"));
d2.setTerm(0, DefaultTermFactory.instance().createVariable("X1"));
d2.setTerm(1, DefaultTermFactory.instance().createVariable("X3"));
rule = new DefaultRule();
rule.getBody().add(d);
rule.getBody().add(s);
rule.getHead().add(d2);
R.add(rule);
return R;
}
use of fr.lirmm.graphik.graal.api.core.Rule in project graal by graphik-team.
the class KBBuilderTest method testAddRule.
/**
* Test method for {@link fr.lirmm.graphik.graal.kb.KBBuilder#add(fr.lirmm.graphik.graal.api.core.Rule)}.
* @throws ParseException
*/
@Test
public void testAddRule() throws ParseException {
// Given
KBBuilder kbb = new KBBuilder();
Rule r1 = DlgpParser.parseRule("[R1] p(X) :- q(X).");
// When
kbb.add(r1);
KnowledgeBase kb = kbb.build();
// Then
Assert.assertEquals(r1, kb.getRule("R1"));
Assert.assertEquals(1, kb.getOntology().size());
}
use of fr.lirmm.graphik.graal.api.core.Rule in project graal by graphik-team.
the class JointlyAffectedPositionSet method step2.
/**
* for each rule and for each variable x that occurs only at affected
* positions in its body, all positions q[j] in its head where occurs x are
* affected.
*/
protected void step2() {
InMemoryAtomSet body;
boolean isAffected;
int i;
CloseableIteratorWithoutException<Atom> atomIt;
Iterator<Term> termIt;
Atom a;
Term t;
boolean fixPoint = false;
while (!fixPoint) {
fixPoint = true;
for (Rule rule : ruleSet) {
body = rule.getBody();
for (Variable term : rule.getBody().getVariables()) {
isAffected = true;
atomIt = body.iterator();
while (atomIt.hasNext() && isAffected) {
i = -1;
a = atomIt.next();
termIt = a.iterator();
while (termIt.hasNext() && isAffected) {
++i;
t = termIt.next();
if (term.equals(t)) {
if (!isAffected(a.getPredicate(), i)) {
isAffected = false;
}
}
}
}
if (isAffected) {
if (this.affectInHead(rule, term)) {
fixPoint = false;
}
}
}
}
}
}
Aggregations