Search in sources :

Example 1 with QueryEvaluationException

use of org.eclipse.rdf4j.query.QueryEvaluationException in project rdf4j by eclipse.

the class SPARQLConnection method exportStatements.

public void exportStatements(Resource subj, IRI pred, Value obj, boolean includeInferred, RDFHandler handler, Resource... contexts) throws RepositoryException, RDFHandlerException {
    try {
        GraphQuery query = prepareGraphQuery(SPARQL, EVERYTHING, "");
        setBindings(query, subj, pred, obj, contexts);
        query.evaluate(handler);
    } catch (MalformedQueryException e) {
        throw new RepositoryException(e);
    } catch (QueryEvaluationException e) {
        throw new RepositoryException(e);
    }
}
Also used : QueryEvaluationException(org.eclipse.rdf4j.query.QueryEvaluationException) MalformedQueryException(org.eclipse.rdf4j.query.MalformedQueryException) RepositoryException(org.eclipse.rdf4j.repository.RepositoryException) SPARQLGraphQuery(org.eclipse.rdf4j.repository.sparql.query.SPARQLGraphQuery) GraphQuery(org.eclipse.rdf4j.query.GraphQuery)

Example 2 with QueryEvaluationException

use of org.eclipse.rdf4j.query.QueryEvaluationException in project rdf4j by eclipse.

the class RepositoryFederatedService method select.

/**
 * Evaluate the provided sparqlQueryString at the initialized {@link Repository} of this
 * {@link FederatedService}. Insert bindings into SELECT query and evaluate
 */
@Override
public CloseableIteration<BindingSet, QueryEvaluationException> select(Service service, Set<String> projectionVars, BindingSet bindings, String baseUri) throws QueryEvaluationException {
    try {
        String sparqlQueryString = service.getSelectQueryString(projectionVars);
        TupleQuery query = getConnection().prepareTupleQuery(QueryLanguage.SPARQL, sparqlQueryString, baseUri);
        Iterator<Binding> bIter = bindings.iterator();
        while (bIter.hasNext()) {
            Binding b = bIter.next();
            if (service.getServiceVars().contains(b.getName()))
                query.setBinding(b.getName(), b.getValue());
        }
        TupleQueryResult res = query.evaluate();
        // insert original bindings again
        InsertBindingSetCursor result = new InsertBindingSetCursor(res, bindings);
        if (service.isSilent())
            return new SilentIteration(result);
        else
            return result;
    } catch (MalformedQueryException e) {
        throw new QueryEvaluationException(e);
    } catch (RepositoryException e) {
        throw new QueryEvaluationException("Repository for endpoint " + rep.toString() + " could not be initialized.", e);
    }
}
Also used : Binding(org.eclipse.rdf4j.query.Binding) InsertBindingSetCursor(org.eclipse.rdf4j.repository.sparql.query.InsertBindingSetCursor) QueryEvaluationException(org.eclipse.rdf4j.query.QueryEvaluationException) MalformedQueryException(org.eclipse.rdf4j.query.MalformedQueryException) TupleQuery(org.eclipse.rdf4j.query.TupleQuery) RepositoryException(org.eclipse.rdf4j.repository.RepositoryException) TupleQueryResult(org.eclipse.rdf4j.query.TupleQueryResult)

Example 3 with QueryEvaluationException

use of org.eclipse.rdf4j.query.QueryEvaluationException in project rdf4j by eclipse.

the class RepositoryFederatedService method evaluateInternal.

/**
 * Evaluate the SPARQL query that can be constructed from the SERVICE node at the initialized
 * {@link Repository} of this {@link FederatedService}. Use specified bindings as constraints to the
 * query. Try to evaluate using BINDINGS clause, if this yields an exception fall back to the naive
 * implementation. This method deals with SILENT SERVICEs.
 */
