查询SPARQL中关系链中的资源

时间:2013-07-30 22:59:11

标签: rdf sparql

我是SPARQL的新手,我正试图以SQL连接方式从三元组中获取一些结果。

e.g。我正在寻找某个图像所属的对象的ID,以及该对象的作者的ID,等等。

RDF关系定义如下:

<image> <isResourceOf> <object>
<person> <isAuthorOf> <object>

我试过了:

SELECT ?o ?a from <#ri> 
WHERE {
  {<myns:myImageID> <myns:isResourceOf> ?o}
  UNION
  {?a <myns:isAuthorOf> ?o}
}

但这会抓住所有作者,因为两个?o变量没有绑定。

我如何才能匹配第一场比赛的作者?

由于

编辑:

更完整的例子:

PREFIX aic: <http://mydomain.org/definitions/1.0/fedora/3#>

SELECT *
WHERE {
  <info:fedora/AICTEST:DOResImg-G38562> aic:isResourceOf ?o . 
  ?a aic:isAuthorOf ?o .
}

没有结果。

SELECT *
WHERE {
  <info:fedora/AICTEST:DOResImg-G38562> aic:isResourceOf ?o . 
}

结果(CSV):

"o"
AICTEST:DOArtObj-1946.479

有了这个:

SELECT *
WHERE {
  ?a aic:isAuthorOf ?o .
}

结果:

"a","o"
info:fedora/AICTEST:DOAgent-35729,info:fedora/AICTEST:DOArtObj-1946.479
info:fedora/AICTEST:DOAgent-35729,AICTEST:DOObjSet-1946.494

3 个答案:

答案 0 :(得分:3)

您在SQL中称为连接的内容只是表示为SPARQL中的基本图形模式列表。不需要UNION

 SELECT ?o ?a 
 WHERE { 
         <myns:myImageId> <myns:isResourceOf> ?o .
         ?a <myns:isAuthorOf> ?o .
 }

这就是它的全部。考虑SPARQL的方法是在数据上指定“图形模板”。与模板完全匹配的所有内容都是查询的结果。因此,上述查询将为您提供<myns:myImageId>是(= ?o)资源的所有内容,并为每个内容提供所有作者(?a)。

答案 1 :(得分:2)

此问题重复http://answers.semanticweb.com//questions/23912/fetching-chained-relationships-with-sparql-mulgara

正如我在那里所说的那样,我强烈怀疑原始查询中的命名空间前缀定义有问题,并且可能在您的简化版本中也有问题,因为如果cURI不是角括号包装你会遇到错误

我建议你向我们提供完整的信息;否则,我们将无法提供有用的建议。

答案 2 :(得分:1)

我设法让正确的关系链起作用:

PREFIX aic: <http://mydomain.org/definitions/1.0/fedora/3#>
PREFIX fedora-rels-ext: <info:fedora/fedora-system:def/relations-external#>

SELECT ?o ?a ?p ?s
FROM <#ri>
WHERE {
  <info:fedora/AICTEST:DOResImg-G38562> aic:isResourceOf ?o . 
  OPTIONAL { 
    ?a aic:isAuthorOf ?o .
    OPTIONAL { 
      ?p aic:isBirthplaceOf ?a 
    } . 
  } . 
  OPTIONAL { 
    ?o fedora-rels-ext:isPartOf ?s .
  }
}

结果(CSV):

"o","a","p","s"
info:fedora/AICTEST:DOArtObj-1946.479,info:fedora/AICTEST:DOAgent-35729,info:fedora/AICTEST:DOPlace-Meissen,AICTEST:DOObjSet-1946.494