Library Version 12.1.3.0

Example5.java: SPARQL query with JOIN_METHOD
Prev | Chapter 8. Quick Start for the RDF Graph Feature | Next

## Example5.java: SPARQL query with JOIN_METHOD

This example shows a SPARQL query with additional features including the selection of a join_method (JOIN_METHOD={nl, hash}) used to select the join method to use in operations over query patterns. It loads the quads contained in RDF file example.nt located in the examples directory of the RDF Graph feature that assert the following:

- In graph <http://example.org/alice/foaf.rdf>:

  - Alice is a Person.

  - Alice's name is "Alice".

  - Alice knows Bob.

  - Bob has a home page with URL http://example.org/bob.

  - To see more details on Bob, refer to http://example.org/alice/foaf.rdf.

- In graph <http://example.org/bob/foaf.rdf>:

  - Bob is a Person.

  - Bob's name is "Bob".

  - Bob has a home page with URL http://example.org/bob.

It then finds all the names of the people in graph <http://example.org/alice/foaf.rdf> who knows another person, using nested loop join operations to merge bindings retrieved between the query patterns in the SPARQL query.

    import com.hp.hpl.jena.query.*;
    import org.openjena.riot.Lang;
    import com.hp.hpl.jena.sparql.core.DatasetImpl;
    import oracle.rdf.kv.client.jena.*;

    public class Example5
    {

    public static void main(String[] args) throws Exception
      {

    String szStoreName  = args[0];
    String szHostName   = args[1];
    String szHostPort   = args[2];

    // Create connection
    OracleNoSqlConnection conn
         = OracleNoSqlConnection.createInstance(szStoreName,
                                                szHostName,
                                                szHostPort);

    // Create the datasetgraph
    OracleGraphNoSql graph = new OracleGraphNoSql(conn);
    DatasetGraphNoSql datasetGraph = DatasetGraphNoSql.createFrom(graph);

    // Close graph, as it is no longer needed
    graph.close();

    // Clear dataset
    datasetGraph.clearRepository();

    Dataset ds = DatasetImpl.wrap(datasetGraph);

    // Load data from file into the dataset
    DatasetGraphNoSql.load("example.nt", Lang.NQUADS, conn,
                               "http://example.com"); //base URI

    // change hint to hash to test hash join, or remove to use default
    // join settings
    String szQuery =
    " PREFIX ORACLE_SEM_FS_NS: "                         +
    " <http://oracle.com/semtech#join_method=nl>"        +
    " PREFIX foaf: <http://xmlns.com/foaf/0.1/>"         +
    " SELECT ?name1 ?name2 "                             +
    " WHERE { "                                          +
    "   graph <http://example.org/alice/foaf.rdf> { "    +
    "     ?person1 foaf:knows ?person2 . "               +
    "     ?person1 foaf:name ?name1 . "                  +
    "     ?person2 foaf:name ?name2 . "                  +
    "   } "                                              +
    " } ";

    System.out.println("Execute query " + szQuery);

    Query query = QueryFactory.create(szQuery);
    QueryExecution qexec = QueryExecutionFactory.create(query, ds);

    try {
          ResultSet results = qexec.execSelect();
          ResultSetFormatter.out(System.out, results, query);
        }

    finally {
          qexec.close();
        }

    ds.close();
    conn.dispose();
      }
    }

The following are the commands to compile and run this example, as well as the expected output of the java command.

    javac -classpath ./:./jena-core-2.7.4.jar:./jena-arq-2.9.4.jar: \
    ./sdordfnosqlclient.jar:./kvclient.jar:./xercesImpl-2.10.0.jar: \
    ./slf4j-api-1.6.4.jar:./slf4j-log4j12-1.6.4.jar:./log4j/1.2.16.jar: \
    ./jena-iri-0.9.4.jar:./xml-apis-1.4.01.jar Example5.java

    javac -classpath ./:./jena-core-2.7.4.jar:./jena-arq-2.9.4.jar: \
    ./sdordfnosqlclient.jar:./kvclient.jar:./xercesImpl-2.10.0.jar: \
    ./slf4j-api-1.6.4.jar:./slf4j-log4j12-1.6.4.jar:./log4j/1.2.16.jar: \
    ./jena-iri-0.9.4.jar:./xml-apis-1.4.01.jar Example5 <store_name> \
    <host_name> <host_port>
    -------------------
    | name1   | name2 |
    ===================
    | "Alice" | "Bob" |
    -------------------

You can test hash join selection by modifying the following line in the code. The output of this Java class will be the same as the one presented before.

    PREFIX ORACLE_SEM_FS_NS: <http://oracle.com/semtech#join_method=hash>

Prev | Up | Next
Example4.java: Query family relationships on a named graph | Home | Example5b.java: SPARQL query with ORDERED query option