• 运用jena将持久化到mysql的本体导出来并进行简单推理

    普通类
    • 支持
    • 批判
    • 提问
    • 解释
    • 补充
    • 删除
    • 默认段落

    一些基本配置和信息参见前一篇《运用jena将外部本体持久化到mysql》。运用jena将持久化到mysql的本体导出来并进行简单推理的代码如下: 

    import com.hp.hpl.jena.db.DBConnection; 
    import com.hp.hpl.jena.db.IDBConnection; 
    import com.hp.hpl.jena.db.RDFRDBException; 
    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 ReadFMySQL { 
    public static final String strDriver = "com.mysql.jdbc.Driver"; // path of driver class 
    public static final String strURL = "jdbc:mysql://localhost:3306/jena"; // URL of database 
    public static final String strUser = "root"; // database user id 
    public static final String strPassWord = "root"; // database password 
    public static final String strDB = "MySQL"; // database type 
    public static void main(String args[]) { 
    try { 
    // 创建一个数据库连接 
    IDBConnection conn = new DBConnection(strURL, strUser, strPassWord,strDB); 
    // 加载数据库驱动类,需要处理异常 
    try { 
    Class.forName(strDriver); 
    } catch (ClassNotFoundException e) { 
    System.out 
    .println("ClassNotFoundException, Driver is not available..."); 
    } 
    // 使用数据库连接参数创建一个模型制造器 
    ModelMaker maker = ModelFactory.createModelRDBMaker(conn); 
    // 创建一个默认模型,命名为 MyOntology 
    Model defModel = maker.createModel("MyOntology"); 
    // OntModel a=maker.createDefaultModel(); 
    // OntModel wnOntology = ModelFactory.createOntologyModel(); 
    OntModel onto=ModelFactory.createOntologyModel(OntModelSpec.OWL_DL_MEM_RDFS_INF, defModel); 
    Model instances=ModelFactory.createDefaultModel(); 
    instances.add(defModel); 
    /*设置规则*/ 
    String rule = "[rule1:(?x http://www.owl-ontologie.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)]"; 

    /*查询SPARQL语句*/ 
    String queryString = "PREFIX Expert:<http://www.owl-ontologies.com/Expert.owl#> " + 
    "SELECT ?expert ?subject " + 
    "WHERE {?expert Expert:familiar_with ?subject} "; 

    /*创建推理机*/ 
    Reasoner reasoner2 = new GenericRuleReasoner(Rule.parseRules(rule)); 
    System.out.println("creating reasoner......"); 
    // 推理机与本体模型绑定 
    InfModel inf = ModelFactory.createInfModel(reasoner2, instances); 
    System.out.println("binding......"); 
    // 构造查询 
    Query query = QueryFactory.create(queryString); 
    System.out.println("querying......"); 
    // 执行查询 
    QueryExecution qe = QueryExecutionFactory.create(query, inf); 
    // 获取结果 
    ResultSet results = qe.execSelect(); 
    /*打印结果*/ 
    ResultSetFormatter.out(System.out, results, query); 
    qe.close(); 

    System.out.print("over,sir!"); 

    } catch (RDFRDBException e) { 
    System.out.println("Exceptions occur..."); 
    } 

    } 
    }

    • 说明:

    [1] String rule = "[rule1:(?x http://www.owl-ontologie.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)]"; 

    经过我的测试,这些URI随便改都可以,不知道是什么原因 

    [2] String queryString = "PREFIX Expert:<http://www.owl-ontologies.com/Expert.owl#> " + 
    "SELECT ?expert ?subject " + 
    "WHERE {?expert Expert:familiar_with ?subject} "; 

    这里的URI一改,运行结果就有变化,再试试看[可能是PREFIX要和OWL文件中的声名:xmlns 和xmlns:base要一致]

    • 标签:
  • 加入的知识群:
    学习元评论 (0条)

    评论为空
    聪明如你,不妨在这 发表你的看法与心得 ~



    登录之后可以发表学习元评论。
      
暂无内容~~
顶部