从DBpedia获取RDF模型,该模型以特定资源开头

时间:2015-12-11 16:31:09

标签: java sparql jena dbpedia

我需要你的帮助,我想从dbpedia获得一个RDF图形图形,它以特定资源开始,包含该对象的对象和对象等 我的代码如下,它非常适合

     package Sparql;

     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.rdf.model.Model;

     /**
     *
     * @author Nada
     */
     public class Sparql
      {

     public Sparql()
       {
         }

     public static String querySparql()
       {
     String query=                
            "PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>"+
            "PREFIX dbpprop: <http://dbpedia.org/property/>"+
            "PREFIX owl: <http://www.w3.org/2002/07/owl#>"+
            "PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>"+
            "prefix rdfs:    <http://www.w3.org/2000/01/rdf-schema#>\n" +
            "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>"+
            "PREFIX foaf: <http://xmlns.com/foaf/0.1/>"+
            "PREFIX dc: <http://purl.org/dc/elements/1.1/>"+
            "PREFIX : <http://dbpedia.org/resource/>"+
            "PREFIX dbpedia2: <http://dbpedia.org/property/>"+
            "PREFIX dbpedia: <http://dbpedia.org/>"+
            "PREFIX skos: <http://www.w3.org/2004/02/skos/core#>";


            query+= "CONSTRUCT {"+
            "?s ?p ?o }"+
            "WHERE {"+
            " \"http://dbpedia.org/resource/FIFA\" ?p ?o . ?o ?pp ?oo"+
            "}"
            ;



               return query;
                 }

               public Model executeSparqlQuery()
                 {
                   Query query = QueryFactory.create(querySparql());
                  QueryExecution exec = QueryExecutionFactory.sparqlService(                  "http: //dbpedia.org/sparql", query );
                Model model = exec.execConstruct();
                return model;
               }


          }

1 个答案:

答案 0 :(得分:1)

我认为这可能是最近回答的类似问题的重复,我无法找到。

实现此目的的许多方法,但保持与查询类似 -

CONSTRUCT {
 ?s ?p ?o .
 ?o ?pp ?oo .
} 
WHERE {
 ?s ?p ?o .
 ?o ?pp ?oo .
 FILTER ( ?s = <http://dbpedia.org/resource/FIFA> )
}

我在您的查询中可以看到的主要问题是您已经制作了&#39; http://dbpedia.org/resource/FIFA&#39;文字不是URI。

您还在?o ?pp ?oo .子句中指定了WHERE,但未在CONSTRUCT中指定。我已将?o ?pp ?oo .添加到CONSTRUCT子句中。