简体   繁体   English

RDF + OWL推理

[英]RDF + OWL reasoning

Let's suppose I have an RDF data about Socrates. 假设我有关于Socrates的RDF数据。 The data is shown below 数据如下所示

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

To check whether Socrates is mortal I have a request 要检查苏格拉底是否是凡人,我有一个要求

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

Then I have a filter on "Socrates" and "mortal" and if result is not empty, then Socrates is mortal. 然后,我对“苏格拉底”和“凡人”有一个过滤器,如果结果不为空,那么苏格拉底就是凡人。

It works fine, but my teacher asks to add OWL information. 它工作正常,但我的老师要求添加OWL信息。

For example, if we have the next data 例如,如果我们有下一个数据

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

My approach does not work, because we have additional step in the chain. 我的方法行不通,因为我们在链中还有其他步骤。

I need to add an OWL static data here and implement a request for arbitrary number of steps in the chain. 我需要在此处添加OWL静态数据,并实现对链中任意数量步骤的请求。

What are my next steps? 我下一步要做什么?

If we turn your example data into actual RDF (using Turtle syntax), you'd get something like this: 如果我们将示例数据转换为实际的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 .

If you upload this data into an RDF database (such as RDF4J, Jena, GraphDB, Stardog, Blazegraph, or a host of other options), you can use the following SPARQL query: 如果将此数据上载到RDF数据库(例如RDF4J,Jena,GraphDB,Stardog,Blazegraph或其他许多选项),则可以使用以下SPARQL查询:

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

This checks if :socrates is of a type that is either :Mortal , or a (direct or indirect) subclass of :Mortal . 这用来检查:socrates是一类是任一:Mortal ,或其中的(直接或间接)的子类:Mortal It returns true if Socrates is a mortal, false otherwise. 如果苏格拉底是凡人,则返回true ,否则返回false You don't even need a reasoner for this, you can just use the expressivity of the query language. 您甚至不需要推理机,只需使用查询语言的表现力即可。

If your RDF database supports basic RDFS reasoning, you can simplify your query even further: 如果您的RDF数据库支持基本的RDFS推理,则可以进一步简化查询:

ASK WHERE { :socrates rdf:type :Mortal }

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

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