Setting up a SPARQL endpoint using the RDF Graph feature involves creating and deploying a Web Application Archive (WAR) file into a server J2EE container. The RDF Graph feature supports Apache Jena Joseki, an open source SPARQL server that supports the SPARQL protocol and SPARQL queries to create this web application archive.
The following sections explain how to set up a SPARQL service using the bundled web application archive in either Apache Tomcat or Oracle WebLogic Server.
The RDF Graph feature's release package includes a bundled web application archive (joseki.war). Details on how to build a web application archive (joseki.war) for a previous release of the Oracle NoSQL Database or for modification purposes can be found in Generating a New SPARQL Service WAR file.
The following steps describe how to deploy the prebundled joseki.war into Apache Tomcat or Oracle WebLogic Server.
Ensure that you have downloaded and unzipped the RDF Graph release package for the Oracle NoSQL Database, as explained in Setup the System Environment.
Extract the joseki-config.ttl
file located
in the joseki.war using the following
commands:
cd /tmp/jena_adapter/war jar xf joseki.war joseki-config.ttl
Modify Apache Jena Joseki's configuration file (joseki-config.ttl) to specify the store name, host name, and host port for accessing an Oracle NoSQL database. This data will be used by the SPARQL Service endpoint to establish connections to the Oracle NoSQL Database and execute update and query operations. For detailed information about this configuration, Configuring an Oracle NoSQL Database connection in the SPARQL service.
Rebuild joseki.war by updating the
joseki-config.ttl
as follows:
jar uf joseki.war joseki-config.ttl
Deploy the joseki.war into the selected J2EE container.
This section describes how to deploy the SPARQL Service endpoint using Apache Tomcat 7.0. Apache Tomcat is an open source web server implementing Java Servlet and JavaServer Pages (JSP) and providing an HTTP web server environment to run Web applications. Further information and support on Apache Tomcat can be found in http://tomcat.apache.org/.
Download and install Apache Tomcat 7.0. For details see http://tomcat.apache.org/tomcat-7.0-doc/index.html.
Go to the web application directory of Apache Tomcat Server and copy the joseki.war file as follows. This operation will unpack the war file and deploy the web application. (For information about deploying web application in Apache Tomcat, please refer to http://tomcat.apache.org/tomcat-7.0-doc/deployer-howto.html.
cd $CATALINA_BASE/webapps cp -rf /tmp/jena_adapter/joseki.war $CATALINA_HOME/webapps
Verify your deployment by using your Web browser to connect to a URL in the following format (assume that the Web application is deployed at port 8080):
http://<hostname>:8080/joseki
You should see a page titled Oracle NoSQL Database SPARQL Service Endpoint using Joseki, and the first text box should contain an example SPARQL query.
Click Submit Query
.
You should see a page titled Oracle NoSQL Database SPARQL Endpoint Query Results. There may or may not be any results, depending on the underlying semantic model against which the query is executed.
This section describes how to deploy the SPARQL Service endpoint using Oracle WebLogic Server 12c. For information about Oracle WebLogic Server please refer to http://www.oracle.com/technology/products/weblogic/.
Download and Install Oracle WebLogic Server 12c Release 1 (12.1.1). For details, see http://www.oracle.com/technology/products/weblogic/ and http://www.oracle.com/technetwork/middleware/ias/downloads/wls-main-097127.html.
Go to the auto-deploy directory of the WebLogic Server installation and copy files, as follows. (For information about auto-deploying applications in development domains refer to the following document: http://docs.oracle.com/cd/E24329_01/web.1211/e24443/autodeploy.htm)
cd <domain_name>/autodeploy cp -rf /tmp/joseki.war <domain_name>/autodeploy
In the preceding example, <domain_name> is the name of a WebLogic Server domain.
Note that you can run a WebLogic Server domain in two different modes: development and production. However, only development mode allows you use the auto-deployment feature.
Verify your deployment by using your Web browser to connect to a URL in the following format (assume that port 7001 is used):
http://<hostname>:7001/joseki
You should see a page titled Oracle NoSQL Database SPARQL Service Endpoint using Joseki, and the first text box should contain an example SPARQL query.
Click Submit Query
.
By default, the joseki-config.ttl
file
contains an oracle-nosql:Dataset definition
using all graphs stored in the Oracle NoSQL
Database. The following snippet shows the
configuration.
<#oracle> rdf:type oracle-nosql:Dataset; joseki:poolSize 3; ## Number of concurrent connections allowed ## to this dataset. oracle-nosql:connection ## NoSQL connection [ rdf:type oracle-nosql:NoSQLConnection; oracle-nosql:hostName "localhost"; oracle-nosql:storeName "mystore"; oracle-nosql:hostPort "5000"; ]; oracle-nosql:allGraphs [] . ## Graph descriptions
The oracle-nosql:allGraphs
predicate denotes
that the SPARQL Service endpoint will serve
queries using all named graphs (including the
default graph) stored in an Oracle NoSQL Database.
You can also specify the rulebase(s) to use when
serving queries. In the following example, the
oracle:ruleBaseID
predicate denotes that the
SPARQL Service endpoint should serve queries using
all named graphs (including asserted and inferred
triples marked with the rulebase ID 1.
<#oracle> rdf:type oracle-nosql:Dataset; joseki:poolSize 3; ## Number of concurrent connections allowed ## to this dataset. oracle-nosql:connection ## NoSQL connection [ rdf:type oracle-nosql:NoSQLConnection; oracle-nosql:hostName "localhost"; oracle-nosql:storeName "mystore"; oracle-nosql:hostPort "5000"; ]; oracle-nosql:allGraphs [ oracle-nosql:ruleBaseID "1" . ] . ## Graph descriptions
If you require the SPARQL Service endpoint to serve
queries using only a specified set of graph names,
then use the
oracle-nosql:namedGraph
predicate instead of
oracle-nosql:allGraphs
. Further
details can be found in
Configuring the SPARQL Service:
Oracle NoSQL Database.
You can add a few example triples and quads to test the named graph functions using the following Java code snippet:
public static void main(String[] args) throws Exception { String szStoreName = args[0]; String szHostName = args[1]; String szHostPort = args[2]; System.out.println("Create Oracle NoSQL connection"); OracleNoSqlConnection conn = OracleNoSqlConnection.createInstance(szStoreName, szHostName, szHostPort); System.out.println("Create Oracle NoSQL graph and dataset "); OracleGraphNoSql graph = new OracleGraphNoSql(conn); DatasetGraphNoSql datasetGraph = DatasetGraphNoSql.createFrom(graph); // Close graph, as it is no longer needed graph.close(); // add data to the bob named graph datasetGraph.add(new Quad( Node.createURI("http://example.org/bob"), // graph name Node.createURI("urn:bob"), Node.createURI("http://xmlns.com/foaf/0.1/name"), Node.createLiteral("Bob"))); // add data to the alice named graph datasetGraph.add(new Quad( Node.createURI("http://example.org/alice"), // graph name Node.createURI("urn:alice"), Node.createURI("http://xmlns.com/foaf/0.1/name"), Node.createLiteral("Alice"))); ds.close(); conn.dispose(); }
After inserting the quads, go to
http://<hostname>:7001/joseki (Oracle
WebLogic Server) or
http://<hostname>:8080/joseki (Apache
Tomcat), type the following SPARQL query, and
click Submit Query
:
SELECT ?g ?s ?p ?o WHERE { GRAPH ?g { ?s ?p ?o} }
The result should be an HTML table with four columns and two sets of result bindings.
This page also contains a JSON Output option. If this option is selected (enabled), the SPARQL query response is converted to JSON format.
To configure the connections to the Oracle NoSQL Database,
you must modify Apache Jena Joseki's configuration file
(joseki-config.ttl
) file located in
/tmp/joseki.war
to include the store
name, host name, and host port to access the Oracle NoSQL
Database. This data is used by the SPARQL Service endpoint
to establish connections to the Oracle NoSQL Database and
execute update and query operations.
To define this data, refer to the
oracle-nosql:connection
predicate in the
joseki-config.ttl
. This predicate
denotes that the SPARQL service endpoint will connect to an
Oracle NoSQL Database named
<store_name> accessible through
the host name <host_name> and
port <host_port>. The following
snippet shows the configuration.
<#oracle> rdf:type oracle-nosql:Dataset; joseki:poolSize 1; ## Number of concurrent connections allowed to ## this data set. oracle-nosql:connection ## NoSQL connection [ rdf:type oracle-nosql:NoSQLConnection; oracle-nosql:hostName <host_name>; oracle-nosql:storeName <store_name>; oracle-nosql:hostPort <host_port>; ]; ...
By default, the SPARQL Service endpoint assumes that
queries are going to be executed against all named graphs
(including the default graph) stored in the specified
Oracle NoSQL database. Users can configure these settings
to serve queries using only the default graph or a subset
of named graphs by editing the
joseki-config.ttl
configuration file,
which is in
<domain_name>/autodeploy/joseki.war
.
The supplied joseki-config.ttl
file includes a
section similar to the following for the Oracle NoSQL Database
data set:
# ## Datasets # [] ja:loadClass "oracle.spatial.rdf.client.jena.assembler.OracleAssemblerVocab" . oracle-nosql:Dataset rdfs:subClassOf ja:RDFDataset . <#oracle> rdf:type oracle-nosql:Dataset; ## Number of concurrent connections allowed to this dataset. joseki:poolSize 1; oracle-nosql:connection ## connection to an Oracle NoSQL Database [ rdf:type oracle-nosql:NoSQLConnection; oracle-nosql:hostName "localhost"; oracle-nosql:storeName "mystore"; oracle-nosql:hostPort "5000"; ]; oracle-nosql:allGraphs [] .
In this section of the file, you can:
Modify the joseki:poolSize
value, which specifies the number of concurrent
connections allowed to this Oracle NoSQL data set
(<#oracle> rdf:type oracle-nosql:Dataset;),
which points to various RDF models in the Oracle
NoSQL Database.
Specify the default graph used to serve
queries using the property
oracle-nosql:defaultGraph
as follows:
<#oracle> rdf:type oracle-nosql:Dataset; joseki:poolSize 1; ## Number of concurrent connections allowed to ## this data set. oracle-nosql:connection ## NoSQL connection [ rdf:type oracle-nosql:NoSQLConnection; oracle-nosql:hostName "localhost"; oracle-nosql:storeName "mystore"; oracle-nosql:hostPort "5000"; ]; oracle-nosql:defaultGraph [] .
The oracle:defaultGraph
predicate denotes that the SPARQL Service endpoint
should serve queries using the default graph
(consisting of triples that have no or NULL graph
names), if stored in the Oracle NoSQL Database.
If you require the SPARQL service endpoint to serve
queries using asserted and inferred triples from a
default graph, you should specify the rulebase ID
of the inferred triples. The
oracle:ruleBaseID
predicate
denotes that the endpoint should include all
triples marked with the specified rulebase ID.
For example, the following specifies rulebase ID 1 for the default graph.
oracle-nosql:defaultGraph [ oracle-nosql:ruleBaseID "1" . ] .
Specify a subset of named graphs that the SPARQL Service endpoint will use to serve queries. For example, you can specify two named graphs called <http://G1> and <http://G2> as follows:
<#oracle>> rdf:type oracle-nosql:Dataset; joseki:poolSize 1; ## Number of concurrent connections allowed to ## this data set. oracle-nosql:connection ## NoSQL connection [ rdf:type oracle-nosql:NoSQLConnection; oracle-nosql:hostName "localhost"; oracle-nosql:storeName "mystore"; oracle-nosql:hostPort "5000"; ]; oracle-nosql:namedGraph [ oracle-nosql:graphName <http://G1> ] . oracle-nosql:namedGraph [ oracle-nosql:graphName <http://G2> ] .
The oracle-nosql:namedGraph
predicate denotes that the SPARQL Service endpoint
should serve queries using the named graph with a graph
name denoted by
oracle-nosql:graphName
, if stored in
the Oracle NoSQL Database. In this example, the SPARQL
Service endpoint will only serve queries using two
named graphs <http://G1> and <http://G2>.
This way, any triple belonging to a different named
graph will not be considered.
If you require the SPARQL service endpoint to serve
queries using asserted and inferred triples of a named
graph, you should specify the rulebase ID of the
inferred triples. The
oracle:ruleBaseID
predicate denotes
that the endpoint should include all triples marked
with the specified rulebase ID. For example, the
following specifies that a rulebase ID, identified with
1, should be used in conjunction with named graph
<http://G1>.
oracle-nosql:namedGraph [ oracle-nosql:graphName <http://G1> ; oracle-nosql:ruleBaseID "1" . ] .
Note that when using this configuration, one can still use SPARQL Update requests to create new graphs or add data to named graphs. However, queries against named graphs not specified in this configuration will not return any matches.