3

我刚刚开始使用名为 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中有一个叫做“工作流”的概念,另一个RDF中有一个叫做“用户”的概念,我怎样才能找到这两者之间的关系?

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

4

2 回答 2

4

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

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

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

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

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

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

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

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

我们正在询问基于图书馆本体的假想图,其中包含具有属性 hasName 的概念书。hasAuthor 的范围是 Author 概念的实例。Author 概念有属性 hasName 表示小说家的名字。这样的查询将返回带有作者姓名的所有书籍的列表。希望这将帮助您在您的案例中应用示例。

另外,考虑学习SPARQL 规范

于 2012-04-16T18:38:27.447 回答
1

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

SELECT ?domain ?property ?range
WHERE{  
       ?property rdf:type owl:ObjectProperty .
       ?property rdfs:range ?range .
       ?property rdfs:domain ?domain
     }
于 2016-01-27T11:57:13.173 回答