1

Java コードを使用して Jena を実験しようとしています。このアプリケーションでは、20 個の null 値しか得られません。

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 個の null 値が出力されるので、何かが見つかりますが、?valuenull の値はなぜなのでしょうか?

4

1 に答える 1

3

作成したクエリは次のようなものです。ただし、クエリで a を使用したため、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--dataservice

$ 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

で十分でしょう。3 つの変数をすべて選択すると、次のような結果が得られます。

-------------------------------------------------------------------------------------------------------------
| 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)"     |
-------------------------------------------------------------------------------------------------------------
于 2013-08-27T13:36:59.500 に答える