jena 簡單查詢2(推理)

//DbUtil連接數據庫
//a likes b,b likes c-> a likes c
  


import com.hp.hpl.jena.rdf.model.*;  
import com.hp.hpl.jena.db.DBConnection;
import com.hp.hpl.jena.db.IDBConnection;
import com.hp.hpl.jena.db.ModelRDB;
import com.hp.hpl.jena.ontology.*;  
import com.hp.hpl.jena.query.*;
import com.hp.hpl.jena.reasoner.Reasoner;
import com.hp.hpl.jena.reasoner.rulesys.GenericRuleReasoner;
import com.hp.hpl.jena.reasoner.rulesys.Rule;
import com.hp.hpl.jena.util.PrintUtil;


public class TestJena  {
	

	static String URI="http://owl.man.ac.uk/2006/07/sssw/people#";
	static String filePath="F:\\Ontology1385473236444.owl";
		public static void main(String[] args) {
		// TODO Auto-generated method stub
		//創建一個默認本體
		TestJena st=new TestJena();
		//規則前綴
		 PrintUtil.registerPrefix("iqas", URI);
		 try{
		 DbUtil.getConnection().cleanDB();
		 }catch( Exception e){}
		 ModelMaker mMaker=st.getModelMaker(DbUtil.getConnection());
		 Model base=mMaker.createModel(URI,false);
			//建立本體模型,內存OWL_DL模型,無base;
		 OntModel m = ModelFactory.createOntologyModel(OntModelSpec.OWL_DL_MEM,base);
		//通過本體得到其關聯的文檔管理器
		OntDocumentManager dm = m.getDocumentManager();
		//在文檔管理器中將要導入的文檔與一個統一資源定位符關聯;
		dm.addAltEntry( URI, "file:"+ filePath    );
		//讀取文檔到模型中;
		 m.read( URI);
		 
		//定義規則
		 String rule=
		 "[r1:(?a iqas:likes ?b),(?b iqas:likes ?c)->(?a iqas:likes ?c)]"+
		 "[r2:(?a iqas:has_pet ?b)->(?a iqas:likes ?b)]"+
		 "[r2:(?a iqas:likes ?b)->(?a iqas:like ?b)]";
		  String query="PREFIX iqas:<http://owl.man.ac.uk/2006/07/sssw/people#> SELECT ?x WHERE {iqas:Com1 iqas:likes ?x }";
		  
		  Reasoner reasoner=new GenericRuleReasoner(Rule.parseRules(rule));
		  
		  InfModel infModel=ModelFactory.createInfModel(reasoner, m);

		Query qu1=QueryFactory.create(query);
		QueryExecution exc=QueryExecutionFactory.create(qu1,infModel);
		ResultSet rst=exc.execSelect();

		ResultSetFormatter.out(System.out,rst,qu1);
		

		//m以mMaker爲基礎,所以存有數據庫連接信息
		 m.commit();
		  m.close();
		  
		  IDBConnection icon=DbUtil.getConnection();
		  //構造ModelRDB 從數據庫中取出存入的模型,用到連接和名字
		  ModelRDB mModel= ModelRDB.open(icon, URI);

		
	}
	public ModelMaker getModelMaker(DBConnection con){
		   try {
	            // Create a model maker object
			   
	            return ModelFactory.createModelRDBMaker(con);
	        }
	        catch (Exception e) {
	            e.printStackTrace();
	            System.exit( 1 );
	        }
	        return null;
		
	}

}


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章