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)"     |
-------------------------------------------------------------------------------------------------------------
Другие вопросы по тегам