package conformancetests; /* This file is part of the JFact DL reasoner Copyright 2011-2013 by Ignazio Palmisano, Dmitry Tsarkov, University of Manchester This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA*/ import static org.junit.Assert.*; import static org.semanticweb.owlapi.apibinding.OWLFunctionalSyntaxFactory.*; import java.util.Arrays; import java.util.HashSet; import java.util.Set; import org.junit.Test; import org.semanticweb.owlapi.apibinding.OWLManager; import org.semanticweb.owlapi.io.StringDocumentSource; import org.semanticweb.owlapi.model.IRI; import org.semanticweb.owlapi.model.OWLAxiom; import org.semanticweb.owlapi.model.OWLClass; import org.semanticweb.owlapi.model.OWLClassExpression; import org.semanticweb.owlapi.model.OWLDataFactory; import org.semanticweb.owlapi.model.OWLDataOneOf; import org.semanticweb.owlapi.model.OWLDataProperty; import org.semanticweb.owlapi.model.OWLDataPropertyAssertionAxiom; import org.semanticweb.owlapi.model.OWLDataRange; import org.semanticweb.owlapi.model.OWLDataSomeValuesFrom; import org.semanticweb.owlapi.model.OWLDatatype; import org.semanticweb.owlapi.model.OWLFacetRestriction; import org.semanticweb.owlapi.model.OWLLiteral; import org.semanticweb.owlapi.model.OWLNamedIndividual; import org.semanticweb.owlapi.model.OWLObjectProperty; import org.semanticweb.owlapi.model.OWLObjectUnionOf; import org.semanticweb.owlapi.model.OWLOntology; import org.semanticweb.owlapi.model.OWLOntologyCreationException; import org.semanticweb.owlapi.model.OWLOntologyManager; import org.semanticweb.owlapi.reasoner.InferenceType; import org.semanticweb.owlapi.reasoner.OWLReasoner; import org.semanticweb.owlapi.reasoner.OWLReasonerFactory; import org.semanticweb.owlapi.vocab.OWL2Datatype; import org.semanticweb.owlapi.vocab.OWLFacet; import org.semanticweb.owlapi.vocab.XSDVocabulary; import testbase.TestBase; @SuppressWarnings("javadoc") public class Fixed extends TestBase { @Test public void testConsistent_owl_real_range_with_DataOneOf() { String premise = "Prefix(:=<http://example.org/>)\n" + "Prefix(xsd:=<http://www.w3.org/2001/XMLSchema#>)\n" + "Prefix(owl:=<http://www.w3.org/2002/07/owl#>)\n" + "Ontology(\n" + " Declaration(NamedIndividual(:a))\n" + " Declaration(DataProperty(:dp))\n" + " Declaration(Class(:A))\n" + " SubClassOf(:A DataAllValuesFrom(:dp owl:real)) \n" + " SubClassOf(:A DataSomeValuesFrom(:dp DataOneOf(\"-INF\"^^xsd:float \"-0\"^^xsd:integer))\n)\n ClassAssertion(:A :a)\n)"; String conclusion = ""; String id = "Consistent_owl_real_range_with_DataOneOf"; TestClasses tc = TestClasses.valueOf("CONSISTENCY"); String d = "The individual a must have either negative Infinity or 0 (-0 as integer is 0) as dp fillers and all dp successors must be from owl:real, which excludes negative infinity, but allows 0."; JUnitRunner r = new JUnitRunner(premise, conclusion, id, tc, d); r.setReasonerFactory(factory()); r.run(); } @Test public void testWebOnt_oneOf_004() { String premise = "Prefix(xsd:=<http://www.w3.org/2001/XMLSchema#>)\n" + "Prefix(owl:=<http://www.w3.org/2002/07/owl#>)\nPrefix(xml:=<http://www.w3.org/XML/1998/namespace>)\nPrefix(rdf:=<http://www.w3.org/1999/02/22-rdf-syntax-ns#>)\nPrefix(rdfs:=<http://www.w3.org/2000/01/rdf-schema#>)\n" + "Ontology(\nDeclaration(DataProperty(<urn:t:p#p>))\n" + "DataPropertyRange(<urn:t:p#p> DataOneOf(\"1\"^^xsd:integer \"2\"^^xsd:integer \"3\"^^xsd:integer \"4\"^^xsd:integer))\n" + "DataPropertyRange(<urn:t:p#p> DataOneOf(\"4\"^^xsd:integer \"5\"^^xsd:integer \"6\"^^xsd:integer))\n" + "ClassAssertion(owl:Thing <urn:t:p#i>)\n" + "ClassAssertion(DataMinCardinality(1 <urn:t:p#p>) <urn:t:p#i>)\n" // +"DataPropertyAssertion(<urn:t:p#p> <urn:t:p#i> \"4\"^^xsd:integer)" + ')'; String conclusion = "Prefix(xsd:=<http://www.w3.org/2001/XMLSchema#>)\n" + "Prefix(owl:=<http://www.w3.org/2002/07/owl#>)\nPrefix(xml:=<http://www.w3.org/XML/1998/namespace>)\nPrefix(rdf:=<http://www.w3.org/1999/02/22-rdf-syntax-ns#>)\nPrefix(rdfs:=<http://www.w3.org/2000/01/rdf-schema#>)\n" + "Ontology(\nDeclaration(DataProperty(<urn:t:p#p>))\n" + "ClassAssertion(owl:Thing <urn:t:p#i>)\n" + "DataPropertyAssertion(<urn:t:p#p> <urn:t:p#i> \"4\"^^xsd:integer))"; String id = "WebOnt_oneOf_004"; TestClasses tc = TestClasses.valueOf("POSITIVE_IMPL"); String d = "This test illustrates the use of dataRange in OWL DL. This test combines some of the ugliest features of XML, RDF and OWL."; JUnitRunner r = new JUnitRunner(premise, conclusion, id, tc, d); r.setReasonerFactory(factory()); r.run(); } @Test public void testWebOnt_oneOf_004_1() throws OWLOntologyCreationException { String premise = "Prefix(xsd:=<http://www.w3.org/2001/XMLSchema#>)\n" + "Prefix(owl:=<http://www.w3.org/2002/07/owl#>)\nPrefix(xml:=<http://www.w3.org/XML/1998/namespace>)\nPrefix(rdf:=<http://www.w3.org/1999/02/22-rdf-syntax-ns#>)\nPrefix(rdfs:=<http://www.w3.org/2000/01/rdf-schema#>)\n" + "Ontology(\nDeclaration(DataProperty(<urn:t:p#p>))\n" + "DataPropertyRange(<urn:t:p#p> DataOneOf(\"1\"^^xsd:integer \"2\"^^xsd:integer \"3\"^^xsd:integer \"4\"^^xsd:integer))\n" + "DataPropertyRange(<urn:t:p#p> DataOneOf(\"4\"^^xsd:integer \"5\"^^xsd:integer \"6\"^^xsd:integer))\n" + "ClassAssertion(owl:Thing <urn:t:p#i>)\n" + "ClassAssertion(DataMinCardinality(1 <urn:t:p#p>) <urn:t:p#i>)\n" // + // "DataPropertyAssertion(<urn:t:p#p> <urn:t:p#i> \"4\"^^xsd:integer)" + ')'; OWLOntology o = OWLManager.createOWLOntologyManager() .loadOntologyFromOntologyDocument( new StringDocumentSource(premise)); OWLReasoner r = factory().createReasoner(o); r.precomputeInferences(InferenceType.CLASS_HIERARCHY); assertTrue(r.isConsistent()); OWLDataFactory df = o.getOWLOntologyManager().getOWLDataFactory(); OWLDataProperty p = df.getOWLDataProperty(IRI.create("urn:t:p#p")); OWLNamedIndividual i = df .getOWLNamedIndividual(IRI.create("urn:t:p#i")); OWLLiteral l = df.getOWLLiteral("4", df.getOWLDatatype(OWL2Datatype.XSD_INTEGER.getIRI())); assertTrue(r.isEntailed(df.getOWLDataPropertyAssertionAxiom(p, i, l))); } @Test public void testBugFix() throws OWLOntologyCreationException { OWLOntologyManager m = OWLManager.createOWLOntologyManager(); OWLOntology o = m.createOntology(); OWLDataProperty p = DataProperty(IRI.create("urn:t:t#p")); OWLNamedIndividual i = NamedIndividual(IRI.create("urn:t:t#i")); m.addAxiom(o, Declaration(p)); m.addAxiom(o, Declaration(i)); OWLDataOneOf owlDataOneOf = DataOneOf(Literal(1), Literal(2), Literal(3), Literal(4)); OWLDataOneOf owlDataOneOf2 = DataOneOf(Literal(4), Literal(5), Literal(6)); m.addAxiom(o, DataPropertyRange(p, owlDataOneOf)); m.addAxiom(o, DataPropertyRange(p, owlDataOneOf2)); m.addAxiom(o, ClassAssertion(DataMinCardinality(1, p, TopDatatype()), i)); OWLReasoner r = factory().createReasoner(o); OWLDataPropertyAssertionAxiom ass = DataPropertyAssertion(p, i, Literal(4)); assertTrue(r.isConsistent()); boolean entailed = r.isEntailed(ass); assertTrue(entailed); } @Test @Changed(reason = "original test had unreliable iris, e.g., http://example.com/2a") public void testConsistent_but_all_unsat() throws Exception { OWLOntologyManager m = OWLManager.createOWLOntologyManager(); IRI ontoIRI = IRI("urn:SpecialGetOntology:Consistentbutallunsat"); OWLOntology o = m.createOntology(ontoIRI); String ns = "http://example.com/"; OWLNamedIndividual i1 = NamedIndividual(IRI(ns + "i1")); OWLNamedIndividual i2 = NamedIndividual(IRI(ns + "i2")); OWLNamedIndividual i3 = NamedIndividual(IRI(ns + "i3")); OWLClass a = Class(IRI(ns + 'a')); OWLClass b = Class(IRI(ns + 'b')); OWLClass c = Class(IRI(ns + 'c')); OWLClass d = Class(IRI(ns + 'd')); OWLClass e = Class(IRI(ns + 'e')); OWLObjectProperty q = ObjectProperty(IRI(ns + 'q')); OWLObjectProperty p = ObjectProperty(IRI(ns + 'p')); OWLObjectProperty s = ObjectProperty(IRI(ns + 's')); OWLObjectProperty t = ObjectProperty(IRI(ns + 't')); OWLObjectProperty v = ObjectProperty(IRI(ns + 'v')); OWLObjectProperty w = ObjectProperty(IRI(ns + 'w')); OWLObjectProperty z = ObjectProperty(IRI(ns + 'z')); OWLObjectProperty r = ObjectProperty(IRI(ns + 'r')); OWLObjectUnionOf domain = ObjectUnionOf(ObjectOneOf(i1), ObjectOneOf(i2), ObjectOneOf(i3)); m.addAxiom(o, Declaration(e)); m.addAxiom(o, SubClassOf(e, ObjectSomeValuesFrom(p, a))); m.addAxiom(o, SubClassOf(e, ObjectSomeValuesFrom(q, d))); m.addAxiom(o, DisjointClasses(e, a)); m.addAxiom(o, DisjointClasses(e, b)); m.addAxiom(o, DisjointClasses(e, d)); m.addAxiom(o, DisjointClasses(e, c)); m.addAxiom(o, Declaration(a)); m.addAxiom(o, SubClassOf(a, domain)); m.addAxiom(o, SubClassOf(a, ObjectSomeValuesFrom(s, e))); m.addAxiom(o, SubClassOf(a, ObjectSomeValuesFrom(t, b))); m.addAxiom(o, DisjointClasses(a, e)); m.addAxiom(o, DisjointClasses(a, b)); m.addAxiom(o, DisjointClasses(a, c)); m.addAxiom(o, Declaration(b)); m.addAxiom(o, SubClassOf(b, ObjectSomeValuesFrom(v, a))); m.addAxiom(o, SubClassOf(b, ObjectSomeValuesFrom(w, c))); m.addAxiom(o, DisjointClasses(b, e)); m.addAxiom(o, DisjointClasses(b, a)); m.addAxiom(o, DisjointClasses(b, c)); m.addAxiom(o, Declaration(d)); m.addAxiom(o, EquivalentClasses(d, ObjectUnionOf(c, b))); m.addAxiom(o, SubClassOf(d, ObjectSomeValuesFrom(z, e))); m.addAxiom(o, DisjointClasses(d, e)); m.addAxiom(o, Declaration(c)); m.addAxiom(o, SubClassOf(c, ObjectSomeValuesFrom(r, b))); m.addAxiom(o, DisjointClasses(c, e)); m.addAxiom(o, DisjointClasses(c, a)); m.addAxiom(o, DisjointClasses(c, b)); m.addAxiom(o, Declaration(p)); m.addAxiom(o, InverseObjectProperties(s, p)); m.addAxiom(o, FunctionalObjectProperty(p)); m.addAxiom(o, InverseFunctionalObjectProperty(p)); m.addAxiom(o, Declaration(q)); m.addAxiom(o, InverseObjectProperties(z, q)); m.addAxiom(o, FunctionalObjectProperty(q)); m.addAxiom(o, InverseFunctionalObjectProperty(q)); m.addAxiom(o, Declaration(s)); m.addAxiom(o, InverseObjectProperties(s, p)); m.addAxiom(o, FunctionalObjectProperty(s)); m.addAxiom(o, InverseFunctionalObjectProperty(s)); m.addAxiom(o, Declaration(t)); m.addAxiom(o, InverseObjectProperties(v, t)); m.addAxiom(o, FunctionalObjectProperty(t)); m.addAxiom(o, InverseFunctionalObjectProperty(t)); m.addAxiom(o, Declaration(v)); m.addAxiom(o, InverseObjectProperties(v, t)); m.addAxiom(o, FunctionalObjectProperty(v)); m.addAxiom(o, InverseFunctionalObjectProperty(v)); m.addAxiom(o, Declaration(w)); m.addAxiom(o, InverseObjectProperties(r, w)); m.addAxiom(o, FunctionalObjectProperty(w)); m.addAxiom(o, InverseFunctionalObjectProperty(w)); m.addAxiom(o, Declaration(z)); m.addAxiom(o, InverseObjectProperties(z, q)); m.addAxiom(o, FunctionalObjectProperty(z)); m.addAxiom(o, InverseFunctionalObjectProperty(z)); m.addAxiom(o, Declaration(r)); m.addAxiom(o, InverseObjectProperties(r, w)); m.addAxiom(o, FunctionalObjectProperty(r)); m.addAxiom(o, InverseFunctionalObjectProperty(r)); OWLReasoner reasoner = factory().createReasoner(o); reasoner.precomputeInferences(InferenceType.CLASS_HIERARCHY); assertTrue(reasoner.isEntailed(SubClassOf(a, OWLNothing()))); assertTrue(reasoner.isEntailed(SubClassOf(b, OWLNothing()))); assertTrue(reasoner.isEntailed(SubClassOf(c, OWLNothing()))); assertTrue(reasoner.isEntailed(SubClassOf(e, OWLNothing()))); assertTrue(reasoner.isEntailed(SubClassOf(d, OWLNothing()))); } @Test public void testPlus_and_Minus_Zero_Integer() { String premise = "Prefix(:=<http://example.org/>)\n" + "Prefix(xsd:=<http://www.w3.org/2001/XMLSchema#>)\n" + "Ontology(\n" + " Declaration(NamedIndividual(:a))\n" + " Declaration(DataProperty(:dp))\nDeclaration(Class(:A))\n" + " SubClassOf(:A DataAllValuesFrom(:dp DataOneOf(\"0\"^^xsd:integer))\n ) \n" + " ClassAssertion(:A :a)\n ClassAssertion( DataSomeValuesFrom(:dp DataOneOf(\"-0\"^^xsd:integer)) :a\n )\n)"; String conclusion = ""; String id = "Plus_and_Minus_Zero_Integer"; TestClasses tc = TestClasses.valueOf("CONSISTENCY"); String d = "For integers 0 and -0 are the same value, so the ontology is consistent."; JUnitRunner r = new JUnitRunner(premise, conclusion, id, tc, d); // r.getConfiguration().setLoggingActive(true); r.setReasonerFactory(factory()); r.run(); } @Test public void testPlus_and_Minus_Zero_Integer_FORTEST() { String premise = "Prefix(:=<http://example.org/>)\n" + "Prefix(xsd:=<http://www.w3.org/2001/XMLSchema#>)\n" + "Ontology(\n" + " Declaration(NamedIndividual(:a))\n" + " Declaration(DataProperty(:dp))\nDeclaration(Class(:A))\n" + " SubClassOf(:A DataAllValuesFrom(:dp DataOneOf(\"0\"^^xsd:integer))\n ) \n" + " ClassAssertion(:A :a)\n ClassAssertion( DataSomeValuesFrom(:dp DataOneOf(\"0\"^^xsd:integer)) :a\n )\n)"; String conclusion = ""; String id = "Plus_and_Minus_Zero_Integer"; TestClasses tc = TestClasses.valueOf("CONSISTENCY"); String d = "For integers 0 and -0 are the same value, so the ontology is consistent."; JUnitRunner r = new JUnitRunner(premise, conclusion, id, tc, d); // r.getConfiguration().setLoggingActive(true); r.setReasonerFactory(factory()); r.run(); } @Test public void testEqual() throws OWLOntologyCreationException { OWLOntologyManager m = OWLManager.createOWLOntologyManager(); OWLOntology o = m.createOntology(); OWLNamedIndividual x = NamedIndividual(IRI("urn:test:x")); OWLNamedIndividual y = NamedIndividual(IRI("urn:test:y")); OWLDataProperty p = DataProperty(IRI("urn:test:p")); OWLLiteral date = Literal("2008-07-08T20:44:11.656+01:00", OWL2Datatype.XSD_DATE_TIME); m.addAxiom(o, DataPropertyAssertion(p, x, date)); m.addAxiom(o, DataPropertyAssertion(p, y, date)); m.addAxiom(o, FunctionalDataProperty(p)); m.addAxiom(o, SameIndividual(x, y)); OWLReasoner r = factory().createReasoner(o); assertTrue( "Ontology was supposed to be consistent!\n" + o.getLogicalAxioms(), r.isConsistent()); } @Test public void testDifferent() throws OWLOntologyCreationException { OWLOntologyManager m = OWLManager.createOWLOntologyManager(); OWLOntology o = m.createOntology(); OWLNamedIndividual x = NamedIndividual(IRI("urn:test:x")); OWLNamedIndividual y = NamedIndividual(IRI("urn:test:y")); OWLDataProperty p = DataProperty(IRI("urn:test:p")); OWLLiteral date1 = Literal("2008-07-08T20:44:11.656+01:00", OWL2Datatype.XSD_DATE_TIME); OWLLiteral date2 = Literal("2008-07-10T20:44:11.656+01:00", OWL2Datatype.XSD_DATE_TIME); m.addAxiom(o, DataPropertyAssertion(p, x, date1)); m.addAxiom(o, DataPropertyAssertion(p, y, date2)); m.addAxiom(o, FunctionalDataProperty(p)); m.addAxiom(o, SameIndividual(x, y)); OWLReasoner r = factory().createReasoner(o); assertFalse( "Ontology was supposed to be inconsistent!\n" + o.getLogicalAxioms(), r.isConsistent()); } @Test public void testReasoner6() throws OWLOntologyCreationException { OWLOntologyManager mngr = OWLManager.createOWLOntologyManager(); OWLOntology ont = mngr.createOntology(); OWLReasonerFactory fac = factory(); OWLReasoner r = fac.createReasoner(ont); assertEquals(1, r.getBottomDataPropertyNode().getEntities().size()); } @Test public void testContradicting_datatype_Restrictions() { String premise = "Prefix(:=<http://example.org/>)\nPrefix(xsd:=<http://www.w3.org/2001/XMLSchema#>)\n" + "Ontology(\n" + " Declaration(NamedIndividual(:a))\n" + " Declaration(DataProperty(:dp))\n" + " Declaration(Class(:A))\n" + " SubClassOf(:A DataAllValuesFrom(:dp DataOneOf(\"3\"^^xsd:integer \"4\"^^xsd:integer))) \n" + " SubClassOf(:A DataAllValuesFrom(:dp DataOneOf(\"2\"^^xsd:integer \"3\"^^xsd:integer)))\n" + " SubClassOf(:A DataSomeValuesFrom(:dp DatatypeRestriction(xsd:integer xsd:minInclusive \"4\"^^xsd:integer)))\n" + " ClassAssertion(:A :a))"; String conclusion = ""; String id = "Contradicting_datatype_Restrictions"; TestClasses tc = TestClasses.valueOf("INCONSISTENCY"); String d = "The individual a is in A and thus must have a dp filler that is an integer >= 4. Furthermore the dp fillers must be in the set {3, 4} and in the set {2, 3}. Although 3 is in both sets, 3 is not >= 4, which causes the inconsistency."; JUnitRunner r = new JUnitRunner(premise, conclusion, id, tc, d); r.setReasonerFactory(factory()); r.run(); } @Test @Changed(reason = "old test appears to use the wrong value") public void testDatatype_Float_Discrete_001() throws OWLOntologyCreationException { OWLDataProperty dp = DataProperty(IRI("http://example.org/ontology/dp")); OWLDatatype f = Datatype(OWL2Datatype.XSD_FLOAT.getIRI()); OWLAxiom ax1 = Declaration(dp); OWLLiteral f0 = Literal(0F); OWLLiteral f1 = Literal(Float.MIN_NORMAL); OWLFacetRestriction min = FacetRestriction(OWLFacet.MIN_EXCLUSIVE, f0); OWLFacetRestriction max = FacetRestriction(OWLFacet.MAX_EXCLUSIVE, f1); OWLDataSomeValuesFrom superClass = DataSomeValuesFrom(dp, DatatypeRestriction(f, min, max)); OWLClass c = Class(IRI("http://example.org/ontology/c")); OWLAxiom ax3 = SubClassOf(c, superClass); OWLAxiom ax2 = ClassAssertion(c, NamedIndividual(IRI("http://example.org/ontology/a"))); OWLOntology o = OWLManager.createOWLOntologyManager().createOntology( new HashSet<OWLAxiom>(Arrays.asList(ax1, ax2, ax3))); OWLReasoner r = factory().createReasoner(o); assertFalse(r.isConsistent()); } @Test public void testBetween() throws OWLOntologyCreationException { OWLOntologyManager m = OWLManager.createOWLOntologyManager(); OWLOntology o = m.createOntology(); OWLNamedIndividual x = NamedIndividual(IRI("urn:test:x")); OWLClass c = Class(IRI("urn:test:c")); OWLDataProperty p = DataProperty(IRI("urn:test:p")); OWLLiteral date1 = Literal("2008-07-08T20:44:11.656+01:00", OWL2Datatype.XSD_DATE_TIME); OWLLiteral date3 = Literal("2008-07-09T20:44:11.656+01:00", OWL2Datatype.XSD_DATE_TIME); OWLLiteral date2 = Literal("2008-07-10T20:44:11.656+01:00", OWL2Datatype.XSD_DATE_TIME); OWLDataRange range = DatatypeRestriction( Datatype(OWL2Datatype.XSD_DATE_TIME.getIRI()), FacetRestriction(OWLFacet.MIN_INCLUSIVE, date1), FacetRestriction(OWLFacet.MAX_INCLUSIVE, date2)); OWLClassExpression psome = DataSomeValuesFrom(p, range); m.addAxiom(o, EquivalentClasses(c, psome)); m.addAxiom(o, DataPropertyAssertion(p, x, date3)); m.addAxiom(o, FunctionalDataProperty(p)); OWLReasoner r = factory().createReasoner(o); assertTrue(r.isConsistent()); assertTrue( "x was supposed to be an instance of c!\n" + o.getLogicalAxioms(), r.isEntailed(ClassAssertion(c, x))); } @Test public void testdatatype_restriction_min_max_inconsistency() { String premise = "Prefix(:=<http://example.org/>)\n" + "Prefix(xsd:=<http://www.w3.org/2001/XMLSchema#>)\n" + "Ontology(\n" + " Declaration(NamedIndividual(:a))\n" + " Declaration(DataProperty(:dp))\n" + " Declaration(Class(:A))\n" + " SubClassOf(:A DataSomeValuesFrom(:dp DatatypeRestriction(xsd:integer xsd:minInclusive \"18\"^^xsd:integer))) \n" + " SubClassOf(:A DataAllValuesFrom(:dp DatatypeRestriction(xsd:integer xsd:maxInclusive \"10\"^^xsd:integer))\n)\n" + " ClassAssertion(:A :a))"; String conclusion = ""; String id = "datatype_restriction_min_max_inconsistency"; TestClasses tc = TestClasses.valueOf("INCONSISTENCY"); String d = "The individual a is supposed to have an integer dp-successor >= 18, but all dp-successors must be <= 10, which is impossible."; JUnitRunner r = new JUnitRunner(premise, conclusion, id, tc, d); // r.getConfiguration().setLoggingActive(true); r.setReasonerFactory(factory()); r.run(); } @Test public void testfunctionality_clash() { String premise = "Prefix(:=<http://example.org/>)\n" + "Prefix(xsd:=<http://www.w3.org/2001/XMLSchema#>)\n" + "Ontology(\n" + " Declaration(NamedIndividual(:a))\n" + " Declaration(DataProperty(:hasAge))\n" + " FunctionalDataProperty(:hasAge) \n" + " ClassAssertion(DataHasValue(:hasAge \"18\"^^xsd:integer) :a) \n" + " ClassAssertion(DataHasValue(:hasAge \"19\"^^xsd:integer) :a))"; String conclusion = ""; String id = "functionality_clash"; TestClasses tc = TestClasses.valueOf("INCONSISTENCY"); String d = "The property hasAge is functional, but the individual a has two distinct hasAge fillers."; JUnitRunner r = new JUnitRunner(premise, conclusion, id, tc, d); r.setReasonerFactory(factory()); r.run(); } @Test public void testinconsistent_datatypes() { String premise = "Prefix(:=<http://example.org/>)\nPrefix(xsd:=<http://www.w3.org/2001/XMLSchema#>)\nOntology(\n" + " Declaration(NamedIndividual(:a))\nDeclaration(DataProperty(:dp))\n" + " Declaration(Class(:A))\n" + " SubClassOf(:A DataAllValuesFrom(:dp xsd:string)) \n" + " SubClassOf(:A DataSomeValuesFrom(:dp xsd:integer)) \n" + " ClassAssertion(:A :a))"; String conclusion = ""; String id = "inconsistent_datatypes"; TestClasses tc = TestClasses.valueOf("INCONSISTENCY"); String d = "The individual a is in the extension of the class A and is thus required to have a dp-successor that is an integer and at the same time all dp-successors are required to be strings, which causes the inconsistency."; JUnitRunner r = new JUnitRunner(premise, conclusion, id, tc, d); r.setReasonerFactory(factory()); r.run(); } @Test @Changed public void testrdfbased_sem_bool_intersection_inst_comp() { String premise = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:owl=\"http://www.w3.org/2002/07/owl#\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\" xmlns:ex=\"http://www.example.org#\" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n" + " <owl:Class rdf:about=\"http://www.example.org#x\"/>\n" + " <owl:Class rdf:about=\"http://www.example.org#y\"/>\n" + " <owl:Class rdf:about=\"http://www.example.org#c\"/>\n" + " <ex:x rdf:about=\"http://www.example.org#z\"><rdf:type rdf:resource=\"http://www.example.org#y\"/></ex:x>\n" + " <rdf:Description rdf:about=\"http://www.example.org#c\">\n" + "<owl:equivalentClass><owl:Class>" + " <owl:intersectionOf rdf:parseType=\"Collection\"><rdf:Description rdf:about=\"http://www.example.org#x\"/><rdf:Description rdf:about=\"http://www.example.org#y\"/></owl:intersectionOf>\n" + "</owl:Class></owl:equivalentClass>" + " </rdf:Description>\n" + "</rdf:RDF>"; String conclusion = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:owl=\"http://www.w3.org/2002/07/owl#\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\" xmlns:ex=\"http://www.example.org#\" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n" + " <owl:Class rdf:about=\"http://www.example.org#c\"/>\n" + " <ex:c rdf:about=\"http://www.example.org#z\"/>\n" + "</rdf:RDF>"; String id = "rdfbased_sem_bool_intersection_inst_comp"; TestClasses tc = TestClasses.valueOf("POSITIVE_IMPL"); String d = "An individual, which is an instance of every component class of an intersection, is an instance of the intersection class expression."; JUnitRunner r = new JUnitRunner(premise, conclusion, id, tc, d); r.setReasonerFactory(factory()); r.run(); } @Test @Changed public void testrdfbased_sem_bool_intersection_term() { String premise = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:owl=\"http://www.w3.org/2002/07/owl#\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\" xmlns:ex=\"http://www.example.org#\" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n" + " <owl:Class rdf:about=\"http://www.example.org#c\"/>\n" + " <owl:Class rdf:about=\"http://www.example.org#x\"/>\n" + " <owl:Class rdf:about=\"http://www.example.org#y\"/>\n" + " <rdf:Description rdf:about=\"http://www.example.org#c\">\n" + "<rdfs:subClassOf><owl:Class>" + " <owl:intersectionOf rdf:parseType=\"Collection\"><rdf:Description rdf:about=\"http://www.example.org#x\"/><rdf:Description rdf:about=\"http://www.example.org#y\"/></owl:intersectionOf>\n" + "</owl:Class></rdfs:subClassOf>" + " </rdf:Description>\n" + "</rdf:RDF>"; String conclusion = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:owl=\"http://www.w3.org/2002/07/owl#\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\" xmlns:ex=\"http://www.example.org#\" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n" + " <owl:Class rdf:about=\"http://www.example.org#c\"/>\n" + " <owl:Class rdf:about=\"http://www.example.org#x\"/>\n" + " <owl:Class rdf:about=\"http://www.example.org#y\"/>\n" + " <rdf:Description rdf:about=\"http://www.example.org#c\"><rdfs:subClassOf rdf:resource=\"http://www.example.org#x\"/><rdfs:subClassOf rdf:resource=\"http://www.example.org#y\"/></rdf:Description></rdf:RDF>"; String id = "rdfbased_sem_bool_intersection_term"; TestClasses tc = TestClasses.valueOf("POSITIVE_IMPL"); String d = "If a class is an intersection of other classes, then the original class is a subclass of each of the other classes."; JUnitRunner r = new JUnitRunner(premise, conclusion, id, tc, d); r.setReasonerFactory(factory()); r.run(); } @Test @Changed public void testrdfbased_sem_bool_union_inst_comp() { String premise = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:owl=\"http://www.w3.org/2002/07/owl#\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\" xmlns:ex=\"http://www.example.org#\" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n" + " <owl:Class rdf:about=\"http://www.example.org#x\"/>\n" + " <owl:Class rdf:about=\"http://www.example.org#y\"/>\n" + " <owl:Class rdf:about=\"http://www.example.org#c\"/>\n" + " <owl:ObjectProperty rdf:about=\"http://www.example.org#p\"/>\n" + " <ex:x rdf:about=\"http://www.example.org#z\"/>\n" + " <rdf:Description rdf:about=\"http://www.example.org#c\">\n" + "<owl:equivalentClass><owl:Class>" + " <owl:unionOf rdf:parseType=\"Collection\"><rdf:Description rdf:about=\"http://www.example.org#x\"/><rdf:Description rdf:about=\"http://www.example.org#y\"/></owl:unionOf>\n" + "</owl:Class></owl:equivalentClass>" + " </rdf:Description>\n</rdf:RDF>"; String conclusion = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:owl=\"http://www.w3.org/2002/07/owl#\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\" xmlns:ex=\"http://www.example.org#\" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n" + " <owl:Class rdf:about=\"http://www.example.org#c\"/>\n" + " <ex:c rdf:about=\"http://www.example.org#z\"/>\n" + "</rdf:RDF>"; String id = "rdfbased_sem_bool_union_inst_comp"; TestClasses tc = TestClasses.valueOf("POSITIVE_IMPL"); String d = "An individual, which is an instance of one of the component classes of a union, is an instance of the union class expression."; JUnitRunner r = new JUnitRunner(premise, conclusion, id, tc, d); r.setReasonerFactory(factory()); r.run(); } @Test @Changed public void testrdfbased_sem_bool_union_term() { String premise = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:owl=\"http://www.w3.org/2002/07/owl#\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\" xmlns:ex=\"http://www.example.org#\" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n" + " <owl:Class rdf:about=\"http://www.example.org#c\"/>\n" + " <owl:Class rdf:about=\"http://www.example.org#x\"/>\n" + " <owl:Class rdf:about=\"http://www.example.org#y\"/>\n" + " <rdf:Description rdf:about=\"http://www.example.org#c\">\n" + "<owl:equivalentClass><owl:Class>" + " <owl:unionOf rdf:parseType=\"Collection\"><rdf:Description rdf:about=\"http://www.example.org#x\"/><rdf:Description rdf:about=\"http://www.example.org#y\"/></owl:unionOf>\n" + "</owl:Class></owl:equivalentClass>" + " </rdf:Description>\n" + "</rdf:RDF>"; String conclusion = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:owl=\"http://www.w3.org/2002/07/owl#\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\" xmlns:ex=\"http://www.example.org#\" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n" + " <owl:Class rdf:about=\"http://www.example.org#c\"/>\n" + " <owl:Class rdf:about=\"http://www.example.org#x\"/>\n" + " <owl:Class rdf:about=\"http://www.example.org#y\"/>\n" + " <rdf:Description rdf:about=\"http://www.example.org#x\"><rdfs:subClassOf rdf:resource=\"http://www.example.org#c\"/></rdf:Description>\n" + " <rdf:Description rdf:about=\"http://www.example.org#y\"><rdfs:subClassOf rdf:resource=\"http://www.example.org#c\"/></rdf:Description></rdf:RDF>"; String id = "rdfbased_sem_bool_union_term"; TestClasses tc = TestClasses.valueOf("POSITIVE_IMPL"); String d = "If a class is a union of other classes, then each of the other classes are subclasses of the original class."; JUnitRunner r = new JUnitRunner(premise, conclusion, id, tc, d); r.setReasonerFactory(factory()); r.run(); } @Test @Changed public void testrdfbased_sem_char_functional_inst() { String premise = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:owl=\"http://www.w3.org/2002/07/owl#\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\" xmlns:ex=\"http://www.example.org#\" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n" + " <owl:ObjectProperty rdf:about=\"http://www.example.org#p\"/>\n" + " <owl:FunctionalProperty rdf:about=\"http://www.example.org#p\"/>\n" + " <rdf:Description rdf:about=\"http://www.example.org#x\"><ex:p rdf:resource=\"http://www.example.org#y1\"/><ex:p rdf:resource=\"http://www.example.org#y2\"/></rdf:Description></rdf:RDF>"; String conclusion = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:owl=\"http://www.w3.org/2002/07/owl#\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\" xmlns:ex=\"http://www.example.org#\" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n" + " <rdf:Description rdf:about=\"http://www.example.org#y1\"><owl:sameAs rdf:resource=\"http://www.example.org#y2\"/></rdf:Description></rdf:RDF>"; String id = "rdfbased_sem_char_functional_inst"; TestClasses tc = TestClasses.valueOf("POSITIVE_IMPL"); String d = "For two triples with the same functional property as their predicates and with the same subject, the objects are the same."; JUnitRunner r = new JUnitRunner(premise, conclusion, id, tc, d); r.setReasonerFactory(factory()); r.run(); } @Test @Changed public void testrdfbased_sem_enum_inst_included() { String premise = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:owl=\"http://www.w3.org/2002/07/owl#\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\" xmlns:ex=\"http://www.example.org#\" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n" + " <owl:Class rdf:about=\"http://www.example.org#e\"/>\n" + " <rdf:Description rdf:about=\"http://www.example.org#e\"><owl:oneOf rdf:parseType=\"Collection\"><rdf:Description rdf:about=\"http://www.example.org#x\"/><rdf:Description rdf:about=\"http://www.example.org#y\"/></owl:oneOf></rdf:Description></rdf:RDF>"; String conclusion = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:owl=\"http://www.w3.org/2002/07/owl#\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\" xmlns:ex=\"http://www.example.org#\" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n" + " <owl:Class rdf:about=\"http://www.example.org#e\"/>\n" + " <ex:e rdf:about=\"http://www.example.org#x\"/>\n" + " <ex:e rdf:about=\"http://www.example.org#y\"/>\n" + "</rdf:RDF>"; String id = "rdfbased_sem_enum_inst_included"; TestClasses tc = TestClasses.valueOf("POSITIVE_IMPL"); String d = "If a class defines an enumeration class expression from two individuals, than both individuals are instances of the class."; JUnitRunner r = new JUnitRunner(premise, conclusion, id, tc, d); r.setReasonerFactory(factory()); r.run(); } @Test @Changed public void testrdfbased_sem_eqdis_different_irrflxv() { String premise = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:owl=\"http://www.w3.org/2002/07/owl#\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\" xmlns:ex=\"http://www.example.org#\" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n" + "<owl:Thing rdf:about=\"http://www.example.org#x\"/>\n" + "<owl:Thing rdf:about=\"http://www.example.org#z\"/>\n" + " <rdf:Description rdf:about=\"http://www.example.org#z\"><owl:sameAs rdf:resource=\"http://www.example.org#x\"/></rdf:Description>\n" + " <rdf:Description rdf:about=\"http://www.example.org#x\"><owl:differentFrom rdf:resource=\"http://www.example.org#z\"/></rdf:Description></rdf:RDF>"; String conclusion = ""; String id = "rdfbased_sem_eqdis_different_irrflxv"; TestClasses tc = TestClasses.valueOf("INCONSISTENCY"); String d = "Diversity of two individuals is irreflexive."; JUnitRunner r = new JUnitRunner(premise, conclusion, id, tc, d); r.setReasonerFactory(factory()); r.run(); } @Test @Changed public void testrdfbased_sem_eqdis_disclass_irrflxv() { String premise = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:owl=\"http://www.w3.org/2002/07/owl#\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\" xmlns:ex=\"http://www.example.org#\" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n" + " <owl:Class rdf:about=\"http://www.example.org#c\"/>\n" + " <owl:Class rdf:about=\"http://www.example.org#fake\"/>\n" + " <owl:Thing rdf:about=\"http://www.example.org#x\"/>\n" + " <ex:c rdf:about=\"http://www.example.org#x\"/>\n" + " <rdf:Description rdf:about=\"http://www.example.org#c\"><owl:disjointWith rdf:resource=\"http://www.example.org#fake\"/></rdf:Description>\n" + " <rdf:Description rdf:about=\"http://www.example.org#fake\"><owl:equivalentClass rdf:resource=\"http://www.example.org#c\"/></rdf:Description></rdf:RDF>"; String conclusion = ""; String id = "rdfbased_sem_eqdis_disclass_irrflxv"; TestClasses tc = TestClasses.valueOf("INCONSISTENCY"); String d = "Disjointness of two non-empty classes is irreflexive."; JUnitRunner r = new JUnitRunner(premise, conclusion, id, tc, d); r.setReasonerFactory(factory()); r.run(); } @Test @Changed public void testrdfbased_sem_eqdis_disprop_eqprop() { String premise = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:owl=\"http://www.w3.org/2002/07/owl#\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\" xmlns:ex=\"http://www.example.org#\" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n" + " <owl:ObjectProperty rdf:about=\"http://www.example.org#p1\"/>\n" + " <owl:ObjectProperty rdf:about=\"http://www.example.org#p2\"/>\n" + " <rdf:Description rdf:about=\"http://www.example.org#s2\"><ex:p2 rdf:resource=\"http://www.example.org#o2\"/></rdf:Description>\n" + " <rdf:Description rdf:about=\"http://www.example.org#s1\"><ex:p1 rdf:resource=\"http://www.example.org#o1\"/></rdf:Description>\n" + " <rdf:Description rdf:about=\"http://www.example.org#p1\"><owl:equivalentProperty rdf:resource=\"http://www.example.org#p2\"/><owl:propertyDisjointWith rdf:resource=\"http://www.example.org#p2\"/></rdf:Description></rdf:RDF>"; String conclusion = ""; String id = "rdfbased_sem_eqdis_disprop_eqprop"; TestClasses tc = TestClasses.valueOf("INCONSISTENCY"); String d = "Two non-empty properties cannot both be equivalent and disjoint."; JUnitRunner r = new JUnitRunner(premise, conclusion, id, tc, d); r.setReasonerFactory(factory()); r.run(); } @Test @Changed public void testrdfbased_sem_eqdis_disprop_inst() { String premise = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:owl=\"http://www.w3.org/2002/07/owl#\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\" xmlns:ex=\"http://www.example.org#\" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n" + " <owl:ObjectProperty rdf:about=\"http://www.example.org#p1\"/>\n" + " <owl:ObjectProperty rdf:about=\"http://www.example.org#p2\"/>\n" + " <rdf:Description rdf:about=\"http://www.example.org#s\"><ex:p1 rdf:resource=\"http://www.example.org#o\"/><ex:p2 rdf:resource=\"http://www.example.org#o\"/></rdf:Description>\n" + " <rdf:Description rdf:about=\"http://www.example.org#p1\"><owl:propertyDisjointWith rdf:resource=\"http://www.example.org#p2\"/></rdf:Description></rdf:RDF>"; String conclusion = ""; String id = "rdfbased_sem_eqdis_disprop_inst"; TestClasses tc = TestClasses.valueOf("INCONSISTENCY"); String d = "Triples with disjoint properties as their predicates have different subjects or different objects."; JUnitRunner r = new JUnitRunner(premise, conclusion, id, tc, d); r.setReasonerFactory(factory()); r.run(); } @Test @Changed public void testrdfbased_sem_eqdis_disprop_irrflxv() { String premise = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:owl=\"http://www.w3.org/2002/07/owl#\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\" xmlns:ex=\"http://www.example.org#\" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n" + " <owl:ObjectProperty rdf:about=\"http://www.example.org#p\"/>\n" + " <owl:ObjectProperty rdf:about=\"http://www.example.org#q\"/>\n" + " <rdf:Description rdf:about=\"http://www.example.org#s\"><ex:p rdf:resource=\"http://www.example.org#o\"/></rdf:Description>\n" + " <rdf:Description rdf:about=\"http://www.example.org#q\"><owl:equivalentProperty rdf:resource=\"http://www.example.org#p\"/></rdf:Description>\n" + " <rdf:Description rdf:about=\"http://www.example.org#p\"><owl:propertyDisjointWith rdf:resource=\"http://www.example.org#q\"/></rdf:Description></rdf:RDF>"; String conclusion = ""; String id = "rdfbased_sem_eqdis_disprop_irrflxv"; TestClasses tc = TestClasses.valueOf("INCONSISTENCY"); String d = "Disjointness of two non-empty properties is irreflexive."; JUnitRunner r = new JUnitRunner(premise, conclusion, id, tc, d); r.setReasonerFactory(factory()); r.run(); } @Test @Changed public void testrdfbased_sem_eqdis_eqclass_subclass_1() { String premise = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:owl=\"http://www.w3.org/2002/07/owl#\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\" xmlns:ex=\"http://www.example.org#\" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n" + " <owl:Class rdf:about=\"http://www.example.org#c1\"/>\n" + " <owl:Class rdf:about=\"http://www.example.org#c2\"/>\n" + " <rdf:Description rdf:about=\"http://www.example.org#c1\"><owl:equivalentClass rdf:resource=\"http://www.example.org#c2\"/></rdf:Description></rdf:RDF>"; String conclusion = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:owl=\"http://www.w3.org/2002/07/owl#\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\" xmlns:ex=\"http://www.example.org#\" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n" + " <owl:Class rdf:about=\"http://www.example.org#c1\"/>\n" + " <owl:Class rdf:about=\"http://www.example.org#c2\"/>\n" + " <rdf:Description rdf:about=\"http://www.example.org#c2\"><rdfs:subClassOf><rdf:Description rdf:about=\"http://www.example.org#c1\"><rdfs:subClassOf rdf:resource=\"http://www.example.org#c2\"/></rdf:Description></rdfs:subClassOf></rdf:Description></rdf:RDF>"; String id = "rdfbased_sem_eqdis_eqclass_subclass_1"; TestClasses tc = TestClasses.valueOf("POSITIVE_IMPL"); String d = "Two equivalent classes are sub classes of each other."; JUnitRunner r = new JUnitRunner(premise, conclusion, id, tc, d); r.setReasonerFactory(factory()); r.run(); } @Test @Changed public void testrdfbased_sem_eqdis_sameas_subst() { String premise = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:owl=\"http://www.w3.org/2002/07/owl#\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\" xmlns:ex=\"http://www.example.org#\" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n" + "<owl:ObjectProperty rdf:about=\"http://www.example.org#p1\"/>\n" + "<owl:ObjectProperty rdf:about=\"http://www.example.org#p2\"/>\n" + " <rdf:Description rdf:about=\"http://www.example.org#s2\"><owl:sameAs><rdf:Description rdf:about=\"http://www.example.org#s1\"><ex:p1 rdf:resource=\"http://www.example.org#o1\"/></rdf:Description></owl:sameAs></rdf:Description>\n" + " <rdf:Description rdf:about=\"http://www.example.org#o2\"><owl:sameAs rdf:resource=\"http://www.example.org#o1\"/></rdf:Description>\n" + " <rdf:Description rdf:about=\"http://www.example.org#p2\"><owl:sameAs rdf:resource=\"http://www.example.org#p1\"/></rdf:Description>\n" + " <rdf:Description rdf:about=\"http://www.example.org#p2\"><owl:equivalentProperty rdf:resource=\"http://www.example.org#p1\"/></rdf:Description>\n" + "</rdf:RDF>"; String conclusion = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:owl=\"http://www.w3.org/2002/07/owl#\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\" xmlns:ex=\"http://www.example.org#\" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n" + "<owl:ObjectProperty rdf:about=\"http://www.example.org#p1\"/>\n" + "<owl:ObjectProperty rdf:about=\"http://www.example.org#p2\"/>\n" + " <rdf:Description rdf:about=\"http://www.example.org#s2\"><ex:p1 rdf:resource=\"http://www.example.org#o1\"/></rdf:Description>\n" + " <rdf:Description rdf:about=\"http://www.example.org#s1\"><ex:p2 rdf:resource=\"http://www.example.org#o1\"/><ex:p1 rdf:resource=\"http://www.example.org#o2\"/></rdf:Description></rdf:RDF>"; String id = "rdfbased_sem_eqdis_sameas_subst"; TestClasses tc = TestClasses.valueOf("POSITIVE_IMPL"); String d = "Equality of two individuals allows for substituting the subject, predicate and object of an RDF triple by an equal individual."; JUnitRunner r = new JUnitRunner(premise, conclusion, id, tc, d); r.setReasonerFactory(factory()); r.run(); } @Test @Changed public void testrdfbased_sem_eqdis_sameas_sym() { String premise = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:owl=\"http://www.w3.org/2002/07/owl#\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\" xmlns:ex=\"http://www.example.org#\" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n" + "<owl:Thing rdf:about=\"http://www.example.org#x\"/>\n" + "<owl:Thing rdf:about=\"http://www.example.org#y\"/>\n" + " <rdf:Description rdf:about=\"http://www.example.org#x\"><owl:sameAs rdf:resource=\"http://www.example.org#y\"/></rdf:Description></rdf:RDF>"; String conclusion = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:owl=\"http://www.w3.org/2002/07/owl#\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\" xmlns:ex=\"http://www.example.org#\" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n" + "<owl:Thing rdf:about=\"http://www.example.org#x\"/>\n" + "<owl:Thing rdf:about=\"http://www.example.org#y\"/>\n" + " <rdf:Description rdf:about=\"http://www.example.org#y\"><owl:sameAs rdf:resource=\"http://www.example.org#x\"/></rdf:Description></rdf:RDF>"; String id = "rdfbased_sem_eqdis_sameas_sym"; TestClasses tc = TestClasses.valueOf("POSITIVE_IMPL"); String d = "Equality of two individuals is symmetrical."; JUnitRunner r = new JUnitRunner(premise, conclusion, id, tc, d); r.setReasonerFactory(factory()); r.run(); } @Test public void testrdfbased_sem_eqdis_sameas_trans() { String premise = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:owl=\"http://www.w3.org/2002/07/owl#\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\" xmlns:ex=\"http://www.example.org#\" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n" + " <rdf:Description rdf:about=\"http://www.example.org#x\"><owl:sameAs><rdf:Description rdf:about=\"http://www.example.org#y\"><owl:sameAs rdf:resource=\"http://www.example.org#z\"/></rdf:Description></owl:sameAs></rdf:Description></rdf:RDF>"; String conclusion = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:owl=\"http://www.w3.org/2002/07/owl#\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\" xmlns:ex=\"http://www.example.org#\" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n" + " <rdf:Description rdf:about=\"http://www.example.org#x\"><owl:sameAs rdf:resource=\"http://www.example.org#z\"/></rdf:Description></rdf:RDF>"; String id = "rdfbased_sem_eqdis_sameas_trans"; TestClasses tc = TestClasses.valueOf("POSITIVE_IMPL"); String d = "Equality of two individuals is transitive."; JUnitRunner r = new JUnitRunner(premise, conclusion, id, tc, d); r.setReasonerFactory(factory()); r.run(); } @Test @Changed(reason = "without declarations, some properties default to datatype properties and some to annotation properties") public void testrdfbased_sem_ndis_alldisjointproperties_fw() { String premise = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:owl=\"http://www.w3.org/2002/07/owl#\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\" xmlns:ex=\"http://www.example.org#\" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n" + " <owl:ObjectProperty rdf:about=\"http://www.example.org#p1\"/>\n" + " <owl:ObjectProperty rdf:about=\"http://www.example.org#p2\"/>\n" + " <owl:ObjectProperty rdf:about=\"http://www.example.org#p3\"/>\n" + " <owl:AllDisjointProperties rdf:about=\"http://www.example.org#z\"><owl:members rdf:parseType=\"Collection\"><rdf:Description rdf:about=\"http://www.example.org#p1\"/><rdf:Description rdf:about=\"http://www.example.org#p2\"/><rdf:Description rdf:about=\"http://www.example.org#p3\"/></owl:members></owl:AllDisjointProperties>\n" + " <rdf:Description rdf:about=\"http://www.example.org#s\"><ex:p1 rdf:resource=\"http://www.example.org#o\"/><ex:p2 rdf:resource=\"http://www.example.org#o\"/></rdf:Description></rdf:RDF>"; String conclusion = ""; String id = "rdfbased_sem_ndis_alldisjointproperties_fw"; TestClasses tc = TestClasses.valueOf("INCONSISTENCY"); String d = "All the members of an owl:AllDisjointProperties construct are mutually disjoint properties."; JUnitRunner r = new JUnitRunner(premise, conclusion, id, tc, d); r.setReasonerFactory(factory()); r.run(); } @Test @Changed public void testrdfbased_sem_npa_dat_fw() { String premise = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:owl=\"http://www.w3.org/2002/07/owl#\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\" xmlns:ex=\"http://www.example.org#\" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n" + " <owl:Class rdf:about=\"http://www.example.org#z\"/>\n" + " <owl:Thing rdf:about=\"http://www.example.org#s\"/>\n" + " <owl:DatatypeProperty rdf:about=\"http://www.example.org#p\"/><rdf:Description rdf:about=\"http://www.example.org#s\"><ex:p>data</ex:p></rdf:Description>\n" + " <owl:NegativePropertyAssertion><owl:sourceIndividual rdf:resource=\"http://www.example.org#s\"/><owl:assertionProperty rdf:resource=\"http://www.example.org#p\"/><owl:targetValue>data</owl:targetValue></owl:NegativePropertyAssertion></rdf:RDF>"; String conclusion = ""; String id = "rdfbased_sem_npa_dat_fw"; TestClasses tc = TestClasses.valueOf("INCONSISTENCY"); String d = "A negative data property assertion DNPA(s p \"data\") must not occur together with the corresponding positive data property assertion s p \"data\"."; JUnitRunner r = new JUnitRunner(premise, conclusion, id, tc, d); r.setReasonerFactory(factory()); r.run(); } @Test @Changed public void testrdfbased_sem_rdfs_domain_cond() { String premise = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:owl=\"http://www.w3.org/2002/07/owl#\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\" xmlns:ex=\"http://www.example.org#\" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n" + " <owl:Class rdf:about=\"http://www.example.org#c\"/>\n" + " <owl:ObjectProperty rdf:about=\"http://www.example.org#p\"/>\n" + " <rdf:Description rdf:about=\"http://www.example.org#u\"><ex:p rdf:resource=\"http://www.example.org#v\"/></rdf:Description>\n" + " <rdf:Description rdf:about=\"http://www.example.org#p\"><rdfs:domain rdf:resource=\"http://www.example.org#c\"/></rdf:Description></rdf:RDF>"; String conclusion = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:owl=\"http://www.w3.org/2002/07/owl#\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\" xmlns:ex=\"http://www.example.org#\" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n" + " <owl:Class rdf:about=\"http://www.example.org#c\"/>\n" + " <ex:c rdf:about=\"http://www.example.org#u\"/>\n" + "</rdf:RDF>"; String id = "rdfbased_sem_rdfs_domain_cond"; TestClasses tc = TestClasses.valueOf("POSITIVE_IMPL"); String d = "The left hand side individual in a given triple is entailed to be an instance of the domain of the predicate."; JUnitRunner r = new JUnitRunner(premise, conclusion, id, tc, d); r.setReasonerFactory(factory()); r.run(); } @Test @Changed public void testrdfbased_sem_rdfs_range_cond() { String premise = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:owl=\"http://www.w3.org/2002/07/owl#\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\" xmlns:ex=\"http://www.example.org#\" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n" + " <owl:Class rdf:about=\"http://www.example.org#c\"/>\n" + " <owl:ObjectProperty rdf:about=\"http://www.example.org#p\"/>\n" + " <rdf:Description rdf:about=\"http://www.example.org#u\"><ex:p rdf:resource=\"http://www.example.org#v\"/></rdf:Description>\n" + " <rdf:Description rdf:about=\"http://www.example.org#p\"><rdfs:range rdf:resource=\"http://www.example.org#c\"/></rdf:Description></rdf:RDF>"; String conclusion = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:owl=\"http://www.w3.org/2002/07/owl#\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\" xmlns:ex=\"http://www.example.org#\" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n" + " <owl:Class rdf:about=\"http://www.example.org#c\"/>\n" + " <ex:c rdf:about=\"http://www.example.org#v\"/>\n" + "</rdf:RDF>"; String id = "rdfbased_sem_rdfs_range_cond"; TestClasses tc = TestClasses.valueOf("POSITIVE_IMPL"); String d = "The right hand side individual in a given triple is entailed to be an instance of the range of the predicate."; JUnitRunner r = new JUnitRunner(premise, conclusion, id, tc, d); r.setReasonerFactory(factory()); r.run(); } @Test @Changed public void testrdfbased_sem_restrict_allvalues_cmp_class() { String premise = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:owl=\"http://www.w3.org/2002/07/owl#\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\" xmlns:ex=\"http://www.example.org#\" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n" + " <owl:Class rdf:about=\"http://www.example.org#c1\"/>\n" + " <owl:Class rdf:about=\"http://www.example.org#c2\"/>\n" + " <owl:Class rdf:about=\"http://www.example.org#x2\"/>\n" + " <owl:Class rdf:about=\"http://www.example.org#x1\"/>\n" + " <owl:ObjectProperty rdf:about=\"http://www.example.org#p\"/>\n" + " <rdf:Description rdf:about=\"http://www.example.org#x1\">\n" + "<owl:equivalentClass><owl:Restriction>" + " <owl:allValuesFrom><rdf:Description rdf:about=\"http://www.example.org#c1\"><rdfs:subClassOf rdf:resource=\"http://www.example.org#c2\"/></rdf:Description></owl:allValuesFrom><owl:onProperty rdf:resource=\"http://www.example.org#p\"/>\n" + "</owl:Restriction></owl:equivalentClass>" + " </rdf:Description>\n" + " <rdf:Description rdf:about=\"http://www.example.org#x2\">\n" + "<owl:equivalentClass><owl:Restriction>" + " <owl:allValuesFrom rdf:resource=\"http://www.example.org#c2\"/><owl:onProperty rdf:resource=\"http://www.example.org#p\"/>\n" + "</owl:Restriction></owl:equivalentClass>" + " </rdf:Description>\n" + "</rdf:RDF>"; String conclusion = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:owl=\"http://www.w3.org/2002/07/owl#\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\" xmlns:ex=\"http://www.example.org#\" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n" + " <owl:Class rdf:about=\"http://www.example.org#x1\"/>\n" + " <owl:Class rdf:about=\"http://www.example.org#x2\"/>\n" + " <rdf:Description rdf:about=\"http://www.example.org#x1\"><rdfs:subClassOf rdf:resource=\"http://www.example.org#x2\"/></rdf:Description></rdf:RDF>"; String id = "rdfbased_sem_restrict_allvalues_cmp_class"; TestClasses tc = TestClasses.valueOf("POSITIVE_IMPL"); String d = "A universal restriction on some property and some class is a sub class of another universal restriction on the same property but on a super class."; JUnitRunner r = new JUnitRunner(premise, conclusion, id, tc, d); r.setReasonerFactory(factory()); r.run(); } @Test @Changed public void testrdfbased_sem_restrict_allvalues_cmp_prop() { String premise = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:owl=\"http://www.w3.org/2002/07/owl#\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\" xmlns:ex=\"http://www.example.org#\" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n" + " <owl:ObjectProperty rdf:about=\"http://www.example.org#p1\"/>\n" + " <owl:ObjectProperty rdf:about=\"http://www.example.org#p2\"/>\n" + " <owl:Class rdf:about=\"http://www.example.org#x1\"/>\n" + " <owl:Class rdf:about=\"http://www.example.org#x2\"/>\n" + " <owl:Class rdf:about=\"http://www.example.org#c\"/>\n" + " <rdf:Description rdf:about=\"http://www.example.org#x1\">\n" + "<owl:equivalentClass><owl:Restriction>" + " <owl:allValuesFrom rdf:resource=\"http://www.example.org#c\"/><owl:onProperty><rdf:Description rdf:about=\"http://www.example.org#p1\"><rdfs:subPropertyOf rdf:resource=\"http://www.example.org#p2\"/></rdf:Description></owl:onProperty>\n" + "</owl:Restriction></owl:equivalentClass>" + " </rdf:Description>\n" + " <rdf:Description rdf:about=\"http://www.example.org#x2\">\n" + "<owl:equivalentClass><owl:Restriction>" + " <owl:allValuesFrom rdf:resource=\"http://www.example.org#c\"/><owl:onProperty rdf:resource=\"http://www.example.org#p2\"/>\n" + "</owl:Restriction></owl:equivalentClass>" + " </rdf:Description>\n" + "</rdf:RDF>"; String conclusion = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:owl=\"http://www.w3.org/2002/07/owl#\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\" xmlns:ex=\"http://www.example.org#\" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n" + " <owl:Class rdf:about=\"http://www.example.org#x1\"/>\n" + " <owl:Class rdf:about=\"http://www.example.org#x2\"/>\n" + " <rdf:Description rdf:about=\"http://www.example.org#x2\"><rdfs:subClassOf rdf:resource=\"http://www.example.org#x1\"/></rdf:Description></rdf:RDF>"; String id = "rdfbased_sem_restrict_allvalues_cmp_prop"; TestClasses tc = TestClasses.valueOf("POSITIVE_IMPL"); String d = "A universal restriction on some property and some class is a sub class of another universal restriction on the same class but on a sub property."; JUnitRunner r = new JUnitRunner(premise, conclusion, id, tc, d); r.setReasonerFactory(factory()); r.run(); } @Test @Changed public void testrdfbased_sem_restrict_allvalues_inst_obj() { String premise = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:owl=\"http://www.w3.org/2002/07/owl#\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\" xmlns:ex=\"http://www.example.org#\" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n" + "<owl:Class rdf:about=\"http://www.example.org#z\"/>\n" + "<owl:Class rdf:about=\"http://www.example.org#c\"/>\n" + "<owl:ObjectProperty rdf:about=\"http://www.example.org#p\"/>\n" + " <ex:z rdf:about=\"http://www.example.org#w\"><ex:p rdf:resource=\"http://www.example.org#x\"/></ex:z>\n" + " <rdf:Description rdf:about=\"http://www.example.org#z\">\n" + "<rdfs:subClassOf><owl:Restriction>" + " <owl:allValuesFrom rdf:resource=\"http://www.example.org#c\"/><owl:onProperty rdf:resource=\"http://www.example.org#p\"/>\n" + "</owl:Restriction></rdfs:subClassOf>" + " </rdf:Description>\n" + "</rdf:RDF>"; String conclusion = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:owl=\"http://www.w3.org/2002/07/owl#\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\" xmlns:ex=\"http://www.example.org#\" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n" + "<owl:Class rdf:about=\"http://www.example.org#c\"/>\n" + " <ex:c rdf:about=\"http://www.example.org#x\"/>\n" + "</rdf:RDF>"; String id = "rdfbased_sem_restrict_allvalues_inst_obj"; TestClasses tc = TestClasses.valueOf("POSITIVE_IMPL"); String d = "If an individual w is an instance of the universal restriction on property p and class c, then for any triple w p x follows that x is an instance of c."; JUnitRunner r = new JUnitRunner(premise, conclusion, id, tc, d); r.setReasonerFactory(factory()); r.run(); } @Test @Changed public void testrdfbased_sem_restrict_hasvalue_cmp_prop() { String premise = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:owl=\"http://www.w3.org/2002/07/owl#\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\" xmlns:ex=\"http://www.example.org#\" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n" + " <owl:Class rdf:about=\"http://www.example.org#x1\"/>\n" + " <owl:Class rdf:about=\"http://www.example.org#x2\"/>\n" + " <owl:ObjectProperty rdf:about=\"http://www.example.org#p1\"/>\n" + " <owl:ObjectProperty rdf:about=\"http://www.example.org#p2\"/>\n" + " <rdf:Description rdf:about=\"http://www.example.org#x1\">\n" + "<owl:equivalentClass><owl:Restriction>" + " <owl:hasValue rdf:resource=\"http://www.example.org#v\"/><owl:onProperty><rdf:Description rdf:about=\"http://www.example.org#p1\"><rdfs:subPropertyOf rdf:resource=\"http://www.example.org#p2\"/></rdf:Description></owl:onProperty>\n" + "</owl:Restriction></owl:equivalentClass>" + " </rdf:Description>\n" + " <rdf:Description rdf:about=\"http://www.example.org#x2\">\n" + "<owl:equivalentClass><owl:Restriction>" + " <owl:hasValue rdf:resource=\"http://www.example.org#v\"/><owl:onProperty rdf:resource=\"http://www.example.org#p2\"/>\n" + "</owl:Restriction></owl:equivalentClass>" + " </rdf:Description>\n" + "</rdf:RDF>"; String conclusion = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:owl=\"http://www.w3.org/2002/07/owl#\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\" xmlns:ex=\"http://www.example.org#\" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n" + " <owl:Class rdf:about=\"http://www.example.org#x1\"/>\n" + " <owl:Class rdf:about=\"http://www.example.org#x2\"/>\n" + " <rdf:Description rdf:about=\"http://www.example.org#x1\"><rdfs:subClassOf rdf:resource=\"http://www.example.org#x2\"/></rdf:Description></rdf:RDF>"; String id = "rdfbased_sem_restrict_hasvalue_cmp_prop"; TestClasses tc = TestClasses.valueOf("POSITIVE_IMPL"); String d = "A has-value restriction on some property and some value is a sub class of another has-value restriction on the same value but on a super property."; JUnitRunner r = new JUnitRunner(premise, conclusion, id, tc, d); r.setReasonerFactory(factory()); r.run(); } @Test @Changed public void testrdfbased_sem_restrict_hasvalue_inst_obj() { String premise = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:owl=\"http://www.w3.org/2002/07/owl#\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\" xmlns:ex=\"http://www.example.org#\" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n" + "<owl:Class rdf:about=\"http://www.example.org#z\"/>\n" // TODO this is a bug, should not be needed by the reasoner + "<owl:Thing rdf:about=\"http://www.example.org#u\"/>\n" + "<owl:ObjectProperty rdf:about=\"http://www.example.org#p\"/>\n" + " <ex:z rdf:about=\"http://www.example.org#w\"/>\n" + " <rdf:Description rdf:about=\"http://www.example.org#z\">\n" + "<owl:equivalentClass><owl:Restriction>" + " <owl:hasValue rdf:resource=\"http://www.example.org#u\"/><owl:onProperty rdf:resource=\"http://www.example.org#p\"/>\n" + "</owl:Restriction></owl:equivalentClass>" + " </rdf:Description>\n" + "</rdf:RDF>"; String conclusion = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:owl=\"http://www.w3.org/2002/07/owl#\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\" xmlns:ex=\"http://www.example.org#\" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n" + "<owl:ObjectProperty rdf:about=\"http://www.example.org#p\"/>\n" + " <rdf:Description rdf:about=\"http://www.example.org#w\"><ex:p rdf:resource=\"http://www.example.org#u\"/></rdf:Description></rdf:RDF>"; String id = "rdfbased_sem_restrict_hasvalue_inst_obj"; TestClasses tc = TestClasses.valueOf("POSITIVE_IMPL"); String d = "If an individual w is an instance of the has-value restriction on property p to value u, then the triple w p u can be entailed."; JUnitRunner r = new JUnitRunner(premise, conclusion, id, tc, d); r.setReasonerFactory(factory()); r.run(); } @Test @Changed public void testrdfbased_sem_restrict_hasvalue_inst_subj() { String premise = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:owl=\"http://www.w3.org/2002/07/owl#\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\" xmlns:ex=\"http://www.example.org#\" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n" + " <owl:Class rdf:about=\"http://www.example.org#z\"/>\n" + " <owl:ObjectProperty rdf:about=\"http://www.example.org#p\"/>\n" + " <rdf:Description rdf:about=\"http://www.example.org#z\">\n" + "<owl:equivalentClass><owl:Restriction>" + " <owl:hasValue rdf:resource=\"http://www.example.org#u\"/><owl:onProperty rdf:resource=\"http://www.example.org#p\"/>\n" + "</owl:Restriction></owl:equivalentClass>" + " </rdf:Description>\n" + " <rdf:Description rdf:about=\"http://www.example.org#w\"><ex:p rdf:resource=\"http://www.example.org#u\"/></rdf:Description></rdf:RDF>"; String conclusion = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:owl=\"http://www.w3.org/2002/07/owl#\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\" xmlns:ex=\"http://www.example.org#\" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n" + " <owl:Class rdf:about=\"http://www.example.org#z\"/>\n" + " <ex:z rdf:about=\"http://www.example.org#w\"/>\n" + "</rdf:RDF>"; String id = "rdfbased_sem_restrict_hasvalue_inst_subj"; TestClasses tc = TestClasses.valueOf("POSITIVE_IMPL"); String d = "For a triple w p u, the individual w is an instance of the has-value restriction on p to u."; JUnitRunner r = new JUnitRunner(premise, conclusion, id, tc, d); r.setReasonerFactory(factory()); r.run(); } @Test @Changed public void testrdfbased_sem_restrict_maxcard_inst_obj_one() { String premise = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:owl=\"http://www.w3.org/2002/07/owl#\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\" xmlns:ex=\"http://www.example.org#\" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n" + " <owl:Class rdf:about=\"http://www.example.org#z\"/>\n" + " <owl:ObjectProperty rdf:about=\"http://www.example.org#p\"/>\n" + " <ex:z rdf:about=\"http://www.example.org#w\"><ex:p rdf:resource=\"http://www.example.org#x1\"/><ex:p rdf:resource=\"http://www.example.org#x2\"/></ex:z>\n" + " <rdf:Description rdf:about=\"http://www.example.org#z\">\n" + " <rdfs:subClassOf>\n" + " <owl:Restriction>\n" + " <owl:maxCardinality rdf:datatype=\"http://www.w3.org/2001/XMLSchema#nonNegativeInteger\">1</owl:maxCardinality><owl:onProperty rdf:resource=\"http://www.example.org#p\"/>\n" + " </owl:Restriction>\n" + " </rdfs:subClassOf>\n" + " </rdf:Description>\n" + "</rdf:RDF>"; String conclusion = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:owl=\"http://www.w3.org/2002/07/owl#\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\" xmlns:ex=\"http://www.example.org#\" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n" + " <rdf:Description rdf:about=\"http://www.example.org#x1\"><owl:sameAs rdf:resource=\"http://www.example.org#x2\"/></rdf:Description></rdf:RDF>"; String id = "rdfbased_sem_restrict_maxcard_inst_obj_one"; TestClasses tc = TestClasses.valueOf("POSITIVE_IMPL"); String d = "If an individual w is an instance of the max-1-cardinality restriction on property p, and if there are triples w p x1 and w p x2, then x1 equals x2."; JUnitRunner r = new JUnitRunner(premise, conclusion, id, tc, d); r.setReasonerFactory(factory()); r.run(); } @Test @Changed public void testrdfbased_sem_restrict_maxcard_inst_obj_zero() { String premise = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:owl=\"http://www.w3.org/2002/07/owl#\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\" xmlns:ex=\"http://www.example.org#\" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n" + "<owl:Class rdf:about=\"http://www.example.org#z\"/>" + "<owl:ObjectProperty rdf:about=\"http://www.example.org#p\"/>" + " <ex:z rdf:about=\"http://www.example.org#w\"><ex:p rdf:resource=\"http://www.example.org#x\"/></ex:z>\n" + " <rdf:Description rdf:about=\"http://www.example.org#z\">\n" + "<rdfs:subClassOf><rdf:Description>" + "<rdf:type rdf:resource=\"http://www.w3.org/2002/07/owl#Restriction\"/>" + " <owl:maxCardinality rdf:datatype=\"http://www.w3.org/2001/XMLSchema#nonNegativeInteger\">0</owl:maxCardinality><owl:onProperty rdf:resource=\"http://www.example.org#p\"/></rdf:Description>\n</rdfs:subClassOf></rdf:Description></rdf:RDF>"; String conclusion = ""; String id = "rdfbased_sem_restrict_maxcard_inst_obj_zero"; TestClasses tc = TestClasses.valueOf("INCONSISTENCY"); String d = "If an individual w is an instance of the max-0-cardinality restriction on property p, then there cannot be any triple w p x."; JUnitRunner r = new JUnitRunner(premise, conclusion, id, tc, d); r.setReasonerFactory(factory()); r.run(); } @Test @Changed public void testrdfbased_sem_restrict_maxqcr_inst_obj_one() { String premise = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:owl=\"http://www.w3.org/2002/07/owl#\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\" xmlns:ex=\"http://www.example.org#\" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n" + " <owl:Class rdf:about=\"http://www.example.org#c\"/>\n" + " <owl:Class rdf:about=\"http://www.example.org#z\"/>\n" + " <owl:Thing rdf:about=\"http://www.example.org#x1\"/>\n" + " <owl:Thing rdf:about=\"http://www.example.org#x2\"/>\n" + " <owl:ObjectProperty rdf:about=\"http://www.example.org#p\"/>\n" + " <ex:z rdf:about=\"http://www.example.org#w\"><ex:p><ex:c rdf:about=\"http://www.example.org#x1\"/></ex:p><ex:p><ex:c rdf:about=\"http://www.example.org#x2\"/></ex:p></ex:z>\n" + " <rdf:Description rdf:about=\"http://www.example.org#z\">\n" + "<owl:equivalentClass><owl:Restriction>" + " <owl:maxQualifiedCardinality rdf:datatype=\"http://www.w3.org/2001/XMLSchema#nonNegativeInteger\">1</owl:maxQualifiedCardinality><owl:onProperty rdf:resource=\"http://www.example.org#p\"/><owl:onClass rdf:resource=\"http://www.example.org#c\"/>\n" + "</owl:Restriction></owl:equivalentClass>" + " </rdf:Description>\n" + "</rdf:RDF>"; String conclusion = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:owl=\"http://www.w3.org/2002/07/owl#\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\" xmlns:ex=\"http://www.example.org#\" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n" + " <rdf:Description rdf:about=\"http://www.example.org#x1\"><owl:sameAs rdf:resource=\"http://www.example.org#x2\"/></rdf:Description></rdf:RDF>"; String id = "rdfbased_sem_restrict_maxqcr_inst_obj_one"; TestClasses tc = TestClasses.valueOf("POSITIVE_IMPL"); String d = "If an individual w is an instance of the max-1-QCR on property p to class c, and if there are triples w p x1 and w p x2, with x1 and x2 being in c, then x1 equals x2."; JUnitRunner r = new JUnitRunner(premise, conclusion, id, tc, d); r.setReasonerFactory(factory()); r.run(); } @Test @Changed public void testrdfbased_sem_restrict_maxqcr_inst_obj_zero() { String premise = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:owl=\"http://www.w3.org/2002/07/owl#\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\" xmlns:ex=\"http://www.example.org#\" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n" + " <owl:Class rdf:about=\"http://www.example.org#c\"/>\n" + " <owl:Class rdf:about=\"http://www.example.org#z\"/>\n" + " <owl:ObjectProperty rdf:about=\"http://www.example.org#p\"/>\n" + " <ex:z rdf:about=\"http://www.example.org#w\"><ex:p><ex:c rdf:about=\"http://www.example.org#x\"/></ex:p></ex:z>\n" + " <rdf:Description rdf:about=\"http://www.example.org#z\">\n" + "<owl:equivalentClass><owl:Restriction>" + " <owl:maxQualifiedCardinality rdf:datatype=\"http://www.w3.org/2001/XMLSchema#nonNegativeInteger\">0</owl:maxQualifiedCardinality><owl:onProperty rdf:resource=\"http://www.example.org#p\"/><owl:onClass rdf:resource=\"http://www.example.org#c\"/>\n" + "</owl:Restriction></owl:equivalentClass>" + " </rdf:Description>\n" + "</rdf:RDF>"; String conclusion = ""; String id = "rdfbased_sem_restrict_maxqcr_inst_obj_zero"; TestClasses tc = TestClasses.valueOf("INCONSISTENCY"); String d = "If an individual w is an instance of the max-0-QCR on property p to class c, then there cannot be any triple w p x with x in c."; JUnitRunner r = new JUnitRunner(premise, conclusion, id, tc, d); r.setReasonerFactory(factory()); r.run(); } @Test @Changed public void testrdfbased_sem_restrict_somevalues_cmp_class() { String premise = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:owl=\"http://www.w3.org/2002/07/owl#\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\" xmlns:ex=\"http://www.example.org#\" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n" + " <owl:Class rdf:about=\"http://www.example.org#c1\"/>\n" + " <owl:Class rdf:about=\"http://www.example.org#c2\"/>\n" + " <owl:Class rdf:about=\"http://www.example.org#x1\"/>\n" + " <owl:Class rdf:about=\"http://www.example.org#x2\"/>\n" + " <owl:ObjectProperty rdf:about=\"http://www.example.org#p\"/>\n" + " <rdf:Description rdf:about=\"http://www.example.org#x1\">\n" + "<rdfs:subClassOf><owl:Restriction>" + " <owl:someValuesFrom><rdf:Description rdf:about=\"http://www.example.org#c1\"><rdfs:subClassOf rdf:resource=\"http://www.example.org#c2\"/></rdf:Description></owl:someValuesFrom><owl:onProperty rdf:resource=\"http://www.example.org#p\"/>\n" + "</owl:Restriction></rdfs:subClassOf>" + " </rdf:Description>\n" + " <rdf:Description rdf:about=\"http://www.example.org#x2\">\n" + "<owl:equivalentClass><owl:Restriction>" + " <owl:someValuesFrom rdf:resource=\"http://www.example.org#c2\"/><owl:onProperty rdf:resource=\"http://www.example.org#p\"/>\n" + "</owl:Restriction></owl:equivalentClass>" + " </rdf:Description>\n" + "</rdf:RDF>"; String conclusion = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:owl=\"http://www.w3.org/2002/07/owl#\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\" xmlns:ex=\"http://www.example.org#\" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n" + " <owl:Class rdf:about=\"http://www.example.org#x1\"/>\n" + " <owl:Class rdf:about=\"http://www.example.org#x2\"/>\n" + " <rdf:Description rdf:about=\"http://www.example.org#x1\"><rdfs:subClassOf rdf:resource=\"http://www.example.org#x2\"/></rdf:Description></rdf:RDF>"; String id = "rdfbased_sem_restrict_somevalues_cmp_class"; TestClasses tc = TestClasses.valueOf("POSITIVE_IMPL"); String d = "An existential restriction on some property and some class is a sub class of another existential restriction on the same property but on a super class."; JUnitRunner r = new JUnitRunner(premise, conclusion, id, tc, d); r.setReasonerFactory(factory()); r.run(); } @Test @Changed public void testrdfbased_sem_restrict_somevalues_cmp_prop() { String premise = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:owl=\"http://www.w3.org/2002/07/owl#\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\" xmlns:ex=\"http://www.example.org#\" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n" + " <owl:Class rdf:about=\"http://www.example.org#x1\"/>\n" + " <owl:Class rdf:about=\"http://www.example.org#x2\"/>\n" + " <owl:Class rdf:about=\"http://www.example.org#c\"/>\n" + " <owl:ObjectProperty rdf:about=\"http://www.example.org#p1\"/>\n" + " <owl:ObjectProperty rdf:about=\"http://www.example.org#p2\"/>\n" + " <rdf:Description rdf:about=\"http://www.example.org#x1\">\n" + "<owl:equivalentClass><owl:Restriction>" + " <owl:someValuesFrom rdf:resource=\"http://www.example.org#c\"/><owl:onProperty><rdf:Description rdf:about=\"http://www.example.org#p1\"><rdfs:subPropertyOf rdf:resource=\"http://www.example.org#p2\"/></rdf:Description></owl:onProperty>\n" + "</owl:Restriction></owl:equivalentClass>" + " </rdf:Description>\n" + " <rdf:Description rdf:about=\"http://www.example.org#x2\">\n" + "<owl:equivalentClass><owl:Restriction>" + " <owl:someValuesFrom rdf:resource=\"http://www.example.org#c\"/><owl:onProperty rdf:resource=\"http://www.example.org#p2\"/>\n" + "</owl:Restriction></owl:equivalentClass>" + " </rdf:Description>\n" + "</rdf:RDF>"; String conclusion = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:owl=\"http://www.w3.org/2002/07/owl#\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\" xmlns:ex=\"http://www.example.org#\" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n" + " <owl:Class rdf:about=\"http://www.example.org#x1\"/>\n" + " <owl:Class rdf:about=\"http://www.example.org#x2\"/>\n" + " <rdf:Description rdf:about=\"http://www.example.org#x1\"><rdfs:subClassOf rdf:resource=\"http://www.example.org#x2\"/></rdf:Description></rdf:RDF>"; String id = "rdfbased_sem_restrict_somevalues_cmp_prop"; TestClasses tc = TestClasses.valueOf("POSITIVE_IMPL"); String d = "An existential restriction on some property and some class is a sub class of another existential restriction on the same class but on a super property."; JUnitRunner r = new JUnitRunner(premise, conclusion, id, tc, d); r.setReasonerFactory(factory()); r.run(); } @Test @Changed public void testrdfbased_sem_restrict_somevalues_inst_subj() { String premise = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:owl=\"http://www.w3.org/2002/07/owl#\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\" xmlns:ex=\"http://www.example.org#\" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n" + " <owl:Thing rdf:about=\"http://www.example.org#x\"/>\n" + "<owl:Class rdf:about=\"http://www.example.org#c\"/>\n" + "<owl:Class rdf:about=\"http://www.example.org#z\"/>\n" + "<owl:ObjectProperty rdf:about=\"http://www.example.org#p\"/>\n" + " <rdf:Description rdf:about=\"http://www.example.org#z\">\n" + "<owl:equivalentClass><owl:Restriction>" + " <owl:someValuesFrom rdf:resource=\"http://www.example.org#c\"/><owl:onProperty rdf:resource=\"http://www.example.org#p\"/>\n" + "</owl:Restriction></owl:equivalentClass>\n" + " </rdf:Description>\n" + " <rdf:Description rdf:about=\"http://www.example.org#w\"><ex:p><ex:c rdf:about=\"http://www.example.org#x\"/></ex:p></rdf:Description></rdf:RDF>"; String conclusion = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:owl=\"http://www.w3.org/2002/07/owl#\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema#\" xmlns:ex=\"http://www.example.org#\" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n" + " <owl:Thing rdf:about=\"http://www.example.org#w\"/>\n" + " <owl:Class rdf:about=\"http://www.example.org#z\"/>\n" + " <ex:z rdf:about=\"http://www.example.org#w\"/>\n" + "</rdf:RDF>"; String id = "rdfbased_sem_restrict_somevalues_inst_subj"; TestClasses tc = TestClasses.valueOf("POSITIVE_IMPL"); String d = "For a triple w p x, with x being an instance of a class c, the individual w is an instance of the existential restriction on p to c."; JUnitRunner r = new JUnitRunner(premise, conclusion, id, tc, d); r.setReasonerFactory(factory()); r.run(); } @Test public void teststring_integer_clash() { String premise = "Prefix(:=<http://example.org/>)\n" + "Prefix(xsd:=<http://www.w3.org/2001/XMLSchema#>)\n" + "Ontology(\n" + " Declaration(NamedIndividual(:a))\n" + " Declaration(DataProperty(:hasAge))\n" + " DataPropertyRange(:hasAge xsd:integer)\n" + " ClassAssertion(DataHasValue(:hasAge \"aString\"^^xsd:string) :a)\n" + ')'; String conclusion = ""; String id = "string_integer_clash"; TestClasses tc = TestClasses.valueOf("INCONSISTENCY"); String d = "The range of hasAge is integer, but a has an asserted string hasAge filler."; JUnitRunner r = new JUnitRunner(premise, conclusion, id, tc, d); r.setReasonerFactory(factory()); // r.getConfiguration().setLoggingActive(true); r.run(); } @Test public void testWebOnt_description_logic_501() { String premise = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:owl=\"http://www.w3.org/2002/07/owl#\"\n" + " xml:base=\"http://www.w3.org/2002/03owlt/description-logic/consistent501\" >\n" + "<owl:Ontology/>\n" + "<owl:Class rdf:ID='TorF'> \n" + " <owl:oneOf rdf:parseType='Collection'><owl:Thing rdf:ID='T'><owl:differentFrom rdf:resource='#F'/></owl:Thing><owl:Thing rdf:ID='F'/></owl:oneOf>\n" + " <owl:oneOf rdf:parseType='Collection'><owl:Thing rdf:about='#plus1'/><owl:Thing rdf:about='#minus1'/></owl:oneOf>\n" + " <owl:oneOf rdf:parseType='Collection'><owl:Thing rdf:about='#plus2'/><owl:Thing rdf:about='#minus2'/></owl:oneOf>\n" + " <owl:oneOf rdf:parseType='Collection'><owl:Thing rdf:about='#plus3'/><owl:Thing rdf:about='#minus3'/></owl:oneOf>\n" + " <owl:oneOf rdf:parseType='Collection'><owl:Thing rdf:about='#plus4'/><owl:Thing rdf:about='#minus4'/></owl:oneOf>\n" + " <owl:oneOf rdf:parseType='Collection'><owl:Thing rdf:about='#plus5'/><owl:Thing rdf:about='#minus5'/></owl:oneOf>\n" + " <owl:oneOf rdf:parseType='Collection'><owl:Thing rdf:about='#plus6'/><owl:Thing rdf:about='#minus6'/></owl:oneOf>\n" + " <owl:oneOf rdf:parseType='Collection'><owl:Thing rdf:about='#plus7'/><owl:Thing rdf:about='#minus7'/></owl:oneOf>\n" + " <owl:oneOf rdf:parseType='Collection'><owl:Thing rdf:about='#plus8'/><owl:Thing rdf:about='#minus8'/></owl:oneOf>\n" + " <owl:oneOf rdf:parseType='Collection'><owl:Thing rdf:about='#plus9'/><owl:Thing rdf:about='#minus9'/></owl:oneOf></owl:Class>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#plus7'/><rdf:Description rdf:about='#minus9'/><rdf:Description rdf:about='#minus8'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#plus1'/><rdf:Description rdf:about='#plus2'/><rdf:Description rdf:about='#minus8'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#plus4'/><rdf:Description rdf:about='#plus7'/><rdf:Description rdf:about='#minus5'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#plus2'/><rdf:Description rdf:about='#plus3'/><rdf:Description rdf:about='#minus1'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#minus1'/><rdf:Description rdf:about='#plus5'/><rdf:Description rdf:about='#plus8'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#minus8'/><rdf:Description rdf:about='#minus6'/><rdf:Description rdf:about='#minus3'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#minus3'/><rdf:Description rdf:about='#minus8'/><rdf:Description rdf:about='#plus7'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#minus3'/><rdf:Description rdf:about='#plus6'/><rdf:Description rdf:about='#plus8'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#minus4'/><rdf:Description rdf:about='#minus6'/><rdf:Description rdf:about='#plus8'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#plus6'/><rdf:Description rdf:about='#plus7'/><rdf:Description rdf:about='#plus3'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#plus3'/><rdf:Description rdf:about='#plus6'/><rdf:Description rdf:about='#minus9'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#minus5'/><rdf:Description rdf:about='#minus2'/><rdf:Description rdf:about='#plus3'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#plus5'/><rdf:Description rdf:about='#plus8'/><rdf:Description rdf:about='#plus2'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#minus2'/><rdf:Description rdf:about='#minus7'/><rdf:Description rdf:about='#minus3'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#minus6'/><rdf:Description rdf:about='#minus8'/><rdf:Description rdf:about='#minus5'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#plus2'/><rdf:Description rdf:about='#plus7'/><rdf:Description rdf:about='#minus3'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#plus9'/><rdf:Description rdf:about='#minus1'/><rdf:Description rdf:about='#minus2'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#plus1'/><rdf:Description rdf:about='#plus7'/><rdf:Description rdf:about='#minus6'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#plus1'/><rdf:Description rdf:about='#plus9'/><rdf:Description rdf:about='#minus3'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#minus8'/><rdf:Description rdf:about='#minus9'/><rdf:Description rdf:about='#minus2'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#minus9'/><rdf:Description rdf:about='#minus8'/><rdf:Description rdf:about='#plus2'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#plus5'/><rdf:Description rdf:about='#plus8'/><rdf:Description rdf:about='#plus4'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#minus7'/><rdf:Description rdf:about='#plus2'/><rdf:Description rdf:about='#plus5'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#minus1'/><rdf:Description rdf:about='#plus7'/><rdf:Description rdf:about='#minus4'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#plus7'/><rdf:Description rdf:about='#minus8'/><rdf:Description rdf:about='#plus4'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#minus3'/><rdf:Description rdf:about='#plus2'/><rdf:Description rdf:about='#minus6'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#plus1'/><rdf:Description rdf:about='#minus2'/><rdf:Description rdf:about='#minus9'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#plus7'/><rdf:Description rdf:about='#plus3'/><rdf:Description rdf:about='#minus2'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#minus7'/><rdf:Description rdf:about='#plus8'/><rdf:Description rdf:about='#plus4'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#plus1'/><rdf:Description rdf:about='#minus7'/><rdf:Description rdf:about='#minus5'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#minus5'/><rdf:Description rdf:about='#plus4'/><rdf:Description rdf:about='#minus3'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#plus6'/><rdf:Description rdf:about='#plus7'/><rdf:Description rdf:about='#minus1'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#minus1'/><rdf:Description rdf:about='#plus7'/><rdf:Description rdf:about='#minus9'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#plus3'/><rdf:Description rdf:about='#plus2'/><rdf:Description rdf:about='#plus6'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#plus8'/><rdf:Description rdf:about='#plus3'/><rdf:Description rdf:about='#minus7'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#minus1'/><rdf:Description rdf:about='#plus9'/><rdf:Description rdf:about='#minus8'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#plus5'/><rdf:Description rdf:about='#minus9'/><rdf:Description rdf:about='#minus7'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#minus7'/><rdf:Description rdf:about='#plus3'/><rdf:Description rdf:about='#minus9'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#plus3'/><rdf:Description rdf:about='#minus1'/><rdf:Description rdf:about='#minus2'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#plus6'/><rdf:Description rdf:about='#plus1'/><rdf:Description rdf:about='#plus4'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#plus6'/><rdf:Description rdf:about='#minus7'/><rdf:Description rdf:about='#plus5'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#plus8'/><rdf:Description rdf:about='#minus6'/><rdf:Description rdf:about='#plus3'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#plus5'/><rdf:Description rdf:about='#minus2'/><rdf:Description rdf:about='#plus6'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#plus8'/><rdf:Description rdf:about='#plus3'/><rdf:Description rdf:about='#minus5'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#minus2'/><rdf:Description rdf:about='#minus4'/><rdf:Description rdf:about='#minus9'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "</rdf:RDF>"; String conclusion = ""; String id = "WebOnt_description_logic_501"; TestClasses tc = TestClasses.valueOf("CONSISTENCY"); String d = "This is the classic 3 SAT problem."; JUnitRunner r = new JUnitRunner(premise, conclusion, id, tc, d); r.setReasonerFactory(factory()); r.run(); } @Test public void testWebOnt_description_logic_502() { String premise = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\" xmlns:owl=\"http://www.w3.org/2002/07/owl#\" xmlns:first=\"http://www.w3.org/2002/03owlt/description-logic/inconsistent502#\"\n" + " xml:base=\"http://www.w3.org/2002/03owlt/description-logic/inconsistent502\" >\n" + "<owl:Ontology/>\n" + "<owl:Class rdf:ID='TorF'> \n" + " <owl:oneOf rdf:parseType='Collection'><owl:Thing rdf:ID='T'><owl:differentFrom rdf:resource='#F'/></owl:Thing><owl:Thing rdf:ID='F'/></owl:oneOf>\n" + " <owl:oneOf rdf:parseType='Collection'><owl:Thing rdf:about='#plus1'/><owl:Thing rdf:about='#minus1'/></owl:oneOf>\n" + " <owl:oneOf rdf:parseType='Collection'><owl:Thing rdf:about='#plus2'/><owl:Thing rdf:about='#minus2'/></owl:oneOf>\n" + " <owl:oneOf rdf:parseType='Collection'><owl:Thing rdf:about='#plus3'/><owl:Thing rdf:about='#minus3'/></owl:oneOf>\n" + " <owl:oneOf rdf:parseType='Collection'><owl:Thing rdf:about='#plus4'/><owl:Thing rdf:about='#minus4'/></owl:oneOf>\n" + " <owl:oneOf rdf:parseType='Collection'><owl:Thing rdf:about='#plus5'/><owl:Thing rdf:about='#minus5'/></owl:oneOf>\n" + " <owl:oneOf rdf:parseType='Collection'><owl:Thing rdf:about='#plus6'/><owl:Thing rdf:about='#minus6'/></owl:oneOf>\n" + " <owl:oneOf rdf:parseType='Collection'><owl:Thing rdf:about='#plus7'/><owl:Thing rdf:about='#minus7'/></owl:oneOf>\n" + " <owl:oneOf rdf:parseType='Collection'><owl:Thing rdf:about='#plus8'/><owl:Thing rdf:about='#minus8'/></owl:oneOf>\n" + " <owl:oneOf rdf:parseType='Collection'><owl:Thing rdf:about='#plus9'/><owl:Thing rdf:about='#minus9'/></owl:oneOf></owl:Class>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#plus1'/><rdf:Description rdf:about='#plus2'/><rdf:Description rdf:about='#minus4'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#minus3'/><rdf:Description rdf:about='#plus6'/><rdf:Description rdf:about='#minus4'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#plus9'/><rdf:Description rdf:about='#minus4'/><rdf:Description rdf:about='#plus5'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#plus4'/><rdf:Description rdf:about='#minus6'/><rdf:Description rdf:about='#minus2'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#minus2'/><rdf:Description rdf:about='#minus3'/><rdf:Description rdf:about='#plus1'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#minus3'/><rdf:Description rdf:about='#plus8'/><rdf:Description rdf:about='#plus7'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#minus8'/><rdf:Description rdf:about='#minus2'/><rdf:Description rdf:about='#plus3'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#minus7'/><rdf:Description rdf:about='#minus6'/><rdf:Description rdf:about='#plus9'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#plus1'/><rdf:Description rdf:about='#minus4'/><rdf:Description rdf:about='#minus6'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#minus8'/><rdf:Description rdf:about='#minus5'/><rdf:Description rdf:about='#minus3'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#plus4'/><rdf:Description rdf:about='#plus3'/><rdf:Description rdf:about='#plus6'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#plus2'/><rdf:Description rdf:about='#minus1'/><rdf:Description rdf:about='#plus4'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#minus3'/><rdf:Description rdf:about='#plus8'/><rdf:Description rdf:about='#plus2'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#plus6'/><rdf:Description rdf:about='#minus2'/><rdf:Description rdf:about='#plus9'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#plus7'/><rdf:Description rdf:about='#minus9'/><rdf:Description rdf:about='#minus2'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#plus2'/><rdf:Description rdf:about='#minus5'/><rdf:Description rdf:about='#minus7'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#plus5'/><rdf:Description rdf:about='#plus2'/><rdf:Description rdf:about='#plus9'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#plus6'/><rdf:Description rdf:about='#minus2'/><rdf:Description rdf:about='#minus7'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#minus9'/><rdf:Description rdf:about='#plus3'/><rdf:Description rdf:about='#minus2'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#plus1'/><rdf:Description rdf:about='#plus7'/><rdf:Description rdf:about='#plus4'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#minus4'/><rdf:Description rdf:about='#plus1'/><rdf:Description rdf:about='#plus9'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#plus2'/><rdf:Description rdf:about='#plus1'/><rdf:Description rdf:about='#minus6'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#plus7'/><rdf:Description rdf:about='#minus4'/><rdf:Description rdf:about='#plus9'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#minus5'/><rdf:Description rdf:about='#plus3'/><rdf:Description rdf:about='#minus9'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#minus4'/><rdf:Description rdf:about='#plus9'/><rdf:Description rdf:about='#minus8'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#plus4'/><rdf:Description rdf:about='#plus3'/><rdf:Description rdf:about='#plus9'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#minus7'/><rdf:Description rdf:about='#plus9'/><rdf:Description rdf:about='#plus5'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#plus4'/><rdf:Description rdf:about='#plus1'/><rdf:Description rdf:about='#plus3'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#minus5'/><rdf:Description rdf:about='#plus8'/><rdf:Description rdf:about='#plus7'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#plus8'/><rdf:Description rdf:about='#minus7'/><rdf:Description rdf:about='#plus3'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#plus4'/><rdf:Description rdf:about='#minus8'/><rdf:Description rdf:about='#plus6'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#plus4'/><rdf:Description rdf:about='#plus6'/><rdf:Description rdf:about='#minus5'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#minus6'/><rdf:Description rdf:about='#plus1'/><rdf:Description rdf:about='#minus9'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#plus1'/><rdf:Description rdf:about='#plus9'/><rdf:Description rdf:about='#minus6'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#plus9'/><rdf:Description rdf:about='#minus8'/><rdf:Description rdf:about='#plus3'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#plus6'/><rdf:Description rdf:about='#plus3'/><rdf:Description rdf:about='#minus4'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#plus8'/><rdf:Description rdf:about='#minus4'/><rdf:Description rdf:about='#plus6'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#minus3'/><rdf:Description rdf:about='#plus5'/><rdf:Description rdf:about='#minus8'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#minus9'/><rdf:Description rdf:about='#plus4'/><rdf:Description rdf:about='#plus3'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#plus8'/><rdf:Description rdf:about='#minus4'/><rdf:Description rdf:about='#plus2'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#minus5'/><rdf:Description rdf:about='#minus2'/><rdf:Description rdf:about='#minus9'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#minus7'/><rdf:Description rdf:about='#minus3'/><rdf:Description rdf:about='#minus4'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#minus9'/><rdf:Description rdf:about='#minus4'/><rdf:Description rdf:about='#minus8'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#plus6'/><rdf:Description rdf:about='#minus4'/><rdf:Description rdf:about='#minus1'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "<rdf:Description rdf:about='#T'><rdf:type><owl:Class><owl:oneOf rdf:parseType='Collection'><rdf:Description rdf:about='#plus6'/><rdf:Description rdf:about='#minus7'/><rdf:Description rdf:about='#minus8'/></owl:oneOf></owl:Class></rdf:type></rdf:Description>\n" + "</rdf:RDF>"; String conclusion = ""; String id = "WebOnt_description_logic_502"; TestClasses tc = TestClasses.valueOf("INCONSISTENCY"); String d = "This is the classic 3 SAT problem."; JUnitRunner r = new JUnitRunner(premise, conclusion, id, tc, d); r.setReasonerFactory(factory()); r.run(); } @Test public void testBetweenDate() throws OWLOntologyCreationException { OWLOntologyManager m = OWLManager.createOWLOntologyManager(); OWLOntology o = m.createOntology(); OWLNamedIndividual x = NamedIndividual(IRI("urn:test:x")); OWLClass c = Class(IRI("urn:test:c")); OWLDataProperty p = DataProperty(IRI("urn:test:p")); OWLDatatype type = Datatype(OWL2Datatype.XSD_DATE_TIME.getIRI()); OWLLiteral date1 = Literal("2007-10-08T20:44:11.656+01:00", type); OWLLiteral date2 = Literal("2009-10-08T20:44:11.656+01:00", type); OWLLiteral date3 = Literal("2008-07-08T20:44:11.656+01:00", type); OWLDataRange range = DatatypeRestriction(type, FacetRestriction(OWLFacet.MIN_INCLUSIVE, date1), FacetRestriction(OWLFacet.MAX_INCLUSIVE, date2)); OWLClassExpression psome = DataSomeValuesFrom(p, range); m.addAxiom(o, EquivalentClasses(c, psome)); m.addAxiom(o, DataPropertyAssertion(p, x, date3)); m.addAxiom(o, FunctionalDataProperty(p)); OWLReasoner r = factory().createReasoner(o); assertTrue(r.isEntailed(ClassAssertion(c, x))); } @Test public void testBetweenNumbers() throws OWLOntologyCreationException { OWLOntologyManager m = OWLManager.createOWLOntologyManager(); OWLOntology o = m.createOntology(); OWLNamedIndividual x = NamedIndividual(IRI("urn:test:x")); OWLClass c = Class(IRI("urn:test:c")); OWLDataProperty p = DataProperty(IRI("urn:test:p")); OWLDatatype type = Datatype(XSDVocabulary.INT.getIRI()); OWLLiteral date1 = Literal("2007", type); // Literal("2008-07-08", type); OWLLiteral date2 = Literal("2009", type); // Literal("2008-07-10", type); OWLLiteral date3 = Literal("2008", type); // Literal("2008-07-09", type); OWLDataRange range = DatatypeRestriction(type, FacetRestriction(OWLFacet.MIN_INCLUSIVE, date1), FacetRestriction(OWLFacet.MAX_INCLUSIVE, date2)); OWLClassExpression psome = DataSomeValuesFrom(p, range); m.addAxiom(o, EquivalentClasses(c, psome)); m.addAxiom(o, DataPropertyAssertion(p, x, date3)); m.addAxiom(o, FunctionalDataProperty(p)); OWLReasoner r = factory().createReasoner(o); assertTrue(r.isEntailed(ClassAssertion(c, x))); } @Test public void testContradicting_dateTime_restrictions_programmatic() throws OWLOntologyCreationException { Set<OWLAxiom> axioms = new HashSet<OWLAxiom>(); OWLClass A = Class(IRI("http://example.org/A")); OWLNamedIndividual a = NamedIndividual(IRI("http://example.org/a")); OWLDataProperty dp = DataProperty(IRI("http://example.org/dp")); OWLDatatype type = Datatype(OWL2Datatype.XSD_DATE_TIME.getIRI()); OWLLiteral lit1 = Literal("2007-10-08T20:44:11.656+01:00", type); OWLLiteral lit2 = Literal("2008-10-08T20:44:11.656+01:00", type); OWLLiteral lit3 = Literal("2008-07-08T20:44:11.656+01:00", type); OWLFacetRestriction min = FacetRestriction(OWLFacet.MIN_INCLUSIVE, lit3); OWLFacetRestriction max = FacetRestriction(OWLFacet.MAX_INCLUSIVE, lit2); axioms.add(Declaration(A)); axioms.add(SubClassOf(A, DataAllValuesFrom(dp, DatatypeRestriction(type, max, min)))); axioms.add(SubClassOf(A, DataHasValue(dp, lit1))); axioms.add(Declaration(dp)); axioms.add(Declaration(a)); axioms.add(ClassAssertion(A, a)); OWLOntology o = OWLManager.createOWLOntologyManager().createOntology( axioms); assertFalse(factory().createReasoner(o).isConsistent()); } @Test public void testContradicting_int_restrictions() throws OWLOntologyCreationException { Set<OWLAxiom> axioms = new HashSet<OWLAxiom>(); OWLClass A = Class(IRI("http://example.org/A")); OWLNamedIndividual a = NamedIndividual(IRI("http://example.org/a")); OWLDataProperty dp = DataProperty(IRI("http://example.org/dp")); OWLDatatype type = Datatype(OWL2Datatype.XSD_INT.getIRI()); OWLLiteral lit1 = Literal("2007", type); OWLLiteral lit2 = Literal("2009", type); OWLLiteral lit3 = Literal("2008", type); OWLFacetRestriction min = FacetRestriction(OWLFacet.MIN_INCLUSIVE, lit3); OWLFacetRestriction max = FacetRestriction(OWLFacet.MAX_INCLUSIVE, lit2); axioms.add(Declaration(A)); axioms.add(SubClassOf(A, DataAllValuesFrom(dp, DatatypeRestriction(type, max, min)))); axioms.add(SubClassOf(A, DataHasValue(dp, lit1))); axioms.add(Declaration(dp)); axioms.add(Declaration(a)); axioms.add(ClassAssertion(A, a)); OWLOntology o = OWLManager.createOWLOntologyManager().createOntology( axioms); assertFalse(factory().createReasoner(o).isConsistent()); } @Test public void testContradicting_dateTime_restrictions() { String premise = "Prefix(:=<http://example.org/>)\n" + "Prefix(xsd:=<http://www.w3.org/2001/XMLSchema#>)\n" + "Ontology(\n" + " Declaration(NamedIndividual(:a))\n" + " Declaration(DataProperty(:dp))\n" + " Declaration(Class(:A))\n" + " SubClassOf(:A \n" + " DataHasValue(:dp \"2007-10-08T20:44:11.656+01:00\"^^xsd:dateTime)) \n" + " SubClassOf(:A \n" + " DataAllValuesFrom(:dp DatatypeRestriction(\n" + " xsd:dateTime \n" + " xsd:minInclusive \"2008-07-08T20:44:11.656+01:00\"^^xsd:dateTime \n" + " xsd:maxInclusive \"2008-10-08T20:44:11.656+01:00\"^^xsd:dateTime)\n" + " )\n" + " ) \n" + " ClassAssertion(:A :a)\n" + ')'; String conclusion = ""; String id = "Contradicting_dateTime_restrictions"; TestClasses tc = TestClasses.valueOf("INCONSISTENCY"); String d = "The individual a must have a dp filler that is a date from 2007, but the restrictions on dp allow only values from 2008, which makes the ontology inconsistent."; JUnitRunner r = new JUnitRunner(premise, conclusion, id, tc, d); r.setReasonerFactory(factory()); r.run(); } @Test public void testInconsistent_Data_Complement_with_the_Restrictions() { String premise = "Prefix(:=<http://example.org/>)\n" + "Prefix(xsd:=<http://www.w3.org/2001/XMLSchema#>)\n" + "Ontology(\n" + " Declaration(NamedIndividual(:a))\n" + " Declaration(DataProperty(:dp))\n" + " Declaration(Class(:A))\n" + " SubClassOf(:A DataAllValuesFrom(:dp \n" + " DataOneOf(\"3\"^^xsd:integer \"4\"^^xsd:integer))\n" + " ) \n" + " SubClassOf(:A DataAllValuesFrom(:dp \n" + " DataOneOf(\"2\"^^xsd:integer \"3\"^^xsd:integer))\n" + " )\n" + " ClassAssertion(:A :a)\n" + " ClassAssertion(DataSomeValuesFrom(:dp\n" + " DataComplementOf(DataOneOf(\"3\"^^xsd:integer))) :a)\n" + ')'; String conclusion = ""; String id = "Inconsistent_Data_Complement_with_the_Restrictions"; TestClasses tc = TestClasses.valueOf("INCONSISTENCY"); String d = "The individual a must have dp fillers that are in the sets {3, 4} and {2, 3}, but at the same time 3 is not allowed as a dp filler for a, which causes the inconsistency."; JUnitRunner r = new JUnitRunner(premise, conclusion, id, tc, d); r.setReasonerFactory(factory()); r.run(); } @Test public void testPlus_and_Minus_Zero_are_Distinct() { String premise = "Prefix(:=<http://example.org/>)\n" + "Prefix(xsd:=<http://www.w3.org/2001/XMLSchema#>)\n" + "Ontology(\n" + " Declaration(NamedIndividual(:Meg))\n" + " Declaration(DataProperty(:numberOfChildren))\n" + " DataPropertyAssertion(:numberOfChildren :Meg \"+0.0\"^^xsd:float) \n" + " DataPropertyAssertion(:numberOfChildren :Meg \"-0.0\"^^xsd:float) \n" + " FunctionalDataProperty(:numberOfChildren)\n" + ')'; String conclusion = ""; String id = "Plus_and_Minus_Zero_are_Distinct"; TestClasses tc = TestClasses.valueOf("INCONSISTENCY"); String d = "For floats and double, +0.0 and -0.0 are distinct values, which contradicts the functionality for numberOfChildren."; JUnitRunner r = new JUnitRunner(premise, conclusion, id, tc, d); r.setReasonerFactory(factory()); r.run(); } @Test public void testInconsistent_Byte_Filler() { String premise = "Prefix(:=<http://example.org/>)\n" + "Prefix(xsd:=<http://www.w3.org/2001/XMLSchema#>)\n" + "Ontology(\n" + " Declaration(NamedIndividual(:a))\n" + " Declaration(DataProperty(:dp))\n" + " Declaration(Class(:A))\n" + " SubClassOf(:A DataAllValuesFrom(:dp xsd:byte)) \n" + " ClassAssertion(:A :a)\n" + " ClassAssertion(\n" + " DataSomeValuesFrom(:dp DataOneOf(\"6542145\"^^xsd:integer)) :a\n" + " )\n" + ')'; String conclusion = ""; String id = "Inconsistent_Byte_Filler"; TestClasses tc = TestClasses.valueOf("INCONSISTENCY"); String d = "The individual a must have the integer 6542145 as dp filler, but all fillers must also be bytes. Since 6542145 is not byte, the ontology is inconsistent."; JUnitRunner r = new JUnitRunner(premise, conclusion, id, tc, d); r.setReasonerFactory(factory()); r.run(); } }