package org.semanticweb.HermiT.reasoner;
import java.util.HashSet;
import java.util.Set;
import org.semanticweb.HermiT.Configuration;
import org.semanticweb.owlapi.model.IRI;
import org.semanticweb.owlapi.model.OWLAxiom;
import org.semanticweb.owlapi.model.OWLClass;
import org.semanticweb.owlapi.model.OWLNamedIndividual;
import org.semanticweb.owlapi.model.OWLObjectProperty;
import org.semanticweb.owlapi.model.OWLObjectPropertyExpression;
import org.semanticweb.owlapi.reasoner.IndividualNodeSetPolicy;
import org.semanticweb.owlapi.reasoner.Node;
import org.semanticweb.owlapi.reasoner.NodeSet;
public class OWLReasonerTest extends AbstractReasonerTest {
public OWLReasonerTest(String name) {
super(name);
}
public void testgetInverseObjectPropertyExpressions() throws Exception {
String axioms="SubObjectPropertyOf(:r ObjectInverseOf(:s))"
+ "SubObjectPropertyOf(:s ObjectInverseOf(:t))"
+ "SubObjectPropertyOf(:t :r)";
loadOntologyWithAxioms(axioms);
createOWLReasoner();
Node<OWLObjectPropertyExpression> r_inverses=m_reasoner.getInverseObjectProperties(OP(IRI("r")));
Node<OWLObjectPropertyExpression> invr_inverses=m_reasoner.getInverseObjectProperties(m_dataFactory.getOWLObjectInverseOf(OP(IRI("r"))));
Set<OWLObjectPropertyExpression> r_inverses_expected=new HashSet<OWLObjectPropertyExpression>();
r_inverses_expected.add(m_dataFactory.getOWLObjectInverseOf(OP(IRI("r"))));
r_inverses_expected.add(OP(IRI("s")));
r_inverses_expected.add(m_dataFactory.getOWLObjectInverseOf(OP(IRI("t"))));
Set<OWLObjectPropertyExpression> invr_inverses_expected=new HashSet<OWLObjectPropertyExpression>();
invr_inverses_expected.add(m_dataFactory.getOWLObjectInverseOf(OP(IRI("s"))));
invr_inverses_expected.add(OP(IRI("r")));
invr_inverses_expected.add(OP(IRI("t")));
assertEquals(r_inverses.getEntities(), r_inverses_expected);
assertEquals(invr_inverses.getEntities(), invr_inverses_expected);
}
public void testBottomObjectPropertySubs() throws Exception {
String axioms="SubObjectPropertyOf(:r :s)";
loadOntologyWithAxioms(axioms);
createOWLReasoner();
assertTrue(m_reasoner.getSubObjectProperties(m_dataFactory.getOWLBottomObjectProperty(), false).isEmpty());
assertTrue(m_reasoner.getSubObjectProperties(m_dataFactory.getOWLBottomObjectProperty(), true).isEmpty());
}
public void testTopObjectPropertySupers() throws Exception {
String axioms="SubObjectPropertyOf(:r :s)";
loadOntologyWithAxioms(axioms);
createOWLReasoner();
assertTrue(m_reasoner.getSuperObjectProperties(m_dataFactory.getOWLTopObjectProperty(), false).isEmpty());
assertTrue(m_reasoner.getSuperObjectProperties(m_dataFactory.getOWLTopObjectProperty(), true).isEmpty());
}
public void testIncrementalAddition() throws Exception {
String axioms="SubClassOf(:A :B)";
loadOntologyWithAxioms(axioms);
OWLClass a=m_dataFactory.getOWLClass(IRI.create(AbstractReasonerTest.NS+"A"));
OWLClass b=m_dataFactory.getOWLClass(IRI.create(AbstractReasonerTest.NS+"B"));
createOWLReasoner();
NodeSet<OWLClass> aSuper=m_reasoner.getSuperClasses(a,false);
NodeSet<OWLClass> bSuper=m_reasoner.getSuperClasses(b,false);
NodeSet<OWLClass> aDirect=m_reasoner.getSuperClasses(a,true);
NodeSet<OWLClass> bDirect=m_reasoner.getSuperClasses(b,true);
assertTrue(!aSuper.containsEntity(a));
assertTrue(aSuper.containsEntity(b));
assertTrue(aSuper.containsEntity(m_dataFactory.getOWLThing()));
assertTrue(aSuper.getFlattened().size()==2);
assertTrue(!bSuper.containsEntity(b));
assertTrue(bSuper.containsEntity(m_dataFactory.getOWLThing()));
assertTrue(bSuper.getFlattened().size()==1);
assertTrue(aDirect.containsEntity(b));
assertTrue(!aDirect.containsEntity(m_dataFactory.getOWLThing()));
assertTrue(aDirect.getFlattened().size()==1);
assertTrue(bDirect.containsEntity(m_dataFactory.getOWLThing()));
assertTrue(bDirect.getFlattened().size()==1);
OWLClass c=m_dataFactory.getOWLClass(IRI.create(AbstractReasonerTest.NS+"C"));
OWLAxiom bImpliesC=m_dataFactory.getOWLSubClassOfAxiom(b,c);
m_ontologyManager.addAxiom(m_ontology,bImpliesC);
m_reasoner.flush();
aSuper=m_reasoner.getSuperClasses(a,false);
bSuper=m_reasoner.getSuperClasses(b,false);
NodeSet<OWLClass> cSuper=m_reasoner.getSuperClasses(c,false);
aDirect=m_reasoner.getSuperClasses(a,true);
bDirect=m_reasoner.getSuperClasses(b,true);
NodeSet<OWLClass> cDirect=m_reasoner.getSuperClasses(c,false);
assertTrue(!aSuper.containsEntity(a));
assertTrue(aSuper.containsEntity(b));
assertTrue(aSuper.containsEntity(c));
assertTrue(aSuper.containsEntity(m_dataFactory.getOWLThing()));
assertTrue(aSuper.getFlattened().size()==3);
assertTrue(!bSuper.containsEntity(b));
assertTrue(bSuper.containsEntity(c));
assertTrue(bSuper.containsEntity(m_dataFactory.getOWLThing()));
assertTrue(bSuper.getFlattened().size()==2);
assertTrue(!cSuper.containsEntity(a));
assertTrue(!cSuper.containsEntity(b));
assertTrue(!cSuper.containsEntity(c));
assertTrue(cSuper.containsEntity(m_dataFactory.getOWLThing()));
assertTrue(cSuper.getFlattened().size()==1);
assertTrue(!aDirect.containsEntity(a));
assertTrue(aDirect.containsEntity(b));
assertTrue(!aDirect.containsEntity(c));
assertTrue(!aDirect.containsEntity(m_dataFactory.getOWLThing()));
assertTrue(aDirect.getFlattened().size()==1);
assertTrue(!bDirect.containsEntity(a));
assertTrue(!bDirect.containsEntity(b));
assertTrue(bDirect.containsEntity(c));
assertTrue(!bDirect.containsEntity(m_dataFactory.getOWLThing()));
assertTrue(bDirect.getFlattened().size()==1);
assertTrue(!cDirect.containsEntity(a));
assertTrue(!cDirect.containsEntity(b));
assertTrue(!cDirect.containsEntity(c));
assertTrue(cDirect.containsEntity(m_dataFactory.getOWLThing()));
assertTrue(cDirect.getFlattened().size()==1);
m_ontologyManager.removeAxiom(m_ontology,bImpliesC);
m_reasoner.flush();
aSuper=m_reasoner.getSuperClasses(a,false);
bSuper=m_reasoner.getSuperClasses(b,false);
cSuper=m_reasoner.getSuperClasses(c,false);
aDirect=m_reasoner.getSuperClasses(a,true);
bDirect=m_reasoner.getSuperClasses(b,true);
cDirect=m_reasoner.getSuperClasses(c,false);
assertTrue(!aSuper.containsEntity(a));
assertTrue(aSuper.containsEntity(b));
assertTrue(!aSuper.containsEntity(c));
assertTrue(aSuper.containsEntity(m_dataFactory.getOWLThing()));
assertTrue(aSuper.getFlattened().size()==2);
assertTrue(!bSuper.containsEntity(b));
assertTrue(!bSuper.containsEntity(c));
assertTrue(bSuper.containsEntity(m_dataFactory.getOWLThing()));
assertTrue(bSuper.getFlattened().size()==1);
assertTrue(!cSuper.containsEntity(a));
assertTrue(!cSuper.containsEntity(b));
assertTrue(!cSuper.containsEntity(c));
assertTrue(cSuper.containsEntity(m_dataFactory.getOWLThing()));
assertTrue(cSuper.getFlattened().size()==1);
assertTrue(!aDirect.containsEntity(a));
assertTrue(aDirect.containsEntity(b));
assertTrue(!aDirect.containsEntity(c));
assertTrue(!aDirect.containsEntity(m_dataFactory.getOWLThing()));
assertTrue(aDirect.getFlattened().size()==1);
assertTrue(!bDirect.containsEntity(a));
assertTrue(!bDirect.containsEntity(b));
assertTrue(!bDirect.containsEntity(c));
assertTrue(bDirect.containsEntity(m_dataFactory.getOWLThing()));
assertTrue(bDirect.getFlattened().size()==1);
assertTrue(!cDirect.containsEntity(a));
assertTrue(!cDirect.containsEntity(b));
assertTrue(!cDirect.containsEntity(c));
assertTrue(cDirect.containsEntity(m_dataFactory.getOWLThing()));
assertTrue(cDirect.getFlattened().size()==1);
}
public void testIncrementalAddition2() throws Exception {
String axioms="ObjectPropertyAssertion(:f :a :b) FunctionalObjectProperty(:f)";
loadOntologyWithAxioms(axioms);
createOWLReasoner();
assertTrue(m_reasoner.isConsistent());
OWLObjectProperty f=m_dataFactory.getOWLObjectProperty(IRI.create(AbstractReasonerTest.NS+"f"));
OWLNamedIndividual a=m_dataFactory.getOWLNamedIndividual(IRI.create(AbstractReasonerTest.NS+"a"));
OWLNamedIndividual b=m_dataFactory.getOWLNamedIndividual(IRI.create(AbstractReasonerTest.NS+"b"));
OWLNamedIndividual c=m_dataFactory.getOWLNamedIndividual(IRI.create(AbstractReasonerTest.NS+"c"));
OWLAxiom fac=m_dataFactory.getOWLObjectPropertyAssertionAxiom(f,a,c);
m_ontologyManager.addAxiom(m_ontology,fac);
m_reasoner.flush();
assertTrue(m_reasoner.isConsistent());
OWLAxiom bneqc=m_dataFactory.getOWLDifferentIndividualsAxiom(b,c);
m_ontologyManager.addAxiom(m_ontology,bneqc);
assertTrue(m_reasoner.isConsistent());
m_reasoner.flush();
assertFalse(m_reasoner.isConsistent());
m_ontologyManager.removeAxiom(m_ontology,fac);
assertFalse(m_reasoner.isConsistent());
m_reasoner.flush();
assertTrue(m_reasoner.isConsistent());
}
public void testGetDataPropertyValues() throws Exception {
loadOntologyWithAxioms(
"DataPropertyAssertion(:dp :a \"RDFPlainLiteralwithEmptyLangTag@\"^^rdf:PlainLiteral) "+
"DataPropertyAssertion(:dp :a \"RDFPlainLiteralwithEmptyLangTag\") "+
"DataPropertyAssertion(:dp :a \"RDFPlainLiteralWithLangTag@en-gb\"^^rdf:PlainLiteral) "+
"DataPropertyAssertion(:dp :a \"RDFPlainLiteralWithLangTag\"@en-gb) "+
"DataPropertyAssertion(:dp :b \"abc\") "+
"DataPropertyAssertion(:dp :b \"abc@\"^^rdf:PlainLiteral) "+
"DataPropertyAssertion(:dp :c \"1\"^^xsd:integer) "+
"DataPropertyAssertion(:dp :c \"01\"^^xsd:integer) "+
"DataPropertyAssertion(:dp :c \"1\"^^xsd:short)"
);
createOWLReasoner();
assertTrue(m_reasoner.isConsistent());
assertContainsAll(m_reasoner.getDataPropertyValues(NS_NI("a"),NS_DP("dp")),
PL("RDFPlainLiteralwithEmptyLangTag",""),
PL("RDFPlainLiteralWithLangTag","en-gb")
);
assertContainsAll(m_reasoner.getDataPropertyValues(NS_NI("b"),NS_DP("dp")),
PL("abc","")
);
assertContainsAll(m_reasoner.getDataPropertyValues(NS_NI("c"),NS_DP("dp")),
TL("1","xsd:integer"),
TL("01","xsd:integer"),
TL("1","xsd:short")
);
}
public void testEquivalenceClasses() throws Exception {
Configuration c=new Configuration();
c.individualNodeSetPolicy=IndividualNodeSetPolicy.BY_SAME_AS;
loadSameAsTest(c);
OWLNamedIndividual a1=m_dataFactory.getOWLNamedIndividual(IRI.create(AbstractReasonerTest.NS+"a1"));
OWLNamedIndividual a2_1=m_dataFactory.getOWLNamedIndividual(IRI.create(AbstractReasonerTest.NS+"a2_1"));
OWLNamedIndividual a2_2=m_dataFactory.getOWLNamedIndividual(IRI.create(AbstractReasonerTest.NS+"a2_2"));
OWLNamedIndividual b1_1=m_dataFactory.getOWLNamedIndividual(IRI.create(AbstractReasonerTest.NS+"b1_1"));
OWLNamedIndividual b1_2=m_dataFactory.getOWLNamedIndividual(IRI.create(AbstractReasonerTest.NS+"b1_2"));
OWLNamedIndividual b2=m_dataFactory.getOWLNamedIndividual(IRI.create(AbstractReasonerTest.NS+"b2"));
OWLClass A=m_dataFactory.getOWLClass(IRI.create(AbstractReasonerTest.NS+"A"));
OWLClass B=m_dataFactory.getOWLClass(IRI.create(AbstractReasonerTest.NS+"B"));
OWLClass C=m_dataFactory.getOWLClass(IRI.create(AbstractReasonerTest.NS+"C"));
NodeSet<OWLNamedIndividual> As=m_reasoner.getInstances(A,false);
NodeSet<OWLNamedIndividual> Bs=m_reasoner.getInstances(B,false);
NodeSet<OWLNamedIndividual> directBs=m_reasoner.getInstances(B,true);
NodeSet<OWLNamedIndividual> Cs=m_reasoner.getInstances(C,false);
assertTrue(As.getNodes().size()==2);
assertTrue(As.getFlattened().size()==3);
assertTrue(Bs.getNodes().size()==2);
assertTrue(Bs.getFlattened().size()==3);
assertTrue(directBs.getNodes().size()==1);
assertTrue(directBs.getFlattened().size()==1);
assertTrue(Cs.getNodes().size()==1);
assertTrue(Cs.getFlattened().size()==2);
for (Node<OWLNamedIndividual> ANode : As.getNodes()) {
if (ANode.getSize()==1)
assertTrue(ANode.contains(a1));
else if (ANode.getSize()==2) {
assertTrue(ANode.contains(a2_1));
assertTrue(ANode.contains(a2_2));
}
else
assertTrue(false);
}
for (Node<OWLNamedIndividual> BNode : Bs.getNodes()) {
if (BNode.getSize()==1)
assertTrue(BNode.contains(b2));
else if (BNode.getSize()==2) {
assertTrue(BNode.contains(b1_1));
assertTrue(BNode.contains(b1_2));
}
else
assertTrue(false);
}
for (Node<OWLNamedIndividual> directBNode : directBs.getNodes()) {
if (directBNode.getSize()==1)
assertTrue(directBNode.contains(b2));
else
assertTrue(false);
}
for (Node<OWLNamedIndividual> CNode : Cs.getNodes()) {
if (CNode.getSize()==2) {
assertTrue(CNode.contains(b1_1));
assertTrue(CNode.contains(b1_2));
}
else
assertTrue(false);
}
}
public void testNonEquivalenceClasses() throws Exception {
Configuration c=new Configuration();
c.individualNodeSetPolicy=IndividualNodeSetPolicy.BY_NAME;
loadSameAsTest(c);
OWLNamedIndividual a1=m_dataFactory.getOWLNamedIndividual(IRI.create(AbstractReasonerTest.NS+"a1"));
OWLNamedIndividual a2_1=m_dataFactory.getOWLNamedIndividual(IRI.create(AbstractReasonerTest.NS+"a2_1"));
OWLNamedIndividual a2_2=m_dataFactory.getOWLNamedIndividual(IRI.create(AbstractReasonerTest.NS+"a2_2"));
OWLNamedIndividual b1_1=m_dataFactory.getOWLNamedIndividual(IRI.create(AbstractReasonerTest.NS+"b1_1"));
OWLNamedIndividual b1_2=m_dataFactory.getOWLNamedIndividual(IRI.create(AbstractReasonerTest.NS+"b1_2"));
OWLNamedIndividual b2=m_dataFactory.getOWLNamedIndividual(IRI.create(AbstractReasonerTest.NS+"b2"));
OWLClass A=m_dataFactory.getOWLClass(IRI.create(AbstractReasonerTest.NS+"A"));
OWLClass B=m_dataFactory.getOWLClass(IRI.create(AbstractReasonerTest.NS+"B"));
OWLClass C=m_dataFactory.getOWLClass(IRI.create(AbstractReasonerTest.NS+"C"));
NodeSet<OWLNamedIndividual> As=m_reasoner.getInstances(A,false);
NodeSet<OWLNamedIndividual> Bs=m_reasoner.getInstances(B,false);
NodeSet<OWLNamedIndividual> directBs=m_reasoner.getInstances(B,true);
NodeSet<OWLNamedIndividual> Cs=m_reasoner.getInstances(C,false);
assertTrue(As.getNodes().size()==3);
assertTrue(As.getFlattened().size()==3);
assertTrue(Bs.getNodes().size()==3);
assertTrue(Bs.getFlattened().size()==3);
assertTrue(directBs.getNodes().size()==1);
assertTrue(directBs.getFlattened().size()==1);
assertTrue(Cs.getNodes().size()==2);
assertTrue(Cs.getFlattened().size()==2);
for (Node<OWLNamedIndividual> ANode : As.getNodes()) {
assertTrue(ANode.getSize()==1);
}
for (Node<OWLNamedIndividual> BNode : Bs.getNodes()) {
assertTrue(BNode.getSize()==1);
}
for (Node<OWLNamedIndividual> directBNode : directBs.getNodes()) {
assertTrue(directBNode.getSize()==1);
}
for (Node<OWLNamedIndividual> CNode : Cs.getNodes()) {
assertTrue(CNode.getSize()==1);
}
assertTrue(As.containsEntity(a1));
assertTrue(As.containsEntity(a2_1));
assertTrue(As.containsEntity(a2_2));
assertTrue(Bs.containsEntity(b1_1));
assertTrue(Bs.containsEntity(b1_2));
assertTrue(Bs.containsEntity(b2));
assertTrue(Cs.containsEntity(b1_1));
assertTrue(Cs.containsEntity(b1_2));
assertTrue(directBs.containsEntity(b2));
}
protected void loadSameAsTest(Configuration c) throws Exception {
String axioms="Declaration(NamedIndividual(:a1)) Declaration(NamedIndividual(:b1_1)) Declaration(NamedIndividual(:b1_2)) Declaration(NamedIndividual(:a2_1)) Declaration(NamedIndividual(:a2_2)) Declaration(NamedIndividual(:b2)) Declaration(ObjectProperty(:f)) "
+"ObjectPropertyAssertion(:f :a1 :b1_1) "
+"ObjectPropertyAssertion(:f :a1 :b1_2) "
+"SameIndividual(:a2_1 :a2_2) "
+"ClassAssertion(:A :a1) "
+"ClassAssertion(:A :a2_1) "
+"ClassAssertion(:C :b1_1) "
+"ClassAssertion(:B :b2) "
+"SubClassOf(:C :B) "
+"FunctionalObjectProperty(:f) ";
loadOntologyWithAxioms(axioms);
createOWLReasoner(c);
}
}