序
本文主要展示下如何使用apache jena对RDF文档进行SPARQL查询
相关知识
RDF
资源描述框架(Resource Description Framework),一种用于描述Web资源的标记语言。使用XML语法和RDF Schema(RDFS)来将元数据描述成为数据模型。
SPARQL
SPARQL(SPARQL Protocol and RDF Query Language),是为RDF开发的一种查询语言和数据获取协议,它是为W3C所开发的RDF数据模型所定义,但是可以用于任何可以用RDF来表示的信息资源。
Apache Jena
Jena是一个Java工具箱用于开发基于RDF与OWL语义(semantic)Web应用程序。它提供了一个RDF API;ARP,一个RDF解析器;SPARQL,W3C RDF查询语言;一个OWL API;和基于规则的RDFS与OWL接口。ARQ是Jena中的SPARQL查询引擎。
实例
maven
<dependency>
<groupId>org.apache.jena</groupId>
<artifactId>jena-core</artifactId>
<version>3.7.0</version>
</dependency>
<dependency>
<groupId>org.apache.jena</groupId>
<artifactId>jena-arq</artifactId>
<version>3.7.0</version>
</dependency>
RDF文档
<?xml version="1.0"?>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cd="http://www.example.com/cd#">
<rdf:Description
rdf:about="http://www.example.com/cd/EmpireBurlesque">
<cd:artist>Bob Dylan</cd:artist>
<cd:country>USA</cd:country>
<cd:company>Columbia</cd:company>
<cd:price>10.90</cd:price>
<cd:year>1985</cd:year>
</rdf:Description>
<rdf:Description
rdf:about="http://www.example.com/cd/Hideyourheart">
<cd:artist>Bonnie Tyler</cd:artist>
<cd:country>UK</cd:country>
<cd:company>CBS Records</cd:company>
<cd:price>9.90</cd:price>
<cd:year>1988</cd:year>
</rdf:Description>
</rdf:RDF>
SPARQL查询
@Test
public void testJenaQuery(){
Model model = ModelFactory.createDefaultModel();
model.read(this.getClass().getClassLoader().getResourceAsStream("demo.rdf"), null);
String queryString = "PREFIX cd: <http://www.example.com/cd#> \n " +
"SELECT ?name where { ?item cd:artist ?name }";
Query query = QueryFactory.create(queryString);
QueryExecution qe = QueryExecutionFactory.create(query, model);
ResultSet results = qe.execSelect();
ResultSetFormatter.out(System.out, results, query);
}
输出
------------------
| name |
==================
| "Bonnie Tyler" |
| "Bob Dylan" |
------------------
小结
SPARQL是针对RDF的查询语言,类似SQL,但是又不尽相同,略有点学习成本,有待深入研究下。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。