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


一、基本概念

Ø RDF:资源描述框架,RDF使用XML语法和RDF SchemaRDFS)来将元数据描述成为数据模型。

Ø XML:可扩展标记语言

Ø 元数据:即Metadata,又称中介数据、中继数据,为描述数据的数据,主要是描述数据的属性信息。

Ø Jena:一个用于构造语义网(Semantic Web)及关联数据(Linked Data)应用的Java开源构架。

Ø Semantifc Web:即语义网,通过给全球信息网上文档添加能够被计算机理解的语义元数据,从而使整个互联网成为一个通用的信息交换媒介。

Ø Linked Data:关联数据的提出是为了构建一张计算机能理解的语义数据网络,而不仅仅是人能读懂的文档网络,以便于在此之上构建更智能的应用。

Ø SparQLSPARQL Protocol and RDF Query Language,是为RDF开发的一种查询语言和数据获取协议。

Ø ARQJena提供的一个支持SPARQL语言的RDF查询引擎。

二、Jena安装

1. 官网下载(http://jena.apache.org/download/Jena压缩包,解压到本地

2. 配置JENA_HOMEJena根目录

3. $JENA_HOME/bin、(windows %JENA_HOME%/bat)添加到PATH

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

1. Sparql语法的rq文件编写

SELECT ?x

WHERE { ?x    "John Smith" }

表达式中,where语句中是个三元组,谓语、宾语部分是个确定的值,整个表达式是含义是:查询FNJohn Smith的三元组。表达式中,主语是个变量,并且没有其他的限制条件加在变量上。该表达式会匹配任意的三元组:谓语为FN,宾语为John Smith

2. 命令行查询

Ø Windowsbat\sparql.bat --data=doc\Tutorial\vc-db-1.rdf --query=doc\Tutorial\q1.rq

Ø Linuxbin/sparql --data=doc/Tutorial/vc-db-1.rdf --query=doc/Tutorial/q1.rq

查询结果如下:

----------------------------------------------------

| x                             |

=================================

|   |

----------------------------------------------------

上面例子中,?x表示变量x,这里的问号并非变量名的一部分,它并不在结果中出现。

<>中包含的是一个URI(确切的说,是个IRI),””中包含是一个纯文本内容。查询结果说明有一个三元组符合条件。

四、使用Fuseki访问RDF数据库

1) fuseki下载解压

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

2) fuseki服务启动命令

fuseki-server --loc=L:\DB\RDF\databases\tdbtest /tdbtest

其中,--loc指定的参数为RDF数据库路径,最后一个参数为HTTP Server的访问路径。

--port=PORT是指定端口的指令,默认3030

启动成功命令界面如下:

 使用Jena访问RDF数据库环境搭_第1张图片 

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

 使用Jena访问RDF数据库环境搭_第2张图片 

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

TDBJena查询、存储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: " 
				+ "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();
	}
}

上面例子用于查询数据库中所有的三元组。

你可能感兴趣的:(Java)