Example5e.java: INFERENCE/ASSERTED ONLYヒントを使用するSPARQL問合せ

例8.12では、推論のみの設定(INF_ONLY)などの追加機能を使用するSPARQL問合せを示します。この例は、次のように表明されるトリプルを挿入します。

次に、Oracle NoSQL Databaseのすべてのトリプルを検索します。RDFグラフ機能パッケージの例5fでは、同じ練習で表明のみの設定(ASSERTED_ONLY)を使用する場合を説明します。例5fはこのマニュアルでは紹介していません。

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 Example5e
{
  
  public static void main(String[] args) throws Exception 
  {
    
String szStoreName  = args[0];
String szHostName   = args[1];
String szHostPort   = args[2];
int iRuleBaseId     = Integer.parseInt(args[3]);
    
// Create Oracle NoSQL connection 
OracleNoSqlConnection conn 
     = OracleNoSqlConnection.createInstance(szStoreName,
                                            szHostName, 
                                            szHostPort);
    
// Create model from default graph 
Model model = OracleModelNoSql.createOracleDefaultModelNoSql(conn);
OracleGraphNoSql graph = (OracleGraphNoSql) model.getGraph();
    
// Clear model
model.removeAll();

// Add triples
    
graph.add(Triple.create(Node.createURI("u:John"), 
                        Node.createURI("u:parentOf"),
                        Node.createURI("u:Mary")));
    
graph.add(Triple.create(Node.createURI("u:John"), 
                        Node.createURI("u:parentOf"),
                        Node.createURI("u:Jack")));
    
graph.add(Triple.create(Node.createURI("u:Amy"), 
                        Node.createURI("u:parentOf"),
                        Node.createURI("u:Jack")));   
    
// Create Oracle NoSQL inferred graph
    
InferredGraphNoSql inferredGraph = 
                        new InferredGraphNoSql(conn,
                                               iRuleBaseId);

// Add inferred triples    
inferredGraph.add(Triple.create(Node.createURI("u:Jack"),
                                    Node.createURI("u:siblingOf"),
                                    Node.createURI("u:Mary")));
    
// Close inferred graph;
inferredGraph.close();

String prefix = " PREFIX ORACLE_SEM_FS_NS: " +
                " <http://oracle.com/semtech#" +
                "include_rulebase_id=" + iRuleBaseId + 
                ",inf_only>";
String szQuery = prefix + " select ?x ?y ?z WHERE {?x ?y ?z} ";
System.out.println("Execute query " + szQuery);
    
Query query = QueryFactory.create(szQuery);
QueryExecution qexec = QueryExecutionFactory.create(query, model);
    
try {
      ResultSet results = qexec.execSelect();
      ResultSetFormatter.out(System.out, results, query);
    }
    
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 Example5e.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 Example5e <store_name> \
<host_name> <host_port> <rule_baseID>

Execute query PREFIX ORACLE_SEM_FS_NS: 
<http://oracle.com/semtech#inf_only> 
select ?x ?y ?z WHERE {?x ?y ?z} 

---------------------------------------
| x        | y             | z        |
=======================================
| <u:Jack> | <u:siblingOf> | <u:Mary> |
---------------------------------------

表明のみの設定を指定した場合のJavaコマンドで想定される出力は、次のとおりです。

--------------------------------------
| x        | y            | z        |
======================================
| <u:John> | <u:parentOf> | <u:Jack> |
| <u:John> | <u:parentOf> | <u:Mary> |
| <u:Amy>  | <u:parentOf> | <u:Jack> |
--------------------------------------