天天看點

《Clojure資料分析秘笈》——1.10節讀取RDF資料

本節書摘來自華章社群《clojure資料分析秘笈》一書中的第1章,第1.10節讀取rdf資料,作者(美)eric rochester,更多章節内容可以通路雲栖社群“華章社群”公衆号檢視

1.10 讀取rdf資料

1.10.1 準備工作

首先,需要確定相關依賴列于project.clj檔案中:

《Clojure資料分析秘笈》——1.10節讀取RDF資料

1.10.2 具體實作

本過程最費時的部分将是定義資料。使用的庫完成這項工作。

建立三元組存儲并注冊資料使用的命名空間。将三元組存儲名字綁定到名稱tstore。

《Clojure資料分析秘笈》——1.10節讀取RDF資料
《Clojure資料分析秘笈》——1.10節讀取RDF資料

1.10.3 實作原理

首先介紹一下背景知識:資源描述格式(resource description format,rdf)不是xml格式的資料,盡管rdf通常是用xml編寫的(還有其他的資料格式,如n3和turtle)。rdf将世界看成一個聲明集合。每條聲明至少包含三部分(三元組):主語(subject)、謂詞(predicate)和賓語(object)。主語和謂詞需要是uri(uri和url近似,但比其更通用。例如uri:7890就是一個有效的uri)。賓語可以是文本或者uri。所有的uri構成一幅圖。它們互相連接配接并通過聲明互相描述。這就是linked-in的連結資料的來源。

回到之前介紹的方法中:從總體上來看,在這裡使用的處理過程非常簡單。

建立三元組存儲(kb-memstore和init-kb)。

讀取資料(load-data)。

查詢并僅取出需要的資料(q和load-data)。

将之轉換為incanter可以使用的資料(rekey和col-map)。

建立incanter資料集(load-data)。

本例中使用的查詢格式是個新事物。kb使用類sparql的領域專用語言描述查詢。事實上,由于kb簡單易用,是以使用它而不是直接處理未經加工的rdf資料。以“?/”開始的條目是變量;這将作為查詢結果映射中的鍵值。其他條目格式如rdf-namespace/value。命名空間取自在init-kb中定義的已注冊命名空間。這些命名空間與clojure的不同,盡管它們的作用相同:劃分和提供上下文。