Йена: как запросить данные из модели? - PullRequest
7 голосов
/ 28 марта 2012

Можно ли запрашивать данные из Model без написания sqarql-запросов? Добавить свойства к ресурсам или ресурсам к моделям можно легко, но я пока не выяснил, есть ли более эффективный способ запроса данных из Model, чем при использовании кода, приведенного ниже:

    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(); 

1 Ответ

5 голосов
/ 29 марта 2012

Вы можете использовать список * методов, доступных на модели Jena: http://incubator.apache.org/jena/documentation/javadoc/jena/com/hp/hpl/jena/rdf/model/Model.html

Например, model.listStatements () или model.listStatements ((Resource) null, RDF.type, (RDFNode) null) и т. Д.

Вы можете найти пример 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

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

...