protected CloseableIteration<BindingSet, QueryEvaluationException> evaluateInternal(Service service, CloseableIteration<BindingSet, QueryEvaluationException> bindings, String baseUri) throws QueryEvaluationException {
    // materialize all bindings (to allow for fallback in case of errors)
    // note that this may be blocking depending on the underlying iterator
    List<BindingSet> allBindings = new LinkedList<BindingSet>();
    while (bindings.hasNext()) {
        allBindings.add(bindings.next());
    }
    if (allBindings.size() == 0) {
        return new EmptyIteration<BindingSet, QueryEvaluationException>();
    }
    // projection vars
    Set<String> projectionVars = new HashSet<String>(service.getServiceVars());
    projectionVars.removeAll(allBindings.get(0).getBindingNames());
    // below we need to take care for SILENT services
    CloseableIteration<BindingSet, QueryEvaluationException> result = null;
    try {
        // fallback to simple evaluation (just a single binding)
        if (allBindings.size() == 1) {
            result = select(service, projectionVars, allBindings.get(0), baseUri);
            result = service.isSilent() ? new SilentIteration(result) : result;
            return result;
        }
        // To be able to insert the input bindings again later on, we need some
        // means to identify the row of each binding. hence, we use an
        // additional
        // projection variable, which is also passed in the BINDINGS clause
        // with the value of the actual row. The value corresponds to the index
        // of the binding in the index list
        projectionVars.add("__rowIdx");
        String queryString = service.getSelectQueryString(projectionVars);
        List<String> relevantBindingNames = getRelevantBindingNames(allBindings, service.getServiceVars());
        if (relevantBindingNames.size() != 0) {
            // append the VALUES clause to the query
            queryString += buildVALUESClause(allBindings, relevantBindingNames);
        }
        TupleQuery query = getConnection().prepareTupleQuery(QueryLanguage.SPARQL, queryString, baseUri);
        TupleQueryResult res = null;
        // TODO how to retrieve max query value
        query.setMaxQueryTime(60);
        // from actual setting?
        res = query.evaluate();
        if (relevantBindingNames.size() == 0)
            // cross
            result = new SPARQLCrossProductIteration(res, allBindings);
        else
            // product
            // common
            result = new ServiceJoinConversionIteration(res, allBindings);
        // join
        result = service.isSilent() ? new SilentIteration(result) : result;
        return result;
    } catch (RepositoryException e) {
        Iterations.closeCloseable(result);
        if (service.isSilent())
            return new CollectionIteration<BindingSet, QueryEvaluationException>(allBindings);
        throw new QueryEvaluationException("Repository for endpoint " + rep.toString() + " could not be initialized.", e);
    } catch (MalformedQueryException e) {
        // this exception must not be silenced, bug in our code
        throw new QueryEvaluationException(e);
    } catch (QueryEvaluationException e) {
        Iterations.closeCloseable(result);
        if (service.isSilent())
            return new CollectionIteration<BindingSet, QueryEvaluationException>(allBindings);
        throw e;
    } catch (RuntimeException e) {
        Iterations.closeCloseable(result);
        // QueryEval) if silent
        if (service.isSilent())
            return new CollectionIteration<BindingSet, QueryEvaluationException>(allBindings);
        throw e;
    }
}
Also used : EmptyBindingSet(org.eclipse.rdf4j.query.impl.EmptyBindingSet) BindingSet(org.eclipse.rdf4j.query.BindingSet) EmptyIteration(org.eclipse.rdf4j.common.iteration.EmptyIteration) TupleQuery(org.eclipse.rdf4j.query.TupleQuery) RepositoryException(org.eclipse.rdf4j.repository.RepositoryException) LinkedList(java.util.LinkedList) QueryEvaluationException(org.eclipse.rdf4j.query.QueryEvaluationException) MalformedQueryException(org.eclipse.rdf4j.query.MalformedQueryException) TupleQueryResult(org.eclipse.rdf4j.query.TupleQueryResult) HashSet(java.util.HashSet)

Example 4 with QueryEvaluationException

use of org.eclipse.rdf4j.query.QueryEvaluationException in project rdf4j by eclipse.

the class RepositoryFederatedService method ask.

/**
 * Evaluate the provided sparqlQueryString at the initialized {@link Repository} of this
 * {@link FederatedService}. Insert bindings, send ask query and return final result
 */
