如何写(union inside optional clause)或(optionals with union clause)?

how to write (union inside optional clause) or (optionals with union clause )?

例如为了说明问题,我需要在dbpedia中查询sparql中的一些公司,并获取他们的主页。

这些公司有的有网站,有的有,所以一定要在sparql optional clause里面查询对吧?

所以为了在查询中获取地址,我将其写在可选子句中,如下所示:

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

但并不是所有的三元组都使用foaf:homepage URI 来存储网站地址,其中一些三元组使用了dbp:homepage,前面的条款如下:

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

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

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

再次我们需要在可选子句中查询并且需要 complement/union 日期。 要解决这个问题,查询应该是这样的:

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

或如下:

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

我想我很接近,但是我没有成功...直到现在 ;)

请问如何解决这个问题?

在这种情况下:

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? 对具有绑定相同变量的多个 optional 块以及类似解决方案。