共计 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),欢迎大家关注~
正文完