Class SparqlStoreImpl

java.lang.Object
org.eclipse.lyo.store.internals.SparqlStoreImpl
All Implemented Interfaces:
Store

public class SparqlStoreImpl extends Object implements Store
Store interface implementation that interacts with any SPARQL-based triplestore through a Query and Update endpoints.
Since:
0.14.0
Version:
$version-stub$
Author:
Andrew Berezovskyi (andriib@kth.se)
  • Field Details

    • TRIPLE_LIMIT

      public static final int TRIPLE_LIMIT
      Could be used to prevent extremely large results
      See Also:
  • Constructor Details

    • SparqlStoreImpl

      public SparqlStoreImpl(String queryEndpoint, String updateEndpoint)
      Initialises the Store with the endpoints for query and update. Must be available over HTTP or HTTPS (TLS & cipher support depends on the JDK version) without authentication.
      Parameters:
      queryEndpoint - SPARQL QUERY endpoint
      updateEndpoint - SPARQL UPDATE endpoint
    • SparqlStoreImpl

      public SparqlStoreImpl(String queryEndpoint, String updateEndpoint, String username, String password)
      Initialises the Store with the endpoints for query and update. Must be available over HTTP or HTTPS (TLS & cipher support depends on the JDK version) with authentication via username and password combinations. Authentication works with the basic and digest HTTP authentication schemes.
      Parameters:
      queryEndpoint - SPARQL QUERY endpoint
      updateEndpoint - SPARQL UPDATE endpoint
      username - Username
      password - Password
    • SparqlStoreImpl

      public SparqlStoreImpl(JenaQueryExecutor queryExecutor)
      Initialises the Store with the custom JenaQueryExecutor.
      Parameters:
      queryExecutor - Instance of the JenaQueryExecutor that can run queries and updates.
  • Method Details

    • insertJenaModel

      public void insertJenaModel(URI namedGraph, Model model)
      Description copied from interface: Store
      Insert a jena model into the named graph with corresponding URI.
      Specified by:
      insertJenaModel in interface Store
    • insertResources

      public boolean insertResources(URI namedGraph, Object... resources) throws StoreAccessException
      Description copied from interface: Store
      Insert Jena models representations of OSLC IResource instances into the named graph. existing statements already present in the named graph are not overridden, nor removed.
      Specified by:
      insertResources in interface Store
      Throws:
      StoreAccessException
    • deleteResources

      public void deleteResources(URI namedGraphUri, URI... subjectUris)
      Description copied from interface: Store
      Delete all statements whose subject is one of nodeUris
      Specified by:
      deleteResources in interface Store
    • deleteResources

      public void deleteResources(URI namedGraphUri, IResource... resources)
      Description copied from interface: Store
      Delete all statements whose subject is one of the resources's URis.
      Specified by:
      deleteResources in interface Store
    • namedGraphExists

      public boolean namedGraphExists(URI namedGraphUri)
      Description copied from interface: Store
      Checks if the triplestore has the named graph under the corresponding URI.
      Specified by:
      namedGraphExists in interface Store
      Parameters:
      namedGraphUri - URI of a named graph that shall be a valid URI and was used before with the put* methods.
      Returns:
      does the triplestore contain any resources for a given named graph
    • resourceExists

      public boolean resourceExists(URI namedGraphUri, URI resourceUri)
      Description copied from interface: Store
      Checks if a resource with resourceUri exists under the corresponding named graph.
      Specified by:
      resourceExists in interface Store
    • getJenaModelForSubject

      public Model getJenaModelForSubject(URI namedGraphUri, URI subject) throws NoSuchElementException
      Description copied from interface: Store
      Retrieve a Jena Model for triples under the given subject from the corresponding named graph.
      Specified by:
      getJenaModelForSubject in interface Store
      Throws:
      NoSuchElementException
    • getResources

      public <T extends IResource> List<T> getResources(URI namedGraph, Class<T> clazz) throws StoreAccessException, ModelUnmarshallingException
      Description copied from interface: Store
      Retrieve the collection of IResource instances specified by the concrete type, unmarshaled from the RDF graph persisted in the triplestore under the given named graph. The named graph must represent a URI that was previously given to another method call or a Resource about URI if the resource was saved alone.
      Specified by:
      getResources in interface Store
      clazz - Concrete type of the stored resources. Must be correct (correspond to the marshaled type and be a subclass of IResource), otherwise the instantiation from model will not succeed.
      Returns:
      A collection of IResource instances, unmarshaled from the RDF graph persisted in the triplestore.
      Throws:
      StoreAccessException - if there was a problem with the triplestore (or the dataset, more broadly).
      ModelUnmarshallingException - if the classes cannot be instantiated or another error occurred when working with Jena model.
    • getResources

      public <T extends IResource> List<T> getResources(URI namedGraph, Class<T> clazz, int limit, int offset) throws StoreAccessException, ModelUnmarshallingException
      Description copied from interface: Store
      Alternative to Store.getResources(URI, Class) with paging on the OSLC resource level.
      Specified by:
      getResources in interface Store
      Parameters:
      namedGraph - URI of a named graph under which resources were stored
      clazz - class of the resources being retrieved
      limit - paging limit
      offset - paging offset
      Returns:
      list of OSLC resources, size is less or equal to 'limit'
      Throws:
      StoreAccessException - if there was a problem with the triplestore (or the dataset, more broadly).
      ModelUnmarshallingException - if the classes cannot be instantiated or another error occurred when working with Jena model.
    • getResources

      public <T extends IResource> List<T> getResources(URI namedGraph, Class<T> clazz, String prefixes, String where, String searchTerms, int limit, int offset) throws StoreAccessException, ModelUnmarshallingException
      Description copied from interface: Store
      Alternative to Store.getResources(URI, Class) with paging on the OSLC resource level.
      Specified by:
      getResources in interface Store
      Parameters:
      namedGraph - URI of a named graph under which resources were stored
      clazz - class of the resources being retrieved
      prefixes - defines the prefixes for prefixed names that appear in the oslc.where query parameter.
      where - filters the member list, keeping only those member resources that satisfy the boolean test on the member resource properties. (See oslc.where at https://tools.oasis-open.org/version-control/browse/wsvn/oslc-core/trunk/specs/oslc-query.html)
      searchTerms - score each member resource using a full text search on it text-valued properties. (See oslc.searchTerms at https://tools.oasis-open.org/version-control/browse/wsvn/oslc-core/trunk/specs/oslc-query.html)
      limit - paging limit
      offset - paging offset
      Returns:
      list of OSLC resources, size is less or equal to 'limit'
      Throws:
      StoreAccessException - if there was a problem with the triplestore (or the dataset, more broadly).
      ModelUnmarshallingException - if the classes cannot be instantiated or another error occurred when working with Jena model.
    • getResources

      public <T extends IResource> List<T> getResources(URI namedGraph, Class<T> clazz, String prefixes, String where, String searchTerms, int limit, int offset, List<String> additionalDistinctVars, org.apache.jena.arq.querybuilder.SelectBuilder additionalQueryFilter) throws StoreAccessException, ModelUnmarshallingException
      Description copied from interface: Store
      Alternative to Store.getResources(URI, Class, String, String, String, int, int) with additional parameters for inlined resources. These parameters extend the default query from:
       DESCRIBE ?s
       WHERE {
         ...
         SELECT distinct ?s
           WHERE {
             ?s ?p ?o .
             ?s rdf:type  <http://...> .
             ...
           }
       }
       
      to:
       DESCRIBE ?s ?a ?b
       WHERE {
       ...
         SELECT distinct ?s ?a ?b
         WHERE {
           ?s  ?p        ?o .
           ?s rdf:type  <http://...> .
           ?s <http://...#prp1>  ?a .
           ?a <http://prp2> ?b
         }
       }
       
      hence allowing ?a and ?b to be described, as well as ?s. Corresponding parameters to achieve this:
        List additionalDistinctVars = new ArrayList();
        additionalDistinctVars.add("a");
        additionalDistinctVars.add("b");
      
        SelectBuilder additionalQueryFilter = new SelectBuilder();
        additionalQueryFilter
        .addWhere( "?s", new ResourceImpl("http://...#" + "prp1"), "?a")
        .addWhere( "?a", new ResourceImpl(http://...# + "prp2"), "?b");
        
      Specified by:
      getResources in interface Store
      Throws:
      StoreAccessException
      ModelUnmarshallingException
    • getResources

      public Model getResources(URI namedGraph, String prefixes, String where, int limit, int offset)
      Description copied from interface: Store
      Retrieve a Jena model that satisfies the given where parameter as defined in the OSLC Query language (https://tools.oasis-open.org/version-control/svn/oslc-core/trunk/specs/oslc-query.html) If the namedGraph is null, the query is applied on all namedGraph in the triplestore. The method currently only provides support for terms of type Comparisons, where the operator is 'EQUALS', and the operand is either a String or a URI.
      Specified by:
      getResources in interface Store
      Parameters:
      namedGraph - namedGraphUri URI of a named graph under which resources were stored
      prefixes - defines the prefixes for prefixed names that appear in the oslc.where query parameter.
      where - filters the member list, keeping only those member resources that satisfy the boolean test on the member resource properties. (See oslc.where at https://tools.oasis-open.org/version-control/browse/wsvn/oslc-core/trunk/specs/oslc-query.html)
      limit - paging limit
      offset - paging offset
      Returns:
      list of resources, size is less or equal to 'limit'
    • getResources

      public Model getResources(URI namedGraph, String prefixes, String where, String searchTerms, int limit, int offset)
      Description copied from interface: Store
      Retrieve a Jena model that satisfies the given where parameter as defined in the OSLC Query language (https://tools.oasis-open.org/version-control/svn/oslc-core/trunk/specs/oslc-query.html) If the namedGraph is null, the query is applied on all namedGraph in the triplestore. The method currently only provides support for terms of type Comparisons, where the operator is 'EQUALS', and the operand is either a String or a URI.
      Specified by:
      getResources in interface Store
      Parameters:
      namedGraph - namedGraphUri URI of a named graph under which resources were stored
      prefixes - defines the prefixes for prefixed names that appear in the oslc.where query parameter.
      where - filters the member list, keeping only those member resources that satisfy the boolean test on the member resource properties. (See oslc.where at https://tools.oasis-open.org/version-control/browse/wsvn/oslc-core/trunk/specs/oslc-query.html)
      searchTerms - score each member resource using a full text search on it text-valued properties. (See oslc.searchTerms at https://tools.oasis-open.org/version-control/browse/wsvn/oslc-core/trunk/specs/oslc-query.html)
      limit - paging limit
      offset - paging offset
      Returns:
      a Jena Model with the less than or equal to limit resources.
    • getResources

      public Model getResources(URI namedGraph, String prefixes, String where, String searchTerms, int limit, int offset, List<String> additionalDistinctVars, org.apache.jena.arq.querybuilder.SelectBuilder additionalQueryFilter)
      Description copied from interface: Store
      Alternative to Store.getResources(URI, String, String, String, int, int) with additional parameters for inlined resources. See Store.getResources(URI, Class, String, String, String, int, int, List, SelectBuilder) for an explanation of these additional parameters.
      Specified by:
      getResources in interface Store
    • getResource

      public <T extends IResource> T getResource(URI namedGraphUri, URI resourceUri, Class<T> clazz) throws NoSuchElementException, StoreAccessException, ModelUnmarshallingException
      Description copied from interface: Store
      Retrieve a single IResource instance specified by the concrete type, unmarshaled from the RDF graph persisted in the triplestore under the given named graph. namedGraph must represent a URI that was previously given to another call.
      Specified by:
      getResource in interface Store
      Parameters:
      namedGraphUri - URI of a named graph under which resources were stored
      clazz - Java class of the stored resources.
      Returns:
      An IResource instance, unmarshaled from the RDF graph persisted in the triplestore.
      Throws:
      NoSuchElementException - if the resource is not present under a given named graph URI or if the named graph itself contains no resources (effectively missing).
      StoreAccessException - if there was a problem with the triplestore (or the dataset, more broadly).
      ModelUnmarshallingException - if the classes cannot be instantiated or another error occurred when working with Jena model.
    • updateResources

      public <T extends IResource> boolean updateResources(URI namedGraphUri, T... resources) throws StoreAccessException
      Description copied from interface: Store
      Insert Jena models representations of OSLC IResource instances into the named graph. Any existing model representations of these instances are overridden. other existing statements in the named graph are not overridden, nor removed.
      Specified by:
      updateResources in interface Store
      Throws:
      StoreAccessException
    • putResources

      public <T extends IResource> boolean putResources(URI uri, Collection<T> resources) throws StoreAccessException
      Description copied from interface: Store
      Inserts OSLC IResource instances into the triplestore in the designed namedGraph.

      Any previously stored resource(s) and/or statements will be overwritten.

      Specified by:
      putResources in interface Store
      Parameters:
      uri - A unique URI that is used as a named graph to which resources are appended
      resources - A collection of IResource instances
      Returns:
      Operation success
      Throws:
      StoreAccessException - if the operation can't be performed
    • appendResources

      public <T extends IResource> boolean appendResources(URI namedGraph, Collection<T> resources) throws StoreAccessException
      Description copied from interface: Store
      Adds OSLC IResource instances in addition to other instances already present on this named graph into the triplestore. Jena models representing existing and added resource arrays will be combined.
      Specified by:
      appendResources in interface Store
      Parameters:
      namedGraph - A unique URI that is used as a named graph to which resources are appended
      resources - A collection of IResource instances
      Returns:
      Operation success
      Throws:
      StoreAccessException - if the operation can't be performed
    • clear

      public void clear(URI namedGraph)
      Description copied from interface: Store
      Deletes the resources and statements stored under the given named graph from the triplestore.

      May delete the containing named graph, many triplestores will delete the named graph automatically as well as soon as it doesn't contain any triples.

      Specified by:
      clear in interface Store
    • keySet

      @Deprecated public Set<String> keySet()
      Deprecated.
      Description copied from interface: Store
      Enumerates all named graph URIs within the dataset.

      If the dataset was not manipulated by other means than via this interface, it can be assumed that all URIs in the set are valid keys.

      Specified by:
      keySet in interface Store
      Returns:
      The set of all named graph URIs, may contain URIs that are not valid keys if the dataset was manipulated directly.
    • removeAll

      public void removeAll()
      Description copied from interface: Store
      Remove EVERYTHING from the triplestore.
      Specified by:
      removeAll in interface Store
    • close

      public void close()
      Description copied from interface: Store
      Close connection
      Specified by:
      close in interface Store