@Override
public boolean ask(Service service, BindingSet bindings, String baseUri) throws QueryEvaluationException {
    try {
        String sparqlQueryString = service.getAskQueryString();
        BooleanQuery query = getConnection().prepareBooleanQuery(QueryLanguage.SPARQL, sparqlQueryString, baseUri);
        Iterator<Binding> bIter = bindings.iterator();
        while (bIter.hasNext()) {
            Binding b = bIter.next();
            if (service.getServiceVars().contains(b.getName()))
                query.setBinding(b.getName(), b.getValue());
        }
        return query.evaluate();
    } catch (MalformedQueryException e) {
        throw new QueryEvaluationException(e);
    } catch (RepositoryException e) {
        throw new QueryEvaluationException("Repository for endpoint " + rep.toString() + " could not be initialized.", e);
    }
}
Also used : Binding(org.eclipse.rdf4j.query.Binding) BooleanQuery(org.eclipse.rdf4j.query.BooleanQuery) QueryEvaluationException(org.eclipse.rdf4j.query.QueryEvaluationException) MalformedQueryException(org.eclipse.rdf4j.query.MalformedQueryException) RepositoryException(org.eclipse.rdf4j.repository.RepositoryException)

Example 5 with QueryEvaluationException

use of org.eclipse.rdf4j.query.QueryEvaluationException in project rdf4j by eclipse.

the class HTTPRepository method isWritable.

@Override
public boolean isWritable() throws RepositoryException {
    if (!isInitialized()) {
        throw new IllegalStateException("HTTPRepository not initialized.");
    }
    boolean isWritable = false;
    try (RDF4JProtocolSession client = createHTTPClient()) {
        final String repositoryURL = client.getRepositoryURL();
        final TupleQueryResult repositoryList = client.getRepositoryList();
        try {
            while (repositoryList.hasNext()) {
                final BindingSet bindingSet = repositoryList.next();
                final Value uri = bindingSet.getValue("uri");
                if (uri != null && uri.stringValue().equals(repositoryURL)) {
                    isWritable = Literals.getBooleanValue(bindingSet.getValue("writable"), false);
                    break;
                }
            }
        } finally {
            repositoryList.close();
        }
    } catch (QueryEvaluationException e) {
        throw new RepositoryException(e);
    } catch (IOException e) {
        throw new RepositoryException(e);
    }
    return isWritable;
}
Also used : BindingSet(org.eclipse.rdf4j.query.BindingSet) QueryEvaluationException(org.eclipse.rdf4j.query.QueryEvaluationException) Value(org.eclipse.rdf4j.model.Value) RepositoryException(org.eclipse.rdf4j.repository.RepositoryException) RDF4JProtocolSession(org.eclipse.rdf4j.http.client.RDF4JProtocolSession) IOException(java.io.IOException) TupleQueryResult(org.eclipse.rdf4j.query.TupleQueryResult)

Aggregations

QueryEvaluationException (org.eclipse.rdf4j.query.QueryEvaluationException)16 RepositoryException (org.eclipse.rdf4j.repository.RepositoryException)15 IOException (java.io.IOException)9 MalformedQueryException (org.eclipse.rdf4j.query.MalformedQueryException)9 TupleQueryResult (org.eclipse.rdf4j.query.TupleQueryResult)9 BindingSet (org.eclipse.rdf4j.query.BindingSet)6 TupleQuery (org.eclipse.rdf4j.query.TupleQuery)5 RDF4JProtocolSession (org.eclipse.rdf4j.http.client.RDF4JProtocolSession)4 Value (org.eclipse.rdf4j.model.Value)4 ArrayList (java.util.ArrayList)3 ExceptionConvertingIteration (org.eclipse.rdf4j.common.iteration.ExceptionConvertingIteration)3 UnauthorizedException (org.eclipse.rdf4j.http.protocol.UnauthorizedException)3 Resource (org.eclipse.rdf4j.model.Resource)3 Binding (org.eclipse.rdf4j.query.Binding)3 UnsupportedQueryLanguageException (org.eclipse.rdf4j.query.UnsupportedQueryLanguageException)3 UpdateExecutionException (org.eclipse.rdf4j.query.UpdateExecutionException)3 UnknownTransactionStateException (org.eclipse.rdf4j.repository.UnknownTransactionStateException)3 RDFHandlerException (org.eclipse.rdf4j.rio.RDFHandlerException)3 RDFParseException (org.eclipse.rdf4j.rio.RDFParseException)3 Model (org.eclipse.rdf4j.model.Model)2