2012年9月28日金曜日

openrdf-sesameに付いてくるopenrdf-workbenchからRDFS推論をするまで

前回エントリーの内容を前々回エントリーで作成したopenrdf-sesame serverとworkbenchから試みる.また最後にJavaを用いてSesame ServerへSPARQL Queryで問い合わせることを試みる.
1. とりあえずSesame Serverが動作しているか確認
http://localhost:8080/openrdf-sesame
にアクセスして動作してみる
2. とりあえずWorkbenchにアクセスする
http://localhost:8080/openrdf-workbench
にアクセスして動作してみる
3. Repositoryを作る(とりあえず実行できる程度の内容)
a. 左メニューよりRepositories/New repositoryを選択
b. 作成するRepositoryのTypeを指定(Typeとして'Memory store with RDF Schema inferencing' RDFS推論を行うため!)
c. 'Create'ボタンにてRepositoryを作成
d. できあがったRepository詳細の表示(Current Selectionsに指定されていることを確認)

ちなみにここの'Summary/Repository Location/Location'のURLがSPARQL QueryのEndpointになる
4. ファイルアップロードによりRDF data(news.n3)を追加する
a. 左メニューよりModify/Addを選択
b. 'Base URI:'にある'use base URI as context identifier'のチェックを外す,'RDF Data File:'にある'Select the file containing the RDF data you wish to upload'をセレクト, 'ファイル選択'にてnews.n3(前回エントリー参照)を選択,'Upload'ボタンにてファイルをアップロード
c. 結果画面としてSummaryのページの表示を確認
d. 左メニューの'Explore/Export'にてアップロードされた内容が入っていることを確認(可能)
5. SPARQL Queryを実行する
a. 左メニューより'Explore/Query'を選択
b. 'Query:'にクエリを記述,'Execute'ボタンにて実行('Include inferred statements'のチェックは外さない)
PREFIX kb:   SELECT ?subject ?object WHERE { ?subject kb:containsPlace ?object . }

c. 結果の確認
番外編: JavaでEndpointへQueryを投げてみる
ライブラリは前回エントリーの状態にさらに,lib/commons-httpclient-3.1.jar, lib/commons-codec-1.4.jarを加える.またcommons-logging.jarも加えるのだがこれはopenrdf-sesame-*-sdk.zipに入っていないのでサイトから取得する.
import java.io.IOException;
import java.util.List;

import org.openrdf.query.BindingSet;
import org.openrdf.query.MalformedQueryException;
import org.openrdf.query.QueryEvaluationException;
import org.openrdf.query.QueryLanguage;
import org.openrdf.query.TupleQuery;
import org.openrdf.query.TupleQueryResult;
import org.openrdf.repository.RepositoryConnection;
import org.openrdf.repository.RepositoryException;
import org.openrdf.repository.sparql.SPARQLRepository;
import org.openrdf.rio.RDFParseException;

public class Sesame_Test {

 public static void main(String[] args) throws RepositoryException,
   MalformedQueryException, QueryEvaluationException,
   RDFParseException, IOException {

  String queryEndpointUrl = "http://localhost:8080/openrdf-sesame/repositories/memory-rdfs";
  SPARQLRepository myRepository = new SPARQLRepository(queryEndpointUrl);
  myRepository.initialize();
  RepositoryConnection con = myRepository.getConnection();

  String sparql_query = "PREFIX kb: <http://knowledgebooks.com/ontology#> SELECT ?subject ?object WHERE { ?subject kb:containsPlace ?object . }";

  TupleQuery tupleQuery = con.prepareTupleQuery(QueryLanguage.SPARQL,
    sparql_query);
  //tupleQuery.setIncludeInferred(true); //this property's default value is true.

  TupleQueryResult result = tupleQuery.evaluate();

  try {
   List<String> bindingNames = result.getBindingNames();
   while (result.hasNext()) {
    BindingSet bindingSet = result.next();
    for (int i = 0; i < bindingSet.size(); i++) {
     String val = bindingSet.getValue(bindingNames.get(i))
       .stringValue();
     System.out.print('\t' + val);
    }
    System.out.print('\n');
   }
  } finally {
   result.close();
  }
 }

}

0 件のコメント: