繁体   English   中英

RDF + OWL推理

[英]RDF + OWL reasoning

假设我有关于Socrates的RDF数据。 数据如下所示

subject, predicate, object
man, being, mortal
Socrates, being, man

要检查苏格拉底是否是凡人,我有一个要求

SELECT *
FROM RDFData t1
JOIN RDFData t2
ON t1.subject = t2.object

然后,我对“苏格拉底”和“凡人”有一个过滤器,如果结果不为空,那么苏格拉底就是凡人。

它工作正常,但我的老师要求添加OWL信息。

例如,如果我们有下一个数据

subject, predicate, object
man, being, mortal
Socrates, being, Greek
Greek, being, man

我的方法行不通,因为我们在链中还有其他步骤。

我需要在此处添加OWL静态数据,并实现对链中任意数量步骤的请求。

我下一步要做什么?

如果我们将示例数据转换为实际的RDF(使用Turtle语法),则会得到以下内容:

@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix : <http://example.org/> .

:socrates rdf:type :Greek .
:Man rdfs:subClassOf :Mortal .
:Greek rdfs:subClassOf :Man .

如果将此数据上载到RDF数据库(例如RDF4J,Jena,GraphDB,Stardog,Blazegraph或其他许多选项),则可以使用以下SPARQL查询:

ASK WHERE { :socrates rdf:type/rdfs:subClassOf* :Mortal }

这用来检查:socrates是一类是任一:Mortal ,或其中的(直接或间接)的子类:Mortal 如果苏格拉底是凡人,则返回true ,否则返回false 您甚至不需要推理机,只需使用查询语言的表现力即可。

如果您的RDF数据库支持基本的RDFS推理,则可以进一步简化查询:

ASK WHERE { :socrates rdf:type :Mortal }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM