代码之家  ›  专栏  ›  技术社区  ›  Eugeniu Torica

用SPARQL和Jena查询DBpedia

  •  9
  • Eugeniu Torica  · 技术社区  · 16 年前

    here (清单4)模型初始化如下:

    // Open the bloggers RDF graph from the filesystem
    InputStream in = new FileInputStream(new File("bloggers.rdf"));
    
    // Create an empty in-memory model and populate it from the graph
    Model model = ModelFactory.createMemModelMaker().createModel();
    model.read(in,null); // null base URI, since model URIs are absolute
    in.close();
    

    假设我想写一个查询,列出巴黎的教堂。在SPARQL中,它看起来像(取自 this mailing list message ):

    PREFIX p: <http://dbpedia.org/property/>
    PREFIX dbpedia: <http://dbpedia.org/resource/>
    PREFIX category: <http://dbpedia.org/resource/Category:>
    PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
    PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
    PREFIX geo: <http://www.georss.org/georss/>
    
    SELECT DISTINCT ?m ?n ?p ?d
    WHERE {
     ?m rdfs:label ?n.
     ?m skos:subject ?c.
     ?c skos:broader category:Churches_in_Paris.
     ?m p:abstract ?d.
     ?m geo:point ?p
     FILTER ( lang(?n) = "fr" )
     FILTER ( lang(?d) = "fr" )
     }
    

    这个查询在Java中看起来如何?我特别感兴趣的是模型对象是如何初始化的。

    1 回复  |  直到 12 年前
        1
  •  16
  •   user2201650    11 年前

    String queryString=
    "PREFIX p: <http://dbpedia.org/property/>"+
    "PREFIX dbpedia: <http://dbpedia.org/resource/>"+
    "PREFIX category: <http://dbpedia.org/resource/Category:>"+
    "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>"+
    "PREFIX skos: <http://www.w3.org/2004/02/skos/core#>"+
    "PREFIX geo: <http://www.georss.org/georss/>"+
    
    "SELECT DISTINCT ?m ?n ?p ?d"+
    "WHERE {"+
    " ?m rdfs:label ?n."+
    " ?m skos:subject ?c."+
    " ?c skos:broader category:Churches_in_Paris."+
    " ?m p:abstract ?d."+
    " ?m geo:point ?p"+
    " FILTER ( lang(?n) = "fr" )"+
    " FILTER ( lang(?d) = "fr" )"+
    " }"
    
    // now creating query object
    Query query = QueryFactory.create(queryString);
    // initializing queryExecution factory with remote service.
    // **this actually was the main problem I couldn't figure out.**
    QueryExecution qexec = QueryExecutionFactory.sparqlService("http://dbpedia.org/sparql", query);
    
    //after it goes standard query execution and result processing which can
    // be found in almost any Jena/SPARQL tutorial.
    try {
        ResultSet results = qexec.execSelect();
        for (; results.hasNext();) {
    
        // Result processing is done here.
        }
    }
    finally {
       qexec.close();
    }
    

    这是我在网上找到的答案 dbpedia-discussion of www.mail-archive.com page .

    推荐文章