3

私は DBPedia を始めたばかりで、どこから始めればいいのかわかりません。これについて調査した結果、SPARQL クエリ言語 (Apache Jena) を使用してデータにアクセスできることがわかりました。そこで、オントロジー インフォボックス プロパティの .ttl ファイルのダウンロードを開始しました。その後、このファイルをほぼ2GB抽出しました。ここで私の問題が始まりました このファイルを開くことができるエディタはありません。このファイルにアクセスするための私のサンプル プログラムはこちらです...

public class OntologyExample {
public static void main(String[] args) {
    FileManager.get().addLocatorClassLoader(
            OntologyExample.class.getClassLoader());
    Model model = FileManager
            .get()
            .loadModel("D:\\Dell XPS\\DBPEDIA\\instance_types_en.ttl\\instance_types_en.ttl");


    String q = "SELECT * WHERE { "
            + "?e <http://dbpedia.org/ontology/series> <http://dbpedia.org/resource/The_Sopranos>  ."
            + "?e <http://dbpedia.org/ontology/releaseDate> ?date"
            + "?e <http://dbpedia.org/ontology/episodeNumber>  ?number   "
            + "?e <http://dbpedia.org/ontology/seasonNumber>   ?season"
            + " }" + "ORDER BY DESC(?date)";

    Query query = QueryFactory.create(q);
    QueryExecution queryExecution = QueryExecutionFactory.create(query,
            model);
    ResultSet resultSet = queryExecution.execSelect();
    ResultSetFormatter.out(System.out, resultSet, query);
    queryExecution.close();
}
}

したがって、このプログラムの入力はその 2GB のファイルです。だから、このサンプルプログラムを実行して、次のような例外をスローしました

Exception in thread "main" com.hp.hpl.jena.n3.turtle.TurtleParseException: GC overhead limit exceeded
at com.hp.hpl.jena.n3.turtle.ParserTurtle.parse(ParserTurtle.java:63)
at com.hp.hpl.jena.n3.turtle.TurtleReader.readWorker(TurtleReader.java:33)
at com.hp.hpl.jena.n3.JenaReaderBase.readImpl(JenaReaderBase.java:119)
at com.hp.hpl.jena.n3.JenaReaderBase.read(JenaReaderBase.java:84)
at com.hp.hpl.jena.rdf.model.impl.ModelCom.read(ModelCom.java:268)
at com.hp.hpl.jena.util.FileManager.readModelWorker(FileManager.java:403)
at com.hp.hpl.jena.util.FileManager.loadModelWorker(FileManager.java:306)
at com.hp.hpl.jena.util.FileManager.loadModel(FileManager.java:258)
at jena.tutorial.OntologyExample.main(OntologyExample.java:18)

Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded
at java.util.Arrays.copyOfRange(Unknown Source)
at java.lang.String.<init>(Unknown Source)
at org.apache.jena.iri.impl.LexerPath.yytext(LexerPath.java:420)
at org.apache.jena.iri.impl.AbsLexer.rule(AbsLexer.java:81)
at org.apache.jena.iri.impl.LexerPath.yylex(LexerPath.java:711)
at org.apache.jena.iri.impl.AbsLexer.analyse(AbsLexer.java:52)
at org.apache.jena.iri.impl.Parser.<init>(Parser.java:108)
at org.apache.jena.iri.impl.IRIImpl.<init>(IRIImpl.java:65)
at org.apache.jena.iri.impl.AbsIRIImpl.create(AbsIRIImpl.java:692)
at org.apache.jena.iri.IRI.resolve(IRI.java:432)
at com.hp.hpl.jena.n3.IRIResolver.resolve(IRIResolver.java:167)
at com.hp.hpl.jena.n3.turtle.ParserBase._resolveIRI(ParserBase.java:198)
at com.hp.hpl.jena.n3.turtle.ParserBase.resolveIRI(ParserBase.java:192)
at com.hp.hpl.jena.n3.turtle.ParserBase.resolveQuotedIRI(ParserBase.java:183)
at com.hp.hpl.jena.n3.turtle.parser.TurtleParser.IRI_REF(TurtleParser.java:737)
at com.hp.hpl.jena.n3.turtle.parser.TurtleParser.IRIref(TurtleParser.java:680)
at com.hp.hpl.jena.n3.turtle.parser.TurtleParser.GraphTerm(TurtleParser.java:496)
at com.hp.hpl.jena.n3.turtle.parser.TurtleParser.VarOrTerm(TurtleParser.java:420)
at com.hp.hpl.jena.n3.turtle.parser.TurtleParser.TriplesSameSubject(TurtleParser.java:150)
at com.hp.hpl.jena.n3.turtle.parser.TurtleParser.Statement(TurtleParser.java:97)
at com.hp.hpl.jena.n3.turtle.parser.TurtleParser.parse(TurtleParser.java:67)
at com.hp.hpl.jena.n3.turtle.ParserTurtle.parse(ParserTurtle.java:49)
... 8 more

