1

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

例如,我正在查找某个图像所属的对象的 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
4

3 回答 3

3

您在 SQL 中所谓的连接只是简单地表示为 SPARQL 中基本图形模式的列表。否UNION是必要的:

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

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

于 2013-07-30T23:33:35.443 回答
2

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

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

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

于 2013-08-01T16:51:54.033 回答
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
于 2013-08-04T14:18:47.963 回答