SPARQL入門(一)SPARQL簡介與簡單使用

  知識圖譜(Knowledge Graph)是當前互聯網最煊赫一時的技術之一,它的典型應用場景就是搜索引擎,好比Google搜索,百度搜索。咱們在百度搜索中輸入問題「中國銀行的總部在哪」,搜索的結果以下:java

這即是知識圖譜的典型應用,可以直接輸出問題的答案。藉助知識圖譜,可以讓搜索引擎更加高效,搜索結果更加精準,給用戶帶來更好的搜索體驗和樂趣。
  關於知識圖譜的知識點和工具數不勝數,咱們在學習時經常會感到無從下手,一片茫然。本文將嘗試着介紹知識圖譜的幾個知識點——RDF、URI、URL和SPARQL,但願能以此爲切入點,讓讀者對SPARQL有些感性的認識,至於知識圖譜,則是更大更深的範圍了,不是本文所能歸納的。web

什麼是SPARQL?

  SPARQL的英文全稱爲SPARQL Protocol and RDF Query Language,是爲RDF開發的一種查詢語言和數據獲取協議,它是爲W3C所開發的RDF數據模型所定義,可是能夠用於任何能夠用RDF來表示的信息資源。它於2008年1月15日正式成爲一項W3C推薦標準,於2013年3月發佈SPARQL1.1。
  既然SPARQL是爲是爲RDF開發的一種查詢語言,那麼什麼是RDF呢?算法

什麼是RDF?

  首先,RDF不是一種數據格式。
  RDF的英語全稱爲Resource Description Framework,中文名稱爲資源描述框架。RDF是一種描述數據文件儲存的數據模型,該數據模型一般描述由三個部分組成的事實,被稱爲三元組(triples)。三元組由主語(subject)、謂語(predicate)和賓語(object)組成,看上去很像一個簡單的句子。好比:數據庫

subject predicate object
richard homeTel (229)276-5135
cindy email cindym@gmail.com

  如下爲Turtle RDF格式的RDF文件,文件名爲ex002.ttl,apache

# filename: ex002.ttl

@prefix ab: <http://learningsparql.com/ns/addressbook#> .

ab:richard ab:homeTel "(229) 276-5135" . 
ab:richard ab:email   "richard49@hotmail.com" . 

ab:cindy ab:homeTel "(245) 646-5488" . 
ab:cindy ab:email   "cindym@gmail.com" . 

ab:craig ab:homeTel "(194) 966-1505" . 
ab:craig ab:email   "craigellis@yahoo.com" . 
ab:craig ab:email   "c.ellis@usairwaysgroup.com" .

#表示註釋,@prefix行爲前綴行,即爲<http://learningsparql.com/ns/...>取一個前綴ab:,也就是別名,避免每次命名時都要寫這個長長的字符,句子最後的.可寫可不寫,寫上後便於閱讀。另外,<http://learningsparql.com/ns/...>是URI,這個後面會介紹。
   以後的每一行,都是一個三元組,分別是主語、謂語和賓語,帶有前綴ab:。vim

URI和URL

  URI和URL是兩個相近的概念,但URL只是URI的一種。
  URL就是咱們常說的網址,英文全稱爲Uniform Resource Locators,是統一資源定位符,對能夠從互聯網上獲得的資源的位置和訪問方法的一種簡潔的表示,是互聯網上標準資源的地址。
  URI的英語全稱爲Uniform Resource Identifier,是統一資源標識符。在RDF三元組中,主語、謂語必須屬於某個特定的命名空間,避免類似的名字發生混淆,所以須要使用URI。bash

如何使用ARQ?

  好了,在瞭解了上述的基本概念以後,咱們須要實踐一把,在這裏,咱們使用ARQ。
  ARQ是SPARQL處理器。它是Apache Jena框架的一部分,是一個基於java的免費軟件,其下載地址爲:http://jena.apache.org/download/index.cgi。以Linux系統爲例,咱們下載文件apache-jena-3.11.0.zip,並將解壓後的zip文件中的bin目錄添加到環境變量中。添加方式以下:微信

  • vim /etc/profile
  • 在文件末尾添加命令:
export JENA_HOME=你的apache-jena-3.11.0路徑
export PATH=$JENA_HOME/bin:$PATH
  • source /etc/porfile
  • 運行命令echo $JENA_HOME,若是能輸出你的JENA路徑,則代表添加該環境變量成功。

  接着咱們寫好SPARQL查詢語句(關於查詢語句,會在後面的文章中介紹),文件名爲ex003.rq,內容以下:框架

# filename: ex003.rq

PREFIX ab: <http://learningsparql.com/ns/addressbook#> 

SELECT ?craig_email
WHERE
{ ab:craig ab:email ?craig_email . }

簡單對該查詢語句作個說明:PREFIX ab: http://learningsparql.com/ns/... 表示使用哪一個URI,並取別名。後續的查詢語句相似於SQL,是對三元組作查詢,?craig_email爲變量,查詢三元組中的賓語,用通俗的話來理解,就是查詢craig的電子郵箱是什麼?
  運行命令:工具

arq --data ex002.ttl --query ex003.rq

輸出結果以下:(ex002.ttl文件見以前的描述)

--------------------------------
| craig_email                  |
================================
| "c.ellis@usairwaysgroup.com" |
| "craigellis@yahoo.com"       |
--------------------------------

還能夠查詢三元組中的其餘部分,這裏再也不講述,後續會專門講SPARQL查詢語句的。

總結

  在知識圖譜的工具箱中,有不少圖數據庫,它們提供了很好的查詢語句功能和可視化效果,好比Neo4j, Cayley,此次,咱們能夠學習下RDF和SPARQL,畢竟,SPARQL的查詢能力和推理能力也是很強的哦~
  期待下次關於SPARQL的分享~

注意:不妨瞭解下筆者的微信公衆號: Python爬蟲與算法(微信號爲:easy_web_scrape), 歡迎你們關注~

參考文獻

  1. SPARQL百度百科:https://baike.baidu.com/item/SparQL/10956405?fr=aladdin
  2. RDF百度百科:https://baike.baidu.com/item/rdf/5956080
  3. URI百度百科:https://baike.baidu.com/item/URI/16481812
  4. URL百度百科:https://baike.baidu.com/item/url
  5. SPARQL維基百科:https://en.wikipedia.org/wiki/SPARQL
  6. Apache Jena下載頁面:http://jena.apache.org/download/index.cgi
  7. 書籍: Learning SPARQL,Bob DuCharme,Publisher: O'Reilly Media, Inc.
  8. Learning SPARQL學習網址:http://www.learningsparql.com/
相關文章
相關標籤/搜索