Example4.java: 名前付きグラフに対するファミリ関係の問合せ

この例では、JohnがMaryを愛していること(デフォルト・グラフに含まれています)と、各fatherOf関係で主語と目的語を選択し表示することを指定します(JSON出力として)。RDFグラフ機能のExample4b.javaでは、同じ練習に名前付きグラフを使用する場合を説明します。

import com.hp.hpl.jena.graph.*;
import com.hp.hpl.jena.query.*;
import com.hp.hpl.jena.rdf.model.Model;
import oracle.rdf.kv.client.jena.*;

public class Example4
{
  
  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 model");
Model model = OracleModelNoSql.createOracleDefaultModelNoSql(conn);
    
System.out.println("Clear model");
model.removeAll();
    
    
System.out.println("Add triples");
model.getGraph().add(
           Triple.create(Node.createURI("http://example.com/John"),
                         Node.createURI("http://example.com/loves"),
                         Node.createURI("http://example.com/Mary")));
    
    
String queryString  =
              " select ?person1 ?person2 "                   +
              " where "                                      +
              " { ?person1 <http://example.com/loves> ?person2 }";
    
System.out.println("Execute query " + queryString);

Query query = QueryFactory.create(queryString);
QueryExecution qexec = QueryExecutionFactory.create(query, model);
    
try {
      ResultSet results = qexec.execSelect();
      ResultSetFormatter.outputAsJSON(System.out, results);
    }
    
finally {
      qexec.close();
    }
    
model.close();
conn.dispose();   
  }
}

この例をコンパイルして実行するコマンドと、想定される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 Example4.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 Example4b <store_name> \
<host_name> <host_port>
        
Execute query select ?person1 ?person2 where { ?person1
<http://example.com/loves> ?person2 }

{
  "head": {
    "vars": [ "person1" , "person2" ]
  } ,
  "results": {
    "bindings": [
      {
        "person1": { "type": "uri" , "value": "http://example.com/John" } ,
        "person2": { "type": "uri" , "value": "http://example.com/Mary" }
      }
    ]
  }
}