以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 XML基础 』  (http://bbs.xml.org.cn/list.asp?boardid=1)
----  jena规则推理时遇到的问题  (http://bbs.xml.org.cn/dispbbs.asp?boardid=1&rootid=&id=65338)


--  作者: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());
      }
  }
}



--  作者:loveunk
--  发布时间:11/13/2008 9:27:00 PM

--  
恩,你理解的是对的

111111是本体的ObjectPropertyma


W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
4,575.195ms