第8章 RDFグラフ機能のクイック・スタート

目次

Example1.java: デフォルト・グラフの作成とトリプルの追加/削除
Example1b.java: 名前付きグラフの作成とトリプルの追加/削除
Example1c.java: 推論されたグラフの作成とトリプルの追加/削除
Example1d.java: 推論されたグラフの作成とトリプルの追加/削除
Example2.java: RDFファイルのロード
RDFデータの同時ロード
Example4.java: 名前付きグラフに対するファミリ関係の問合せ
Example5.java: JOIN_METHODを使用するSPARQL問合せ
Example5b.java: ORDERED問合せオプションを使用するSPARQL問合せ
Example5c.java: TIMEOUTとGRACEFUL TIMEOUTを使用するSPARQL問合せ
Example5d.java: DOPを使用するSPARQL問合せ
Example5e.java: INFERENCE/ASSERTED ONLYヒントを使用するSPARQL問合せ
Example5g.java: PLAN問合せヒントを使用するSPARQL問合せ
Example6.java: SPARQL ASK問合せ
Example7.java: SPARQL DESCRIBE問合せ
Example8.java: SPARQL CONSTRUCT問合せ
Example9.java: SPARQL OPTIONAL問合せ
Example10.java: LIMITとOFFSETを使用するSPARQL問合せ
Example11.java: SELECTキャストを使用するSPARQL問合せ
Example12.java: 名前付きグラフを伴うSPARQL
Example13.java: ARQ組込み関数を使用するSPARQL問合せ
Example14: SPARQL Update
Example15.java: Oracle NOSQL Database接続プーリング
Oracle NoSQL Databaseにおけるグラフのデータ・サンプリングの生成
Example16b. Oracle NoSQL Databaseにおけるデータセットのデータ・サンプリングの生成
Jena OntModel APIを使用したオントロジ・モデルの構築

この項では、主なRDFグラフ機能の例を示します。どの例もそれぞれで完結しており、通例はグラフの作成、トリプルの追加、問合せの実行(推論を含む場合もある)、結果の表示、およびモデルの削除を行います。

これらの説明は、examples/ディレクトリに収録されています。

この項には、次の各操作を行う例があります。

問合せを実行するには、次の操作を実行する必要があります。

  1. Javaソース・ファイルにコードを含めます。この項で使用されている例は、パッケージのexamplesディレクトリにファイルとして用意されています。

  2. 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 Example.java
  3. コンパイルしたファイルを実行します。次に例を示します。

    java -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 Example <store_name \
    > <host_name> <host_port>

Example1.java: デフォルト・グラフの作成とトリプルの追加/削除

この例では、Oracle NoSQL Databaseに格納されているデフォルトのグラフに対して一連のトリプルを追加/削除する方法について説明します。

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 Example1 {
  
  public static void main(String[] args) throws Exception
  {
    
String szStoreName = args[0];
String szHostName = args[1];
String szHostPort = args[2];

OracleNoSqlConnection conn 
     = OracleNoSqlConnection.createInstance(szStoreName,
                                            szHostName, 
                                            szHostPort);
    
// This object will handle operations over the default graph
OracleGraphNoSql graph = new OracleGraphNoSql(conn);
graph.clearRepository(); //Clear the graph including inferred triples
    
graph.add(Triple.create(Node.createURI("u:John"),
                        Node.createURI("u:parentOf"),
                        Node.createURI("u:Mary")));
        
graph.add(Triple.create(Node.createURI("u:Mary"), 
                        Node.createURI("u:parentOf"),
                        Node.createURI("u:Jack")));

String queryString = " select ?x ?y WHERE {?x <u:parentOf> ?y}";
System.out.println("Execute query " + queryString);

Model model = new OracleModelNoSql(graph);
Query query = QueryFactory.create(queryString);
QueryExecution qexec = QueryExecutionFactory.create(query, model);
    
try {
      ResultSet results = qexec.execSelect();
      ResultSetFormatter.out(System.out, results, query);
    }
    
finally {
      qexec.close();
    }

graph.delete(Triple.create(Node.createURI("u:John"), 
                               Node.createURI("u:parentOf"),
                               Node.createURI("u:Mary")));

queryString = "select ?x ?y ?z WHERE {?x ?y ?z}";
System.out.println("Execute query " + queryString);

query = QueryFactory.create(queryString) ;
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 Example.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 \
Example1 <store_name> <host_name> <host_port>


Execute query select ?x ?y WHERE {?x <u:parentOf> ?y} 
-----------------------
| x        | y        |
=======================
| <u:Mary> | <u:Jack> |
| <u:John> | <u:Mary> |
-----------------------


Execute query select ?x ?y ?z WHERE {?x ?y ?z}
--------------------------------------
| x        | y            | z        |
======================================
| <u:Mary> | <u:parentOf> | <u:Jack> |
--------------------------------------