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  }

 

以上内容有任何错误或不准确的地方请大家指正,不喜勿喷! 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。如果觉得还有帮助的话,可以点一下右下角的【推荐】,希望能够持续的为大家带来好的技术文章!想跟我一起进步么?那就【关注】我吧。
原文地址:https://www.cnblogs.com/vipyoumay/p/2469287.html