-- 作者:hrballen
-- 发布时间:8/4/2008 11:04:00 AM
-- jena规则推理时遇到的问题
我是一个初学者,在进行jena规则推理时,遇到些问题,就是推理时规则的编写,还有推理的步骤。请高手指点一下,下面代码哪里有问题?在编写规则时,rule1:(?x http://www.owl-ontologies.com/Animal.owl#111111?y,其中的111111指的是在编写本体时的ObjectPropertyma吗?在输出查询结果时, Zoo | Herbivore 下面是空的,不知他应该是实例,还是什么?请高手细致地讲一下 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()); } } }
|