Apache Jena Fuseki

安装 Apache Jena Fuseki。

创建 fuseki 组。

sudo groupadd fuseki

创建 fuseki 用户。

sudo useradd -s /bin/false -g fuseki -d /home/garden-user/etc/fuseki fuseki

下载 Apache Jena Fuseki。

cd ~/tmp
wget http://archive.apache.org/dist/jena/binaries/apache-jena-fuseki-3.17.0.tar.gz

解压下载文件。

sudo tar xzvf apache-jena-fuseki-3.17.0.tar.gz -C /home/garden-user/etc/fuseki --strip-components=1

设置权限。

sudo chgrp -R fuseki /home/garden-user/etc/fuseki
sudo chown -R fuseki /home/garden-user/etc/fuseki
sudo chmod -R 764 /home/garden-user/etc/fuseki

创建保存数据库配置文件的目录。

sudo -u fuseki mkdir -p /home/garden-user/etc/fuseki/run/configuration

创建数据库配置文件 garden.ttl。

sudo -u fuseki vi /home/garden-user/etc/fuseki/run/configuration/garden.ttl

garden.ttl 文件内容如下:

@prefix :      <http://base/#> .
@prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix tdb2:  <http://jena.apache.org/2016/tdb#> .
@prefix ja:    <http://jena.hpl.hp.com/2005/11/Assembler#> .
@prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .
@prefix fuseki: <http://jena.apache.org/fuseki#> .
tdb2:DatasetTDB  rdfs:subClassOf  ja:RDFDataset .
ja:DatasetTxnMem  rdfs:subClassOf  ja:RDFDataset .
<http://jena.hpl.hp.com/2008/tdb#DatasetTDB>
        rdfs:subClassOf  ja:RDFDataset .
ja:ViewGraph  rdfs:subClassOf  ja:Model .
<http://jena.hpl.hp.com/2008/tdb#GraphTDB>
        rdfs:subClassOf  ja:Model .
tdb2:GraphTDB2  rdfs:subClassOf  ja:Model .
ja:MemoryDataset  rdfs:subClassOf  ja:RDFDataset .
ja:RDFDatasetZero  rdfs:subClassOf  ja:RDFDataset .
<http://jena.apache.org/text#TextDataset>
        rdfs:subClassOf  ja:RDFDataset .
:service_tdb_all  a                   fuseki:Service ;
        rdfs:label                    "TDB2 garden" ;
        fuseki:dataset                :tdb_dataset_readwrite ;
        fuseki:name                   "garden" ;
        fuseki:serviceQuery           "query" , "" , "sparql" ;
        fuseki:serviceReadGraphStore  "get" ;
        fuseki:serviceReadWriteGraphStore
                "data" ;
        fuseki:serviceUpdate          "" , "update" ;
        fuseki:serviceUpload          "upload" .
:tdb_dataset_readwrite
        a              tdb2:DatasetTDB2 ;
        tdb2:location  "/home/garden-user/etc/fuseki/run/databases/garden" .
tdb2:GraphTDB  rdfs:subClassOf  ja:Model .
ja:RDFDatasetOne  rdfs:subClassOf  ja:RDFDataset .
ja:RDFDatasetSink  rdfs:subClassOf  ja:RDFDataset .
tdb2:DatasetTDB2  rdfs:subClassOf  ja:RDFDataset .

创建数据库配置文件「garden_rdf.ttl」。

sudo -u fuseki vi /home/garden-user/etc/fuseki/run/configuration/garden_rdf.ttl

garden_rdf.ttl 文件内容如下:

@prefix :      <http://base/#> .
@prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix tdb2:  <http://jena.apache.org/2016/tdb#> .
@prefix ja:    <http://jena.hpl.hp.com/2005/11/Assembler#> .
@prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .
@prefix fuseki: <http://jena.apache.org/fuseki#> .
tdb2:DatasetTDB  rdfs:subClassOf  ja:RDFDataset .
ja:DatasetTxnMem  rdfs:subClassOf  ja:RDFDataset .
<http://jena.hpl.hp.com/2008/tdb#DatasetTDB>
        rdfs:subClassOf  ja:RDFDataset .
ja:ViewGraph  rdfs:subClassOf  ja:Model .
<http://jena.hpl.hp.com/2008/tdb#GraphTDB>
        rdfs:subClassOf  ja:Model .
tdb2:GraphTDB2  rdfs:subClassOf  ja:Model .
ja:MemoryDataset  rdfs:subClassOf  ja:RDFDataset .
ja:RDFDatasetZero  rdfs:subClassOf  ja:RDFDataset .
<http://jena.apache.org/text#TextDataset>
        rdfs:subClassOf  ja:RDFDataset .
:service_tdb_all  a                   fuseki:Service ;
        rdfs:label                    "TDB2 garden_rdf" ;
        fuseki:dataset                :tdb_dataset_readwrite ;
        fuseki:name                   "garden_rdf" ;
        fuseki:serviceQuery           "query" , "" , "sparql" ;
        fuseki:serviceReadGraphStore  "get" ;
        fuseki:serviceReadWriteGraphStore
                "data" ;
        fuseki:serviceUpdate          "" , "update" ;
        fuseki:serviceUpload          "upload" .
:tdb_dataset_readwrite
        a              tdb2:DatasetTDB2 ;
        tdb2:location  "/home/garden-user/etc/fuseki/run/databases/garden_rdf" .
tdb2:GraphTDB  rdfs:subClassOf  ja:Model .
ja:RDFDatasetOne  rdfs:subClassOf  ja:RDFDataset .
ja:RDFDatasetSink  rdfs:subClassOf  ja:RDFDataset .
tdb2:DatasetTDB2  rdfs:subClassOf  ja:RDFDataset .

配置 Fuseki 服务。

sudo vi /etc/systemd/system/fuseki.service

fuseki.service 的内容如下:

[Unit]
Description=Fuseki

[Service]
# Edit environment variables to match your installation
Environment=FUSEKI_HOME=/home/garden-user/etc/fuseki
Environment=FUSEKI_BASE=/home/garden-user/etc/fuseki/run
# Edit the line below to adjust the amount of memory allocated to Fuseki
Environment=JVM_ARGS=-Xmx4G
# Edit to match your installation
ExecStart=/home/garden-user/etc/fuseki/fuseki-server
# Run as user "fuseki"
User=fuseki
Restart=on-abort
# Java processes exit with status 143 when terminated by SIGTERM, this
# should be considered a successful shutdown
SuccessExitStatus=143
### By default, the service logs to journalctl only.
### If additional logging to a file is required, uncomment the following three lines
# StandardOutput=syslog
# StandardError=syslog
# SyslogIdentifier=fuseki
### This logs to syslog. If, e.g., rsyslogd is used, you can provide a file
### /etc/rsyslog.d/fuseki.conf, consisting of the following two lines (uncommented)
### if $programname == 'fuseki' then /var/log/fuseki/stderrout.log
### if $programname == 'fuseki' then stop


[Install]
WantedBy=multi-user.target

重新加载配置文件。

sudo systemctl daemon-reload

将服务设为自动启动。

sudo systemctl enable fuseki

启动 Fuseki 服务。

sudo systemctl start fuseki

用浏览器访问 Apache Jena Fuseki。

http://localhost:3030/