获取relYear或在dbpedia单曲数据中发布而不记录重复

时间:2018-03-31 22:22:59

标签: sparql rdf dbpedia

Here是以下查询的浏览输出,试图获取广告牌前100名中的单曲:

PREFIX prop: <http://dbpedia.org/property/>
PREFIX ont: <http://dbpedia.org/ontology/>

SELECT DISTINCT ?page, ?artist, ?relYear, ?released, ?runTime WHERE {
  ?page dct:subject dbc:Billboard_Hot_100_number-one_singles .
  OPTIONAL {?page prop:artist ?artist}.
  OPTIONAL {?page prop:relyear ?relYear}.
  OPTIONAL {?page prop:released ?released}.
  OPTIONAL {?page ont:runtime ?runTime}
}

我把relYear和释放因为有些单身有一个,有些有另一个,有些有两个,有些没有。

如果查看输出,它会复制行:一行是relYear,另一行是已释放。我想要像SQL COALESCE(released, relYear)这样的东西,即在一行中给我存在的第一个元素(release,relYear)。

我该怎么做?

P.S。我对艺术家和音乐艺术家有同样的问题,等等,所以行最终会像疯了一样倍增。

P.P.S。看着this,但没有用。

1 个答案:

答案 0 :(得分:2)

基本上,您已经知道答案,请使用COALESCE

PREFIX prop: <http://dbpedia.org/property/>
PREFIX ont: <http://dbpedia.org/ontology/>

SELECT DISTINCT ?page ?artist (coalesce(?relYear, ?released) as ?releaseYear) ?runTime WHERE {
  ?page dct:subject dbc:Billboard_Hot_100_number-one_singles .
  OPTIONAL {?page prop:artist ?artist}.
  OPTIONAL {?page prop:relyear ?relYear}.
  OPTIONAL {?page prop:released ?released}.
  OPTIONAL {?page ont:runtime ?runTime}
}

但是,我猜你已经发现,同一个单曲可以有多个版本,由不同的艺术家完成并在不同的版本中完成,因此,你可能会为同一个版本获得多行。作为一个极端的例子,请看Total_Eclipse_of_the_Heart

+------------------------------+--------------------------------+-------------+---------+
|             page             |             artist             | releaseYear | runTime |
+------------------------------+--------------------------------+-------------+---------+
| :Total_Eclipse_of_the_Heart  | "Bonnie Tyler"^^rdf:langString |        1983 |   180.0 |
| :Total_Eclipse_of_the_Heart  | "Nicki French"^^rdf:langString |        1983 |   180.0 |
| :Total_Eclipse_of_the_Heart  | "Bonnie Tyler"^^rdf:langString |        1995 |   180.0 |
| :Total_Eclipse_of_the_Heart  | "Nicki French"^^rdf:langString |        1995 |   180.0 |
| :Total_Eclipse_of_the_Heart  | "Bonnie Tyler"^^rdf:langString |        2012 |   180.0 |
| :Total_Eclipse_of_the_Heart  | "Nicki French"^^rdf:langString |        2012 |   180.0 |
| :Total_Eclipse_of_the_Heart  | "Bonnie Tyler"^^rdf:langString |        1983 |   230.0 |
| :Total_Eclipse_of_the_Heart  | "Nicki French"^^rdf:langString |        1983 |   230.0 |
| :Total_Eclipse_of_the_Heart  | "Bonnie Tyler"^^rdf:langString |        1995 |   230.0 |
| :Total_Eclipse_of_the_Heart  | "Nicki French"^^rdf:langString |        1995 |   230.0 |
| :Total_Eclipse_of_the_Heart  | "Bonnie Tyler"^^rdf:langString |        2012 |   230.0 |
| :Total_Eclipse_of_the_Heart  | "Nicki French"^^rdf:langString |        2012 |   230.0 |
| ...                          | ...                            |         ... |     ... |
+------------------------------+--------------------------------+-------------+---------+

你可以在这里做一些group by的亲属,至少每个艺术家只能获得一行,例如结合group_concatsample