Search in sources :

Example 1 with SPARQLResultsJSONWriter

use of org.eclipse.rdf4j.query.resultio.sparqljson.SPARQLResultsJSONWriter in project incubator-rya by apache.

the class RdfController method queryRdf.

@RequestMapping(value = "/queryrdf", method = { RequestMethod.GET, RequestMethod.POST })
public void queryRdf(@RequestParam("query") final String query, @RequestParam(value = RdfCloudTripleStoreConfiguration.CONF_QUERY_AUTH, required = false) String auth, @RequestParam(value = RdfCloudTripleStoreConfiguration.CONF_CV, required = false) final String vis, @RequestParam(value = RdfCloudTripleStoreConfiguration.CONF_INFER, required = false) final String infer, @RequestParam(value = "nullout", required = false) final String nullout, @RequestParam(value = RdfCloudTripleStoreConfiguration.CONF_RESULT_FORMAT, required = false) final String emit, @RequestParam(value = "padding", required = false) final String padding, @RequestParam(value = "callback", required = false) final String callback, final HttpServletRequest request, final HttpServletResponse response) {
    // WARNING: if you add to the above request variables,
    // Be sure to validate and encode since they come from the outside and could contain odd damaging character sequences.
    SailRepositoryConnection conn = null;
    final Thread queryThread = Thread.currentThread();
    auth = StringUtils.arrayToCommaDelimitedString(provider.getUserAuths(request));
    final Timer timer = new Timer();
    timer.schedule(new TimerTask() {

        @Override
        public void run() {
            log.debug("interrupting");
            queryThread.interrupt();
        }
    }, QUERY_TIME_OUT_SECONDS * 1000);
    try {
        final ServletOutputStream os = response.getOutputStream();
        conn = repository.getConnection();
        final Boolean isBlankQuery = StringUtils.isEmpty(query);
        final ParsedOperation operation = QueryParserUtil.parseOperation(QueryLanguage.SPARQL, query, null);
        final Boolean requestedCallback = !StringUtils.isEmpty(callback);
        final Boolean requestedFormat = !StringUtils.isEmpty(emit);
        if (!isBlankQuery) {
            if (operation instanceof ParsedGraphQuery) {
                // Perform Graph Query
                final RDFHandler handler = new RDFXMLWriter(os);
                response.setContentType("text/xml");
                performGraphQuery(query, conn, auth, infer, nullout, handler);
            } else if (operation instanceof ParsedTupleQuery) {
                // Perform Tuple Query
                TupleQueryResultHandler handler;
                if (requestedFormat && emit.equalsIgnoreCase("json")) {
                    handler = new SPARQLResultsJSONWriter(os);
                    response.setContentType("application/json");
                } else {
                    handler = new SPARQLResultsXMLWriter(os);
                    response.setContentType("text/xml");
                }
                performQuery(query, conn, auth, infer, nullout, handler);
            } else if (operation instanceof ParsedUpdate) {
                // Perform Update Query
                performUpdate(query, conn, os, infer, vis);
            } else {
                throw new MalformedQueryException("Cannot process query. Query type not supported.");
            }
        }
        if (requestedCallback) {
            os.print(")");
        }
    } catch (final Exception e) {
        log.error("Error running query", e);
        throw new RuntimeException(e);
    } finally {
        if (conn != null) {
            try {
                conn.close();
            } catch (final RepositoryException e) {
                log.error("Error closing connection", e);
            }
        }
    }
    timer.cancel();
}
Also used : ServletOutputStream(javax.servlet.ServletOutputStream) ParsedGraphQuery(org.eclipse.rdf4j.query.parser.ParsedGraphQuery) RepositoryException(org.eclipse.rdf4j.repository.RepositoryException) SailRepositoryConnection(org.eclipse.rdf4j.repository.sail.SailRepositoryConnection) SPARQLResultsJSONWriter(org.eclipse.rdf4j.query.resultio.sparqljson.SPARQLResultsJSONWriter) ParsedOperation(org.eclipse.rdf4j.query.parser.ParsedOperation) QueryEvaluationException(org.eclipse.rdf4j.query.QueryEvaluationException) RDFParseException(org.eclipse.rdf4j.rio.RDFParseException) RepositoryException(org.eclipse.rdf4j.repository.RepositoryException) UpdateExecutionException(org.eclipse.rdf4j.query.UpdateExecutionException) MalformedQueryException(org.eclipse.rdf4j.query.MalformedQueryException) TupleQueryResultHandlerException(org.eclipse.rdf4j.query.TupleQueryResultHandlerException) QueryResultHandlerException(org.eclipse.rdf4j.query.QueryResultHandlerException) RDFHandlerException(org.eclipse.rdf4j.rio.RDFHandlerException) IOException(java.io.IOException) SPARQLResultsXMLWriter(org.eclipse.rdf4j.query.resultio.sparqlxml.SPARQLResultsXMLWriter) ParsedUpdate(org.eclipse.rdf4j.query.parser.ParsedUpdate) Timer(java.util.Timer) TimerTask(java.util.TimerTask) RDFXMLWriter(org.eclipse.rdf4j.rio.rdfxml.RDFXMLWriter) MalformedQueryException(org.eclipse.rdf4j.query.MalformedQueryException) TupleQueryResultHandler(org.eclipse.rdf4j.query.TupleQueryResultHandler) RDFHandler(org.eclipse.rdf4j.rio.RDFHandler) ParsedTupleQuery(org.eclipse.rdf4j.query.parser.ParsedTupleQuery) RequestMapping(org.springframework.web.bind.annotation.RequestMapping)

