2015-09-14 3 views
-1

Я получаю пустой набор результатов, когда пытаюсь получить данные, хранящиеся в модели jena.Jena: Получение пустого набора результатов

Это код для загрузки данных (я извлекал импорт для краткости)

package basic;  

//imports here 

public class DataLoaderQn { 
    public static void main(String[] args) throws FileNotFoundException { 

     String resourceURI = "http://www.abc123.com/riskmodelling/static/risks"; 
     String directory = "D:/mywork/dp/projs/static-risks/data/test"; 
     Dataset dataset = TDBFactory.createDataset(directory); 
     Model model = null; 

     try { 
      dataset.begin(ReadWrite.WRITE); 
      model = dataset.getDefaultModel(); 
      model.enterCriticalSection(Lock.WRITE); 

      model = model.removeAll(); 

      Resource projectNatureRes = model.createResource(resourceURI+":PROJECT_NATURE"); 

      Property projectNatureRiskProps = model.createProperty(resourceURI + ":COMPLEX_FUNCTIONALITY");   
      Bag projectNatureRisks = model.createBag();   
      projectNatureRisks.add("More defects"); 
      projectNatureRisks.add("Effort estimation inaccurate");   
      projectNatureRes.addProperty(projectNatureRiskProps, projectNatureRisks); 

      Property migrationRiskProps = model.createProperty(resourceURI + ":MIGRATION");   
      Bag migrationRisks = model.createBag();   
      migrationRisks.add("Lack of knowledge of exsting application"); 
      migrationRisks.add("Documentation not available");   
      projectNatureRes.addProperty(migrationRiskProps, migrationRisks); 

      model.write(System.out); 
      model.write(new FileOutputStream(new File(directory + "/Project_risk.ttl")), "N-TRIPLES"); 
      model.commit(); 

      dataset.commit(); 

      TDB.sync(model); 

     } finally { 
      dataset.end(); 
      model.leaveCriticalSection(); 
     } 

    } 

} 

И это, как я прочитал в данных из программы Java

public class ReadBasicQn { 
public static void main(String[] args) { 
    String directory = "D:/mywork/dp/projs/static-risks/data/test"; 
    Dataset dataset = TDBFactory.createDataset(directory); 

    Model model = null; 
    ResultSet rs; 
    QueryExecution qexeExecution = null; 
    try{ 
     /*model = ModelFactory.createDefaultModel(); 
     TDBLoader.loadModel(model, directory + "/Project_risk.ttl");*/ 

     model = dataset.getDefaultModel(); 

     String queryString = "PREFIX proj: <http://www.abc123.com/riskmodelling/static/risks#> "; 
     queryString += "select ?risks where "; 
     queryString += "{proj:PROJECT_NATURE proj:COMPLEX_FUNCTIONALITY ?risks}"; 


     String queryString2 = "SELECT * WHERE { ?s ?p ?o }"; 

     Query q = QueryFactory.create(queryString); 
     qexeExecution = QueryExecutionFactory.create(q, model); 
     rs = qexeExecution.execSelect(); 
     ResultSetFormatter.out(System.out, rs); 
     qexeExecution.close(); 

     q = QueryFactory.create(queryString2); 
     qexeExecution = QueryExecutionFactory.create(q, model); 
     rs = qexeExecution.execSelect(); 
     ResultSetFormatter.out(System.out, rs); 

     /*while(rs.hasNext()){ 
      QuerySolution qSol = rs.nextSolution(); 
      RDFNode n = qSol.get("risks"); 
      System.out.println(n); 
     }*/ 

    }finally{ 
     qexeExecution.close(); 
    } 
} 

}

Выход второго запроса (выберите *) из результатов ResultSetFormatter

------------------------------------------------------------------------------------------------------------------------------------------------ 
| s                 | p                  | o            | 
=================================================================================================================================================================================================== 
| <http://www.abc123.com/riskmodelling/static/risks:PROJECT_NATURE> | <http://www.abc123.com/riskmodelling/static/risks:COMPLEX_FUNCTIONALITY> | _:b0            | 
| <http://www.abc123.com/riskmodelling/static/risks:PROJECT_NATURE> | <http://www.abc123.com/riskmodelling/static/risks:MIGRATION>    | _:b1            | 
| _:b0                | <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>      | <http://www.w3.org/1999/02/22-rdf-syntax-ns#Bag> | 
| _:b0                | <http://www.w3.org/1999/02/22-rdf-syntax-ns#_1>       | "More defects"         | 
| _:b0                | <http://www.w3.org/1999/02/22-rdf-syntax-ns#_2>       | "Effort estimation inaccurate"     | 
| _:b1                | <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>      | <http://www.w3.org/1999/02/22-rdf-syntax-ns#Bag> | 
| _:b1                | <http://www.w3.org/1999/02/22-rdf-syntax-ns#_1>       | "Lack of knowledge of exsting application"  | 
| _:b1                | <http://www.w3.org/1999/02/22-rdf-syntax-ns#_2>       | "Documentation not available"     | 
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 

, что означает, что данные доступны и правильно загружены (правильно?). Однако пользовательский запрос возвращает следующий вывод.

--------- 
| risks | 
========= 
--------- 

Любая помощь приветствуется. Я только что начал с Йены, поэтому, возможно, я делаю что-то действительно глупое.

ответ

3

Опечатка. Ваш префикс заканчивается на #, но в ваших URI есть :. Вот ваше объявление префиксов и URI, выстроен:

prefix proj: http://www.abc123.com/riskmodelling/static/risks#> 
      http://www.abc123.com/riskmodelling/static/risks:PROJECT_NATURE 
                  ^
                  | 

В вашей URI, это риски [ТОЛСТОЙ] PROJECT_NATURE, не риски [HASH] PROJECT_NATURE. Вы должны изменить префикс:

prefix proj: http://www.abc123.com/riskmodelling/static/risks:> 

или изменить свои данные

Resource projectNatureRes = model.createResource(resourceURI+"#PROJECT_NATURE"); 
// ...and in a few other places, too 
+0

Спасибо. Он работает, я не понял, что шаблон префикса должен быть сопоставлен в запросе. – ramp

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