Jena JDBC ========= Jena JDBC is a new experimental module to provide a framework for SPARQL over JDBC that can be reused and extended by user code as necessary. The initial aim is not to provide any SQL to SPARQL translation though that may eventually be added as a layer on top of the basic framework. NOTE - This is an experimental module subject to rapid change and with no guarantees that it will coalesce into a releasable project at any point in the future. Module Structure ---------------- The current experimental code consists of 6 modules: jena-jdbc Parent module for this subsystem jena-jdbc-core Core framework of reusable components and test harnesses for SPARQL over JDBC jena-jdbc-driver-mem JDBC driver over an ARQ in-memory dataset jena-jdbc-driver-tdb JDBC driver over a TDB dataset jena-jdbc-driver-remote JDBC driver over remote SPARQL endpoints jena-jdbc-driver-bundle Convenience artifact that creates a shaded JAR containing all the drivers and their dependencies The aim is to provide common and abstract implementations of everything a SPARQL over JDBC driver will need in the core module and to provide driver specific implementations in the relevant packages. Drivers ======= Drivers all use a URL that starts with the following prefix: jdbc:jena: Each driver then has its own specific prefix which is then followed by a number of parameters e.g. jdbc:jena:foo:param=value&arg=1234 Arguments may be separated by ampersand (&), semicolon (;) or pipe (|) There are some common driver parameters supported by all Jena drivers: jdbc-compatibility=5 Sets the JDBC compatibility level (range 1-9 with 1 being lowest) which affects some aspects of driver behaviour. pre-processor=my.package.class May be specified as many times as desired to register CommandPreProcessor implementations for connections. post-processor=my.package.class May be specified as many times as desired to register ResultsPostProcessor implementations for connections. In-Memory --------- Driver Class: org.apache.jena.jdbc.mem.MemDriver Driver URL Prefix: jdbc:jena:mem: Driver Parameters: dataset=file.nq Sets a dataset file to load in as the initial dataset, this or the empty parameter must be provided empty=true Sets that the driver will run against an initially empty dataset Notes: - In-Memory datasets do not support transactions TDB --- Driver Class: org.apache.jena.jdbc.tdb.TDBDriver Driver URL Prefix: jdbc:jena:tdb: Driver Parameters: location=/path/to/dataset Sets the location of the TDB dataset to create/load, may use the special location memory to specify a non-persistent in-memory TDB dataset. must-exist=true If set then ensures that only existing TDB datasets may be used, prevents incorrect paths leading to unexpected empty datasets Notes: - TDB is always used in transactional mode, auto-commit is on by default - Using the in-memory dataset is NOT recommended for anything other than unit testing Remote ------ Driver Class: org.apache.jena.jdbc.remote.RemoteEndpointDriver Driver URL Prefix: jdbc:jena:remote: Driver Parameters: query=http://example.org/query Sets the SPARQL Query endpoint to use, one/both of this and the update parameter must be set. Set only this for a read-only connection update=http://example.org/update Sets the SPARQL Update endpoint to use, one/both of this and the query parameter must be set. Set only this for a write-only connection default-graph-uri=http://graph Sets a default graph for SPARQL queries, may be specified multiple times named-graph-uri=http://graph Sets a named graph for SPARQL queries, may be specified multiple times using-graph-uri=http://graph Sets a default graph for SPARQL updates, may be specified multiple times using-named-graph-uri=http://graph Sets a named graph for SPARQL updates, may be specified multiple times user=username Sets a user name to authenticate against the remote server with password=password Sets a password to authenticate against the remote server with select-results-type=application/sparql-results+xml Sets the results type to request for SELECT queries model-results-type=text/turtle Sets the results type to request for CONSTRUCT/DESCRIBE queries Notes: - Remote connections do not support transactions To Do List ========== This is early experimental prototyping and there is much to be done, this represents a current list of things that need implementing: - Drivers - Support auto-commit parameter for TDB driver URLs - Remote Endpoint Driver - Provide a convenience Fuseki Driver which is merely a layer over a Remote Endpoint driver - Statement and Result Handling - Implement a ResultSetBuffered to support setFetchSize()