在文章SPARQL入門(一)SPARQL簡介與簡單使用中,咱們瞭解了RDF、SPARQL以及基於Java編寫的SPARQL處理器ARQ。在本文中,筆者將會如何使用Java來操做ARQ。
注意到在Jena的官網http://jena.apache.org/download/index.cgi 說明中,有關於Maven的使用方法介紹:java
所以能夠使用Maven,而後再用Java來操做ARQ,Javadoc的網址爲:http://jena.apache.org/documentation/javadoc/arq/ 。web
在本文中咱們使用另外一種項目構建工具——Gradle,項目工程截圖以下:算法
咱們須要修改的文件爲build.gradle, ex002.ttl以及ARQ_TEST.java。其中build.gradle能夠加載jena的jar,具體內容以下:apache
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文檔,儲存了咱們的示例三元組,內容以下:api
# 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); } }
輸出結果以下:maven
-------------------------------- | 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 。gradle
注意:不妨瞭解下筆者的微信公衆號: Python爬蟲與算法(微信號爲:easy_web_scrape), 歡迎你們關注~