2012-03-27 2 views
7

Возможно ли запрашивать данные из Model без написания sqarql-запросов? Добавление свойств ресурсов или ресурсов для моделей можно легко сделать, но я не нашел еще, если есть более эффективный способ для запроса данных из 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 ((Resource) нулевой, RDF.type (RDFNode) неопределенные) и т.д.

Вы можете найти пример model.listStatements() здесь: https://github.com/castagna/jena-examples/blob/995d7acf8fcb3f9a8f7264dfd0902cdddfc00279/src/main/java/org/apache/jena/examples/ExampleAPI_01.java

Смотрите также раздел «Запросы к модели» в учебнике Jena на сайте Jena: http://incubator.apache.org/jena/tutorials/rdf_api.html#ch-Querying%20a%20Model

Один последний комментарий, с точки зрения эффективности, вы не должны видеть большой разницы, на самом деле я не думаю, что там это разница. Для каждого метода * в Модели вы можете написать очень простой запрос SPARQL и сравнить результаты самостоятельно. Если то, что вы хотите, доступно как метод модели, затем используйте его, но вы скоро обнаружите, что, когда вы захотите сделать больше, запросы SPARQL могут быть более краткими и позволяют вам получить именно то, что вам нужно, с меньшим количеством кода ,

Смежные вопросы