Я пытаюсь использовать Jena в Java для запуска запроса SPARQL и получения результатов из файла .ttl
.По какой-то причине желаемые результаты не извлекаются.Я посмотрел на мой запрос SPARQL, и я не уверен, где находится ошибка, но результаты не доставляются моему объекту ResultSet
.Вот мой код ниже:
BasicConfigurator.configure();
FileManager.get().addLocatorClassLoader(QuerySparql.class.getClassLoader());
Model model = FileManager.get().loadModel(My_Path//sample.ttl", "TTL");
String queryString =
"PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\n" +
"PREFIX foaf: <http://xmlns.com/foaf/0.1/name>\n" +
"PREFIX dbo: <http://dbpedia.org/ontology/>\n" +
"PREFIX db: <http://dbpedia.org/resource/>\n " +
"SELECT ?team WHERE { \n" +
"?simeon foaf:name \"Simeon Ikudabo\"@en .\n" +
"?simeon dbo:team ?team\n" +
"}";
Query query = QueryFactory.create(queryString);
QueryExecution qexec = QueryExecutionFactory.create(query, model);
try {
ResultSet results = qexec.execSelect();
while(results.hasNext()) {
QuerySolution soln = results.nextSolution();
Literal team = soln.getLiteral("team");
System.out.println(team);
}
}
catch(Exception e) {
e.printStackTrace(System.out);
}
System.out.println("Done");
А вот вывод в консоли, но на самом деле он не получает никаких результатов, которые я ищу, и пропускает цикл while, потому что нетв результате получается ResultSet
:
3 [main] DEBUG Jena - Jena initialization
375 [main] DEBUG org.apache.jena.util.FileManager - Add location: LocatorFile
377 [main] DEBUG org.apache.jena.util.FileManager - Add location: ClassLoaderLocator
384 [main] DEBUG org.apache.jena.util.LocationMapper - Failed to find configuration: file:location-mapping.rdf;file:location-mapping.n3;file:location-mapping.ttl;file:etc/location-mapping.rdf;file:etc/location-mapping.n3;file:etc/location-mapping.ttl
384 [main] DEBUG org.apache.jena.util.FileManager - Add location: LocatorFile
395 [main] DEBUG org.apache.jena.util.FileManager - Add location: LocatorURL
395 [main] DEBUG org.apache.jena.util.FileManager - Add location: ClassLoaderLocator
423 [main] DEBUG org.apache.jena.riot.system.stream.JenaIOEnvironment - Failed to find configuration: location-mapping.ttl;location-mapping.rdf;location-mapping.n3;etc/location-mapping.rdf;etc/location-mapping.n3;etc/location-mapping.ttl
1731 [main] DEBUG org.apache.jena.info - System architecture: 64 bit
1862 [main] DEBUG org.apache.jena.info - System architecture: 64 bit
1896 [main] DEBUG org.apache.jena.util.FileManager - loadModel(My_Path//sample.ttl, TTL)
1897 [main] DEBUG org.apache.jena.riot.system.stream.StreamManager - Not mapped: My_Path//sample.ttl
1951 [main] DEBUG org.apache.jena.riot.system.stream.StreamManager - Found: My_Path//sample.ttl (LocatorFile)
2633 [main] DEBUG org.apache.jena.shared.LockMRSW - Lock : main
2638 [main] DEBUG org.apache.jena.shared.LockMRSW - Lock : main
Done
Как видите, я создаю переменную ?team
, которая является dbpedia.org/ontology/team
в моем локальном файле черепахи dbpedia.?simeon
в этом примере - это спортсмен, которого ищут, и Симеон отобразит foaf:name "Simeon Ikudabo"@en
.Мое последнее тройное утверждение - ?simeon dbo:team ?team
.Это должно найти значение команды онтологии dbpedia, которое соответствует Симеону Икудабо.Однако по какой-то причине ResultSet
не получает это значение.Я посмотрел в Интернете, что может быть не так с моим запросом, но я не уверен, что проблема может быть из моего исследования.Вот мой .ttl
файл с данными, и он, кажется, правильно отформатирован:
<http://dbpedia.org/resource/Simeon_Ikudabo> <http://dbpedia.org/ontology/team>
<http://dbpedia.org/resource/Indiana_Hoosiers> .
<http://dbpedia.org/resource/Simeon_Ikudabo> <http://www.xmlns.com/foaf/0.1/name> "Simeon Ikudabo"@en .
<http://dbpedia.org/resource/Nick_Mangeri> <http://dbpedia.org/ontology/team> <http://dbpedia.org/resource/Akron_Zips> .
<http://dbepdia.org/resource/Nick_Mangeri> <http://www.xmlns.com/foaf/0.1/name> "Nick Mangeri"@en .
Я также учел возможность проблемы ввода-вывода, но когда я просто читаю модель в Java, кажется,чтобы получить правильный ввод-вывод из файла.Вот мой код для простого чтения модели:
Model model = ModelFactory.createDefaultModel();
model.read("My_Path//sample.ttl", "TURTLE");
model.write(System.out);
А вот вывод:
0 [main] DEBUG Jena - Jena initialization
417 [main] DEBUG org.apache.jena.util.FileManager - Add location: LocatorFile
419 [main] DEBUG org.apache.jena.util.FileManager - Add location: ClassLoaderLocator
428 [main] DEBUG org.apache.jena.util.LocationMapper - Failed to find configuration: file:location-mapping.rdf;file:location-mapping.n3;file:location-mapping.ttl;file:etc/location-mapping.rdf;file:etc/location-mapping.n3;file:etc/location-mapping.ttl
428 [main] DEBUG org.apache.jena.util.FileManager - Add location: LocatorFile
431 [main] DEBUG org.apache.jena.util.FileManager - Add location: LocatorURL
431 [main] DEBUG org.apache.jena.util.FileManager - Add location: ClassLoaderLocator
457 [main] DEBUG org.apache.jena.riot.system.stream.JenaIOEnvironment - Failed to find configuration: location-mapping.ttl;location-mapping.rdf;location-mapping.n3;etc/location-mapping.rdf;etc/location-mapping.n3;etc/location-mapping.ttl
1793 [main] DEBUG org.apache.jena.info - System architecture: 64 bit
1912 [main] DEBUG org.apache.jena.info - System architecture: 64 bit
2254 [main] DEBUG org.apache.jena.riot.system.stream.StreamManager - Not mapped: My_Path//sample.ttl
2255 [main] DEBUG org.apache.jena.riot.system.stream.StreamManager - open(My_Path//sample.ttl)
2255 [main] DEBUG org.apache.jena.riot.system.stream.StreamManager - Not mapped: My_Path//sample.ttl
2288 [main] DEBUG org.apache.jena.riot.system.stream.StreamManager - Found: My_Path//sample.ttl (LocatorFile)
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:j.0="http://dbpedia.org/ontology/"
xmlns:j.1="http://dbpedia.org/ontology/"
xmlns:j.2="http://www.xmlns.com/foaf/0.1/">
<rdf:Description rdf:about="http://dbpedia.org/resource/Nick_Mangeri">
<j.1:team rdf:resource="http://dbpedia.org/resource/Akron_Zips"/>
</rdf:Description>
<rdf:Description rdf:about="http://dbepdia.org/resource/Nick_Mangeri">
<j.2:name xml:lang="en">Nick Mangeri</j.2:name>
</rdf:Description>
<rdf:Description rdf:about="http://dbpedia.org/resource/Simeon_Ikudabo">
<j.2:name xml:lang="en">Simeon Ikudabo</j.2:name>
<j.0:team rdf:resource="http://dbpedia.org/resource/Indiana_Hoosiers"/>
</rdf:Description>
</rdf:RDF>
Итак, я знаю, что Джена может прочитать файл.Я создал SIMILAR-запрос, используя конечную точку Virtuoso SPARQL для DBpedia, и последовательно получал правильные результаты.Это аналогичный запрос, который я выполнял в качестве теста с конечной точки Virtuoso SPARQL для DBpedia:
prefix dbpedia-owl: <http://dbpedia.org/ontology/>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
prefix db: <http://dbpedia.org/resource/>
SELECT ?draftTeam WHERE{
?kobe dbpedia-owl:draftTeam ?draftTeam .
?kobe foaf:name "Kobe Bryant"@en .
}
Я знаю, что конечная точка Virtuoso SPARQL немного отличается от запроса Apache Jena SPARQL, но это то же самоеобщий синтаксис.Я озадачен тем, почему я не могу выполнить запрос в Йене.