Ø 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查询引擎。
1. 官网下载(http://jena.apache.org/download/)Jena压缩包,解压到本地
2. 配置JENA_HOME为Jena根目录
3. 将$JENA_HOME/bin、(windows %JENA_HOME%/bat)添加到PATH中
1. Sparql语法的rq文件编写
SELECT ?x
WHERE { ?x
表达式中,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 |
=================================
|
----------------------------------------------------
上面例子中,?x表示变量x,这里的问号并非变量名的一部分,它并不在结果中出现。
<>中包含的是一个URI(确切的说,是个IRI),””中包含是一个纯文本内容。查询结果说明有一个三元组符合条件。
官网下载(http://jena.apache.org/download/#jena-fuseki)fuseki压缩包,解压到本地
fuseki-server --loc=L:\DB\RDF\databases\tdbtest /tdbtest
其中,--loc指定的参数为RDF数据库路径,最后一个参数为HTTP Server的访问路径。
--port=PORT是指定端口的指令,默认3030;
启动成功命令界面如下:
服务启动后,打开http://localhost:3030/,选择query,就可以通过执行sparql语句,操作RDF数据库。
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: "
+ "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();
}
}
上面例子用于查询数据库中所有的三元组。