Sparql 骨料特性
我正在根据一些DBpedia数据开发自己的Fuseki端点。 我不知道如何聚合与单个资源相关的属性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值。有一种方法可以查询
选择名称?网站?摘要?流派?图片
在哪里{
值?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不是多余的。它是由规范强制执行的。如果您试图编写一个法律查询,它应该包括在内。仅仅因为某些端点可能会处理非法语法并不是省略它的好理由。