Question

I am trying to experiment with Jena using Java code. In this application, I only get 20 null values.

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);
        }
    }
}

After all, it prints the 20 null values, so it finds something, but why is the value of ?value null?

Était-ce utile?

La solution

The query you've constructed is like the following, except that the following can be run in standalone fashion using Jena's command line tools, because I've used a service in the query.

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

When I run this using the command line tools, these are the results (data.n3 is an empty file, because arq requires a --data argument, but the service ensures that the data is coming from the remote endpoint):

$ 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> |
----------------------------------------------------

Notice that you've projected ?director, but not ?value or ?label. As a result there's no ?value variable bound when you do:

    Literal value = soln.getLiteral("value");
    System.out.println(value);

and you get a null result. You might be able to catch some of these kinds of mistakes using QuerySolution.contains. All you need to do is update your query to

select ?director ?value where { # you probably want ?label in here, too

or even

select * where { # this would get all three variables

would suffice. Once you're selecting all three variables, you should get results like:

-------------------------------------------------------------------------------------------------------------
| 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)"     |
-------------------------------------------------------------------------------------------------------------
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top