您的位置:首页 > 数据库

使用Jena访问RDF数据库环境搭

2017-10-12 16:16 513 查看


一、基本概念


Ø RDF:资源描述框架,RDF使用XML语法和RDF
Schema(RDFS)来将元数据描述成为数据模型。
Ø XML:可扩展标记语言
Ø 元数据:即Metadata,又称中介数据、中继数据,为描述数据的数据,主要是描述数据的属性信息。
Ø Jena:一个用于构造语义网(Semantic
Web)及关联数据(Linked Data)应用的Java开源构架。
Ø Semantifc
Web:即语义网,通过给全球信息网上文档添加能够被计算机理解的语义元数据,从而使整个互联网成为一个通用的信息交换媒介。
Ø Linked
Data:关联数据的提出是为了构建一张计算机能理解的语义数据网络,而不仅仅是人能读懂的文档网络,以便于在此之上构建更智能的应用。
Ø SparQL:SPARQL
Protocol and RDF Query Language,是为RDF开发的一种查询语言和数据获取协议。
Ø ARQ:Jena提供的一个支持SPARQL语言的RDF查询引擎。

二、Jena安装


1. 官网下载(http://jena.apache.org/download/)Jena压缩包,解压到本地
2. 配置JENA_HOME为Jena根目录
3. 将$JENA_HOME/bin、(windows
%JENA_HOME%/bat)添加到PATH中

三、官网提供的ARQ查询例子


1. Sparql语法的rq文件编写
SELECT ?x
WHERE { ?x  <http://www.w3.org/2001/vcard-rdf/3.0#FN>  "John Smith" }
表达式中,where语句中是个三元组,谓语、宾语部分是个确定的值,整个表达式是含义是:查询FN为”John
Smith”的三元组。表达式中,主语是个变量,并且没有其他的限制条件加在变量上。该表达式会匹配任意的三元组:谓语为FN,宾语为”John
Smith”。
2. 命令行查询
Ø Windows:bat\sparql.bat
--data=doc\Tutorial\vc-db-1.rdf --query=doc\Tutorial\q1.rq
Ø Linux:bin/sparql
--data=doc/Tutorial/vc-db-1.rdf --query=doc/Tutorial/q1.rq
查询结果如下:
----------------------------------------------------
| x                             |
=================================
| <http://somewhere/JohnSmith/>   |
----------------------------------------------------
上面例子中,?x表示变量x,这里的问号并非变量名的一部分,它并不在结果中出现。
<>中包含的是一个URI(确切的说,是个IRI),””中包含是一个纯文本内容。查询结果说明有一个三元组符合条件。

四、使用Fuseki访问RDF数据库

1) fuseki下载解压


官网下载(http://jena.apache.org/download/#jena-fuseki)fuseki压缩包,解压到本地

2) fuseki服务启动命令


fuseki-server --loc=L:\DB\RDF\databases\tdbtest /tdbtest
其中,--loc指定的参数为RDF数据库路径,最后一个参数为HTTP
Server的访问路径。
--port=PORT是指定端口的指令,默认3030;
启动成功命令界面如下:
 

 
服务启动后,打开http://localhost:3030/,选择query,就可以通过执行sparql语句,操作RDF数据库。
 

 

五、Java代码中通过SPARQL方式访问TDB


TDB是Jena查询、存储RDF重要组成部分。TDB数据集访问一次只能被单个JVM访问,否则会出错。
下面给出本地环境,测试的例子:
 package com.bmlcz.jena;

import org.apache.jena.query.Dataset;
import org.apache.jena.query.Query;
import org.apache.jena.query.QueryExecution;
import org.apache.jena.query.QueryExecutionFactory;
import org.apache.jena.query.QueryFactory;
import org.apache.jena.query.ResultSet;
import org.apache.jena.query.ResultSetFormatter;
import org.apache.jena.rdf.model.Model;
import org.apache.jena.tdb.TDBFactory;

public class TDBFactoryTest {

static String personURI = "http://somewhere/JohnSmith";
static String fullName = "John Smith";

public static void main(String[] args) {
// Make a TDB-backed dataset
String directory = "L:\\DB\\RDF\\databases\\tdbtest";
Dataset dataset = TDBFactory.createDataset(directory);
Model model = dataset.getDefaultModel();
String queryString = "PREFIX vcard: <http://www.w3.org/2001/vcard-rdf/3.0#>"
+ "select ?vcard ?b ?c where"
+ "{"
+ "?vcard ?b ?c."
+ "}";
Query query = QueryFactory.create(queryString);
QueryExecution qe = QueryExecutionFactory.create(query, model);
ResultSet results = qe.execSelect();
ResultSetFormatter.out(System.out, results, query);
qe.close();
dataset.end();
dataset.close();
}
}
上面例子用于查询数据库中所有的三元组。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Jena Java RDF