2012-04-16 58 views
2

我刚刚开始使用名为MyExperiment的服务的SparQL端点。 我对语义网完全陌生。在rdf中为SparQL寻找关系

服务端点URL是这样的: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中有一个叫做“工作流”的概念,另一个RDF中有一个叫做“用户”的概念,我怎么能找到这两者之间的关系?

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

回答

4

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

将WHERE子句看作需要为特定实例出现在结果集中而需要满足的三元主语谓词对象语句集合。

关于你的第一个问题。这是查找图中路径的任务。如果这两个概念属于单个或相关(如简称)形成良好的本体,一些提示可以通过类似这样的查询玩弄给予(把你提供的示例为基础):

SELECT DISTINCT ?prop, ?range WHERE { ?workflow a mecontrib:Workflow . 
             ?workflow ?prop ?value . 
             ?prop rdfs:range ?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。 hasAuthor的范围是作者概念的实例。作者的概念有属性hasName表示小说家的名字。这样的查询将返回具有作者姓名的所有书籍的列表。希望这会帮助你在你的案例中应用示例。

另外,考虑从SPARQL specs学习。

1

SPARQL查询来获取所有关系到RDF图为:

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