package eu.fbk.knowledgestore.triplestore; import org.openrdf.query.BindingSet; import org.openrdf.query.Dataset; import org.openrdf.query.QueryEvaluationException; import org.openrdf.query.QueryLanguage; import org.openrdf.query.algebra.TupleExpr; import org.openrdf.query.parser.ParsedQuery; import org.openrdf.query.parser.QueryParserUtil; import org.openrdf.sail.NotifyingSail; import org.openrdf.sail.NotifyingSailConnection; import org.openrdf.sail.SailException; import org.openrdf.sail.helpers.NotifyingSailConnectionWrapper; import org.openrdf.sail.helpers.NotifyingSailWrapper; import info.aduna.iteration.CloseableIteration; public class SPARQLRendererSail extends NotifyingSailWrapper { public SPARQLRendererSail(final NotifyingSail sail) { super(sail); } @Override public NotifyingSailConnection getConnection() throws SailException { return new SparqlRendererConnection(super.getConnection()); } private static class SparqlRendererConnection extends NotifyingSailConnectionWrapper { public SparqlRendererConnection(final NotifyingSailConnection connection) { super(connection); } @Override public CloseableIteration<? extends BindingSet, QueryEvaluationException> evaluate( final TupleExpr tupleExpr, final Dataset dataset, final BindingSet bindings, final boolean includeInferred) throws SailException { try { System.out.println(tupleExpr); System.out.println(dataset); final SPARQLRenderer renderer = new SPARQLRenderer(null, false); final String string = renderer.render(tupleExpr, dataset); // ParsedQuery q; // if (string1.contains("SELECT")) { // q = new ParsedTupleQuery(tupleExpr); // } else if (string1.contains("ASK")) { // q = new ParsedBooleanQuery(tupleExpr); // } else { // q = new ParsedGraphQuery(tupleExpr); // } // q.setDataset(dataset); // final String string = new SPARQLQueryRenderer().render(q); System.out.println(string); final ParsedQuery parsedQuery = QueryParserUtil.parseQuery(QueryLanguage.SPARQL, string, null); final TupleExpr newTupleExpr = parsedQuery.getTupleExpr(); final Dataset newDataset = parsedQuery.getDataset(); return super.evaluate(newTupleExpr, newDataset, bindings, includeInferred); } catch (final Throwable ex) { throw new SailException(ex); } } } }