2012-03-27 20 views
7

Bir sql sorguları yazmadan Model veri sorgulamak mümkün mü? Aşağıdaki bir kod kullanarak daha Model verileri sorgulamak için daha etkili bir yolu varsa, henüz modellere kaynakları veya kaynaklara özelliklerini ekleme kolayca yapılabilir, ama ben öğrenemedim:Jena: Modelden veri nasıl sorgulanır?

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

cevap

5

Sen vb Örneğin http://incubator.apache.org/jena/documentation/javadoc/jena/com/hp/hpl/jena/rdf/model/Model.html

, model.listStatements() veya model.listStatements ((kaynak) boş, RDF.type, (RDFNode) boş),

: liste * bir Jena Modeli uygun yöntemleri kullanabilir

Model.listStatements() örneğine buradan ulaşabilirsiniz: https://github.com/castagna/jena-examples/blob/995d7acf8fcb3f9a8f7264dfd0902cdddfc00279/src/main/java/org/apache/jena/examples/ExampleAPI_01.java

Ayrıca bkz bölüm Jena web sitesinde Jena eğitimde "bir modeli sorgulama": Eğer pek fark görmemeniz gerekir http://incubator.apache.org/jena/tutorials/rdf_api.html#ch-Querying%20a%20Model

Son bir yorumun, verimlilik açısından gerçekten orada sanmıyorum bir fark var. Her liste için * Modelde çok basit bir SPARQL sorgusu yazabilir ve performansları kendiniz karşılaştırabilirsiniz. İstediğiniz şey bir Modelin yöntemi olarak mevcutsa, onu kullanın, ancak daha fazlasını yapmak istediğinizde, SPARQL sorgularının daha özlü olabileceğini ve daha az kodla tam olarak ihtiyacınız olanı geri almanıza izin vereceğinizi öğreneceksiniz. .