@Override public void visit(final OWLEquivalentClassesAxiom axiom) { _isEntailed = true; final Iterator<OWLClassExpression> i = axiom.classExpressions().iterator(); if (i.hasNext()) { final OWLClassExpression first = i.next(); while (i.hasNext() && _isEntailed) { final OWLClassExpression next = i.next(); _isEntailed = _kb.isEquivalentClass(_reasoner.term(first), _reasoner.term(next)); } } }
@Override public void visit(final OWLEquivalentClassesAxiom axiom) { _isEntailed = true; final Iterator<OWLClassExpression> i = axiom.classExpressions().iterator(); if (i.hasNext()) { final OWLClassExpression first = i.next(); while (i.hasNext() && _isEntailed) { final OWLClassExpression next = i.next(); _isEntailed = _kb.isEquivalentClass(_reasoner.term(first), _reasoner.term(next)); } } }
@Override public void visit(final OWLEquivalentClassesAxiom axiom) { _isEntailed = true; final Iterator<OWLClassExpression> i = axiom.classExpressions().iterator(); if (i.hasNext()) { final OWLClassExpression first = i.next(); while (i.hasNext() && _isEntailed) { final OWLClassExpression next = i.next(); _isEntailed = _kb.isEquivalentClass(_reasoner.term(first), _reasoner.term(next)); } } }
@Override public boolean contains(final KnowledgeBase kb, final GraphLoader loader, final Node s, final Node p, final Node o) { return kb.isEquivalentClass(loader.node2term(s), loader.node2term(o)); } });
@Override public boolean contains(final KnowledgeBase kb, final GraphLoader loader, final Node s, final Node p, final Node o) { return kb.isEquivalentClass(loader.node2term(s), loader.node2term(o)); } });
@Override public boolean contains(final KnowledgeBase kb, final GraphLoader loader, final Node s, final Node p, final Node o) { return kb.isEquivalentClass(loader.node2term(s), loader.node2term(o)); } });
return kb.isDifferentFrom(arguments.get(0), arguments.get(1)); case EquivalentClass: return kb.isEquivalentClass(arguments.get(0), arguments.get(1)); case SubClassOf: return kb.isSubClassOf(arguments.get(0), arguments.get(1));
return kb.isDifferentFrom(arguments.get(0), arguments.get(1)); case EquivalentClass: return kb.isEquivalentClass(arguments.get(0), arguments.get(1)); case SubClassOf: return kb.isSubClassOf(arguments.get(0), arguments.get(1));
return kb.isDifferentFrom(arguments.get(0), arguments.get(1)); case EquivalentClass: return kb.isEquivalentClass(arguments.get(0), arguments.get(1)); case SubClassOf: return kb.isSubClassOf(arguments.get(0), arguments.get(1));
@Test public void testCyclicTBox2() { final KnowledgeBase kb = new KnowledgeBaseImpl(); final ATermAppl B = term("B"); final ATermAppl C = term("C"); final ATermAppl D = term("D"); kb.addClass(B); kb.addClass(C); kb.addClass(D); kb.addSubClass(C, B); kb.addSubClass(D, C); kb.addEquivalentClass(D, B); kb.classify(); assertTrue(kb.isEquivalentClass(B, C)); assertTrue(kb.isEquivalentClass(B, D)); assertTrue(kb.isEquivalentClass(D, C)); }
@Test public void testEquivalentClass() { classes(_A, _B); _kb.addSubClass(_A, _B); _kb.addSubClass(_B, _A); explainEntailment(_kb.isEquivalentClass(_A, _B), ATermUtils.makeSub(_A, _B), ATermUtils.makeSub(_B, _A)); }
/** * An axiom like B = B or (not B) cause problems in classification process because B was marked disjoint with itself. */ @Test public void testTopClass3() { final KnowledgeBase kb = new KnowledgeBaseImpl(); final ATermAppl A = term("A"); final ATermAppl B = term("B"); final ATermAppl C = term("C"); kb.addClass(A); kb.addClass(B); kb.addClass(C); kb.addEquivalentClass(A, B); kb.addEquivalentClass(B, or(B, not(B))); kb.addSubClass(C, A); assertTrue(kb.isConsistent()); kb.classify(); assertTrue(kb.isEquivalentClass(A, TOP)); assertTrue(kb.isEquivalentClass(B, TOP)); assertFalse(kb.isEquivalentClass(C, TOP)); }
/** * Same as {@link #testTopClass2()} but tests the EL classifier. */ @Test public void testTopClass2EL() { // This test was failing due to the issue explained in #157 at some point but not anymore // The issue explained in #157 is still valid even though this test passes final KnowledgeBase kb = new KnowledgeBaseImpl(); final ATermAppl A = term("A"); final ATermAppl B = term("B"); kb.addClass(A); kb.addClass(B); kb.addEquivalentClass(A, or(B, not(B))); assertTrue(kb.isConsistent()); kb.classify(); assertTrue(kb.isEquivalentClass(A, TOP)); assertFalse(kb.isEquivalentClass(B, TOP)); }
/** * not A subClassOf A implies A is TOP */ @Test public void testTopClass4() { classes(_A, _B, _C); _kb.addSubClass(not(_A), _A); _kb.addSubClass(_B, _A); assertTrue(_kb.isConsistent()); _kb.classify(); assertTrue(_kb.isEquivalentClass(_A, TOP)); }
/** * Test for ticket #123 An axiom like A = B or (not B) cause problems in classification process (runtime exception in CD classification). Due to * _disjunction A is discovered to be a told subsumer of B. A is marked as non-primitive but since marking is done on unfolding map all we see is A = TOP * and B is left as CD. In phase 1, B is tried to be CD-classified but A is eft for phase 2 thus unclassified at that time causing the exception. */ @Test public void testTopClass2() { final KnowledgeBase kb = new KnowledgeBaseImpl(); final ATermAppl A = term("A"); final ATermAppl B = term("B"); final ATermAppl C = term("C"); final ATermAppl p = term("p"); kb.addClass(A); kb.addClass(B); kb.addClass(C); kb.addObjectProperty(p); kb.addEquivalentClass(A, or(B, not(B))); // the following restriction is only to ensure we don't use the // EL classifier kb.addSubClass(C, min(p, 2, TOP)); assertTrue(kb.isConsistent()); kb.classify(); assertTrue(kb.isEquivalentClass(A, TOP)); assertFalse(kb.isEquivalentClass(B, TOP)); }