当前位置:网站首页>Jena基于OWL的默认推理查询
Jena基于OWL的默认推理查询
2022-07-01 06:33:00 【凉茶冰】
目录
一些背景
通过Jena的API,我们可以将RDF的.nt文件导入到对应TDB存储中,然后使用相关API进行三元组的查询,但是这时候的查询只能对存储中存在的三元组数据进行查询,是不包含推理的。
这篇文章关于Jena的推理讲的比较清楚。
这篇文章是基础,主要介绍RDF/RDFS/OWL之间的关系和前世今生,只有了解这些,才能更好的理解Jena的推理。
简单来说,RDF是实际三元组数据的存储的描述规范,但是这只能是数据组织的规范,不能描述数据,因此又出现了RDFS,RDFS我们可以简单理解成描述语言;简而言之,可以简单理解为:RDF是数据库里实际数据,RDFS是数据库表结构说明。但是RDFS对于关系的表达能力还是不足,后来又出现了OWL,OWL是RDFS的补充和完善。
OWL文件也是我们常说的本体描述文件,对三元组的本体、关系进行描述说明的文件。 通过这个本体描述,结合API我们就可以进行推理查询。
第一篇关于推理的文章中实际上是有关于推理的演示的,但是它是基于Fuseki来实现的,通过Fuseki配置相关配置文件,开启推理器,指定TDB存储位置,然后进行查询,就能推理查询出实际不存在的三元组数据。
我重点记录是的通过API代码方式进行查询的样例。
数据导入
public static void loadRdfData(){
String directory = "D:\\jena\\test" ;
String ntFile = "D:\\kg_demo_movie.nt";
Dataset dataset = TDBFactory.createDataset(directory);
Model model = dataset.getNamedModel("kgMovie");
RDFDataMgr.read(model,ntFile);
checkModel(dataset);
dataset.close();
}
public static void checkModel(Dataset dataset){
Iterator<String> names = dataset.listNames();
String name = null;
while (names.hasNext())
{
name = names.next();
System.out.println(name);
}
}
public static void exampleQuery(Model model){
String sparqlQueryString = "PREFIX : <http://www.kgdemo.com#> \n" + "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> \n" + "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\n" + "SELECT ?x ?p ?o WHERE {\n" + "?x :movieTitle '功夫'.\n" + "?x ?p ?o.\n" + "}" ;
Query query = QueryFactory.create(sparqlQueryString) ;
QueryExecution qexec = QueryExecutionFactory.create(query, model) ;
try {
ResultSet results = qexec.execSelect() ;
for ( ; results.hasNext() ; )
{
QuerySolution soln = results.nextSolution() ;
System.out.println(soln.get("x")+" "+soln.get("p")+" "+soln.get("o"));
}
} finally { qexec.close() ; }
}其中exampleQuery是一个公共方法,封装了一个query查询,下面的普通查询和推理查询都会用到。 推理查询相比普通查询,主要是开启了推理机。
普通查询
public static void sampleSearch(){
String directory = "D:\\jena\\test" ;
Dataset dataset = TDBFactory.createDataset(directory);
Model model = dataset.getNamedModel("kgMovie");
exampleQuery(model);
dataset.close();
}查询结果如下:

这个结果正是RDF中的数据一一对应。
推理查询
public static void reasonersSearch(){
String directory = "D:\\jena\\test" ;
String ttlFile = "D:\\movie_owl.ttl";
Dataset dataset = TDBFactory.createDataset(directory);
//RDF数据Model
Model dataModel = dataset.getNamedModel("kgMovie");
//owl本体描述schema
Model schema = RDFDataMgr.loadModel(ttlFile, Lang.TTL);
//添加推理机
Reasoner reasoner = ReasonerRegistry.getOWLReasoner();
reasoner = reasoner.bindSchema(schema);
//创建模型
InfModel infmodel = ModelFactory.createInfModel(reasoner, dataModel);
//查询
exampleQuery(infmodel);
dataset.close();
}结果如下:

其中hasActor是通过推理查询出来的,因为存在Person--hasActedIn-Movie这样的三元组数据,然后OWL的描述规则中hasActedIn和hasActor的关系inverseOf,如下:
### http://www.kgdemo.com#hasActedIn
:hasActedIn rdf:type owl:ObjectProperty ;
owl:inverseOf :hasActor ;
rdfs:domain :Person ;
rdfs:range :Movie .
### http://www.kgdemo.com#hasActor
:hasActor rdf:type owl:ObjectProperty ;
rdfs:domain :Movie ;
rdfs:range :Person .
### http://www.kgdemo.com#hasGenre
:hasGenre rdf:type owl:ObjectProperty ;
rdfs:domain :Movie ;
rdfs:range :Genre .所以,通过推理查询也可以将电影拥有的演员信息查询出来。
边栏推荐
- Find the original array for the inverse logarithm
- Design of sales management system for C language course (big homework)
- @Transactional的传播属性REQUIRES_NEW深入理解
- [ManageEngine] terminal management system helps Huasheng securities' digital transformation
- 微信公众号内嵌跳转微信小程序方案总结
- On whether variables are thread safe
- [ManageEngine Zhuohao] use unified terminal management to help "Eurex group" digital transformation
- MySQL data type learning notes
- 树莓派4的WiFi设置
- ESP32 ESP-IDF GPIO按键中断响应
猜你喜欢

SQL learning notes nine connections 2

On whether variables are thread safe

C language course design student information management system (big homework)

关于变量是否线程安全的问题

async 与 await

C language course set up library information management system (big homework)
![[ManageEngine Zhuohao] helps Julia college, the world's top Conservatory of music, improve terminal security](/img/fb/0a9f0ea72efc4785cc21fd0d4830c2.png)
[ManageEngine Zhuohao] helps Julia college, the world's top Conservatory of music, improve terminal security

Detailed steps for installing redis on Windows system

产品学习(三)——需求列表

Promise
随机推荐
Database objects: view learning records
async 与 await
三说 拷贝构造之禁用
MySQL learning
Application of IT service management (ITSM) in Higher Education
SQL学习笔记九种连接2
C language course design student information management system (big homework)
The code generator has eliminated the styling of xxxx js as it exceeds the max of 500kb
[enterprise data security] upgrade backup strategy to ensure enterprise data security
Find the original array for the inverse logarithm
C#如何打印輸出原版數組
C语言课设工资管理系统(大作业)
(上)苹果有开源,但又怎样呢?
JSON module
H5 web page determines whether an app is installed. If it is installed, it will jump to the summary of the scheme to download if it is not installed
C language course set up property fee management system (big work)
Several ways of gson's @jsonadapter annotation
在支付宝上买基金安全吗?哪里可以买基金
Docker 安装部署Redis
微信公众号内嵌跳转微信小程序方案总结