SPARQL-запрос к connectedmdb, возвращающий только нулевые значения
Я пытаюсь поэкспериментировать с Дженой, используя код Java. В этом приложении я получаю только 20 нулевых значений.
public class Movie_database {
public static void main(String args[]) {
Model model = ModelFactory.createDefaultModel();
String sparqlQueryString = "PREFIX mdb: <http://data.linkedmdb.org/resource/movie/>"
+ "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> "
+ "select ?director "
+ "where "
+ "{ ?director mdb:director_name ?value ."
+ "?director rdfs:label ?label .} "
+ "LIMIT 20";
Query query = QueryFactory.create(sparqlQueryString);
QueryExecution qexec = QueryExecutionFactory.sparqlService("http://linkedmdb.org/sparql", query);
ResultSet results = qexec.execSelect();
while (results.hasNext()) {
QuerySolution soln = results.nextSolution();
Literal value = soln.getLiteral("value");
System.out.println(value);
}
}
}
В конце концов, он печатает 20 нулевых значений, поэтому он что-то находит, но почему значение ?value
ноль?
1 ответ
Построенный вами запрос похож на следующий, за исключением того, что следующий может выполняться автономно с использованием инструментов командной строки Jena, потому что я использовал service
в запросе.
PREFIX mdb: <http://data.linkedmdb.org/resource/movie/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
select ?director where {
service <http://linkedmdb.org/sparql> {
?director mdb:director_name ?value ;
rdfs:label ?label .
}
}
limit 20
Когда я запускаю это с помощью инструментов командной строки, это результаты (data.n3
это пустой файл, потому что arq
требует --data
аргумент, но service
гарантирует, что данные поступают из удаленной конечной точки):
$ arq --data data.n3 --query query.sparql
----------------------------------------------------
| director |
====================================================
| <http://data.linkedmdb.org/resource/director/1> |
| <http://data.linkedmdb.org/resource/director/2> |
| <http://data.linkedmdb.org/resource/director/3> |
| <http://data.linkedmdb.org/resource/director/4> |
| <http://data.linkedmdb.org/resource/director/5> |
| <http://data.linkedmdb.org/resource/director/6> |
| <http://data.linkedmdb.org/resource/director/7> |
| <http://data.linkedmdb.org/resource/director/8> |
| <http://data.linkedmdb.org/resource/director/9> |
| <http://data.linkedmdb.org/resource/director/10> |
| <http://data.linkedmdb.org/resource/director/11> |
| <http://data.linkedmdb.org/resource/director/12> |
| <http://data.linkedmdb.org/resource/director/13> |
| <http://data.linkedmdb.org/resource/director/14> |
| <http://data.linkedmdb.org/resource/director/15> |
| <http://data.linkedmdb.org/resource/director/16> |
| <http://data.linkedmdb.org/resource/director/17> |
| <http://data.linkedmdb.org/resource/director/18> |
| <http://data.linkedmdb.org/resource/director/20> |
| <http://data.linkedmdb.org/resource/director/21> |
----------------------------------------------------
Обратите внимание, что вы проецировали ?director
, но нет ?value
или же ?label
, В результате нет ?value
привязка к переменной, когда вы делаете:
Literal value = soln.getLiteral("value");
System.out.println(value);
и вы получите null
результат. Вы могли бы быть в состоянии поймать некоторые из этих видов ошибок, используя QuerySolution.contains
, Все, что вам нужно сделать, это обновить ваш запрос до
select ?director ?value where { # you probably want ?label in here, too
или даже
select * where { # this would get all three variables
было бы достаточно. После выбора всех трех переменных вы должны получить такие результаты:
-------------------------------------------------------------------------------------------------------------
| director | value | label |
=============================================================================================================
| <http://data.linkedmdb.org/resource/director/1> | "Chris Morris" | "Chris Morris (Director)" |
| <http://data.linkedmdb.org/resource/director/2> | "Cecil B. DeMille" | "Cecil B. DeMille (Director)" |
| <http://data.linkedmdb.org/resource/director/3> | "Michael Mann" | "Michael Mann (Director)" |
| <http://data.linkedmdb.org/resource/director/4> | "Mustafa Altıoklar" | "Mustafa Altıoklar (Director)" |
| <http://data.linkedmdb.org/resource/director/5> | "Robert J. Flaherty" | "Robert J. Flaherty (Director)" |
| <http://data.linkedmdb.org/resource/director/6> | "Rex Ingram" | "Rex Ingram (Director)" |
| <http://data.linkedmdb.org/resource/director/7> | "William Dickson" | "William Dickson (Director)" |
| <http://data.linkedmdb.org/resource/director/8> | "Andrzej Å»uÅawski" | "Andrzej Å»uÅawski (Director)" |
| <http://data.linkedmdb.org/resource/director/9> | "Max Reinhardt" | "Max Reinhardt (Director)" |
| <http://data.linkedmdb.org/resource/director/10> | "Willis O'Brien" | "Willis O'Brien (Director)" |
| <http://data.linkedmdb.org/resource/director/11> | "Frank Miller" | "Frank Miller (Director)" |
| <http://data.linkedmdb.org/resource/director/12> | "David Byrne" | "David Byrne (Director)" |
| <http://data.linkedmdb.org/resource/director/13> | "John G. Avildsen" | "John G. Avildsen (Director)" |
| <http://data.linkedmdb.org/resource/director/14> | "Leslie Howard" | "Leslie Howard (Director)" |
| <http://data.linkedmdb.org/resource/director/15> | "John Hughes" | "John Hughes (Director)" |
| <http://data.linkedmdb.org/resource/director/16> | "Karl Koch" | "Karl Koch (Director)" |
| <http://data.linkedmdb.org/resource/director/17> | "George Miller" | "George Miller (Director)" |
| <http://data.linkedmdb.org/resource/director/18> | "Michael Powell" | "Michael Powell (Director)" |
| <http://data.linkedmdb.org/resource/director/20> | "Joseph De Grasse" | "Joseph De Grasse (Director)" |
| <http://data.linkedmdb.org/resource/director/21> | "Yamanaka Sadao" | "Yamanaka Sadao (Director)" |
-------------------------------------------------------------------------------------------------------------