摘要:本文介绍了Jena的推理子系统,并构建了一个简略的RDF图。基于该RDF图,咱们搭建了一个Jena推理引擎,并进行自动化推理。

本文分享自华为云社区《常识推理之基于jena的常识推理(三)》,作者:北纬30度 。

Jena推理子系统旨在容许将一系列推理引擎或推理器插入Jena。这些引擎用于派生从一些根本RDF以及任何可选的本体信息中取得RDF断言,以及与推理器关联的公理和规定。此机制的主要用途是反对应用RDFS和OWL等语言,这些语言容许从实例数据和类形容中推断出额定的事实。该机制的设计非常通用,它包含一个通用规定引擎,可用于许多RDF解决或转换工作。

应用程序通常通过应用ModelFactory将数据集与某个推理器关联以创立新模型来拜访推理机。对创立的模型的查问不仅将返回原始数据中存在的语句,而且还将返回应用推理器实现的规定或其余推理机制从数据中导出的其余语句。

可用的推理 Jena散布中包含许多预约义的推理:

传递推理器:提供存储和遍历类和属性情的反对。这仅实现了rdfs:subPropertyOf和rdfs:subClassOf的传递和反身属性。

RDFS规定推理器:实现RDFS要求的可配置子集。

OWL、OWL Mini、OWL微推理器:一组有用但不残缺的OWL/Full language的OWL/Lite子集的实现。

通用规定推理器:基于规定的推理器,反对用户定义的规定。反对正向链接、表反向链接和混合执行策略。

构建RDF图

jena的 org.apache.jena.rdf.model包用于创立和操作RDF图的类和接口。其中ModelFactory提供了创立规范RDF Model的办法。

上面的例子展现了如何构建一个RDF图

   Model onlineModel = ModelFactory.createDefaultModel();        String prefix = "http://www.example.org/mingjiao#";         Resource mingjiao = onlineModel.createResource(prefix + "mingjiao");        Resource zhangwuji = onlineModel.createResource(prefix + "zhangwuji");        Resource weifuwang = onlineModel.createResource(prefix + "weifuwang");        Resource baimeiyingwang = onlineModel.createResource(prefix + "baimeiyingwang");         Property zhizhang = onlineModel.createProperty(prefix + "zhizhang");        Property leader = onlineModel.createProperty(prefix + "leader");        Property shuyu = onlineModel.createProperty(prefix + "shuyu");         onlineModel.add(zhangwuji, zhizhang, mingjiao);        onlineModel.add(zhangwuji, shuyu, mingjiao);        onlineModel.add(weifuwang, leader, zhangwuji);         PrintUtil.registerPrefix("", prefix);         StmtIterator i = onlineModel.listStatements(null, null, (RDFNode)null);        System.out.println("推理前");        while (i.hasNext()) {            System.out.println('-' + PrintUtil.print(i.nextStatement()));        }output:-(:baimeiyingwang :leader :zhangwuji)-(:zhangwuji :zhizhang :mingjiao)-(:weifuwang :leader :zhangwuji)

首先,通过ModelFactory创立规范RDF Model。

其次,利用Resource、Property别离创立RDF图中的资源,和属性。这里咱们创立了明教、张无忌、韦幅王、白眉鹰王四个资源,以及执掌、上级领导、属于三个属性。

最初,将资源和属性组成三元组增加到RDF图中。如<张无忌,执掌,明教>。

搭建jena推理引擎

jena蕴含一个通用规定引擎,它的inference子系统用于实现推理的性能。用户能够基于jena推理引擎实现简略规定推理,也能够自定义推理规定。jena推理引擎能够从已有的数据信息和类形容中推理出额定的事实。上面是基于RDF图的推理例程:

   String rules = "[rule: (?p :zhizhang ?c)(?a :leader ?p) -> (?a :shuyu ?c)]";        Reasoner reasoner = new GenericRuleReasoner(Rule.parseRules(rules));        InfModel inf = ModelFactory.createInfModel(reasoner, onlineModel);        Iterator list = inf.listStatements(null, null, (RDFNode)null);        System.out.println("推理后");        while (list.hasNext()) {            System.out.println(" - " + PrintUtil.print(list.next()));        }output:- (:baimeiyingwang :shuyu :mingjiao) - (:weifuwang :shuyu :mingjiao) - (:baimeiyingwang :leader :zhangwuji) - (:zhangwuji :zhizhang :mingjiao) - (:weifuwang :leader :zhangwuji)

咱们基于构建的RDF图定义了一条规定:"[rule: (?p :zhizhang ?c)(?a :leader ?p) -> (?a :shuyu ?c)]"其含意是若A执掌明教,且他是B的领导,那么B属于明教。有了RDF图模型和规定,咱们通过创立InfModel将二者绑定在一起,InfModel会根据咱们定义的规定,利用RDF图中已有的资源和属性进行推理,进而失去新的事实。如上例中,通过推理失去了<韦幅王,属于,明教>和<白眉鹰王,属于,明教>两个新的事实。

点击关注,第一工夫理解华为云陈腐技术~