SPARQL入门二使用Java操作ARQ

39次阅读

共计 3170 个字符,预计需要花费 8 分钟才能阅读完成。

  在文章 SPARQL 入门(一)SPARQL 简介与简单使用中,我们了解了 RDF、SPARQL 以及基于 Java 编写的 SPARQL 处理器 ARQ。在本文中,笔者将会如何使用 Java 来操作 ARQ。
  注意到在 Jena 的官网 http://jena.apache.org/download/index.cgi 说明中,有关于 Maven 的使用方法介绍:

因此可以使用 Maven,然后再用 Java 来操作 ARQ,Javadoc 的网址为:http://jena.apache.org/documentation/javadoc/arq/。

  在本文中我们使用另一种项目构建工具——Gradle,项目工程截图如下:

  我们需要修改的文件为 build.gradle, ex002.ttl 以及 ARQ_TEST.java。其中 build.gradle 可以加载 jena 的 jar,具体内容如下:

plugins {id 'java'}

group 'com.kg.learn'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

repositories {mavenCentral()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
    // https://mvnrepository.com/artifact/org.apache.jena/jena-arq
    compile group: 'org.apache.jena', name: 'jena-arq', version: '3.11.0'
    // https://mvnrepository.com/artifact/org.slf4j/slf4j-api
    compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.26'
    // https://mvnrepository.com/artifact/org.slf4j/slf4j-simple
    compile group: 'org.slf4j', name: 'slf4j-simple', version: '1.7.26'
}

  ex002.ttl 为 RDF 文档,储存了我们的示例三元组,内容如下:

# filename: ex002.ttl

@prefix ab: <http://learningsparql.com/ns/addressbook#> .

ab:richard ab:homeTel "(229) 276-5135" . 
ab:richard ab:email   "richard49@hotmail.com" . 

ab:cindy ab:homeTel "(245) 646-5488" . 
ab:cindy ab:email   "cindym@gmail.com" . 

ab:craig ab:homeTel "(194) 966-1505" . 
ab:craig ab:email   "craigellis@yahoo.com" . 
ab:craig ab:email   "c.ellis@usairwaysgroup.com" .

  接着就是我们的项目主角 ARQ_TETS.java,代码如下:

import org.apache.jena.query.*;
import org.apache.jena.rdf.model.Model;
import org.apache.jena.rdf.model.ModelFactory;

public class ARQ_TEST {public static void main(String[] args) {Model model = ModelFactory.createDefaultModel();
        //ttl 文件路径
        model.read("/Users/kg/IdeaProjects/arq_test/src/main/java/ex002.ttl");
        // 查询语句, 查询 craig 的电子邮件地址
        String queryString = "PREFIX ab: <http://learningsparql.com/ns/addressbook#> \n" +
                "\n" +
                "SELECT ?craig_email\n" +
                "WHERE\n" +
                "{ab:craig ab:email ?craig_email .}";
        Query query = QueryFactory.create(queryString);
        QueryExecution qe = QueryExecutionFactory.create(query, model);
        ResultSet results = qe.execSelect();
        // 输出结果
        ResultSetFormatter.out(System.out, results, query);
    }
}

输出结果如下:

--------------------------------
| craig_email                  |
================================
| "c.ellis@usairwaysgroup.com" |
| "craigellis@yahoo.com"       |
--------------------------------

以上是查询“craig 的电子邮件地址”的代码。如果我们想要知道 cindy 的全部属性及属性值,可以使用以下 Java 代码:

import org.apache.jena.query.*;
import org.apache.jena.rdf.model.Model;
import org.apache.jena.rdf.model.ModelFactory;

public class ARQ_TEST {public static void main(String[] args) {Model model = ModelFactory.createDefaultModel();
        //ttl 文件路径
        model.read("/Users/kg/IdeaProjects/arq_test/src/main/java/ex002.ttl");
        // 查询语句, 查询 cindy 的全部属性及属性值
        String queryString = "PREFIX ab: <http://learningsparql.com/ns/addressbook#> \n" +
                "\n" +
                "SELECT ?propertyName ?propertyValue\n" +
                "WHERE\n" +
                "{ab:cindy ?propertyName ?propertyValue .}";
        Query query = QueryFactory.create(queryString);
        QueryExecution qe = QueryExecutionFactory.create(query, model);
        ResultSet results = qe.execSelect();
        // 输出结果
        ResultSetFormatter.out(System.out, results, query);
    }
}

输出结果如下:

-------------------------------------
| propertyName | propertyValue      |
=====================================
| ab:email     | "cindym@gmail.com" |
| ab:homeTel   | "(245) 646-5488"   |
-------------------------------------

  本次分享到此结束,有机会我们再来深入地学习 ARQ 的 Javadoc。

注意:不妨了解下笔者的微信公众号:Python 爬虫与算法(微信号为:easy_web_scrape),欢迎大家关注~

正文完
 0