Virtuoso的安装与使用

知识库的存储最常见的是采用Virtuoso SPARQL engine,配合lambda-DCS进行存储的方式。因此下载了Virtuoso工具并学习了相关的使用。Virtuoso的官方文章地址:vos.openlinksw.com/owiki/wiki/VOS

下载与安装

Virtuoso有很多下载版本,包括Open Source和Commerical版本。

Virtuoso的下载

我下载的是Mac系统下Open Source的版本,其他的版本下载地址(我第一次用的是Chrome自带的下载器下载速度很慢,第二次用的是迅雷下载器速度可以,因此推荐使用迅雷下载)。下载之后就是安装了,Mac平台的安装就是点点点就可以了,其他平台的安装如果遇到问题,再查阅其他资料吧。

服务器上virtuoso的安装

在实验室的服务器上安装Virtuoso真的很麻烦,各种小问题层出不穷,差点就崩溃了。

总体的过程根据Virtuoso安装和导入数据 – Websoft技术经验分享这篇文章,在进行./autogen.sh这一步时,由于在实验室的服务器不是root用户,所以首先遇到的问题就是非root用户安装依赖,具体的过程可以参照《Centos非root用户(普通用户)替换yum安装软件方法》这篇文章。然而我并没有安装全部欠缺的依赖,我觉得这个脚本有点问题但是我说不清问题在哪,可能是它查找路径的问题——不知道是在我的目录下/home/rzb/usr/查找还是/usr/下查找,我没有细究,因为后面才是大坑。之后就是配置编译和安装,首先是编译。./configure –prefix=/home/rzb/virtuoso--prefix参数指定的是virtuoso安装路径,如果没有root权限建议安装在自己目录下。Virtuoso有点特殊它需要的openssl版本要求在0.9.8和1.1.0之间,我首先用openssl version查看我的openssl版本,发现是1.1.1版本不适用,于是我开始想办法将版本降下来,甚至求学长用root用户操作然而并没有什么用,但是学长突然说了一句他使用openssl version查看openssl版本是1.0.2k版本。我又上了另一个同学的账户看一下,他也是1.1.1版本,奇怪了,为什么就学长的不一样呢?我又开始想这个问题,百度openssl版本不同,看到这篇文章openssl 版本问题 anaconda导致的openssl版本变化_ANONYMOUSLYCN的专栏-CSDN博客才知道是anaconda同样也有openssl,于是我按照这篇文章的方法将anaconda的openssl改名。此时我使用的是系统的openssl,版本也是正确的,但是还是报错checking OpenSSL version… configure: error: OpenSSL version 0.9.8e or greater,见鬼了。明明版本是对的为什么还会报错?我查看了当前目录下的config.log文件发现原因是报错no such file or directory:openssl/opensslv.h,我在根目录下查找了一番根本没有openssl文件夹更何谈opensslv.h了,于是我在自己目录下重新安装了openssl和openssl-devel。然后将~/.bashrc中/home/rzb/usr/bin提前,这样使用的openssl才是/home/rzb/usr/bin/openssl。同时在编译时指定参数--with-enable-openssl=/home/rzb/usr,即使用使用指定目录下的openssl,确保万无一失。重新编译一遍./configure –prefix=/home/rzb/virtuoso --with-enable-openssl=/home/rzb/usr报错终于发生了变化(虽然仍然有报错,但是报错变了我真的很激动),新的报错是checking usability of the OpenSSL header files and library in /home/rzb/usr… configure: error: bad. Check config.log for details。我又去查看config.log文件,这时的错误原因是/usr/bin/ld cannot find -lssl /usr/bin/ld cannot find -lcrypto,查阅资料了解到lssl和lcrypto是两个库,并且这两个库是随着openssl安装一起安装的,ld是系统的肯定没有问题,而查找这两个库的位置是/home/rzb/usr/lib,我觉得问题出在这。

无法找到lssb和lcrypto文件

为什么查找地址是这个?我改变了编译指令中的--with-enable-openssl参数,重新编译一遍发现查找地址变了,于是我猜测这个地址与--with-enable-openssl参数是对应的,于是我 cd 到 /home/rzb/usr 发现都没有lib文件夹只有lib64文件夹,我这里投机取巧了把lib64文件夹 mv 重命名成lib(我没尝试别的方法,不知道有没有其他方法),在 lib 文件夹下(原lib64文件夹)下有两个libcrypto.so和libssl.so文件,正是我要用的两个库,然而我用ls -al查看这两个文件所链接的文件发现所对应的文件丢失了。这个我真的不知道什么原因导致的这两个文件不见了,正常是一起生成的,为了统一才建的软链接。

so文件链接丢失

但是我猜测系统目录下会有这两个文件,因为系统的openssl版本和我自己安装的一样,我就去系统目录下找,果然在/usr/lib64目录下找到了。

丢失的两个库

回到libcrypto.so和libssl.so文件所在目录下,使用如下指令重新建立链接:

1
2
ln -sf /usr/lib64/libssl.so.1.0.2k libssl.so
ln -sf /usr/lib64/libcrypto.so.1.0.2k libcrypto.so

