@Override public InputStream getEntailedTriples(final String subject, final InputStream input, final String contentType, final String acceptType) { final Model model = createDefaultModel(); read(model, input, contentTypeToLang(contentType.split(";")[0])); final Model entailed = createDefaultModel(); entailed.setNsPrefixes(model); createRDFSModel(schema, model).listStatements() // We don't care about rdfs:Class and rdfs:Resource types .filterDrop(s -> isRdfsClass(s) || isRdfsResource(s)) .filterDrop(t -> schema.contains(t.getSubject(), null)) .forEachRemaining(entailed::add); final ByteArrayOutputStream baos = new ByteArrayOutputStream(); write(baos, entailed, getRdfLanguage(acceptType.split(";")[0]).orElse(DEFAULT_LANG)); return new ByteArrayInputStream(baos.toByteArray()); }
/** * Bug that exposed prototypes of owl:Thing despite hiding being switched on. */ public void testHideOnOWLThing() { Reasoner r = ReasonerRegistry.getOWLReasoner(); Model data = ModelFactory.createDefaultModel(); InfModel inf = ModelFactory.createInfModel(r, data); StmtIterator things = inf.listStatements(null, RDF.type, OWL.Thing); TestUtil.assertIteratorLength(things, 0); }
/** * Bug that exposed prototypes of owl:Thing despite hiding being switched on. */ public void testHideOnOWLThing() { Reasoner r = ReasonerRegistry.getOWLReasoner(); Model data = ModelFactory.createDefaultModel(); InfModel inf = ModelFactory.createInfModel(r, data); StmtIterator things = inf.listStatements(null, RDF.type, OWL.Thing); TestUtil.assertIteratorLength(things, 0); }
for (StmtIterator i = inf.listStatements(A, p, D); i.hasNext(); ) { Statement s = i.nextStatement(); System.out.println("Statement is " + s);
/** * Fact rules with non-empty bodyies failed to fire. */ public void testFactRules() { Model facts = ModelFactory.createDefaultModel(); String NS = PrintUtil.egNS; Property p = facts.createProperty(NS + "p"); List<Rule> rules = Rule.parseRules("makeTemp(?x) -> (?x, eg:p, eg:z). " + "makeTemp(?x) makeTemp(?y) -> (?x, eg:p, ?y) . " + "(?x, eg:p, eg:z) -> (?a, eg:p, eg:b). " + "-> [ (eg:a eg:p eg:y) <- ]." ); GenericRuleReasoner reasoner = new GenericRuleReasoner(rules); InfModel inf = ModelFactory.createInfModel(reasoner, facts); inf.prepare(); TestUtil.assertIteratorLength(inf.listStatements(null, p, (RDFNode)null), 4); }
/** * Fact rules with non-empty bodyies failed to fire. */ public void testFactRules() { Model facts = ModelFactory.createDefaultModel(); String NS = PrintUtil.egNS; Property p = facts.createProperty(NS + "p"); List<Rule> rules = Rule.parseRules("makeTemp(?x) -> (?x, eg:p, eg:z). " + "makeTemp(?x) makeTemp(?y) -> (?x, eg:p, ?y) . " + "(?x, eg:p, eg:z) -> (?a, eg:p, eg:b). " + "-> [ (eg:a eg:p eg:y) <- ]." ); GenericRuleReasoner reasoner = new GenericRuleReasoner(rules); InfModel inf = ModelFactory.createInfModel(reasoner, facts); inf.prepare(); TestUtil.assertIteratorLength(inf.listStatements(null, p, (RDFNode)null), 4); }
/** * test remove operator in case with empty data. */ public void testEmptyRemove() { List<Rule> rules = Rule.parseRules( "-> (eg:i eg:prop eg:foo) ." + "(?X eg:prop ?V) -> (?X eg:prop2 ?V) ." + "(?X eg:prop eg:foo) noValue(?X eg:guard 'done') -> remove(0) (?X eg:guard 'done') ." ); GenericRuleReasoner reasoner = new GenericRuleReasoner(rules); InfModel im = ModelFactory.createInfModel(reasoner, ModelFactory.createDefaultModel()); Resource i = im.createResource(PrintUtil.egNS + "i"); Property guard = im.createProperty(PrintUtil.egNS + "guard"); TestUtil.assertIteratorValues(this, im.listStatements(), new Object[] {im.createStatement(i, guard, "done")}); }
/** * test remove operator in case with empty data. */ public void testEmptyRemove() { List<Rule> rules = Rule.parseRules( "-> (eg:i eg:prop eg:foo) ." + "(?X eg:prop ?V) -> (?X eg:prop2 ?V) ." + "(?X eg:prop eg:foo) noValue(?X eg:guard 'done') -> remove(0) (?X eg:guard 'done') ." ); GenericRuleReasoner reasoner = new GenericRuleReasoner(rules); InfModel im = ModelFactory.createInfModel(reasoner, ModelFactory.createDefaultModel()); Resource i = im.createResource(PrintUtil.egNS + "i"); Property guard = im.createProperty(PrintUtil.egNS + "guard"); TestUtil.assertIteratorValues(this, im.listStatements(), new Object[] {im.createStatement(i, guard, "done")}); }
/** * Delete bug in generic rule reasoner. */ public void testGenericDeleteBug() { Model data = ModelFactory.createDefaultModel(); String NS = "urn:x-hp:eg/"; Property p = data.createProperty(NS, "p"); Resource x = data.createResource(NS + "x"); Resource y = data.createResource(NS + "y"); Statement sy = data.createStatement(y, p, "foo"); data.add(sy); data.add(x, p, "foo"); // String rule = "[(?x eg:p ?m) -> (?x eg:same ?x)]"; String rule = "[(?x eg:p ?m) (?y eg:p ?m) -> (?x eg:same ?y) (?y eg:same ?x)]"; GenericRuleReasoner reasoner = (GenericRuleReasoner) GenericRuleReasonerFactory.theInstance().create(null); reasoner.setMode(GenericRuleReasoner.FORWARD_RETE); reasoner.setRules(Rule.parseRules(rule)); InfModel inf = ModelFactory.createInfModel(reasoner, data); TestUtil.assertIteratorLength(inf.listStatements(y, null, (RDFNode)null), 3); inf.remove(sy); TestUtil.assertIteratorLength(inf.listStatements(y, null, (RDFNode)null), 0); }
/** * Delete bug in generic rule reasoner. */ public void testGenericDeleteBug() { Model data = ModelFactory.createDefaultModel(); String NS = "urn:x-hp:eg/"; Property p = data.createProperty(NS, "p"); Resource x = data.createResource(NS + "x"); Resource y = data.createResource(NS + "y"); Statement sy = data.createStatement(y, p, "foo"); data.add(sy); data.add(x, p, "foo"); // String rule = "[(?x eg:p ?m) -> (?x eg:same ?x)]"; String rule = "[(?x eg:p ?m) (?y eg:p ?m) -> (?x eg:same ?y) (?y eg:same ?x)]"; GenericRuleReasoner reasoner = (GenericRuleReasoner) GenericRuleReasonerFactory.theInstance().create(null); reasoner.setMode(GenericRuleReasoner.FORWARD_RETE); reasoner.setRules(Rule.parseRules(rule)); InfModel inf = ModelFactory.createInfModel(reasoner, data); TestUtil.assertIteratorLength(inf.listStatements(y, null, (RDFNode)null), 3); inf.remove(sy); TestUtil.assertIteratorLength(inf.listStatements(y, null, (RDFNode)null), 0); }
/** * Test chainging rules from axioms which broke while trying to * fix about test case. */ public void testFactChainRules() { Model facts = ModelFactory.createDefaultModel(); String NS = PrintUtil.egNS; Property mother = facts.createProperty(NS + "mother"); Resource female = facts.createProperty(NS + "Female"); mother.addProperty(RDFS.range, female); List<Rule> rules = Rule.parseRules( "-> tableAll(). \n" + "[rdfs6: (?p rdfs:subPropertyOf ?q), notEqual(?p,?q) -> [ (?a ?q ?b) <- (?a ?p ?b)] ] \n" + "-> (eg:range rdfs:subPropertyOf rdfs:range). \n" + "-> (rdfs:range rdfs:subPropertyOf eg:range). \n" ); GenericRuleReasoner reasoner = new GenericRuleReasoner(rules); reasoner.setTransitiveClosureCaching(true); InfModel inf = ModelFactory.createInfModel(reasoner, facts); Property egRange = inf.createProperty(NS + "range"); TestUtil.assertIteratorValues(this, inf.listStatements(null, egRange, (RDFNode)null), new Object[] {inf.createStatement(mother, egRange, female)} ); }
/** * Test chainging rules from axioms which broke while trying to * fix about test case. */ public void testFactChainRules() { Model facts = ModelFactory.createDefaultModel(); String NS = PrintUtil.egNS; Property mother = facts.createProperty(NS + "mother"); Resource female = facts.createProperty(NS + "Female"); mother.addProperty(RDFS.range, female); List<Rule> rules = Rule.parseRules( "-> tableAll(). \n" + "[rdfs6: (?p rdfs:subPropertyOf ?q), notEqual(?p,?q) -> [ (?a ?q ?b) <- (?a ?p ?b)] ] \n" + "-> (eg:range rdfs:subPropertyOf rdfs:range). \n" + "-> (rdfs:range rdfs:subPropertyOf eg:range). \n" ); GenericRuleReasoner reasoner = new GenericRuleReasoner(rules); reasoner.setTransitiveClosureCaching(true); InfModel inf = ModelFactory.createInfModel(reasoner, facts); Property egRange = inf.createProperty(NS + "range"); TestUtil.assertIteratorValues(this, inf.listStatements(null, egRange, (RDFNode)null), new Object[] {inf.createStatement(mother, egRange, female)} ); }
/** * test duplicate removal when using pure backward rules */ public void testBackwardDupRemoval() { String NS = PrintUtil.egNS; Model base = ModelFactory.createDefaultModel(); Resource i = base.createResource(NS + "i"); Resource a = base.createResource(NS + "a"); Property p = base.createProperty(NS, "p"); Property q = base.createProperty(NS, "q"); Property r = base.createProperty(NS, "r"); base.add(i, p, a); base.add(i, q, a); List<Rule> rules = Rule.parseRules( "(eg:i eg:r eg:a) <- (eg:i eg:p eg:a). (eg:i eg:r eg:a) <- (eg:i eg:q eg:a)."); GenericRuleReasoner reasoner = new GenericRuleReasoner(rules); reasoner.setMode(GenericRuleReasoner.BACKWARD); InfModel im = ModelFactory.createInfModel(reasoner, base); TestUtil.assertIteratorLength(im.listStatements(i, r, a), 1); }
/** * test duplicate removal when using pure backward rules */ public void testBackwardDupRemoval() { String NS = PrintUtil.egNS; Model base = ModelFactory.createDefaultModel(); Resource i = base.createResource(NS + "i"); Resource a = base.createResource(NS + "a"); Property p = base.createProperty(NS, "p"); Property q = base.createProperty(NS, "q"); Property r = base.createProperty(NS, "r"); base.add(i, p, a); base.add(i, q, a); List<Rule> rules = Rule.parseRules( "(eg:i eg:r eg:a) <- (eg:i eg:p eg:a). (eg:i eg:r eg:a) <- (eg:i eg:q eg:a)."); GenericRuleReasoner reasoner = new GenericRuleReasoner(rules); reasoner.setMode(GenericRuleReasoner.BACKWARD); InfModel im = ModelFactory.createInfModel(reasoner, base); TestUtil.assertIteratorLength(im.listStatements(i, r, a), 1); }
/** * The reasoner contract for bind(data) is not quite precise. It allows for * reasoners which have state so that reusing the same reasoner on a second data * model might lead to interference. This in fact used to happen with the transitive * reasoner. This is a test to check that the transitive reasoner state reuse has been fixed at source. */ public void testTransitiveBindReuse() { Reasoner r = ReasonerRegistry.getTransitiveReasoner(); InfModel om1 = ModelFactory.createInfModel(r, ModelFactory.createDefaultModel()); Resource c1 = om1.createResource(PrintUtil.egNS + "Class1"); Resource c2 = om1.createResource(PrintUtil.egNS + "Class2"); Resource c3 = om1.createResource(PrintUtil.egNS + "Class3"); om1.add(c1, RDFS.subClassOf, c2); om1.add(c2, RDFS.subClassOf, c3); om1.prepare(); assertFalse(om1.isEmpty()); InfModel om2 = ModelFactory.createInfModel(r, ModelFactory.createDefaultModel()); StmtIterator si = om2.listStatements(); boolean ok = ! si.hasNext(); si.close(); assertTrue("Transitive reasoner state leak", ok); }
/** * The reasoner contract for bind(data) is not quite precise. It allows for * reasoners which have state so that reusing the same reasoner on a second data * model might lead to interference. This in fact used to happen with the transitive * reasoner. This is a test to check that the transitive reasoner state reuse has been fixed at source. */ public void testTransitiveBindReuse() { Reasoner r = ReasonerRegistry.getTransitiveReasoner(); InfModel om1 = ModelFactory.createInfModel(r, ModelFactory.createDefaultModel()); Resource c1 = om1.createResource(PrintUtil.egNS + "Class1"); Resource c2 = om1.createResource(PrintUtil.egNS + "Class2"); Resource c3 = om1.createResource(PrintUtil.egNS + "Class3"); om1.add(c1, RDFS.subClassOf, c2); om1.add(c2, RDFS.subClassOf, c3); om1.prepare(); assertFalse(om1.isEmpty()); InfModel om2 = ModelFactory.createInfModel(r, ModelFactory.createDefaultModel()); StmtIterator si = om2.listStatements(); boolean ok = ! si.hasNext(); si.close(); assertTrue("Transitive reasoner state leak", ok); }
/** * Check interface extensions which had an earlier bug with null handling */ public void testListWithPosits() { String NS = PrintUtil.egNS; Model data = ModelFactory.createDefaultModel(); Resource c1 = data.createResource(NS + "C1"); Resource c2 = data.createResource(NS + "C2"); Resource c3 = data.createResource(NS + "C3"); data.add(c2, RDFS.subClassOf, c3); Model premise = ModelFactory.createDefaultModel(); premise.add(c1, RDFS.subClassOf, c2); InfModel im = ModelFactory.createInfModel(ReasonerRegistry.getRDFSReasoner(), data); TestUtil.assertIteratorValues(this, im.listStatements(c1, RDFS.subClassOf, null, premise), new Object[] { data.createStatement(c1, RDFS.subClassOf, c2), data.createStatement(c1, RDFS.subClassOf, c3), data.createStatement(c1, RDFS.subClassOf, c1) }); OntModel om = ModelFactory.createOntologyModel(OntModelSpec.RDFS_MEM_RDFS_INF, data); TestUtil.assertIteratorValues(this, om.listStatements(c1, RDFS.subClassOf, null, premise), new Object[] { data.createStatement(c1, RDFS.subClassOf, c2), data.createStatement(c1, RDFS.subClassOf, c3), data.createStatement(c1, RDFS.subClassOf, c1) }); }
/** * Check interface extensions which had an earlier bug with null handling */ public void testListWithPosits() { String NS = PrintUtil.egNS; Model data = ModelFactory.createDefaultModel(); Resource c1 = data.createResource(NS + "C1"); Resource c2 = data.createResource(NS + "C2"); Resource c3 = data.createResource(NS + "C3"); data.add(c2, RDFS.subClassOf, c3); Model premise = ModelFactory.createDefaultModel(); premise.add(c1, RDFS.subClassOf, c2); InfModel im = ModelFactory.createInfModel(ReasonerRegistry.getRDFSReasoner(), data); TestUtil.assertIteratorValues(this, im.listStatements(c1, RDFS.subClassOf, null, premise), new Object[] { data.createStatement(c1, RDFS.subClassOf, c2), data.createStatement(c1, RDFS.subClassOf, c3), data.createStatement(c1, RDFS.subClassOf, c1) }); OntModel om = ModelFactory.createOntologyModel(OntModelSpec.RDFS_MEM_RDFS_INF, data); TestUtil.assertIteratorValues(this, om.listStatements(c1, RDFS.subClassOf, null, premise), new Object[] { data.createStatement(c1, RDFS.subClassOf, c2), data.createStatement(c1, RDFS.subClassOf, c3), data.createStatement(c1, RDFS.subClassOf, c1) }); }
/** * Create a generalized model via inference and check it is * safe but unwrappable */ public void testBasics() { Model base = ModelFactory.createDefaultModel(); Resource r = base.createResource(egNS + "r"); Property p = base.createProperty(egNS + "p"); Property q = base.createProperty(egNS + "q"); Literal l = base.createLiteral("foo"); Statement asserted = base.createStatement(r, p, l); r.addProperty(p, l); List<Rule> rules = Rule.parseRules("(?r eg:p ?v) -> (?v eg:q ?r)."); GenericRuleReasoner reasoner = new GenericRuleReasoner(rules); InfModel inf = ModelFactory.createInfModel(reasoner, base); TestUtil.assertIteratorValues(this, inf.listStatements(), new Statement[]{asserted}); Model deductions = inf.getDeductionsModel(); TestUtil.assertIteratorValues(this, deductions.listStatements(), new Statement[]{}); Graph safeGraph = deductions.getGraph(); assertTrue(safeGraph instanceof SafeGraph); Graph rawGraph = ((SafeGraph)safeGraph).getRawGraph(); Triple deduction = new Triple(l.asNode(), q.asNode(), r.asNode()); TestUtil.assertIteratorValues(this, rawGraph.find(Node.ANY, Node.ANY, Node.ANY), new Triple[]{deduction}); }
/** * Create a generalized model via inference and check it is * safe but unwrappable */ public void testBasics() { Model base = ModelFactory.createDefaultModel(); Resource r = base.createResource(egNS + "r"); Property p = base.createProperty(egNS + "p"); Property q = base.createProperty(egNS + "q"); Literal l = base.createLiteral("foo"); Statement asserted = base.createStatement(r, p, l); r.addProperty(p, l); List<Rule> rules = Rule.parseRules("(?r eg:p ?v) -> (?v eg:q ?r)."); GenericRuleReasoner reasoner = new GenericRuleReasoner(rules); InfModel inf = ModelFactory.createInfModel(reasoner, base); TestUtil.assertIteratorValues(this, inf.listStatements(), new Statement[]{asserted}); Model deductions = inf.getDeductionsModel(); TestUtil.assertIteratorValues(this, deductions.listStatements(), new Statement[]{}); Graph safeGraph = deductions.getGraph(); assertTrue(safeGraph instanceof SafeGraph); Graph rawGraph = ((SafeGraph)safeGraph).getRawGraph(); Triple deduction = new Triple(l.asNode(), q.asNode(), r.asNode()); TestUtil.assertIteratorValues(this, rawGraph.find(Node.ANY, Node.ANY, Node.ANY), new Triple[]{deduction}); }