2016-06-07 59 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?有多個可選塊綁定相同的變量,以及類似的解決方案。