杀死来自 SPARQL 中 1:n 关系的几乎重复的结果
kill the nearly duplicate results that came from the 1:n relations in SPARQL
是否可以在 SPARQL 查询中串联等效结果?例如,考虑以下 RDF 数据和期望的结果:
知识库:
@prefix gr:<http://purl.org/goodrelations/v1#>.
:prod_A gr:color "Red";
gr:color "Blue".
:prod_B gr:color "Green".
理想结果:
| ?prod | ?color |
|---------|-----------|
| :prod_A | Red, Blue |
| :prod_B | Green |
我看到的唯一方法是使用这样的东西:
PREFIX gr:<http://purl.org/goodrelations/v1#>
SELECT ?prod ?color
WHERE {
?prod gr:color ?color1.
OPTIONAL {
?prod gr:color ?color2.
FILTER ( ?color1 != ?color2 )
bind(concat(?color1,",",?color2) as ?color)
}
但只有当我恰好有 2 个匹配项时它才能完美运行。有没有更通用和有效的方法来做到这一点?
消除来自 1:n 关系的几乎重复的结果将非常有用。
修改为包括以下评论:
你可以试试:
PREFIX gr: <http://purl.org/goodrelations/v1#>
SELECT ?prod (GROUP_CONCAT(DISTINCT ?color; separator=',') as ?colors)
WHERE {
?prod gr:color ?color.
}
GROUP BY ?prod
可以找到示例 here。
是否可以在 SPARQL 查询中串联等效结果?例如,考虑以下 RDF 数据和期望的结果:
知识库:
@prefix gr:<http://purl.org/goodrelations/v1#>.
:prod_A gr:color "Red";
gr:color "Blue".
:prod_B gr:color "Green".
理想结果:
| ?prod | ?color |
|---------|-----------|
| :prod_A | Red, Blue |
| :prod_B | Green |
我看到的唯一方法是使用这样的东西:
PREFIX gr:<http://purl.org/goodrelations/v1#>
SELECT ?prod ?color
WHERE {
?prod gr:color ?color1.
OPTIONAL {
?prod gr:color ?color2.
FILTER ( ?color1 != ?color2 )
bind(concat(?color1,",",?color2) as ?color)
}
但只有当我恰好有 2 个匹配项时它才能完美运行。有没有更通用和有效的方法来做到这一点?
消除来自 1:n 关系的几乎重复的结果将非常有用。
修改为包括以下评论:
你可以试试:
PREFIX gr: <http://purl.org/goodrelations/v1#>
SELECT ?prod (GROUP_CONCAT(DISTINCT ?color; separator=',') as ?colors)
WHERE {
?prod gr:color ?color.
}
GROUP BY ?prod
可以找到示例 here。