私は Eclipse からこのコードを実行しています。これが私の Eclipse .ini 設定です。

org.eclipse.epp.package.jee.product
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
512M
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
512m
--launcher.defaultAction
openFile
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms1024m
-Xmx2048m

だからここで私の問題は

  1. この種の大きなファイルにアクセスするにはどうすればよいですか。
  2. DBPedia を適切に使用するにはどうすればよいですか。

ここで立ち往生している私を助けてください。私はDBpediaでプロジェクトを行っています。

4

2 に答える 2

5

Jena の ARQ を使用して、DBpedia データに対して SPARQL クエリを実行できます。大量のクエリとデータ処理を行う場合は、データをダウンロードしてローカルで操作すると便利です。これを行うには、特に DBpedia と同じくらい大きなデータの場合、メモリ内モデルにロードするのではなく、TDB と Fuseki を使用して、クエリを実行できる SPARQL エンドポイントを設定する必要があります。これは、この回答の別のデータセットについて説明されています。

ただし、まだ始めたばかりなので、公開されている DBpedia SPARQL エンドポイントを使用する方がおそらくはるかに簡単です。そこに SPARQL クエリを入力して、さまざまな形式で結果を取得できます。質問のクエリは少し形式が正しくありませんでしたが、簡単にクリーンアップできました。クリーンアップされた作業クエリが続きます。

SELECT * WHERE {
    ?e <http://dbpedia.org/ontology/series> <http://dbpedia.org/resource/The_Sopranos>  .
    ?e <http://dbpedia.org/ontology/releaseDate> ?date .
    ?e <http://dbpedia.org/ontology/episodeNumber> ?number .
    ?e <http://dbpedia.org/ontology/seasonNumber> ?season .
}
ORDER BY DESC(?date)

SPARQL の結果

DBpedia wiki には実際に DBpedia へのオンライン アクセスに関するページ全体があり、Web 経由で DBpedia データ セットにアクセスする方法について説明しています。wiki の別のページ、DBpedia Data Setでは、利用可能データについて詳しく説明しています。

于 2013-06-24T01:01:28.897 に答える
3

私はTDBを使用しています。そこには、使いやすく、Eclipse よりもはるかに高速なコマンドライン ツールもあります。ダウンロードページから最新バージョンをダウンロードできます。を使用してファイルをストアtdbloader2にロードし、コマンドラインまたは Eclipse でクエリを実行できます。これは今と同じです。.ttltdbquery

Dataset dataset = TDBFactory.createDataset( "path" );
Query query = QueryFactory.create( "SELECT * WHERE { "
        + "?e <http://dbpedia.org/ontology/series> <http://dbpedia.org/resource/The_Sopranos>  ."
        + "?e <http://dbpedia.org/ontology/releaseDate> ?date ."
        + "?e <http://dbpedia.org/ontology/episodeNumber>  ?number  . "
        + "?e <http://dbpedia.org/ontology/seasonNumber>   ?season ."
        + " }" + "ORDER BY DESC(?date)" );
QueryExecution qexec = QueryExecutionFactory.create( query, dataset );
ResultSet results = qexec.execSelect();

私が理解している限り、.すべての SPARQL トリプルの後に作成する必要がありますが、最後の 1 つだけがオプションです。コマンドライン ツールがヒープ領域を使い果たしている可能性があります。tdbloader2またはtdbqueryアプリをテキスト エディターで開き、-Xmxタグを好きなサイズに変更します。

JVM_ARGS=${JVM_ARGS:--Xmx4096M}

またJENAROOT、リンクに記載されているように設定してください。

于 2013-07-02T17:50:26.983 に答える