Ama*_*mar 3 sparql jena dbpedia
我对 DBPedia 很陌生,我不知道如何以及从哪里开始。我对此做了一些研究,从中我了解到我们可以使用 SPARQL 查询语言(Apache Jena)访问数据。所以我开始下载Ontology Infobox Properties的 .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();
}
}
Run Code Online (Sandbox Code Playgroud)
所以这个程序的输入是那个 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
Run Code Online (Sandbox Code Playgroud)
我正在从我的 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
Run Code Online (Sandbox Code Playgroud)
所以我的问题是
所以请帮助我,我被困在这里。我正在做一个关于 DBpedia 的项目。
您可以使用 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)
Run Code Online (Sandbox Code Playgroud)
DBpedia wiki 实际上有一整页关于在线访问DBpedia 访问 DBpedia 数据集通过 Web,这将使您对如何访问数据有所了解。在wiki上的另一页,在DBpedia的数据集将告诉你更多关于什么样的数据是可用的。