2012-03-27 26 views
7

Czy można zapytać o dane z Model bez pisania zapytań sqarql? Dodawanie właściwości do zasobów lub zasobów do modeli można łatwo zrobić, ale nie dowiedział się jeszcze, czy istnieje bardziej skuteczny sposób do kwerendy danych z Model niż przy użyciu kodu jeden poniżej:Jena: jak wyszukiwać dane z modelu?

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

Odpowiedz

5

Ty można użyć metod lista * Dostępny na Jena model: http://incubator.apache.org/jena/documentation/javadoc/jena/com/hp/hpl/jena/rdf/model/Model.html

na przykład model.listStatements() lub model.listStatements ((zasobów) null, RDF.type (RDFNode) null) itd

Można znaleźć przykład modelu.listStatements() tutaj: https://github.com/castagna/jena-examples/blob/995d7acf8fcb3f9a8f7264dfd0902cdddfc00279/src/main/java/org/apache/jena/examples/ExampleAPI_01.java

Patrz także sekcja „Podczas badania Model” w samouczku Jena na stronie internetowej Jena: http://incubator.apache.org/jena/tutorials/rdf_api.html#ch-Querying%20a%20Model

jeden ostatni komentarz, pod względem wydajności nie należy widzieć dużej różnicy, rzeczywiście nie mam tam myśleć to różnica. Dla każdej listy * metod w Modelu możesz napisać bardzo proste zapytanie SPARQL i samemu porównać wyniki. Jeśli to, co chcesz, jest dostępne jako metoda Modelu, użyj go, ale wkrótce przekonasz się, że gdy chcesz zrobić więcej, zapytania SPARQL mogą być bardziej zwięzłe i pozwalają uzyskać dokładnie to, czego potrzebujesz, przy mniejszej ilości kodu .