private static boolean checkEntailment(final PelletInfGraph pellet, final Triple pattern, final boolean withExplanation) { final boolean doExplanation = pellet.getKB().doExplanation(); pellet.getKB().setDoExplanation(withExplanation); boolean entailed = false; if (pattern.equals(INCONCISTENCY_TRIPLE)) entailed = !pellet.isConsistent(); else entailed = pellet.containsTriple(pattern); pellet.getKB().setDoExplanation(doExplanation); return entailed; }
@Override public ExtendedIterator<Triple> find(final Node subject, final Node property, final Node object, final Graph param) { prepare(); final GraphLoader savedLoader = attachTemporaryGraph(param); final ExtendedIterator<Triple> result = graphBaseFind(subject, property, object); detachTemporaryGraph(param, savedLoader); return result; }
@Override public void close() { close(true); }
/** * {@inheritDoc} */ @Override public KnowledgeBase getKB() { return _pellet.getKB(); }
@Override public ExtendedIterator<Triple> find(final KnowledgeBase kb, final PelletInfGraph openllet, final Node s, final Node p, final Node o) { final ATermAppl ind = openllet.getLoader().node2term(s); final ATermAppl prop = openllet.getLoader().node2term(p); return objectFiller(s, p, kb.getPropertyValues(prop, ind)); } });
public boolean entails(final Triple pattern) { prepare(); if (isSyntaxTriple(pattern)) return true; if (isBnodeTypeQuery(pattern)) return !containsTriple(Triple.create(pattern.getObject(), RDFS.subClassOf.asNode(), OWL.Nothing.asNode())); else return containsTriple(pattern); }
boolean consistent = pelletJenaGraph.isConsistent(); long e = System.currentTimeMillis(); System.out.println("Consistent? " + consistent + " (" + (e - s) + "ms)"); consistent = pelletJenaGraph.isConsistent(); e = System.currentTimeMillis(); System.out.println("Consistent? " + consistent + " (" + (e - s) + "ms)"); consistent = pelletJenaGraph.isConsistent(); e = System.currentTimeMillis(); System.out.println("Consistent? " + consistent + " (" + (e - s) + "ms)");
@Test public void testInfiniteChain() { final OntModel model = ModelFactory.createOntologyModel(PelletReasonerFactory.THE_SPEC); model.setStrictMode(false); model.read(_base + "infiniteChain.owl"); model.prepare(); assertFalse(((PelletInfGraph) model.getGraph()).getKB().isConsistent()); final String ns = "http://www.example.org/test#"; final Property prop = model.getBaseModel().getProperty(ns + "ssn"); prop.removeAll(RDFS.range); model.rebind(); assertTrue(((PelletInfGraph) model.getGraph()).isConsistent()); }
/** * {@inheritDoc} */ @Override public void load() { _pellet.prepare(false); }
private Set<ATermAppl> pruneExplanation(final Triple pattern, final Set<ATermAppl> explanation) { final Set<ATermAppl> prunedExplanation = new HashSet<>(explanation); final OntBuilder builder = new OntBuilder(_kb); KnowledgeBase copyKB; PelletInfGraph copyGraph; final GraphLoader loader = new DefaultGraphLoader(); for (final ATermAppl axiom : explanation) { prunedExplanation.remove(axiom); copyKB = builder.build(prunedExplanation); copyGraph = new PelletInfGraph(copyKB, (PelletReasoner) getReasoner(), loader); if (!checkEntailment(copyGraph, pattern, false)) prunedExplanation.add(axiom); else _logger.finer(() -> "Prune from explanation " + ATermUtils.toString(axiom)); } return prunedExplanation; }
@Override public void testEntailment(final String entailmentFileURI, final boolean positiveEntailment) { final Model entailments = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM); entailments.read(entailmentFileURI, entailmentFileURI, fileType(entailmentFileURI)); final Graph entailmentsGraph = entailments.getGraph(); final PelletInfGraph pellet = (PelletInfGraph) _model.getGraph(); final GraphLoader savedLoader = pellet.attachTemporaryGraph(entailmentsGraph); final ExtendedIterator<Triple> i = entailmentsGraph.find(Triple.ANY); while (i.hasNext()) { final Triple triple = i.next(); if (!pellet.entails(triple)) { assertFalse("Entailment failed for " + triple, positiveEntailment); return; } } pellet.detachTemporaryGraph(entailmentsGraph, savedLoader); assertTrue("All axioms entailed in negative entailment test", positiveEntailment); }
public void classify() { System.out.println("Classify Timeout: " + Timeouts.CLASSIFY + "ms"); System.out.print("Classifying..."); try { ((PelletInfGraph) model.getGraph()).classify(); System.out.println("finished in " + timers.getTimer("classify").get().getLast() + "ms"); } catch (final TimeoutException e) { Log.error(_logger, e); System.out.println("interrupted after " + timers.getTimer("classify").get().getElapsed() + "ms"); } System.out.println("Classified: " + openllet.isClassified()); System.out.println(); }
private Model explainTriple(final Triple triple) { final Graph explanation = explain(triple); return explanation == null ? null : ModelFactory.createModelForGraph(explanation); }
@Override public void testExplanations(final OWLAxiom axiom, final int max, final Set<Set<OWLAxiom>> expectedExplanations) throws Exception { Triple triple = null; if (axiom != null) { final Graph graph = convertOntology(singletonList(axiom), true); // We can only explain single triple inference through Jena. Instead of making // this a failure we just tune the tests where single triples are explained. // OWLAPI implementation should run all tests. // assertTrue( "Multiple triples not supported", graph.size() == 1 ); assumeTrue(graph.size() == 1); triple = graph.find(Triple.ANY).next(); } final Graph actual = triple == null ? _openllet.explainInconsistency().getGraph() : _openllet.explain(triple); assertNotNull("Triple " + triple + "cannot be explained", actual); final boolean success = testExplanationWithJena(triple, actual, expectedExplanations); assertTrue("Error in explanation, see the _logger file for details", success); }
@Override @SuppressWarnings("deprecation") public Graph getDeductionsGraph() { if (!OpenlletOptions.RETURN_DEDUCTIONS_GRAPH) return null; classify(); if (_deductionsGraph == null) { _logger.fine("Realizing PelletInfGraph..."); _kb.realize(); _logger.fine("Extract model..."); final Model extractedModel = _extractor.extractModel(); _deductionsGraph = extractedModel.getGraph(); _logger.fine("done."); } return _deductionsGraph; }
@Override public PelletInfGraph bind(final Graph graph) throws ReasonerException { _logger.fine("In bind!"); return new PelletInfGraph(graph, this, new DefaultGraphLoader()); }
/** * {@inheritDoc} */ @Override public KnowledgeBase getKB() { return _pellet.getKB(); }
@Override public final ExtendedIterator<Triple> find(final KnowledgeBase kb, final PelletInfGraph openllet, final Node s, final Node p, final Node o) { final List<ATermAppl> props = new ArrayList<>(); final ATermAppl range = openllet.getLoader().node2term(o); for (final ATermAppl prop : kb.getProperties()) if (kb.getRanges(prop).contains(range)) props.add(prop); return subjectFiller(props, p, o); } });
public boolean entails(final Triple pattern) { prepare(); if (isSyntaxTriple(pattern)) return true; if (isBnodeTypeQuery(pattern)) return !containsTriple(Triple.create(pattern.getObject(), RDFS.subClassOf.asNode(), OWL.Nothing.asNode())); else return containsTriple(pattern); }