在SparQL的rdf中查找关系

时间:2012-04-16 15:24:07

标签: rdf sparql

我刚刚开始使用名为MyExperiment的服务的SparQL终点。 而且我对语义网很新。

服务端点网址为:http://rdf.myexperiment.org/sparql

基本上我已经弄明白了如何进行基本查询。就像通过以下查询列出某些对象(例如工作流程)一样:

BASE <http://www.myexperiment.org/> 
PREFIX myexp: <http://www.myexperiment.org/> 
PREFIX mecontrib: <http://rdf.myexperiment.org/ontologies/contributions/> 
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
SELECT ?workflow WHERE { ?workflow rdf:type mecontrib:Workflow} 

我有两个问题。

  1. 我需要找到RDF中不同概念之间的关系。就像我知道RDF中有一个名为“Workflow”的概念,在另一个RDF中有一个名为“User”的概念,我怎样才能找到这两者之间的关系?

  2. 如何创建查询以混合两个或更多概念。就像我想看到用户名创建的工作流列表或查找用户创建的工作流?

2 个答案:

答案 0 :(得分:4)

Sparql查询的WHERE子句是一种图形模式,由一个或多个通过变量或空白节点连接的三元组组成(如果值不使用/不重要)。此图表针对triplet存储进行检查,尝试绑定已使用的变量,从而返回结果集。

将WHERE子句视为一组三元组主谓词 - 对象语句,需要满足特定实例才能出现在结果集中。

关于你的第一个问题。这是在图中查找路径的任务。如果这两个概念都属于单个或相关(例如引用的)格式良好的本体,则可以通过使用这样的查询(以您提供的示例为基础)来给出一些提示:

SELECT DISTINCT ?prop, ?range WHERE { ?workflow a mecontrib:Workflow .
                                       ?workflow ?prop ?value .
                                       ?prop rdfs:range ?range }

在其中我们要求列出Workflow概念及其范围的所有可用的不同谓词(可以被视为属性)。 Range定义属性值的类型(参见OWL spec)。通过将范围与所需类型进行比较,可以找到将两个概念彼此相关的属性。然而,这个公理并不总是被定义,但是当它被用于最简单的情况时,它可以用于检查某个概念是否具有将其与另一个概念相关联的属性。 此外,property pathes可用于跟踪任意长度的路径,但这仍在进行中,并且可能不受所有rdf存储的支持(请参阅link)。

因此,最简单的方法似乎是分析您正在寻找特定案例的答案的本体,而不是尝试找到一般解决方案。

关于第二个问题。只需在WHERE子句中使用多个三元组模式。请考虑以下示例:

SELECT ?book, ?authorName FROM <http://myrdfgraph>
WHERE { ?book a Book .
        ?book hasAuthor ?author
        ?author hasName ?authorName }

我们要求基于库本体的虚构图,其中包含具有属性hasName的概念Book。 hasAuthor的范围是作者概念的实例。而作者概念的属性hasName表示小说家的名字。这样的查询将返回所有具有编写者名称的书籍的列表。希望这可以帮助您在您的案例中应用示例。

另外,请考虑从SPARQL specs学习。

答案 1 :(得分:1)

将所有关系放入RDF图的SPARQL查询是:

SELECT ?domain ?property ?range
WHERE{  
       ?property rdf:type owl:ObjectProperty .
       ?property rdfs:range ?range .
       ?property rdfs:domain ?domain
     }