如何写(union里面的可选子句)或(带有union子句的选项)?

时间:2016-06-07 22:13:16

标签: union sparql dbpedia

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

其中一些公司有一个网站,而其他公司确实有,所以我们必须在sparql中查询可选条款吗?

所以为了在我的查询中获取地址,我将它写在Optional子句中,如下所示:

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

然而并非所有三元组都使用foaf:homepage URI存储网站地址,其中一些三元组使用dbp:homepage,前一条款如下:

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

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

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

  • 并非所有人都在dpbedia中生育了字面值。
  • 有些人在dbo生日:birthDate
  • 有些人在dbp:birthDate
  • 中生日

我们需要在Optional子句中查询并需要补充/联合日期。 解决这个问题的查询应该是:

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

或如下:

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

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

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

1 个答案:

答案 0 :(得分: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?,了解如何使用绑定同一变量的多个可选块以及类似解决方案时遇到的困难之一。