知识推理之基于jena的知识推理(三)

举报
北纬30度 发表于 2021/07/19 09:53:06 2021/07/19
【摘要】 本文介绍了jena的推理子系统,并构建了一个简单的RDF图。基于该RDF图,我们搭建了一个Jena推理引擎,并进行自动化推理。

jena推理简介

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图中已有的资源和属性进行推理,进而得到新的事实。如上例中,通过推理得到了<韦幅王,属于,明教>和<白眉鹰王,属于,明教>两个新的事实。

想了解更多的AI技术干货,欢迎上华为云的AI专区,目前有AI编程Python等六大实战营供大家免费学习。(六大实战营link:http://su.modelarts.club/qQB9)

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200