package bugs;
import static org.junit.Assert.*;
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.OWLClass;
import org.semanticweb.owlapi.model.OWLDataFactory;
import org.semanticweb.owlapi.model.OWLDataProperty;
import org.semanticweb.owlapi.model.OWLDataSomeValuesFrom;
import org.semanticweb.owlapi.model.OWLDatatype;
import org.semanticweb.owlapi.model.OWLFacetRestriction;
import org.semanticweb.owlapi.model.OWLIndividual;
import org.semanticweb.owlapi.model.OWLNamedIndividual;
import org.semanticweb.owlapi.model.OWLObjectProperty;
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.NodeSet;
import org.semanticweb.owlapi.reasoner.OWLReasoner;
import org.semanticweb.owlapi.vocab.OWL2Datatype;
import org.semanticweb.owlapi.vocab.OWLFacet;
import testbase.TestBase;
@SuppressWarnings("javadoc")
public class AddIndividualsAfterLoadingTestCase extends TestBase {
@Test
public void shouldLoadAndNotFailQuery() throws Exception {
// given
OWLOntology o = OWLManager.createOWLOntologyManager().createOntology();
OWLOntologyManager m = o.getOWLOntologyManager();
OWLDataFactory f = m.getOWLDataFactory();
OWLClass c1 = f.getOWLClass(IRI.create("urn:test#c1"));
OWLClass c2 = f.getOWLClass(IRI.create("urn:test#c2"));
OWLObjectProperty p = f.getOWLObjectProperty(IRI.create("urn:test#p"));
m.addAxiom(o, f.getOWLDisjointClassesAxiom(c1, c2));
m.addAxiom(o, f.getOWLObjectPropertyDomainAxiom(p, c1));
m.addAxiom(o, f.getOWLObjectPropertyRangeAxiom(p, c2));
// OWLReasoner r = new JFactFactory().createReasoner(o);
// r.precomputeInferences(InferenceType.CLASS_HIERARCHY);
OWLIndividual i = f.getOWLNamedIndividual(IRI.create("urn:test#i"));
OWLIndividual j = f.getOWLNamedIndividual(IRI.create("urn:test#j"));
m.addAxiom(o, f.getOWLObjectPropertyAssertionAxiom(p, i, j));
// r.flush();
// r.precomputeInferences(InferenceType.CLASS_HIERARCHY);
OWLReasoner r = factory().createReasoner(o);
r.precomputeInferences(InferenceType.CLASS_HIERARCHY);
OWLIndividual k = f.getOWLNamedIndividual(IRI.create("urn:test#k"));
OWLIndividual l = f.getOWLNamedIndividual(IRI.create("urn:test#l"));
m.addAxiom(o, f.getOWLObjectPropertyAssertionAxiom(p, k, l));
OWLDataProperty dt = f.getOWLDataProperty(IRI.create("urn:test#dt"));
m.addAxiom(o, f.getOWLDeclarationAxiom(dt));
m.addAxiom(
o,
f.getOWLDataPropertyRangeAxiom(dt,
f.getOWLDatatype(OWL2Datatype.XSD_STRING.getIRI())));
m.addAxiom(
o,
f.getOWLDataPropertyAssertionAxiom(dt, l,
f.getOWLLiteral("test")));
r.flush();
r.precomputeInferences(InferenceType.CLASS_HIERARCHY);
assertTrue(r.isConsistent());
}
@Test
public void shouldLoadAndNotFailQueryDataHasValue() throws Exception {
OWLOntology o = OWLManager.createOWLOntologyManager().createOntology();
OWLOntologyManager m = o.getOWLOntologyManager();
OWLDataFactory f = m.getOWLDataFactory();
OWLDataProperty p = f.getOWLDataProperty(IRI.create("urn:test#p"));
m.addAxiom(o,
f.getOWLDataPropertyRangeAxiom(p, f.getFloatOWLDatatype()));
OWLNamedIndividual i = f
.getOWLNamedIndividual(IRI.create("urn:test#i"));
m.addAxiom(o, f.getOWLDataPropertyAssertionAxiom(p, i, 19.0F));
OWLDatatype fdt = f.getFloatOWLDatatype();
OWLFacetRestriction fLess20 = f.getOWLFacetRestriction(
OWLFacet.MAX_INCLUSIVE, 20f);
OWLReasoner r = factory().createReasoner(o);
r.precomputeInferences(InferenceType.CLASS_HIERARCHY);
assertFalse(r.getInstances(
f.getOWLDataAllValuesFrom(p,
f.getOWLDatatypeRestriction(fdt, fLess20)), false)
.containsEntity(i));
}
@Test
public void debug() throws OWLOntologyCreationException {
String input = "Prefix(owl:=<http://www.w3.org/2002/07/owl#>)\n"
+ "Prefix(rdf:=<http://www.w3.org/1999/02/22-rdf-syntax-ns#>)\n"
+ "Prefix(xml:=<http://www.w3.org/XML/1998/namespace>)\n"
+ "Prefix(xsd:=<http://www.w3.org/2001/XMLSchema#>)\n"
+ "Prefix(rdfs:=<http://www.w3.org/2000/01/rdf-schema#>)\n"
+ "\n"
+ "\n"
+ "Ontology(<urn:test>\n"
+ "\n"
+ "Declaration(Class(<urn:test#Producto>))\n"
+ "Declaration(Class(<urn:test#lessThan20>))\n"
+ "Declaration(DataProperty(<urn:test#hasEnergia>))\n"
+ "Declaration(NamedIndividual(<urn:test#prod1>))\n"
+ "Declaration(NamedIndividual(<urn:test#prod2>))\n"
+ "Declaration(NamedIndividual(<urn:test#prod3>))\n"
+ "Declaration(NamedIndividual(<urn:test#prod4>))\n"
+ "Declaration(NamedIndividual(<urn:test#prod5>))\n"
+ "EquivalentClasses(<urn:test#lessThan20> ObjectIntersectionOf(DataSomeValuesFrom(<urn:test#hasEnergia> DatatypeRestriction(xsd:float xsd:maxExclusive \"20.0\"^^xsd:float)) <urn:test#Producto>))\n"
+ "SubClassOf(<urn:test#lessThan20> <urn:test#Producto>)\n"
+ "FunctionalDataProperty(<urn:test#hasEnergia>)\n"
+ "DataPropertyDomain(<urn:test#hasEnergia> <urn:test#Producto>)\n"
+ "DataPropertyRange(<urn:test#hasEnergia> xsd:float)\n"
+ "DataPropertyAssertion(<urn:test#hasEnergia> <urn:test#prod1> \"30.0\"^^xsd:float)\n"
+ "DataPropertyAssertion(<urn:test#hasEnergia> <urn:test#prod2> \"35.0\"^^xsd:float)\n"
+ "DataPropertyAssertion(<urn:test#hasEnergia> <urn:test#prod3> \"58.0\"^^xsd:float)\n"
+ "DataPropertyAssertion(<urn:test#hasEnergia> <urn:test#prod4> \"14.0\"^^xsd:float)\n"
+ "DataPropertyAssertion(<urn:test#hasEnergia> <urn:test#prod5> \"5.0\"^^xsd:float))";
OWLOntology o = OWLManager.createOWLOntologyManager()
.loadOntologyFromOntologyDocument(
new StringDocumentSource(input));
OWLOntologyManager m = o.getOWLOntologyManager();
OWLDataFactory f = m.getOWLDataFactory();
OWLReasoner r = factory().createReasoner(o);
r.precomputeInferences(InferenceType.CLASS_HIERARCHY);
OWLDataProperty p = f.getOWLDataProperty(IRI
.create("urn:test#hasEnergia"));
OWLNamedIndividual i = f.getOWLNamedIndividual(IRI
.create("urn:test#prod4"));
OWLDatatype fdt = f.getFloatOWLDatatype();
OWLFacetRestriction fLess20 = f.getOWLFacetRestriction(
OWLFacet.MAX_INCLUSIVE, 20f);
OWLDataSomeValuesFrom dsv = f.getOWLDataSomeValuesFrom(p,
f.getOWLDatatypeRestriction(fdt, fLess20));
NodeSet<OWLNamedIndividual> instances = r.getInstances(dsv, false);
assertTrue(instances.containsEntity(i));
}
}