Sparql 骨料特性

Sparql 骨料特性,sparql,jena,dbpedia,fuseki,Sparql,Jena,Dbpedia,Fuseki,我正在根据一些DBpedia数据开发自己的Fuseki端点。 我不知道如何聚合与单个资源相关的属性 选择名称?网站?摘要?流派?图片 在哪里{ 值?s{} ?s foaf:名称?名称; 抽象?抽象。 可选{s dbo:genre?genre}。 可选的{s dbp:website?website}。 可选的{s dbo:image?image}。 过滤语言匹配(语言(?摘要),“en”) } SPARQL端点: 此查询返回2个匹配结果。它们的不同之处在于dbo:genre值。有一种方法可以查询

我正在根据一些DBpedia数据开发自己的Fuseki端点。 我不知道如何聚合与单个资源相关的属性

选择名称?网站?摘要?流派?图片
在哪里{
值?s{}
?s foaf:名称?名称;
抽象?抽象。
可选{s dbo:genre?genre}。
可选的{s dbp:website?website}。
可选的{s dbo:image?image}。
过滤语言匹配(语言(?摘要),“en”)
}
SPARQL端点:

此查询返回2个匹配结果。它们的不同之处在于
dbo:genre
值。有一种方法可以查询知识库,并使用
类型列表检索单个结果

是的,GROUP_CONCAT()函数就是您想要的

SELECT ?name ?website ?abstract (GROUP_CONCAT(?genre,',') AS ?genres) ?image
WHERE{
  <http://dbpedia.org/resource/Attack_Attack!> a dbo:Band ;
       foaf:name ?name;
      dbo:abstract ?abstract .
  OPTIONAL{   <http://dbpedia.org/resource/Attack_Attack!> dbo:genre ?genre } .
  OPTIONAL{   <http://dbpedia.org/resource/Attack_Attack!> dbp:website ?website} .
  OPTIONAL{   <http://dbpedia.org/resource/Attack_Attack!> dbo:image ?image} .
FILTER LANGMATCHES(LANG(?abstract ), "en")

}
选择?名称?网站?摘要(GROUP_CONCAT(?流派,,')作为流派?图片
在哪里{
dbo:Band;
foaf:名称?名称;
抽象?抽象。
可选{dbo:genre?genre}。
可选{dbp:website?website}。
可选{dbo:image?image}。
过滤语言匹配(语言(?摘要),“en”)
}

@chrisis的查询在基于Virtuoso的dbpediasparql端点上运行良好

但是,如果您正在使用Jena Fuseki,则应使用更一致的语法:

前缀dbo:
前缀dbp:
挑选
名称
(样本(?网站)作为样本网站)
(样本(?摘要)作为样本(?摘要)
(样本(?图像)作为样本_图像)
(组_CONCAT(?体裁;分隔符=',')作为?体裁)
在哪里{
值(?s){()}
?s foaf:名称?名称;
抽象?抽象。
可选{s dbo:genre?genre}。
可选的{s dbp:website?website}。
可选的{s dbo:image?image}。
过滤语言匹配(语言(?摘要),“en”)
}按名称分组
与@chrisis的查询不同之处在于:

  • 由于
    GROUP\u CONCAT
    是一个聚合函数,因此它只能与
    GROUP BY
    一起使用
  • 由于使用了
    GROUP BY
    ,所有非分组变量应聚合(例如通过
    SAMPLE
  • GROUP\u CONCAT
    语法略有不同


在Fuseki中,投影中的这些
AS
实际上是多余的:请参见和注释。

第一个三元组模式是不必要的,因为它表示没有变量的属性RDF三元组。此外,
可用于使查询更加紧凑,请参见我编辑的查询。AS不是多余的。它是由规范强制执行的。如果您试图编写一个法律查询,它应该包括在内。仅仅因为某些端点可能会处理非法语法并不是省略它的好理由。