2011-08-22 125 views
3

我構建了一個使用SWRL規則進行推理的本體。當我在Protege中執行SQWRL查詢時,它工作正常。問題是,當我想與Jena一起使用Pellet時,似乎Pellet在查詢中不包含SWRL規則。我有顆粒是這樣的:Pellet不包含我的SWRL規則

InputStream in = new FileInputStream(new File("D:\\Fakultet\\WeatherHealthcast1.owl")); 
Model model = ModelFactory.createDefaultModel(); 
model.read(in, null); 
OntModel ontology = ModelFactory.createOntologyModel(PelletReasonerFactory.THE_SPEC, model); 

// Create a new query 
String queryString = 
      "PREFIX WeatherHealthcast: <http://www.semanticweb.org/ontologies/2011/2/WeatherHealthcast.owl#> " + 
      "PREFIX foaf: <http://xmlns.com/foaf/0.1/> " + 
      "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> " + 
      "SELECT ?disease " + 
      "WHERE { " + 
      "  ?person rdf:type WeatherHealthcast:Person." + 
      "  ?person foaf:firstName ?fn." + 
      "  ?person foaf:lastName ?ln." + 
      "  FILTER regex(str(?fn), \"Viktor\")." + 
      "  FILTER regex(str(?ln), \"Taneski\")." + 
      "  ?disease rdf:type WeatherHealthcast:Disease. " + 
      "  ?person WeatherHealthcast:suffersFrom ?disease." + 
      "}"; 

Query query = QueryFactory.create(queryString); 

// Execute the query and obtain results 
QueryExecution qe = QueryExecutionFactory.create(query, ontology); 
ResultSet resultSet = qe.execSelect(); 
System.out.println("TEST"); 

while (resultSet.hasNext()) 
{ 
    QuerySolution result = resultSet.next(); 
    RDFNode disease = result.get("disease"); 
    Resource resource = disease.asResource(); 

    System.out.println(" { Suffers from: " + resource.getLocalName() + " . }"); 
} 

我也試過這樣:

Reasoner r = PelletReasonerFactory.theInstance().create(); 
InfModel inferenceModel = ModelFactory.createInfModel(r, model); 

,但沒有取得任何進展。有任何想法嗎?我需要這個用於我的畢業論文。謝謝

+1

你好viktor,你最終解決了你的問題? –

回答

0

我可能會遲到,但我認爲你應該切換到貓頭鷹完整,以獲得所有規則包括在推理。

相關問題