【发布时间】:2016-10-08 00:01:06
【问题描述】:
例如为了说明问题,我需要在dbpedia中查询sparql中的一些公司,并获取他们的主页。
其中一些公司有网站,而其他公司有,所以我们必须在 sparql 可选子句中查询,对吗?
为了在我的查询中获取地址,我将其写在可选子句中,如下所示:
...
optional {?company foaf:homepage ?website}
但并不是所有的三元组都使用 foaf:homepage URI 存储网站地址,其中一些三元组使用 dbp:homepage 并且前面的子句如下:
...
optional {?company dbp:homepage ?website}
问题是如何使用 UNION 来获取这两个子句之间的互补数据?
在 dbpedia 中查询人员数据时也会出现同样的问题,例如查询出生日期:
- 并非所有人在 dpbedia 中都有生日字面值。
- 有些人的生日在 dbo:birthDate
- 有些人的生日在 dbp:birthDate
再次,我们需要在可选子句中查询并且需要补充/联合日期。 为了解决这个问题,查询应该是这样的:
optional { {?person dbp:birthDate ?birthdate } union {?person dbo:birthDate ?birthdate} }
或如下:
where { {optional { ?person dbp:birthDate ?birthdate }} union {optional {?person dbo:birthDate ?birthdate}}}
我想我已经接近了,但是我没有成功......直到现在;)
请问如何解决这个问题?
【问题讨论】:
-
您是否考虑过可选的 { ?company (foaf:homepage | dbp:homepage) ?website}
-
问题是属性的某些偏好是否应该只显示一个值。这需要一些 IF...ELSE 模式和/或 COALESCE。