package org.semanticweb.HermiT.reasoner; import org.semanticweb.owlapi.apibinding.OWLManager; import org.semanticweb.owlapi.model.IRI; import org.semanticweb.owlapi.model.OWLClass; import org.semanticweb.owlapi.model.OWLClassExpression; import org.semanticweb.owlapi.model.OWLDataFactory; import org.semanticweb.owlapi.model.OWLDataProperty; import org.semanticweb.owlapi.model.OWLIndividual; import org.semanticweb.owlapi.model.OWLNamedIndividual; import org.semanticweb.owlapi.model.OWLObjectProperty; import org.semanticweb.owlapi.model.OWLObjectPropertyExpression; public class ComplexConceptTest extends AbstractReasonerTest { public ComplexConceptTest(String name) { super(name); } public void testConceptWithDatatypes() throws Exception { StringBuffer buffer = new StringBuffer(); buffer.append("Declaration(NamedIndividual(:a))"); buffer.append("Declaration(Class(:A))"); buffer.append("Declaration(Class(:B))"); buffer.append("Declaration(Class(:C))"); buffer.append("Declaration(ObjectProperty(:f))"); buffer.append("Declaration(DataProperty(:dp))"); buffer.append("SubClassOf(:A ObjectSomeValuesFrom(:f :B))"); buffer.append("SubClassOf(:A ObjectSomeValuesFrom(:f :C))"); buffer.append("SubClassOf(:B DataSomeValuesFrom(:dp DataOneOf( \"abc\"^^xsd:string \"def\"^^xsd:string )))"); buffer.append("SubClassOf(:C DataHasValue(:dp \"abc@\"^^rdf:PlainLiteral))"); buffer.append("FunctionalObjectProperty(:f)"); buffer.append("ClassAssertion(:A :a)"); loadReasonerWithAxioms(buffer.toString()); OWLDataFactory df = OWLManager.createOWLOntologyManager().getOWLDataFactory(); OWLNamedIndividual a = df.getOWLNamedIndividual(IRI.create("file:/c/test.owl#a")); OWLObjectProperty f = df.getOWLObjectProperty(IRI.create("file:/c/test.owl#f")); OWLDataProperty dp = df.getOWLDataProperty(IRI.create("file:/c/test.owl#dp")); OWLClassExpression desc = df.getOWLObjectSomeValuesFrom(f, df.getOWLDataSomeValuesFrom(dp, df.getOWLDataOneOf(PL("abc","")))); assertInstanceOf(desc, a, true); } public void testConceptWithDatatypes2() throws Exception { StringBuffer buffer = new StringBuffer(); buffer.append("Declaration(NamedIndividual(:a))"); buffer.append("Declaration(Class(:A))"); buffer.append("Declaration(DataProperty(:dp))"); buffer.append("SubClassOf(:A DataAllValuesFrom(:dp DataComplementOf(rdfs:Literal)))"); buffer.append("ClassAssertion(:A :a)"); loadReasonerWithAxioms(buffer.toString()); OWLDataFactory df = OWLManager.createOWLOntologyManager().getOWLDataFactory(); OWLNamedIndividual a = df.getOWLNamedIndividual(IRI.create("file:/c/test.owl#a")); OWLDataProperty dp = df.getOWLDataProperty(IRI.create("file:/c/test.owl#dp")); OWLClassExpression desc = df.getOWLDataSomeValuesFrom(dp, df.getTopDatatype()); assertInstanceOf(desc, a, false); } public void testConceptWithNominals() throws Exception { StringBuffer buffer = new StringBuffer(); buffer.append("Declaration(NamedIndividual(:a))"); buffer.append("Declaration(NamedIndividual(:b))"); buffer.append("Declaration(NamedIndividual(:o))"); buffer.append("Declaration(Class(:A))"); buffer.append("Declaration(Class(:B))"); buffer.append("Declaration(ObjectProperty(:f1))"); buffer.append("Declaration(ObjectProperty(:f2))"); buffer.append("Declaration(DataProperty(:dp))"); buffer.append("ClassAssertion(ObjectSomeValuesFrom(:f1 ObjectSomeValuesFrom(:f2 ObjectOneOf(:o))) :a)"); buffer.append("ClassAssertion(ObjectSomeValuesFrom(:f1 ObjectSomeValuesFrom(:f2 ObjectOneOf(:o))) :b)"); buffer.append("InverseFunctionalObjectProperty(:f1)"); buffer.append("InverseFunctionalObjectProperty(:f2)"); buffer.append("ClassAssertion(ObjectAllValuesFrom(:f1 :A) :a)"); buffer.append("ClassAssertion(ObjectAllValuesFrom(:f1 :B) :b)"); loadReasonerWithAxioms(buffer.toString()); OWLDataFactory df = OWLManager.createOWLOntologyManager().getOWLDataFactory(); OWLNamedIndividual o = df.getOWLNamedIndividual(IRI.create("file:/c/test.owl#o")); OWLObjectProperty f2 = df.getOWLObjectProperty(IRI.create("file:/c/test.owl#f2")); OWLObjectPropertyExpression invf2 = df.getOWLObjectInverseOf(f2); OWLClass A = df.getOWLClass(IRI.create("file:/c/test.owl#A")); OWLClass B = df.getOWLClass(IRI.create("file:/c/test.owl#B")); OWLClassExpression desc = df.getOWLObjectAllValuesFrom(invf2, df.getOWLObjectIntersectionOf(A, B)); assertInstanceOf(desc, o, true); } public void testConceptWithNominals2() throws Exception { StringBuffer buffer = new StringBuffer(); buffer.append("Declaration(NamedIndividual(:a))"); buffer.append("Declaration(NamedIndividual(:b))"); buffer.append("Declaration(NamedIndividual(:o))"); buffer.append("Declaration(Class(:A))"); buffer.append("Declaration(Class(:B))"); buffer.append("Declaration(ObjectProperty(:f1))"); buffer.append("Declaration(ObjectProperty(:f2))"); buffer.append("ClassAssertion(ObjectSomeValuesFrom(:f1 ObjectSomeValuesFrom(:f2 ObjectOneOf(:o))) :a)"); buffer.append("ClassAssertion(ObjectSomeValuesFrom(:f1 ObjectSomeValuesFrom(:f2 ObjectOneOf(:o))) :b)"); buffer.append("InverseFunctionalObjectProperty(:f1)"); buffer.append("InverseFunctionalObjectProperty(:f2)"); buffer.append("ClassAssertion(ObjectAllValuesFrom(:f1 :A) :a)"); buffer.append("ClassAssertion(ObjectAllValuesFrom(:f1 :B) :b)"); loadReasonerWithAxioms(buffer.toString()); OWLDataFactory df = OWLManager.createOWLOntologyManager().getOWLDataFactory(); OWLNamedIndividual a = df.getOWLNamedIndividual(IRI.create("file:/c/test.owl#a")); OWLNamedIndividual b = df.getOWLNamedIndividual(IRI.create("file:/c/test.owl#b")); OWLClassExpression desc = df.getOWLObjectIntersectionOf(df.getOWLObjectOneOf(a), df.getOWLObjectOneOf(b)); assertInstanceOf(desc, a, true); assertInstanceOf(desc, b, true); } public void testConceptWithNominals3() throws Exception { StringBuffer buffer = new StringBuffer(); buffer.append("Declaration(NamedIndividual(:a))"); buffer.append("Declaration(NamedIndividual(:b))"); buffer.append("Declaration(NamedIndividual(:o))"); buffer.append("Declaration(Class(:A))"); buffer.append("Declaration(Class(:B))"); buffer.append("Declaration(ObjectProperty(:f1))"); buffer.append("Declaration(ObjectProperty(:f2))"); buffer.append("DisjointClasses(:A :B)"); buffer.append("ClassAssertion(ObjectSomeValuesFrom(:f1 ObjectSomeValuesFrom(:f2 ObjectOneOf(:o))) :a)"); buffer.append("ClassAssertion(ObjectSomeValuesFrom(:f1 ObjectSomeValuesFrom(:f2 ObjectOneOf(:o))) :b)"); buffer.append("InverseFunctionalObjectProperty(:f1)"); buffer.append("InverseFunctionalObjectProperty(:f2)"); buffer.append("ClassAssertion(ObjectAllValuesFrom(:f1 :A) :a)"); buffer.append("ClassAssertion(ObjectAllValuesFrom(:f1 :B) :b)"); loadReasonerWithAxioms(buffer.toString()); assertABoxSatisfiable(false); } public void testConceptWithNominals4() throws Exception { StringBuffer buffer = new StringBuffer(); buffer.append("Declaration(NamedIndividual(:a))"); buffer.append("Declaration(NamedIndividual(:b))"); buffer.append("Declaration(NamedIndividual(:o))"); buffer.append("Declaration(ObjectProperty(:f1))"); buffer.append("Declaration(ObjectProperty(:f2))"); buffer.append("DisjointClasses(ObjectOneOf(:a) ObjectOneOf(:b))"); buffer.append("ClassAssertion(ObjectSomeValuesFrom(:f1 ObjectSomeValuesFrom(:f2 ObjectOneOf(:o))) :a)"); buffer.append("ClassAssertion(ObjectSomeValuesFrom(:f1 ObjectSomeValuesFrom(:f2 ObjectOneOf(:o))) :b)"); buffer.append("InverseFunctionalObjectProperty(:f1)"); buffer.append("InverseFunctionalObjectProperty(:f2)"); loadReasonerWithAxioms(buffer.toString()); assertABoxSatisfiable(false); } public void testConceptWithNominals5() throws Exception { StringBuffer buffer = new StringBuffer(); buffer.append("Declaration(NamedIndividual(:a))"); buffer.append("Declaration(NamedIndividual(:b))"); buffer.append("Declaration(Class(:B))"); buffer.append("Declaration(ObjectProperty(:f))"); buffer.append("Declaration(DataProperty(:dp))"); buffer.append("ClassAssertion(ObjectSomeValuesFrom(:f :B) :a)"); buffer.append("ObjectPropertyAssertion(:f :a :b)"); buffer.append("FunctionalObjectProperty(:f)"); loadReasonerWithAxioms(buffer.toString()); OWLDataFactory df = OWLManager.createOWLOntologyManager().getOWLDataFactory(); OWLIndividual b = df.getOWLNamedIndividual(IRI.create("file:/c/test.owl#b")); OWLClass B = df.getOWLClass(IRI.create("file:/c/test.owl#B")); assertSubsumedBy(df.getOWLObjectOneOf(b), B, true); } public void testJustifications() throws Exception { // test for Matthew's justifications that HermiT originally didn't answer correctly StringBuffer buffer = new StringBuffer(); buffer.append("Declaration(NamedIndividual(:Matt))"); buffer.append("Declaration(NamedIndividual(:Gemma))"); buffer.append("Declaration(Class(:Person))"); buffer.append("Declaration(Class(:Sibling))"); buffer.append("Declaration(ObjectProperty(:hasSibling))"); buffer.append("Declaration(ObjectProperty(:f2))"); buffer.append("Declaration(DataProperty(:dp))"); buffer.append("ClassAssertion(:Person :Matt)"); buffer.append("ClassAssertion(:Person :Gemma)"); buffer.append("ObjectPropertyAssertion(:hasSibling :Matt :Gemma)"); buffer.append("SubClassOf(ObjectIntersectionOf(:Person ObjectSomeValuesFrom(:hasSibling :Person)) :Sibling)"); buffer.append("SubClassOf(:Sibling ObjectIntersectionOf(:Person ObjectSomeValuesFrom(:hasSibling :Person)))"); loadReasonerWithAxioms(buffer.toString()); OWLDataFactory df = OWLManager.createOWLOntologyManager().getOWLDataFactory(); OWLIndividual matt = df.getOWLNamedIndividual(IRI.create("file:/c/test.owl#Matt")); OWLClass sibling = df.getOWLClass(IRI.create("file:/c/test.owl#Sibling")); OWLClassExpression desc = df.getOWLObjectIntersectionOf( df.getOWLObjectOneOf(matt), df.getOWLObjectComplementOf(sibling)); assertSatisfiable(desc, false); } }