再一次重新编译,终于没有报错了,可以下一步了,这个问题纠结了我三四天,差点自闭了。

Virtuoso安装成功

接下来就是make & make install虽然有警告,但是没有报错,也算是顺利。之后将安装目录下的bin文件夹加入环境变量中。Virtuoso的第一次启动还不能直接用virtuoso-t指令启动,否则可能出现Error S2801: [Virtuoso Driver]CL033: Connect failed to localhost:1111 = localhost:1111报错,需要到virtuoso.ini所在的文件夹下使用virtuoso-t -df启动,具体过程可以参照vos.openlinksw.com/owiki/wiki/VOS/VOSCentosNotes。之后我打算启动命令行指令isql操作Virtuoso时发生了报错,[ISQL]ERROR: Could not SQLConnect,这个报错的原因是Virtuoso的ISQL与系统现有的ODBC的ISQL冲突,可以将virtuoso的bin目录下的isql重命名解决,我选择将其重命名为isql-vt,这样在终端输入isql-vt 1111 dba dba即可进入isql(Linux系统下virtuoso数据库安装与使用详解Linux脚本之家)。

Virtuoso在服务器的配置算是全部解决了。

使用

安装之后我启动了这个应用程序发现没有任何动作,等了很长时间也没有任何响应。我以为是我安装有错,又尝试下载了Commerical的版本,依旧没有响应。后来发现了程序原来早就启动了,只不过显示在屏幕上方的状态栏了。
Mac状态栏

点击该图标,再点击Start VOS Database。
Virtuoso工具栏

之后该工具栏的Open Virtuoso Conductor选项会变亮,点击,浏览器会自动打开http://localhost:8890/conductor/ 即初始界面。
Virtuoso的初始界面

对Virtuoso进行操作首先需要登录,在初始界面的左侧边栏输入用户名和密码(默认用户名和密码都是dba)登录即可。

数据集(RDF数据)导入

进入数据库服务页面后,找到”Linked Data”并点击,随后点击它下方一行刚出现的”Quad Store Upload”就可以加载RDF数据了,其中File是需要上传的ttl格式、xml格式或者nt格式的RDF数据(Virtuoso支持多种格式的RDF数据,不止这一种),Named Graph IRI 需要自己来设定。

这里使用利用部分 FB2M 数据转换而来 fb2m_test.nt文件来进行尝试。

  1. 登录后选择菜单”Linked Data” -> “Quad Store Upload”。
  2. 选中”Create graph explicity”前的 checkbox 框,输入 Name Graph IRI*:http://www.example.com/graph/fb2m_test ,原则上Graph这里可以随便输入。
  3. 选择 fb2m_test.nt 文件。
  4. 点击”Upload”按钮进行导入,导入后会自动创建出 GRAPH:http://www.example.com/graph/fb2m_test 。如果导入有误,系统会有提示。

数据集导入

之后打开Graphs就可以看到所创建的 Named Graph IRI了。Graphs

然后点击SPARQL就可以进行SPARQL检索了。注意其中的 Default Graph IRI 需要设为刚刚所创建的 http://www.example.com/graph/fb2m_test

常用的Graph操作命令

导入RDF数据后可以简单地查看下数据量。”Linked Data” -> “SPARQL”菜单。这里的 Default Graph IRI 输入上一步的 http://www.example.com/graph/fb2m_test ,SPARQL语句为:select count(*) where {?s ?p ?o}查询导入数据量
运行结果为:82。所有的SPARQL检索都可以在这里运行。

针对GRAPH的相关操作则需要在ISQL(Interative SQL)中操作。ISQL是数据库的命令管理工具ISQL。点击数据库服务界面左上角的”Interactive SQL(ISQL)”即可进入。

COPY

在ISQL中运行:

1
SPARQL COPY <http://www.example.com/graph/fb2m_test> TO <http://www.example.com/graph/test>;

COPY
注意不要省略代码中的SPARQL,否则会产生报错。

即可复制出新的GRAPH: http://www.example.com/graph/test 。可以用之前的SPARQL进行数量统计,注意这样的话 Default Graph IRI 要用新的 GRAPH: http://www.example.com/graph/test

DROP和CLEAR

这里要注意DROP和CLEAR的区别:DROP删除、CLEAR清除。

CLEAR可以用来清除通过COPY创建的GRAPH(此时GRAPH并不实际存在,为虚拟GRAPH);DROP只能删除通过”Create graph explicity”创建的GRAPH(之前的导入方式)。这里可以通过”Linked Data” -> “Graphs” -> “Graphs”菜单来查看结果。

MOVE

MOVE命名常用来修改GRAPH名称。

CREATE

创建新的GRAPH,等同于通过导入创建。

ADD

在GRAPH中加入数据。

[1]Linux系统下virtuoso数据库安装与使用_数据库技术_Linux公社-Linux系统门户网站
[2]SPARQL和Virtuoso数据库(1) - 云+社区 - 腾讯云
[3]SPARQL和Virtuoso数据库(2) - 云+社区 - 腾讯云