本節書摘來自華章出版社《語義網基礎教程(原書第3版)》一 書中的第3章,第3.2節,作者:(希)grigoris antoniou(荷)paul groth(荷)frank van harmelen(荷)rinke hoekstra ,更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。
回顧一下上一章中描述baron way較高價的電梯大廈及其位置的rdf資料:

我們可能想要在這段資料上做一個查詢。例如,找到這幢建築的位置。怎樣用sparql來表述呢?可以如下建構這個查詢。我們想要比對的是下面這個三元組:
在sparql中,我們可以将三元組中的任何一個元素替換為一個變量。變量的首字元是一個?(問号)。要引入一個變量表示位置,我們可以這樣寫:
三元組存儲庫将接收這個圖模式(graph pattern)并嘗試去找到能夠比對這個模式的那些三元組集合。是以,在之前的rdf資料上運作這個模式,一個三元組存儲庫将會傳回dbpedia:amsterdam和dbpedia:netherlands。本質上,它找到了所有以swp:baronwaybuilding作為主語、dbpedia-owl:location作為謂語的三元組。
要建構一個完整的sparql查詢,還需要增加一些内容。首先,需要定義所有的字首。還需要告訴三元組存儲庫我們對一個特定變量的結果感興趣。是以,上述查詢對應的完整sparql查詢如下:
與turtle類似,prefix關鍵詞指明各種url的縮寫。select關鍵詞表明了哪些變量是感興趣的。需要被比對的圖模式出現在where關鍵詞之後的括号中。傳回的查詢結果是一組稱作綁定(binding)的映射,表示了哪些元素對應到一個給定的變量。表格中的每一行是一條結果或一個綁定。是以,這條查詢的結果如下:
sparql的全部基礎就是這個簡單的概念:嘗試去找到能夠比對一個給定圖模式的那些三元組集合。sparql提供了更多的功能,用來指定更加複雜的模式并以不同的方式提供結果;但是無論模式多麼複雜,運用的過程都是一樣的。再舉一個例子,查找到baronwayapartment的位置。對應的sparql查詢是:
我們已經擴充了圖模式。在這個查詢中有一些注意點:首先,變量也作為主語出現。在sparql查詢中,變量可以出現在任何位置。其次,查詢重用了變量名?building。這樣,三元組存儲庫就知道它應該找那些第一條的賓語與第二條的主語相同的三元組。我們請讀者來确定這條查詢的答案。
我們并不局限于隻比對一個變量。我們可能想要找到三元組存儲庫中關于baron way apartment的所有資訊。可以使用這條sparql查詢:
同樣,表格中的每一行是一條單獨的能比對圖模式的結果。對于我們這個很小的資料集,所有可能的答案可以很容易地傳回。然而,在更大的資料集上,我們可能不知道有多少條結果,或者我們的查詢會不會傳回整個資料集。事實上,寫一些能傳回幾百萬個三元組的查詢還是很容易的。是以,一個好的做法是限制一條查詢能傳回的答案的數量,特别是在使用公共端點時。這很容易通過使用如圖3-1所示的limit關鍵詞來實作。在這個圖中,我們将傳回的結果條數限制為10。
我們已經學會了如何去比對單個模式或者由多個三元組模式構成的鍊。sparql提供了一種精确表述屬性鍊的方式。這一機制稱為屬性路徑(property path)。例如下面這個例子。找到所有作為一幢位于amsterdam的建築的一部分的那些較高價的電梯大廈。
有許多其他屬性路徑可以用來幫助在查詢中表述很長的、各式各樣的路徑。在本章中,強調了更多這樣的構造子。事實上,當讀者寫更複雜的sparql查詢時,這些屬性路徑的快捷表示可能會變得更有用。
我們僅僅通過比對圖模式就可以完成很多事情。然而,有時候我們想要對查詢結果施加更複雜的限制。在下一節中,我們讨論如何使用過濾器來表述這些限制。