http://blog.tianya.cn/blogger/post_read.asp?BlogID=797111&PostID=28461722
import java.util.Iterator;
import com.hp.hpl.jena.db.DBConnection;
import com.hp.hpl.jena.db.IDBConnection;
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;
public class sparqltuili{
public static final String strDriver = "com.mysql.jdbc.Driver"; // path of driver class
public static final String strURL = "jdbc:mysql://localhost/protege_db"; // URL of database
public static final String strUser = "root"; // database user id
public static final String strPassWord = ""; // database password
public static final String strDB = "MySQL"; // database type
public static void main(String[] args){
try{
// 创建一个数据库连接
IDBConnection con = new DBConnection ( strURL, strUser, strPassWord, strDB );
// 加载数据库驱动类,需要处理异常
try{
System.out.println(strDriver);
Class.forName(strDriver);
}catch(ClassNotFoundException e) {
System.out.println("ClassNotFoundException, Driver is not available...");
}
String filePath = "file :C:\\Program Files\\Protege_3.1\\Animal.owl";
sparqltuili.createDBModelFromFile(con, "1protege_db",filePath);
OntModel model = sparqltuili.getModelFromDB(con, "1protege_db");
sparqltuili.simpleReadOntology(model);
String rule = "[rule1:(?x
http://www.owl-ontologies.com/Animal.owl#Belonging ?y) " +
"->(?y http://www.owl-ontologies.com/Animal.owl#Belonged ?x)]";
/*查询语句*/
String queryString = "PREFIX Animal:<http://www.owl-ontologies.com/Animal.owl#> " +
"SELECT ?Zoo ?Herbivore " +
"WHERE { ?Zoo Animal:Belonged ?Herbivore} ";
/*创建推理机*/
Reasoner reasoner2 = new GenericRuleReasoner(Rule.parseRules(rule));
InfModel inf = ModelFactory.createInfModel(reasoner2, model);
Query query = QueryFactory.create(queryString);
QueryExecution qe = QueryExecutionFactory.create(query, inf);
ResultSet results = qe.execSelect();
/*打印结果*/
ResultSetFormatter.out(System.out, results, query);
qe.close();
}catch(Exception e){e.printStackTrace();}}
/* 从文件读取本体并将其存入数据库 */
public static OntModel createDBModelFromFile(IDBConnection con, String name,
String filePath) {
ModelMaker maker = ModelFactory.createModelRDBMaker(con);
Model base = maker.createModel(name);
OntModel newmodel = ModelFactory.createOntologyModel(
getModelSpec(maker), base);
newmodel.read(filePath);
return newmodel;
}
/* 从数据库中得到已存入本体 */
public static OntModel getModelFromDB(IDBConnection con, String name) {
ModelMaker maker = ModelFactory.createModelRDBMaker(con);
Model base = maker.getModel(name);
OntModel newmodel = ModelFactory.createOntologyModel(
getModelSpec(maker), base);
return newmodel;
}
public static OntModelSpec getModelSpec(ModelMaker maker) {
OntModelSpec spec = new OntModelSpec(OntModelSpec.OWL_MEM);
spec.setImportModelMaker(maker);
return spec;
}
/* 简单读取本体中的各个class */
public static void simpleReadOntology(OntModel model) {
for (Iterator i = model.listClasses(); i.hasNext();) {
OntClass c = (OntClass) i.next();
System.out.println(c.getLocalName());
}
}
}
分享到:
相关推荐
- **本体API**:提供了对OWL本体的全面操作,包括创建、加载、保存和编辑本体模型。 - **服务接口**:Jena支持与SPARQL Endpoints和其他Web服务的交互。 **总结** Jena 2.11.2是开发语义网应用的强大工具,涵盖了从...
4. **保存本体**:将模型保存到RDB存储,可以调用`model.write()`方法,将模型写入数据库。 5. **查询与更新**:之后,可以使用SPARQL查询来检索或更新数据库中的本体数据。 **注意事项** 尽管Jena 2.6.4版本支持...
Jena 2允许将数据存储到硬盘中,或者是OWL文件,或者是关系数据库中。本文处理的本体就是OWL文件读入的。Jena 2提供了ARQ查询引擎,它实现SPARQL查询语言和RDQL,从而支持对模型的查询。另外,查询引擎与关系数据库...
7. **Jena SDB**: SDB是Jena的数据库抽象层,它可以将RDF数据存储在关系数据库中,提供了一种更传统的关系数据库管理系统的访问方式。 8. **Model API**: Jena的Model API是与RDF数据交互的主要接口,允许开发者...
5. **Jena SDB**: 提供了一个持久化存储解决方案,可以将大型RDF数据集存储在数据库中,以提高性能和可扩展性。 **Jena的基本用法** 一个简单的Jena使用例子可能涉及以下步骤: 1. **创建Model**: 首先,我们需要...
OWL的持久化是指将本体模型保存到数据库中,以便于长期存储和检索,这对于需要大量数据处理和知识管理的应用至关重要。 标签“OWL持久化包”进一步强调了这个压缩包的主要功能。在语义网应用中,数据通常以OWL本体...
1. **本体解析器**:负责读取和解析本体文件或数据库中的本体数据。 2. **查询解析器**:提供用户查询命令的解析接口,帮助用户构建有效的查询语句。 3. **推理引擎**:这是推理机的核心部分,执行具体的推理任务,...
12. **持久化本体**:介绍如何保存和加载本体模型到文件或数据库。 13. **实验性本体工具**:可能包含一些前沿或仍在开发中的特性。 **进一步的帮助** 如果你在使用Jena Ontology API时遇到问题,可以通过加入Jena...
7. **数据库集成**:Protégé支持本体与数据库的交互,利用JDBC和JDBC-ODBC桥接器,可以将本体模型存入数据库,便于数据管理和共享。 8. **推理机支持**:虽然原生支持的推理机如Pallet和FaCT++可能需要额外的Java...