2016-06-07 53 views
0

为了说明这个问题,我需要在dbpedia中查询sparql中的一些公司,并获取他们的主页。如何编写(union in optional clause)或(optionals with union clause)?例如

其中有些公司有网站,而其他公司有,所以我们必须在sparql里面查询可选的子句吧?

因此要获得地址在我的查询我写的可选子句中如下:

... 
optional {?company foaf:homepage ?website} 

然而,并不是所有的三倍店使用的FOAF网站地址:首页URI,一些三元组使用DBP:首页和前面的条款将如下:

... 
optional {?company dbp:homepage ?website} 

问题是如何使用UNION获得这两个子句之间的补充数据?

  • 不是所有的人都在dpbedia生日文字值:

    同样的问题时查询在DBpedia中的人的数据,例如查询出生日期出现。

  • 一些人在DBO生日:生日
  • 一些人在DBP生日:生日

再次,我们需要在可选子句来查询,需要补充/工会的日期。 解决这个查询应该是这样的:

optional { {?person dbp:birthDate ?birthdate } union {?person dbo:birthDate ?birthdate} } 

或如下:

where { {optional { ?person dbp:birthDate ?birthdate }} union {optional {?person dbo:birthDate ?birthdate}}} 

我觉得我很近,但我没有成功...至今;)

那么请问如何解决这个问题?

+1

您是否考虑过可选{?company(foaf:homepage | dbp:homepage)?website} – chrisis

+1

问题是只有一个值应该在属性上显示一些偏好。这将需要一些IF ... ELSE模式和/或COALESCE。 – AKSW

回答

1

在这样的情况下:

optional {?company foaf:homepage ?website} 
optional {?company dbp:homepage ?website} 

您可以使用交替属性路径:

optional {?company foaf:homepage|dbp:homepage ?website} 

拥有的可与出现的难点之一的一些讨论一下Why is this SPARQL query not returning any results?有多个可选块绑定相同的变量,以及类似的解决方案。