GRUFF是一款强大的RDF可视化工具,下面将简要介绍如何使用Gruff。
本文主要内容翻译自Franz的Gruff-Tutorial文档,原文档地址:https://franz.com/agraph/gruff/Gruff-Tutorial.pdf
但由于版本更新,文档中的某些菜单按键等已与新版不符,本文中略微做了调整,另外补充了一些原文档中没有的内容,供读者学习。
一、简介
本文简单描述了如何使用三元组数据库、如何上传开放关联数据以及如何使用图模式进行SPARQL查询。这会让新接触这些话题的用户更好地理解这些方法和技术,以便更加深入地理解本书后面地例子。
二、什么是三元组,什么是RDF
为了完整起见,我们将在这里介绍三元组的概念,但是我们假设我们的读者是熟悉RDF的。RDF语言是用来描述有关资源的数据,这里的资源是指任何事物。RDF的基本构建就是三元组,由主语、谓语、宾语组成。主语是一个URI,谓语被定义为主语的某些属性,宾语就是字符串或者其他主语的URI,下面我们来看一组描述:
bb:YogiBerra rdf:type bio:Person .
bb:YogiBerra bb:playsPosition bb:Catcher .
bb:YogiBerra bb:careerHomeRuns 358 .
第一行说主语Yogi Berra(它的URI被定义在命名空间bb中)的类型是一个人(这个类型被定义在命名空间bio中),他的的职位是捕手,他的职业生涯全垒打是358次,第二三行的谓语和宾语都定义在命名空间bb中。以上就是RDF中数据的形式,用主谓宾组成三元组,其中用空格隔开,用句号结尾。
上述的描述来自一个RDF的小教程,在网站Franz中可以找到。
三、什么是三元组数据库,一个关于AllegroGraph的介绍
大部分的开放关联数据以包含三元组的文件形式出现,为了有效地使用三元组,您需要一个三元组数据库,专门用于储存三元组格式数据。一个好的三元组数据库可以对它们进行索引,以便快速地检索,执行SPARQL语句,并实现推理。AllegroGraph就是这样一个数据库,还具有一些额外的功能。
AllegroGraph提供:
所有您在关系型数据库中所期望地基本企业功能:ACID、备份和回复、时间点回复、安全性、复制、故障处理、集群、三元组安全等级。
地理空间推理,时间推理,社交网络分析。这些功能可以在SPARQL中直径访问。
业务规则上与ISO兼容的Prolog编译器。
服务器端JavaScript存储处理。
Gruff,一个功能强大的可视化工具,允许用户友好地进行三元组导航。Gruff的图查询编辑器可以与SPARQL结合。
自动发现高亮的节点并将其转换成SPARQL查询的功能。
四、实际操作指南
我们接下来要用到的数据集提取自DBpedia,是维基百科的三元组版本。我们收集了关于电影、演员、导演和制片人的信息,存储成一个单独的文件(N-triples的格式),这个文件可以在我们的网站下载。
我们要用到的这个强大的可视化导航工具叫做GRUFF,Gruff是AG的一个接口,它允许用户创建新的三元组,上传三元组以及进行查询或在屏幕上可视化展现。Gruff有两个版本,一个独立版本(包含AG的基本版本),另一个是服务器版本,如果由上亿级的数据需要处理,那么需要服务器版本,如果仅有几百万条数据,并且不能直接访问服务器,用独立版本就足够了。我们将演示的是独立版本。
下载程序文件
http://www.franz.com/agraph/gruff
下载完成解压,双击exe文件进行安装。
下载示例数据
http://www.franz.com/franzdownload/agraph/allegrograph/data/actors.ntriples
4.1创建一个新的三元组数据库
通过File->New Triple-Store创建新的数据库。需要注意的是因为我们使用的是独立版本,所以这里主机就是我们自己的计算机,端口号也不必填写,确保目录不是已存在的文件夹,因为它会覆盖已有的信息。
点击OK,数据库就创建完成了,数据库会问你期望有多少条数据,直接接受默认的数字即可。
4.2上传数据到Gruff
通过File->Load Triples->Load N-Triples上传,数据库会询问是通过文件还是web,选择文件进行上传。找到你之前下载好的数据文件,选择它上传,几秒钟后你可以看到提示已上传成功。
4.3在屏幕上展示一些三元组
通过Display->Display Some Sample Triples可以显示一些示例三元组,经过几秒钟后,你可以在屏幕上看到一些三元组的图示,可以用鼠标滑轮进行缩放,然后按键盘上的R键使其到屏幕中心。当你双击节点,你会看到表视图,可以通过View->Graph View或者按键盘的G键回到图形界面。
我们可以通过Remove->Remove-All-Nodes来移除屏幕中的所有信息,不必担心,这些信息并不会在数据库中被删除,只是在图形界面上被清空。
4.4查找一些信息
(Note:这里和官网中的指导文档略有不同,因为版本已经更新,功能上作出了一些改动)
Gruff将建立索引的选项放在了Text Search里面,我们可以通过Text Search->Edit the Current Text Index建立索引,在建立索引时会要求你选择谓语,按照你的需求或者全选即可。然后通过Text Search->Find and Display Nodes来查找我们需要的信息。现在我们想找Kevin Bacon相关的信息,按照上面的路径,打开对话框后,我们输入Kevin Bacon,所有和Kevin Bacon有关的节点都会出现,在结果中找到Kevin Bacon这个节点,点击OK,然后你会看到一个节点在屏幕中,我们可以进行下一步啦!
补充:使用Gruff时必须以一个或多个节点开始,除了Text Search外可以使用Display菜单里的Display a Node by URI or Literal。
4.5体验Graph View
现在我们有了Kevin Bacon这个节点,我们想看到更多的关于Kevin作为主语或者宾语的三元组,第一步是选择我们想看到的谓语或者说属性,按下键盘上的P键,你会看到一个关于谓语的列表,我只想看Ds,Director,Starring,所以我只选择这三个谓语,点击OK。
接下来点击选中Kevin Bacon这个节点,然后按下F键,若干新的节点会出现在屏幕上,但你选择了其他的电影节点,再按F键,又会有新的节点出现,再尝试几次后你会发现你的屏幕变得拥挤,用鼠标缩放后按下R你会看到一个缩略图在你的屏幕中心。
注意屏幕的左侧,不同的谓语(箭头)和不同的类(圆角矩形)都是用了不同的颜色标明。除了上述的呈现方式和途径,你也可以在最初对Kevin Bacon这个节点进行鼠标右键单击,在菜单中选择前两个,分别通过菜单和大纲进行选择,你可以去尝试一下。
Note:按Z键就可以返回上一步操作。
补充:在Gruff中,提供了多种视图的布局选择,在Layout菜单中,可以多尝试一下。
4.6找到两个节点的最短路径
使用三元组数据库的一个显著优势就是通过数据库找到两个节点之间的关系。
让我们清空屏幕,按照上面的方法找到Kevin Bacon这个节点,然后用同样的方法找到Arnold Schwarzenegger这个节点。这是你会发现屏幕中有两个孤立的节点,选中Arnold这个节点,按下Shift+F,会有一条线在这个节点上出现,把连线的另一端拖到Kevin这个节点上,然后点击一下鼠标,你的屏幕中也会出现类似下面的截图了。
Note:Shift+F就是Link->Display Paths Between Two Nodes的快捷键。
4.7表视图浏览
接下来我们讨论表视图,假设你的Kevin Bacon节点还在屏幕中,双击它或者选中后按B键,你就来到了表示图中,如下图所示,可以浏览关于Kevin的一些信息和数据,注意表中粗的灰线,加粗灰线以上是Kevin作主语的三元组,灰线以下是Kevin作宾语的三元组。我们可以在表视图中点击一些非Literal的节点,可以通过这种方式浏览我们数据,为我们提供了一些便捷的查找途径。
Note:例如通过下表我们可以看到Kevin是在宾州费城出生的,我们点击这个节点就可以查找到其他出生在费城的电影演员。
还有另外一种浏览视图,Outline View,可以通过View->Outline View打开,也可以选中节点按下字母O键,黑色字体表示这个节点还有更深的层级可以展示,蓝色字体表示该节点可以点回Kevin Bacon这个节点。多尝试几次就会明白其中的奥秘。
4.8在查询视图中构造SPARQL检索式
Gruff可以支持SPARQL查询,通过View->Query View进入查询视图,或者按下W键,例如在SPARQL的输入栏中输入以下查询命令,即可得到100条三元组的结果,点击Run Query按钮得到结果,再点击Create Visual Graph可以得到RDF图。
Select * where { ?x ?y ?z . } limit 100
4.9用图形化查询构建SPARQL检索式
你可以不必写出SPARQL检索式,Gruff支持用图形化的方式构造检索式,这里有一个简短的例子。
当我们需要检索这个问题:“Who directed the movies that Kevin Bacon starred in?”(Kevin Bacon演的电影都是谁导演的?)
- 打开图形化检索(按下E键或者通过View->Graphical Query View);
- 使用Text Search或者Display找到“Kevin Bacon”节点;
- 右键屏幕空白处,选择菜单中的第一个,create variable node,给这个节点命名,按照需求或者随意,这里我们命名其为film;
- 右键点击”?film”节点,选择菜单中的Add Predicate Link,这时你将看到一个连接线;
- 拖动光标将线的一端练到Kevin Bacon节点后单击,选择菜单中Predicates of Object Kevin Bacon(Kevin Bacon作为宾语的谓词),然后选择starring,这里的意思是为变量节点“?film”匹配Kevin Bacon主演的电影;
- 再建一个变量节点,命名为“director”;
- 右键点击“?film”节点,Add Predicate Link,拖动光标点击“?director”,选择All Predicates,再选择director;(此步意为“?director”变量匹配电影的导演)
- 点击Run Query按钮即可。