SPARQL 查詢說明

一、SPARQL語法簡介

SPARQL 是一種用於RDF上的查詢語言,他的名字是一個遞迴縮寫,代表「SPARQL Protocol and RDF Query Language(SPARQL協定與RDF查詢語言)」。它的標準化為全球資訊網協會的RDF資料存取工作小組(DAWG)所進行,被認為是語意網科技的一個關鍵。2008年1月15日,SPARQL正式成為一項W3C推薦標準。

一個SPARQL查詢由一些Triple組合、AND、OR,及選項組合所組成。

SPARQL可以讓使用者寫出廣域上非模糊的查詢。舉例來說明,以下的範例可查詢 本站中,所有擁有 標題 dc:title 及主題 dc:subject 兩個欄位的資料

PREFIX dc:<http://purl.org/dc/terms/> 
SELECT ?object ?title ?subject WHERE {
   ?object dc:title ?title .
   ?object dc:subject ?subject .
}
LIMIT 80

說明:

  • PREFIX dc:<http://purl.org/dc/terms/> 
    這一行定義了一個 前綴文字 dc 來代表  <http://purl.org/dc/terms/> ,也就是說 在接下來的查詢語法中, dc:title 等同於  <http://purl.org/dc/terms/title>
  • SELECT ?object ?title ?subject WHERE {
    這一行裡的 ?object , ?title , ?subject 代表的是希望查詢結果中顯示的欄位,其中 問號 ? 用以表示變數,後面接自訂的欄位名稱
  • ?object dc:title ?title .
    這一行稱為一個 Triple , 後面以 英文的句號  "."作為 Triple的結尾,要有空格分隔開。
  • WHERE{...}
    查詢的條件語句,{...}裡面要放查詢條件的的 Triple,可以有多種的條件組合。本範例的查詢條件為 擁有 dc:title 與 dc:subject 的資料
  • LIMIT 80
    限制只查詢 80筆資料

更詳細的介紹請見:https://www.w3.org/TR/rdf-sparql-query/#select

 

二、外部查詢說明

臺中學SPARQL 外部查詢的存取點為 http://data.digitalculture.tw/taichung/sparql
 

查詢參數

參數 說明
query

SPARQL 查詢字串。

範例:
http://data.digitalculture.tw/taichung/sparql?query=select+%3Fp+%3Fo%0D%...

output

輸出格式,目前支援以下幾種格式:

  1. rdfxml
  2. turtle
  3. csv
  4. json

 

機器查詢(非瀏覽器)時,根據不同的 http request headers 可回傳對應的格式,

Accept:application/rdf+xml => 回傳 RDF+XML格式的資料
Accept:text/csv => 回傳 CSV格式的資料

目前支援的格式:

  • application/rdf+xml
  • text/csv
  • text/tab-separated-values
  • text/turtle

關於 HTTP Request headers 可參考: https://msdn.microsoft.com/zh-tw/library/gg262187.aspx#sectionToggle0

 

三、本站SPARQL查詢參考

#查詢某一個藏品的標題

SELECT ?title
WHERE
{
  <http://data.digitalculture.tw/taichung/aggregation/367> <http://purl.org/dc/terms/title> ?title .
}

#查詢 藏品的作者(不重複)

SELECT DISTINCT ?contributor
WHERE
{
  ?s <http://purl.org/dc/terms/contributor> ?contributor .
}

#查詢所有藏品的 title(標題) 及 subject(主題) 資料

PREFIX dc:<http://purl.org/dc/terms/> 
SELECT ?title ?subject WHERE {
   ?object dc:title ?title .
   ?object dc:subject ?subject .
}
LIMIT 80