面试官:说一下Jena推理
摘要:本文介绍了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图中已有的资源和属性进行推理,进而得到新的事实。如上例中,通过推理得到了<韦幅王,属于,明教>和<白眉鹰王,属于,明教>两个新的事实。
面试官:说一下Jena推理的更多相关文章
- 面试官再问你 HashMap 底层原理,就把这篇文章甩给他看
前言 HashMap 源码和底层原理在现在面试中是必问的.因此,我们非常有必要搞清楚它的底层实现和思想,才能在面试中对答如流,跟面试官大战三百回合.文章较长,介绍了很多原理性的问题,希望对你有所帮助~ ...
- 面试官:兄弟,说说Java的static关键字吧
读者乙在上一篇我去系列文章里留言说,"我盲猜下一篇标题是,'我去,你竟然不知道 static 关键字'".我只能说乙猜对了一半,像我这么有才华的博主,怎么可能被读者猜中了心思呢,必 ...
- 每日一问:面试结束时面试官问"你有什么问题需要问我呢",该如何回答?
面试结束时面试官问"你有什么问题需要问我呢",该如何回答?
- 面试官的七种武器:Java篇
起源 自己经历过的面试也不少了,互联网的.外企的,都有.总结一下这些面试的经验,发现面试官问的问题其实不外乎几个大类,玩不出太多新鲜玩意的.细细想来,面试官拥有以下七种武器.恰似古龙先生笔下的武侠世界 ...
- 关键词:ACM & 大小端 & 面试官
关于“ACM” fender0107401 :面试了一个在ACM拿过奖的人 我问了他几个问题: 读取数组中的一个元素,计算复杂度是多少,回答不清楚. 往链表里面存一个数,不排序的情况下,计算复杂度是多 ...
- Android开发面试经——6.常见面试官提问Android题②(更新中...)
版权声明:本文为寻梦-finddreams原创文章,请关注:http://blog.csdn.net/finddreams 关注finddreams博客:http://blog.csdn.net/fi ...
- Android开发面试经——5.常见面试官提问Android题①
版权声明:本文为寻梦-finddreams原创文章,请关注:http://blog.csdn.net/finddreams 关注finddreams博客: http://blog.csdn.net/f ...
- 书评<<剑指offer 名企面试官精讲典型编程题>>
前前后后阅读了一周, 感慨很多, 面试考察的是一个人的综合能力, 这一点从面试官的角度去解读, 确实对面试的理解更立体. *) 具体考察的点1) 扎实的基础2) 高质量的代码3) 清晰的思路4) ...
- 我是面试官--"自我介绍"
工作10余年,经历过很多次面试,也面试了N多人.这些年来,已经有好些位朋友(或同事)与我聊起相关话题,涉及面试,更关乎职业生涯规划.感触颇多,就借助自媒体的浪潮,与更多的程序员一起共谈面试经历,希望可 ...
- 一个资深java面试官的“面试心得”
在公司当技术面试官几年间,从应届生到工作十几年的应聘者都遇到过.先表达一下我自己对面试的观点: 1.笔试.面试去评价一个人肯定是不够准确的,了解一个人最准确的方式就是“路遥知马力,日久见人心”.通过一 ...
随机推荐
- 人工智能AI浪潮的掀起,打工人何去何从?
感谢你阅读本文 自从2022年11月30日OpenAI公司推出了ChatGPT,至今一年了,而这一年国内也发生了天翻地覆的变化,各大厂商纷纷推出了自己的大模型和解决方案,例如百度的文心一言,阿里的通义 ...
- 【前端开发】基于vue+elemnt-ui流程图设计器解决方案
前言 越来越多的企业都在研发低代码平台,其中流程引擎是核心之一,拥有一个可以拖拽设计审批流程的设计器是相当重要的. 介绍 审批流程设计器是一种工具,用于创建和设计审批流程.它通常是一个可视化的设计器界 ...
- OI 模板合集
update on 2023.10: 这篇博客的原本意义是 方便直接复制 / 快速复习,但部分原有代码存在本质错误,完全没有起到这个作用,故重构. 由于折叠代码块在某些 markdown 编辑器中不支 ...
- 我与Vue.js 2.x 的七年之痒
--过去日子的回顾(这是个副标题) --其实这是篇广告软文(这是个副副标题) 以下是一些牢骚和感悟,不感兴趣的可以滑倒最下面,嘻嘻. 每每回忆起从前,就感觉时间飞逝,真切的感受到了那种课本中描述的白驹 ...
- P8368 [LNOI2022] 串 题解
题目链接 题目分析 题目要求我们构造一个最长的 \(T\) 序列,我们首先从每个 \(T_i\) 入手,思考如何安排才能合法. 容易观察到对于每个 \(T_i\),合法的 \(T_{i-1}\) 有两 ...
- 栈与队列应用:逆波兰计算器(逆波兰表达式;后缀表达式)把运算符放到运算量后边 && 中缀表达式转化为后缀表达式
1 //1.实现对逆波兰输入的表达式进行计算如(2-1)*(2+3)= 5 就输入2 1 - 2 3 + * //先把2 1 压栈 遇到-弹栈 再把2 3压进去 遇到+弹栈 最后遇到*弹栈 2 //2 ...
- Ubuntu 20.04 使用 vlmscd 搭建 KMS 服务端
前言 为了内网系统激活需要,搭建此客户端. 1. 下载二进制文件 打开项目官网:https://github.com/Wind4/vlmcsd 下载项目二进制文件: 选择对应系统和架构 选择性能较好的 ...
- 平台工程时代的 Kubernetes 揭秘:2023年生产状况报告深度剖析
Kubernetes 在生产环境中的复杂性已经成为常态,在2023年这个平台工程盛行的时代,容器管理的最大亮点可能在于其灵活性,然而在运维政策和治理等方面仍然存在诸多挑战.八年过去了,在生产环境中使用 ...
- GPTs 初体验 - 1 分钟就能创建一个自己的 ChatGPT?
就在 11.10 号早上,ChatGPT 已经偷摸的把GPTs功能,开放给所有尊贵的 Plus 用户了. 随着这波的功能开放,界面也是改了不少.点击左侧的 Explore 或者左下角的用户处,就可以直 ...
- Vue05-Vuex
01. 什么是状态管理 在开发中,我们的应用程序需要处理各种各样的数据,这些数据需要保存在我们应用程序的某一个位置,对于这些数据的管理我们就称之为 状态管理. 在Vue开发中,我们使用组件化的开发方式 ...