我刚刚开始使用名为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}
我有两个问题。
我需要找到RDF中不同概念之间的关系。就像我知道RDF中有一个名为“Workflow”的概念,在另一个RDF中有一个名为“User”的概念,我怎样才能找到这两者之间的关系?
如何创建查询以混合两个或更多概念。就像我想看到用户名创建的工作流列表或查找用户创建的工作流?
答案 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
}