天天看点

《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的不同,尽管它们的作用相同:划分和提供上下文。