//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;
}
}