Jena ARQ小試牛刀

weixin_34357887發表於2018-04-14

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

doc

相關文章