zoukankan      html  css  js  c++  java
  • Java 语义网编程系列六:Jena原生推理

    规则的含义:

    规则是表示知识的一种方式,它通常超过了owl1的表达能力,语义web上的规则是典型的条件语句:if-then 字句。只有当特定的陈述为真,才会添加新的知识。

    Jena框架自带了推理引擎和所识别的规则语言,其优点jena框架自带使用相对简单,缺点并不是w3c的推理标准。

    本体建模:

      1 import com.clarkparsia.sparqlowl.parser.antlr.SparqlOwlParser.string_return;
      2 
      3 import com.hp.hpl.jena.ontology.OntModel;
      4 
      5 import com.hp.hpl.jena.ontology.OntModelSpec;
      6 
      7 import com.hp.hpl.jena.rdf.model.InfModel;
      8 
      9 import com.hp.hpl.jena.rdf.model.Model;
     10 
     11 import com.hp.hpl.jena.rdf.model.ModelFactory;
     12 
     13 import com.hp.hpl.jena.reasoner.Reasoner;
     14 
     15 import com.hp.hpl.jena.reasoner.rulesys.GenericRuleReasoner;
     16 
     17 import com.hp.hpl.jena.reasoner.rulesys.Rule;
     18 
     19  
     20 
     21 public final class JenaRule
     22 
     23 {
     24 
     25 JenaModel jenaModel = null ;
     26 
     27  
     28 
     29 /**
     30 
     31  * jena原生推理机推理
     32 
     33  * @param ruleString
     34 
     35  * @param filePathString
     36 
     37  */
     38 
     39 public void reasoner(String ruleString, String filePathString)
     40 
     41 {
     42 
     43               jenaModel = new JenaModel();
     44 
     45               OntModel ontModel = jenaModel.createOntologyModel(OntModelSpec.OWL_DL_MEM,filePathString);
     46 
     47               Reasoner reasoner = new GenericRuleReasoner(Rule.parseRules(ruleString));
     48 
     49               InfModel resulInfModel = ModelFactory.createInfModel(reasoner, ontModel);
     50 
     51               jenaModel.outPut(resulInfModel);
     52 
     53 }
     54 
     55  
     56 
     57 /**
     58 
     59  * 拼接谓语
     60 
     61  * @param prefixString
     62 
     63  * @param predicateString
     64 
     65  * @return
     66 
     67  */
     68 
     69 public String getPredicate(String prefixString,String predicateString )
     70 
     71 {
     72 
     73 return "<"+prefixString+predicateString+">";
     74 
     75 }
     76 
     77 }
     78 
     79  
     80 
     81 Rule 规则:
     82 
     83 @Test
     84 
     85  public void testJenaRuleReasoner()
     86 
     87  {
     88 
     89  JenaModel jenaModel = new JenaModel();
     90 
     91  jenaModel.outPut(jenaModel.createOntologyModel(OntModelSpec.OWL_DL_MEM,fileString));
     92 
     93  
     94 
     95  System.out.println("推理后");
     96 
     97  
     98 
     99  JenaRule jenaRule = new JenaRule();
    100 
    101      StringBuffer ruleStringBuffer = new StringBuffer();
    102 
    103      //规则一: 妈妈的男性同胞为叔叔
    104 
    105      ruleStringBuffer.append("[rule1:");
    106 
    107      ruleStringBuffer.append("(?person "+ jenaRule.getPredicate(prefixString,"hasParent")+" ?parent),");
    108 
    109      ruleStringBuffer.append("(?parent "+jenaRule.getPredicate(prefixString, "hasSex") +" ?sex)," );
    110 
    111      ruleStringBuffer.append("equal(?sex,\"女\"),");
    112 
    113      ruleStringBuffer.append("(?parent "+jenaRule.getPredicate(prefixString, "hasSibling") +" ?sibling)," );
    114 
    115      ruleStringBuffer.append("(?sibling "+jenaRule.getPredicate(prefixString, "hasSex") +" ?siblingsex)," );
    116 
    117      ruleStringBuffer.append("equal(?siblingsex ,\"男\")");
    118 
    119      ruleStringBuffer.append("->");
    120 
    121      ruleStringBuffer.append("(?person " + jenaRule.getPredicate(prefixString, "hasUncle")+ " ?sibling )]");
    122 
    123      jenaRule.reasoner(ruleStringBuffer.toString(), fileString);
    124 
    125  }

     

    以上内容有任何错误或不准确的地方请大家指正,不喜勿喷! 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。如果觉得还有帮助的话,可以点一下右下角的【推荐】,希望能够持续的为大家带来好的技术文章!想跟我一起进步么?那就【关注】我吧。
  • 相关阅读:
    页式管理
    Chord算法(原理)
    php实现反转链表(链表题一定记得画图)(指向链表节点的指针本质就是一个记录地址的变量)($p->next表示的是取p节点的next域里面的数值,next只是p的一个属性)
    js进阶ajax的XMLHttpRequest对象的status和statustext属性(如果ajax和php联合使用的话:open连接服务器的第二个参数文件路径改成请求php的url即可)
    js进阶ajax基本用法(创建对象,连接服务器,发送请求,获取服务器传过来的数据)
    js进阶课程ajax简介(ajax是浏览器来实现的)
    php面试题四
    heredoc(实现模板与代码的分离)
    如何查看计算机所连接的打印机
    php面试题三
  • 原文地址:https://www.cnblogs.com/vipyoumay/p/2469287.html
Copyright © 2011-2022 走看看