0

基本的な DBpedia アプリケーションを作成しようとしています (テスト用のみ)。このクエリを使用すると:

SELECT ?person WHERE {
  ?person dbo:birthPlace:Norway ?person
}

次のメッセージが表示されます。

SPARQL コンパイラ、6 行目: '}' の前の '' に未定義の名前空間プレフィックスがあります

誰かが私が間違っていることを教えてもらえますか? DBpedia クエリ テスターで動作します。

編集:PastebinのJavaコード

package jena_test;

import java.io.Writer;
import java.sql.ResultSet;

import com.hp.hpl.jena.query.Query;
import com.hp.hpl.jena.query.QueryExecution;
import com.hp.hpl.jena.query.QueryExecutionFactory;
import com.hp.hpl.jena.query.QueryFactory;
import com.hp.hpl.jena.query.QuerySolution;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;

public class Dbpedia {

    String test = "123"; 
    static String sparqlQueryString="PREFIX dbo:<http://dbpedia.org/ontology/> "
            + "SELECT ?person "
            + "WHERE { ?person dbo:birthPlace dbo:Norway } ";
    public static void main(String[] args) {
        // TODO Auto-generated method stub





        Model model = ModelFactory.createDefaultModel();
                         Query query = QueryFactory.create(sparqlQueryString);

                         QueryExecution qexec = QueryExecutionFactory.sparqlService("http://dbpedia.org/sparql", sparqlQueryString);


                         try {
                             com.hp.hpl.jena.query.ResultSet results = qexec.execSelect();
                             for ( ; results.hasNext() ; )
                         {
                             QuerySolution soln = results.nextSolution() ;
                             String x = soln.get("Concept").toString();

                             System.out.print(x +"\n");


                         }

                         }

                         finally { qexec.close() ; }

                         }

    }
4

2 に答える 2

3

KevinYの回答が指摘したように、使用する名前空間を定義する必要があります。パブリック DBpedia SPARQL エンドポイントでは、dbpedia-owl:やなど、多数の名前空間が事前定義されていますdbpedia:。これらを使用すると、クエリは次のようになります。(limit 50リンクをクリックするユーザーが DBpedia に課す負荷を軽減するために、 を含めました。)

select ?person where {
  ?person dbpedia-owl:birthPlace dbpedia:Norway .
}
limit 50

SPARQL の結果

KevinY の回答に対するコメントで、いくつかのペーストビン コードにリンクしました (ただし、実際には、関連するすべてのコードを質問に含める必要があります。質問を更新してください!)。ここで、クエリは次のように定義されます。

   static String sparqlQueryString="PREFIX dbo:<http://dbpedia.org/ontology/> "
                    + "SELECT ?person "
                    + "WHERE { ?person dbo:birthPlace dbo:Norway } ";

これは、いくつかの文字列を連結した後、次のようになります。

PREFIX dbo:<http://dbpedia.org/ontology/> 
SELECT ?person 
WHERE { ?person dbo:birthPlace dbo:Norway }

これは、KevinY が投稿したコードと同じではありません。作業クエリでは、オントロジーの名前空間であるbirthPlaceが接頭辞として付けられているのに対し、単純な DBpedia リソースである には が接頭辞として付けられていることに注意してください。これは、クエリの IRI が実際のクエリの IRI と大きく異なることを意味します。私が提示した作業クエリは、多くの結果を生成します。実際、変更されたバージョン:dbpedia-owl:Norwaydbpedia:

select count(?person) where {
  ?person dbpedia-owl:birthPlace dbpedia:Norway .
}

DBpedia には、ノルウェー生まれの既知の人々が 1694 人含まれていることを示しています。

于 2013-08-26T15:32:35.473 に答える