jena 简单查询2(推理)

原创 2013年12月05日 14:12:26
//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;
		
	}

}


 

相关文章推荐

使用jena写入多个本体文件到mysql

 使用jena写入多个本体文件到mysql 代码如下:   import java.io.File; import java.io.FileInputStream; impor...
  • zdlzwk
  • zdlzwk
  • 2015年09月30日 14:19
  • 379

Jena API 在OWL中应用的体会

为了更好的使用Jena API,我们应该对OWL有个大致的了解。OWL核心是围绕三元组的,即我们在很多资料中看到的陈述(Statement),它的组成为:Statement=(Subject,Prop...

一个SPARQL语句的说明

SPARQL,和“sparkle”的发音一样,它是一种 RDF 查询语言,可以从 RDF 图中查询信息。在 W3C Technical Reports and Publications 页面上,我们可...

jena 简单查询(不带推理,直接读取owl文件)

用的是protege 里面的people demo import com.hp.hpl.jena.rdf.model.*; import com.hp.hpl.jena.ontology.*; ...
  • limbo_c
  • limbo_c
  • 2013年11月28日 12:21
  • 1784

Jena2提供的规则推理引擎

翻译自Jena文档。 一,简介 Jena2提供的规则推理引擎支持前向链、后向链以及二者混合的推理执行模型,更准确地说,Jena有两个内部规则引擎:前向链推理RETE引擎和一个tabled da...

Jena查询(推理机)

  • 2010年04月03日 08:44
  • 38KB
  • 下载

本体(ontology)学习之我见——Jena规则编写——中文显示与owl:inverseOf推理结果不全

Jena 推理规则 中文显示 owl:inverseOf 逆关系 逆属性

【6.15日总结】Jena推理案例设计思考二

 鉴于昨天的结论,今天在本体中补上了几个子属性关系、传递关系,想验证一下Jena API的推理功能:        我在旅游本体中加入了一个新类“#旅游目的地”,我按照特色的不同建了五个子类“...
  • zdlzwk
  • zdlzwk
  • 2015年09月30日 14:26
  • 667

Jena 本体推理规则(Rules)的介绍

本体的推理规则库是有一条条规则组成的。每条规则由主体(body)和头(head)组成,一条规则可以有一个主体和一个头,例如规则:[rule1:(?a fa:hasHusband ?b)(?a fa:i...

Jena对本体推理的支持

  • 2016年10月10日 10:57
  • 475KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:jena 简单查询2(推理)
举报原因:
原因补充:

(最多只允许输入30个字)