private Set<ATermAppl> pruneExplanation(final Triple pattern, final Set<ATermAppl> explanation) { final Set<ATermAppl> prunedExplanation = new HashSet<>(explanation); final OntBuilder builder = new OntBuilder(_kb); KnowledgeBase copyKB; PelletInfGraph copyGraph; final GraphLoader loader = new DefaultGraphLoader(); for (final ATermAppl axiom : explanation) { prunedExplanation.remove(axiom); copyKB = builder.build(prunedExplanation); copyGraph = new PelletInfGraph(copyKB, (PelletReasoner) getReasoner(), loader); if (!checkEntailment(copyGraph, pattern, false)) prunedExplanation.add(axiom); else _logger.finer(() -> "Prune from explanation " + ATermUtils.toString(axiom)); } return prunedExplanation; }
final AtomIObject io = convertAtomIObject(i); final ATermAppl c = (ATermAppl) term.getArgument(1); defineClass(c); final ATermAppl i1 = (ATermAppl) term.getArgument(1); final ATermAppl i2 = (ATermAppl) term.getArgument(2); final AtomIObject io1 = convertAtomIObject(i1); defineProperty(p); final AtomIObject io2 = convertAtomIObject(i2); atom = new IndividualPropertyAtom(p, io1, io2); final AtomDObject do2 = convertAtomDObject(i2); atom = new DatavaluedPropertyAtom(p, io1, do2); final AtomIObject io1 = convertAtomIObject(i1); final AtomIObject io2 = convertAtomIObject(i2); final AtomIObject io1 = convertAtomIObject(i1); final AtomIObject io2 = convertAtomIObject(i2); list.add(convertAtomDObject(arg));
defineClass(c1); defineClass(c2); _kb.addEquivalentClass(c1, c2); defineClass(c1); defineClass(c2); _kb.addSubClass(c1, c2); defineClass((ATermAppl) l.getFirst()); _kb.addDisjointClasses(concepts); defineClass(c1); defineClass(c2); _kb.addDisjointClass(c1, c2); defineProperty(l.getFirst()); _kb.addDisjointProperties(props); defineProperty(p1); defineProperty(p2); _kb.addDisjointProperty(p1, p2); defineProperty(p1); defineProperty(p2); _kb.addSubProperty(p1, p2); defineProperty(p1); defineProperty(p2); _kb.addEquivalentProperty(p1, p2);
private void defineProperty(final ATerm p) { if (p instanceof ATermList) for (ATermList l = (ATermList) p; !l.isEmpty(); l = l.getNext()) { final ATermAppl r = (ATermAppl) l.getFirst(); defineProperty(r); } else if (ATermUtils.isInv((ATermAppl) p)) _kb.addObjectProperty(((ATermAppl) p).getArgument(0)); else if (_originalKB.isDatatypeProperty(p)) _kb.addDatatypeProperty(p); else _kb.addObjectProperty(p); }
private Set<ATermAppl> pruneExplanation(final Triple pattern, final Set<ATermAppl> explanation) { final Set<ATermAppl> prunedExplanation = new HashSet<>(explanation); final OntBuilder builder = new OntBuilder(_kb); KnowledgeBase copyKB; PelletInfGraph copyGraph; final GraphLoader loader = new DefaultGraphLoader(); for (final ATermAppl axiom : explanation) { prunedExplanation.remove(axiom); copyKB = builder.build(prunedExplanation); copyGraph = new PelletInfGraph(copyKB, (PelletReasoner) getReasoner(), loader); if (!checkEntailment(copyGraph, pattern, false)) prunedExplanation.add(axiom); else _logger.finer(() -> "Prune from explanation " + ATermUtils.toString(axiom)); } return prunedExplanation; }
final AtomIObject io = convertAtomIObject(i); final ATermAppl c = (ATermAppl) term.getArgument(1); defineClass(c); final ATermAppl i1 = (ATermAppl) term.getArgument(1); final ATermAppl i2 = (ATermAppl) term.getArgument(2); final AtomIObject io1 = convertAtomIObject(i1); defineProperty(p); final AtomIObject io2 = convertAtomIObject(i2); atom = new IndividualPropertyAtom(p, io1, io2); final AtomDObject do2 = convertAtomDObject(i2); atom = new DatavaluedPropertyAtom(p, io1, do2); final AtomIObject io1 = convertAtomIObject(i1); final AtomIObject io2 = convertAtomIObject(i2); final AtomIObject io1 = convertAtomIObject(i1); final AtomIObject io2 = convertAtomIObject(i2); list.add(convertAtomDObject(arg));
defineClass(c1); defineClass(c2); _kb.addEquivalentClass(c1, c2); defineClass(c1); defineClass(c2); _kb.addSubClass(c1, c2); defineClass((ATermAppl) l.getFirst()); _kb.addDisjointClasses(concepts); defineClass(c1); defineClass(c2); _kb.addDisjointClass(c1, c2); defineProperty(l.getFirst()); _kb.addDisjointProperties(props); defineProperty(p1); defineProperty(p2); _kb.addDisjointProperty(p1, p2); defineProperty(p1); defineProperty(p2); _kb.addSubProperty(p1, p2); defineProperty(p1); defineProperty(p2); _kb.addEquivalentProperty(p1, p2);
private void defineProperty(final ATerm p) { if (p instanceof ATermList) for (ATermList l = (ATermList) p; !l.isEmpty(); l = l.getNext()) { final ATermAppl r = (ATermAppl) l.getFirst(); defineProperty(r); } else if (ATermUtils.isInv((ATermAppl) p)) _kb.addObjectProperty(((ATermAppl) p).getArgument(0)); else if (_originalKB.isDatatypeProperty(p)) _kb.addDatatypeProperty(p); else _kb.addObjectProperty(p); }
private Set<ATermAppl> pruneExplanation(final Triple pattern, final Set<ATermAppl> explanation) { final Set<ATermAppl> prunedExplanation = new HashSet<>(explanation); final OntBuilder builder = new OntBuilder(_kb); KnowledgeBase copyKB; PelletInfGraph copyGraph; final GraphLoader loader = new DefaultGraphLoader(); for (final ATermAppl axiom : explanation) { prunedExplanation.remove(axiom); copyKB = builder.build(prunedExplanation); copyGraph = new PelletInfGraph(copyKB, (PelletReasoner) getReasoner(), loader); if (!checkEntailment(copyGraph, pattern, false)) prunedExplanation.add(axiom); else _logger.finer(() -> "Prune from explanation " + ATermUtils.toString(axiom)); } return prunedExplanation; }
@Test public void testLookupIndividuals() { OpenlletOptions.KEEP_ABOX_ASSERTIONS = true; final KnowledgeBase kb = new KnowledgeBaseImpl(); final ATermAppl C = term("C"); final ATermAppl D = term("D"); final ATermAppl i = term("i"); final ATermAppl j = term("j"); kb.addClass(C); kb.addClass(D); kb.addIndividual(i); kb.addIndividual(j); kb.addSubClass(C, D); kb.addType(i, C); kb.addType(j, D); final Rule rule = new Rule(Collections.singletonList(new ClassAtom(C, new AtomIConstant(i))), Collections.singletonList(new ClassAtom(D, new AtomIConstant(j)))); kb.addRule(rule); final OntBuilder builder = new OntBuilder(kb); final Set<ATermAppl> rules = new HashSet<>(); rules.add(ATermUtils.makeRule(new ATermAppl[] { ATermUtils.makeTypeAtom(i, C) }, new ATermAppl[] { ATermUtils.makeTypeAtom(j, D) })); final KnowledgeBase copy = builder.build(rules); Assert.assertEquals(1, copy.getRules().size()); }