2012-03-27 62 views
7

是否可以在不编写sqarql-queries的情况下从Model查询数据?添加属性的资源或资源的模型可以轻松完成,但我还没有发现的是,如果没有查询到Model数据比使用代码下面的一个更有效的方式:Jena:如何从模型中查询数据?

String sparql = "SELECT ?thing ?str WHERE { " + 
         "?thing a <" + THING + "> . " + 
         "?thing <" + HAS_STRING + "> ?str . " + 
         "FILTER (?str = \"" + s + "\") . }"; 

    Query qry = QueryFactory.create(sparql); 
    QueryExecution qe = QueryExecutionFactory.create(qry, getModel()); 
    ResultSet rs = qe.execSelect(); 

    while(rs.hasNext()) 
    { 
     QuerySolution sol = rs.nextSolution(); 
     RDFNode str = sol.get("str"); 
     RDFNode thing = sol.get("thing"); 

     ... 
    } 

    qe.close(); 

回答

5

你可以使用一个模型Jena的可用的列表*方法: http://incubator.apache.org/jena/documentation/javadoc/jena/com/hp/hpl/jena/rdf/model/Model.html

例如,model.listStatements()或model.listStatements((资源)NULL,RDF.type,(RDFNode)空)等

您可以在此处找到model.listStatements()的示例: https://github.com/castagna/jena-examples/blob/995d7acf8fcb3f9a8f7264dfd0902cdddfc00279/src/main/java/org/apache/jena/examples/ExampleAPI_01.java

又见节“查询模式”在耶拿网站上的耶拿教程:最后 http://incubator.apache.org/jena/tutorials/rdf_api.html#ch-Querying%20a%20Model

一个评论,在效率方面,你应该看不到太大的差别,事实上,我不认为有是一个区别。对于模型中的每个列表*方法,您都可以编写一个非常简单的SPARQL查询并自行比较性能。如果你想要的是一个Model的方法,然后使用它,但你很快就会发现,当你想做更多的时候,SPARQL查询可以更简洁,并且可以让你用更少的代码准确地获得你需要的东西。