2013-02-05 2 views
2

Я очень новичок в DBPedia, и я не знаю, как и с чего начать. Я сделал некоторые исследования по этому вопросу, и из этого я понимаю, что мы можем получить доступ к данным с использованием языка запросов SPARQL (Apache Jena). Поэтому я начал загружать файлы .ttl для Ontology Infobox Properties. После этого я извлек этот файл почти на 2 ГБ. Здесь моя проблема началась Ни один из редакторов не смог открыть этот файл. Моя примерная программа для доступа к этому файлу находится здесь ...О DBPedia Access

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.

+0

Вы проверили, является ли ваш запрос синтаксически правильным? Например, попробовав его через общедоступную точку SPARQL, предоставленную DBPedia по адресу http://dbpedia.org/sparql или http://dbpedia.org/snorql/? Кроме того, похоже, что вы пытаетесь запросить метаданные, а не сами данные DBpedia (в которых содержится информация о телесериале, данные DBPedia намного превышают 2 ГБ, я полагаю). –

ответ

4

Вы можете использовать ARQ Jena для запуска запросов SPARQL к данным DBpedia, и если вы собираетесь делать много запросов и обработки данных, полезно загружать данные и работать с ними локально. для этого, особенно с данными размером с DBpedia, вы, вероятно, не должны пытаться загрузить его в модель памяти, но используйте TDB и Fuseki для настройки конечной точки SPARQL, с которой вы можете запускать запросы. Это обсуждалось для другого набора данных в this answer.

Однако, поскольку вы только начинаете, с public DBpedia SPARQL endpoint, вероятно, гораздо проще работать. Там вы можете вводить запросы 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 results

вики DBpedia на самом деле имеет целую страницу о доступе DBpedia онлайн Accessing the DBpedia Data Set over the Web, который даст вам некоторое представление о том, как вы можете получить доступ к данным. Другая страница на wiki, The DBpedia Data Set расскажет вам больше о , что есть.

2

Я использую TDB, там также есть инструменты командной строки, которые просты в использовании и намного быстрее, чем Eclipse. Вы можете скачать последнюю версию с их downloads page. Вы можете использовать tdbloader2, чтобы загрузить файл .ttl в хранилище, а затем запросить его tdbquery также в командной строке или в Eclipse, так же, как вы сейчас:

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-тройного, только последний является необязательным. Может случиться так, что инструменты командной строки выходят из кучи. Просто откройте приложение tdbloader2 или tdbquery с текстовым редактором и измените тег -Xmx на нужный вам размер, например.:

JVM_ARGS=${JVM_ARGS:--Xmx4096M} 

Также убедитесь, чтобы установить JENAROOT, как описано в ссылке.

Смежные вопросы