跳至內容

SPARQL/聯合查詢

來自 Wikibooks,開放世界的開放書籍

聯合查詢

[編輯 | 編輯原始碼]

聯合查詢是指能夠獲取來自多個不同來源的資訊並提供解決方案的能力。

其基本構建塊是在查詢執行期間,一個查詢能夠向另一個 SPARQL 端點發出查詢。

聯合查詢比較 Wikidata 和英國議會資料庫,以顯示英國議會選區位置超過 10 公里的差異(來源 Wikidata:Wikidata:狀態更新/2019 06 10

# compare lat/long of Parliament and Wikidata constituency records
#defaultView:Map{"hide":["?line"]}
PREFIX parliament:<https://id.parliament.uk/schema/>

SELECT DISTINCT ?constituency ?parlcoord ?item ?itemLabel ?wdcoord ?dist ?line WHERE {
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
  SERVICE <https://api.parliament.uk/sparql> 
    { ?constituency parliament:constituencyGroupHasConstituencyArea ?area .
      ?area parliament:latitude ?lat . ?area parliament:longitude ?long . 
      bind(SUBSTR(str(?constituency),26) as ?parlid) . }
  BIND(concat("Point(",str(?long)," ",str(?lat),")") as ?parlcoord) 
  # get constituencies from Parliament with coordinates
  ?item wdt:P6213 ?parlid . ?item wdt:P31 wd:Q27971968 . ?item wdt:P625 ?wdcoord . 
  # now get them from Wikidata with coordinates
  BIND(geof:distance(?parlcoord, ?wdcoord) as ?dist) . filter (?dist >= 10)
  # now find out the distance (in kms)
  ?item p:P625 ?statementnode. ?statementnode psv:P625 ?valuenode.
  ?valuenode wikibase:geoLatitude ?wikilat . ?valuenode wikibase:geoLongitude ?wikilon.
  BIND(CONCAT('LINESTRING (', STR(?wikilon), ' ', STR(?wikilat), ',', STR(?long), ' ', STR(?lat), ')') AS ?str) .
  BIND(STRDT(?str, geo:wktLiteral) AS ?line) 
}

試試看!

SPARQL 聯合查詢端點

[編輯 | 編輯原始碼]

並非所有端點都允許 Wikidata 查詢服務使用。請參閱 SPARQL 聯合查詢端點 上的允許端點列表。

您可以在 Wikidata:SPARQL 聯合查詢輸入 中提名更多端點。

參考文獻

[編輯 | 編輯原始碼]


華夏公益教科書