Example 2 with SPARQLResultsJSONWriter

use of org.eclipse.rdf4j.query.resultio.sparqljson.SPARQLResultsJSONWriter in project incubator-rya by apache.

the class QueryResultsOutputUtil method toBindingSetJSONFile.

/**
 * Writes the results of a {@link QueryResultStream} to the output stream as JSON until the
 * shutdown signal is set.
 *
 * @param out - The stream the JSON will be written to. (not null)
 * @param query - The parsed SPARQL Query whose results are being output. This
 *   object is used to figure out which bindings may appear. (not null)
 * @param resultsStream - The results stream that will be polled for results to
 *   write to {@code out}. (not null)
 * @param shutdownSignal - Setting this signal will cause the thread that
 *   is processing this function to finish and leave. (not null)
 * @throws TupleQueryResultHandlerException A problem was encountered while
 *   writing the JSON to the output stream.
 * @throws IllegalStateException The {@code resultsStream} is closed.
 * @throws RyaStreamsException Could not fetch the next set of results.
 */
public static void toBindingSetJSONFile(final OutputStream out, final TupleExpr query, final QueryResultStream<VisibilityBindingSet> resultsStream, final AtomicBoolean shutdownSignal) throws TupleQueryResultHandlerException, IllegalStateException, RyaStreamsException {
    requireNonNull(out);
    requireNonNull(query);
    requireNonNull(resultsStream);
    requireNonNull(shutdownSignal);
    // Create a writer that does not pretty print.
    final SPARQLResultsJSONWriter writer = new SPARQLResultsJSONWriter(out);
    final WriterConfig config = writer.getWriterConfig();
    config.set(BasicWriterSettings.PRETTY_PRINT, false);
    // Start the JSON and enumerate the possible binding names.
    writer.startQueryResult(Lists.newArrayList(query.getBindingNames()));
    while (!shutdownSignal.get()) {
        for (final VisibilityBindingSet result : resultsStream.poll(1000)) {
            writer.handleSolution(result);
        }
    }
    writer.endQueryResult();
}
Also used : VisibilityBindingSet(org.apache.rya.api.model.VisibilityBindingSet) SPARQLResultsJSONWriter(org.eclipse.rdf4j.query.resultio.sparqljson.SPARQLResultsJSONWriter) WriterConfig(org.eclipse.rdf4j.rio.WriterConfig)

Aggregations

SPARQLResultsJSONWriter (org.eclipse.rdf4j.query.resultio.sparqljson.SPARQLResultsJSONWriter)2 IOException (java.io.IOException)1 Timer (java.util.Timer)1 TimerTask (java.util.TimerTask)1 ServletOutputStream (javax.servlet.ServletOutputStream)1 VisibilityBindingSet (org.apache.rya.api.model.VisibilityBindingSet)1 MalformedQueryException (org.eclipse.rdf4j.query.MalformedQueryException)1 QueryEvaluationException (org.eclipse.rdf4j.query.QueryEvaluationException)1 QueryResultHandlerException (org.eclipse.rdf4j.query.QueryResultHandlerException)1 TupleQueryResultHandler (org.eclipse.rdf4j.query.TupleQueryResultHandler)1 TupleQueryResultHandlerException (org.eclipse.rdf4j.query.TupleQueryResultHandlerException)1 UpdateExecutionException (org.eclipse.rdf4j.query.UpdateExecutionException)1 ParsedGraphQuery (org.eclipse.rdf4j.query.parser.ParsedGraphQuery)1 ParsedOperation (org.eclipse.rdf4j.query.parser.ParsedOperation)1 ParsedTupleQuery (org.eclipse.rdf4j.query.parser.ParsedTupleQuery)1 ParsedUpdate (org.eclipse.rdf4j.query.parser.ParsedUpdate)1 SPARQLResultsXMLWriter (org.eclipse.rdf4j.query.resultio.sparqlxml.SPARQLResultsXMLWriter)1 RepositoryException (org.eclipse.rdf4j.repository.RepositoryException)1 SailRepositoryConnection (org.eclipse.rdf4j.repository.sail.SailRepositoryConnection)1 RDFHandler (org.eclipse.rdf4j.rio.RDFHandler)1