package com.moms.service;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.Iterator;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import com.hp.hpl.jena.db.DBConnection;
import com.hp.hpl.jena.ontology.OntClass;
import com.hp.hpl.jena.ontology.OntModel;
import com.hp.hpl.jena.ontology.OntModelSpec;
import com.hp.hpl.jena.query.Query;
import com.hp.hpl.jena.query.QueryExecution;
import com.hp.hpl.jena.query.QueryExecutionFactory;
import com.hp.hpl.jena.query.QueryFactory;
import com.hp.hpl.jena.query.ResultSet;
import com.hp.hpl.jena.query.ResultSetFormatter;
import com.hp.hpl.jena.rdf.model.InfModel;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.rdf.model.ModelMaker;
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.FileManager;
import com.moms.util.db;
public class monto {
InputStream in =null ;
db test=new db();
DBConnection cn = null;
OntModel m = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);
public void show(String modelname) throws Exception {
cn=db.mconn();
ModelMaker maker= ModelFactory.createModelRDBMaker(cn);
Model r = maker.openModel(modelname);
HttpServletResponse response = ServletActionContext.getResponse();
response.setCharacterEncoding("utf-8");
response.setContentType("text/html");
PrintWriter out= response.getWriter();
out.print("<link rel='stylesheet' type='text/css' href='/MOMS/css/default.css' />");
out.print("<textarea name='c' style='width:100%;height:90%;padding:0;font:20px;border:0 none;'>");
r.write(out);
out.print("</textarea>");
}
public boolean read(String filename) throws Exception {
HttpServletResponse response = ServletActionContext.getResponse();
response.setCharacterEncoding("utf-8");
response.setContentType("text/html");
PrintWriter out= response.getWriter();
in = FileManager.get().open(filename);
if(null != in) {
out.print("<link rel='stylesheet' type='text/css' href='/MOMS/css/default.css' />");
out.print("<textarea name='c' style='width:100%;height:90%;padding:0;font:20px;border:0 none;'>");
try
{
in = new FileInputStream( filename );
m.read( in, null);
m.write(out);
Iterator<OntClass> iter = m.listHierarchyRootClasses();
while (iter.hasNext()){
OntClass oc = iter.next();
out.println("类:" + oc.toString());
if(oc.hasSubClass()){
Iterator<OntClass> siter = oc.listSubClasses(true);
while(siter.hasNext()){
OntClass sub = siter.next();
out.println("子类:"+sub.toString());
}
}
}
}
catch(Exception e){
System.err.println(e.toString());
}
out.print("</textarea>");
//System.out.println("read file ok!");
return true;
}
else
return false;
}
public void listmodel() {
//FileManager.get().
}
public void savedb(String filename, String modelname) {
try {
cn=db.mconn();
ModelMaker maker= ModelFactory.createModelRDBMaker(cn);
Model defModel = maker.createModel(modelname);
in = new FileInputStream( filename );
defModel.read(in,null);
//defModel.write(System.out);
db.mclose();
}
catch(Exception e){
e.printStackTrace();
}
}
public void delmodel(String modelname) {
try {
cn=db.mconn();
ModelMaker maker= ModelFactory.createModelRDBMaker(cn);
Model r = maker.openModel(modelname);
r.write(System.out);
maker.removeModel(modelname);//删除
}
catch (Exception e){
e.printStackTrace();
}
}
/*使用sparql对本体进行查询*/
/*查询语句
String queryString = "PREFIX Expert:<http://www.owl-ontologies.com/Expert.owl#> " +
"SELECT ?expert ?subject " +
"WHERE {?expert Expert:familiar_with ?subject} ";
queryString = "Select ?s ?p ?o where {?s ?p ?o}"
*/
public void searchOnto(String modelname,String queryString)throws Exception {
cn=db.mconn();
ModelMaker maker= ModelFactory.createModelRDBMaker(cn);
Model model=maker.getModel(modelname);
HttpServletResponse response = ServletActionContext.getResponse();
response.setCharacterEncoding("utf-8");
response.setContentType("text/html");
PrintWriter pw= response.getWriter();
pw.print("<link rel='stylesheet' type='text/css' href='/MOMS/css/default.css' />");
pw.print("<textarea name='c' style='width:100%;height:90%;padding:0;font:20px;border:0 none;'>");
Query query = QueryFactory.create(queryString);
QueryExecution qe = QueryExecutionFactory.create(query, model);
ResultSet results = qe.execSelect();
/*打印结果*/
//ResultSetFormatter.outputAsJSON(out, results);//(Stystem.out, results, query);
//ResultSetFormatter.outputAsXML(out, results);
String strout = ResultSetFormatter.asText(results);
pw.print(strout);
qe.close();
pw.print("</textarea>");
pw.close();
}
/*本体推理*/
/*设置规则
String rule = "[rule1:(?x http://www.owl-ontologies.com/Expert.owl#research ?y) " +
"(?y http://www.owl-ontologies.com/Expert.owl#associate ?z) " +
"->(?x http://www.owl-ontologies.com/Expert.owl#familiar_with ?z)]";
*/
public void reasonOnto(String modelname,String rule) throws Exception {
cn=db.mconn();
ModelMaker maker= ModelFactory.createModelRDBMaker(cn);
Model model=maker.getModel(modelname);
HttpServletResponse response = ServletActionContext.getResponse();
response.setCharacterEncoding("utf-8");
response.setContentType("text/html");
OutputStream out=response.getOutputStream();
/*创建推理机*/
Reasoner reasoner = new GenericRuleReasoner(Rule.parseRules(rule));
InfModel inf = ModelFactory.createInfModel(reasoner, model);
String queryString = "PREFIX Expert:<http://www.owl-ontologies.com/Expert.owl#> " +
"SELECT ?expert ?subject " +
"WHERE {?expert Expert:familiar_with ?subject} ";
Query query = QueryFactory.create(queryString);
QueryExecution qe = QueryExecutionFactory.create(query, inf);
ResultSet results = qe.execSelect();
/*打印结果*/
ResultSetFormatter.outputAsJSON(out, results);//(Stystem.out, results, query);
qe.close();
}
}
front action:
package com.moms.action.front;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import com.moms.service.monto;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;
public class manageonto extends ActionSupport {
@Override
public String execute() throws Exception {
return Action.SUCCESS;
}
public void listonto() throws Exception {
HttpServletResponse response = ServletActionContext.getResponse();
HttpServletRequest request = ServletActionContext.getRequest();
int page =Integer.parseInt(request.getParameter("page"));
int row = Integer.parseInt(request.getParameter("rows"));//接受参数page和rows
response.setContentType("text/javascript;charset=UTF-8");
PrintWriter pw = response.getWriter();
pw.print("{\"total\":2,\"rows\":[{\"id\":\"01\",\"modename\":\"mongo\",\"publisher\":\"张三\"},{\"id\":\"02\",\"modename\":\"person\",\"publisher\":\"张三\"}]}");
}
public void showonto() throws Exception {
monto m= new monto();
m.show("person");//模型名称
//return Action.SUCCESS;
}
public void seachonto() throws Exception {
String queryString="Select ?主 ?谓 ?宾 where {?主 ?谓 ?宾}";
String modelname="person";
monto m= new monto();
m.searchOnto(modelname, queryString);
//return Action.SUCCESS;
}
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
分享到:
相关推荐
- **OntModel**:核心接口,提供对本体数据的全面操作,包括导入子模型、获取本体信息、操作本体属性和数据导出等。 - **ModelFactory**:静态类,提供创建不同类型的模型(包括本体模型)的工厂方法,是模型创建的...
### Jena操作本体的小例子 #### 关系搜索在互联网中的应用及意义 关系搜索(Relationship Search)作为一种基于互联网海量信息下的人为中心的信息聚合技术,它对于名人关注、人际关系探索等方面具有重要的作用与...
在这个“基于Jena的本体推理示例”中,我们将深入探讨如何使用Jena库进行本体推理,并通过SPARQL查询语言来操作本体。 首先,我们需要了解Jena的基本用法。Jena提供了一系列API,使得开发者能够轻松地创建、加载和...
Jena是一个基于Java的本体处理框架,它提供了将本体存入关系数据库的接口,支持多种数据库管理系统,包括MySQL、HSQLDB、PostgreSQ、Oracle和Microsoft SQL Server等。下面我们将详细介绍使用Jena将本体存入MySQL的...
在"expert"子目录中,可能包含了一些示例代码或教程,展示了如何使用Jena进行本体推理的具体操作。这些示例可能会演示如何加载本体,如何定义和应用规则,以及如何执行SPARQL查询来获取推理后的信息。 总结来说,...
jena的中文教程,适合不想去官网看原版教程的人。适合新手入门学习jena的基本操作。jena可以解析本体,可以将建模工具和java联系起来
在IT领域,尤其是在语义网和知识图谱的开发中,Apache Jena是一个非常重要的工具。Jena是一个开源Java框架,专门设计用于处理RDF(Resource Description Framework)、RDFS(RDF Schema)以及OWL(Web Ontology ...
熟练掌握Jena API需要对整个框架有深入理解,包括如何创建和操作资源,以及如何利用其丰富的迭代器来查询和操作本体信息。随着对Jena的熟悉,开发者能够更高效地构建语义网应用程序,实现本体在软件系统中的智能应用...
数据仓库课程上的报告,主要是关于本体的集成,使用到jena
在这个特定的“jena本体的一个小程序”中,我们推测它可能使用了Jena的Model API来创建和操作本体模型,通过SPARQL查询语言来检索和分析数据。 **程序中的关键元素** 1. **SPARQL查询**: `jena_eclipse_sparql.ppt...
在开始学习Jena之前,确保你对以下几个基础概念有所了解: - **XML**:可扩展标记语言,用于数据交换和存储。 - **RDF**:一种用于表示网络数据的模型,基于XML,用于描述资源和它们之间的关系。 - **OWL**:一种更...
- **在本体中引入其他本体**:Jena支持通过`import`机制引入其他本体,这对于构建大型复杂的本体网络非常有用。 - **使用推理**:Jena内置了推理引擎,能够自动推导出本体中的隐含知识,这对于提高数据的一致性和...
通过使用Jena平台提供的工具和技术,成功地构建了一个完整的本体,并验证了其在实际应用中的可行性和有效性。 #### 结论 本文提出了一种基于Jena的本体构建方法,通过五个步骤详细阐述了如何利用Jena平台有效地构建...
Jena提供了丰富的API,使得开发者能够轻松地构建和操作本体模型。本体是描述概念、实体及其关系的一种形式化方式,常用于知识表示和推理。在"Jena本体操纵类(1)——本体文件读取"这个主题中,我们将深入探讨如何使用...
在IT领域,OWL(Web Ontology Language)是一种...总的来说,Jena为处理OWL文件提供了一个强大的工具集,使得开发者能够轻松地解析和操作本体数据,这对于构建智能系统、知识图谱以及语义Web应用等领域具有重要的意义。
总之,Jena是开发语义网应用的强大工具,它使开发者能够轻松地在程序中使用和操作本体模型。无论是处理RDF、RDFS还是OWL,Jena都能提供必要的接口和功能。通过深入学习和实践,开发者可以构建出复杂的语义网应用,...