Pages - Menu

2013-09-14

VirtuosoにYAGOをロードする

Windows環境にOpenLink Virtuosoをインストールし、YAGOオントロジーをロードする。

Virtuosoのセットアップ

  1. OpenLinkのDonwloadページから"Pre-built binaries for Windows"をダウンロードし展開し、適当なディレクトリに設置する。
  2. virtuoso-opensource\database\virtuoso.iniを編集する(環境に応じて設定すること)
    //Stripingを有効にする(DBのロードが速くなる模様)
    Striping = 0

    //DirsAllowedの末尾にyagoディレクトリを追加
    DirsAllowed = ., ../vad, ../yago

    //81行目以降のメモリ設定をマシンスペックに応じて設定する(例:16GB)
    ;; Uncomment next two lines if there is 16 GB system memory free
    NumberOfBuffers = 1360000
    MaxDirtyBuffers = 1000000
  3. システム環境変数に以下を加える:
    変数名:VIRTUOSO_HOME  値:virtuosoのインストールディレクトリ
  4. システム環境変数PATHの末尾に次を追加する:
    ;%VIRTUOSO_HOME%\bin;%VIRTUOSO_HOME%\lib
  5. コマンドプロンプトを開き、以下のコマンドを実行する
    cd %VIRTUOSO_HOME%\database
  6. 続いて、以下のコマンドを実行する
    virtuoso-t -?
    正しくインストールされていれば、適当なメッセージが表示される。
  7. serviceを作成する ※"Instance Name"は任意の名前が可
    (消去する際は"screate"の代わりに"delete"を用いる)
    virtuoso-t +service screate +instance "Instance Name" +configfile virtuoso.ini
  8. 以下のコマンドを実行して、サービスが登録されていれば問題なし
    virtuoso-t +service list
  9. サービスを開始する
    (終了する場合は "start" の代わりに "stop" を用いる)
    virtuoso-t -I "Instance Name" +service start
正常にセットアップが完了していれば、http://localhost:8890/conductorから管理画面に入ることができる。
初期ユーザー名とパスワードはともに'dba'。

YAGOのダウンロード

  1. YAGOのダウンロードページから"Download YAGO2s ontology in .ttl format! (2.2 Gb compressed, 18.5 Gb uncompressed) "を選択しダウンロードする。
  2. ファイルを展開し、VIRTUOSO_HOME\yago に設置する

RDFのVirtuosoへのロード

  1. コマンドプロンプトを開き、isqlと実行する
  2. isqlの対話モードになったら、以下のコマンドを実行する
    ※http://abcde.orgは任意のGragh IRIに設定する
    SQL> ld_dir ('../yago', '*.ttl', 'http://abcde.org');
  3. Load Listを確認する
    SQL> select * from DB.DBA.load_list;
    YAGOの.ttlファイルが表示され、ll_stateが0となっていればOK(1:ロード中、2:ロード完了)
  4. ロードを開始する
    ※このコードの実行には非常に時間がかかる(1~2日)
    SQL> rdf_loader_run();
    ※Loaderは複数実行できるようなので、以下の様なbatファイルをつくり実行しても可。この方が早く完了するかもしれない。
    bulk_load.bat
    start isql 1111 dba dba exec="rdf_loader_run();"
    start isql 1111 dba dba exec="rdf_loader_run();"
    start isql 1111 dba dba exec="rdf_loader_run();"
    start isql 1111 dba dba exec="rdf_loader_run();"
    start isql 1111 dba dba exec="rdf_loader_run();"
    start isql 1111 dba dba exec="rdf_loader_run();"
    start isql 1111 dba dba exec="rdf_loader_run();"
  5. 上のロードが全て完了したら、Load Listでステータスを確認する
    SQL> select * from DB.DBA.load_list;
  6. ll_stateが2となっていればロード完了。

SPARQLクエリを投げる

上記の設定がすべて完了すれば、SPARQLインタフェースなどでYAGOにアクセスすることができる。
http://localhost:8890/sparql/からSPARQLインタフェースを開ける。

サンプルクエリ
SELECT * WHERE {<http://yago-knowledge.org/resource/Albert_Einstein> ?p ?o}
参考
OpenLink Virtuoso - Using Virtuoso Open-Source Edition on Windows YAGO

2013-09-04

HTTPでSPARQLクエリを投げる

DBpediaなどでは、オントロジーののアクセスポイントとしてVirtuosoを採用している。
VirtuosoにはHTTP経由でクエリを投げることができる。
以下は実装例。
import com.hp.hpl.jena.query.*;
import com.hp.hpl.jena.rdf.model.RDFNode;
import com.hp.hpl.jena.sparql.util.StringUtils;

public class Virtuoso {

    public static void main(String[] args) {
        String service = "http://dbpedia.org/sparql";
        String queryString = 
                "PREFIX rdfs:  "+
                "SELECT ?x ?y "+
                "WHERE {?x rdfs:label ?y}";
        Query query = QueryFactory.create(queryString);
        
        QueryExecution qe = QueryExecutionFactory.sparqlService(service, query);
        try {
            ResultSet results = qe.execSelect();
            for (; results.hasNext();) {
                QuerySolution soln = results.nextSolution();
                RDFNode x = soln.get("x");
                RDFNode y = soln.get("y");
                System.out.println(x.toString());
                System.out.println(y.toString());
            }
        } catch (Exception e) {
            System.out.println("Query error:" + e);
        } finally {
            qe.close();
        }
    }
}