序
本文主要展示下如何使用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,但是又不盡相同,略有點學習成本,有待深入研究下。