知識圖譜(Knowledge Graph)是當前互聯網最煊赫一時的技術之一,它的典型應用場景就是搜索引擎,好比Google搜索,百度搜索。咱們在百度搜索中輸入問題「中國銀行的總部在哪」,搜索的結果以下:java
這即是知識圖譜的典型應用,可以直接輸出問題的答案。藉助知識圖譜,可以讓搜索引擎更加高效,搜索結果更加精準,給用戶帶來更好的搜索體驗和樂趣。
關於知識圖譜的知識點和工具數不勝數,咱們在學習時經常會感到無從下手,一片茫然。本文將嘗試着介紹知識圖譜的幾個知識點——RDF、URI、URL和SPARQL,但願能以此爲切入點,讓讀者對SPARQL有些感性的認識,至於知識圖譜,則是更大更深的範圍了,不是本文所能歸納的。web
SPARQL的英文全稱爲SPARQL Protocol and RDF Query Language,是爲RDF開發的一種查詢語言和數據獲取協議,它是爲W3C所開發的RDF數據模型所定義,可是能夠用於任何能夠用RDF來表示的信息資源。它於2008年1月15日正式成爲一項W3C推薦標準,於2013年3月發佈SPARQL1.1。
既然SPARQL是爲是爲RDF開發的一種查詢語言,那麼什麼是RDF呢?算法
首先,RDF不是一種數據格式。
RDF的英語全稱爲Resource Description Framework,中文名稱爲資源描述框架。RDF是一種描述數據文件儲存的數據模型,該數據模型一般描述由三個部分組成的事實,被稱爲三元組(triples)。三元組由主語(subject)、謂語(predicate)和賓語(object)組成,看上去很像一個簡單的句子。好比:數據庫
subject | predicate | object |
---|---|---|
richard | homeTel | (229)276-5135 |
cindy | 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是兩個相近的概念,但URL只是URI的一種。
URL就是咱們常說的網址,英文全稱爲Uniform Resource Locators,是統一資源定位符,對能夠從互聯網上獲得的資源的位置和訪問方法的一種簡潔的表示,是互聯網上標準資源的地址。
URI的英語全稱爲Uniform Resource Identifier,是統一資源標識符。在RDF三元組中,主語、謂語必須屬於某個特定的命名空間,避免類似的名字發生混淆,所以須要使用URI。bash
好了,在瞭解了上述的基本概念以後,咱們須要實踐一把,在這裏,咱們使用ARQ。
ARQ是SPARQL處理器。它是Apache Jena框架的一部分,是一個基於java的免費軟件,其下載地址爲:http://jena.apache.org/download/index.cgi。以Linux系統爲例,咱們下載文件apache-jena-3.11.0.zip,並將解壓後的zip文件中的bin目錄添加到環境變量中。添加方式以下:微信
export JENA_HOME=你的apache-jena-3.11.0路徑 export PATH=$JENA_HOME/bin:$PATH
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), 歡迎你們關注~