1.在http://www.ldodds.com/foaf/foaf-a-matic.html通过图形化界面生成rdf文件,文件内容如下
2.创建工程(ECLIPSE当中),类代码如下
package test;
import java.util.Iterator;
import com.hp.hpl.jena.query.Query;
import com.hp.hpl.jena.query.QueryExecution;
import com.hp.hpl.jena.query.QueryExecutionFactory;
import com.hp.hpl.jena.query.QueryFactory;
import com.hp.hpl.jena.query.QuerySolution;
import com.hp.hpl.jena.query.ResultSet;
import com.hp.hpl.jena.rdf.model.Literal;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.util.FileManager;
public class Main {
public static void main(String[] args)
{
/*TODO Auto-generated method stub
FileManager.get().addLocatorClassLoader(Main.class.getClassLoader());
Model model = FileManager.get().loadModel("C:\\home\\ijd\\workspace-tutorial\\JenaApp\\src\\test\\data.rdf");
model.write(System.out,"TURTLE");
*/
sparqlTest();
}
static void sparqlTest()
{
FileManager.get().addLocatorClassLoader(Main.class.getClassLoader());
Model model = FileManager.get().loadModel("C:\\home\\ijd\\workspace-tutorial\\JenaApp\\src\\test\\data.rdf");
String queryString =
"PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-systax-ns#>" +
"PREFIX foaf:<http://xmlns.com/foaf/0.1/>" +
"SELECT * WHERE {" +
"?person foaf:name ?x ." +
"?person foaf:knows ?person2 ." +
"?person2 foaf:name ?y ." +
"FILTER(?y = \"John\")" +
"}";
Query query = QueryFactory.create(queryString);
QueryExecution qexec = QueryExecutionFactory.create(query,model);
try {
ResultSet results = qexec.execSelect();
while (results.hasNext()) {
QuerySolution soln = results.nextSolution();
Literal name = soln.getLiteral("x");
System.out.println(name);
}
}finally {
qexec.close();
}
}
}
3.执行结果
通过2中的spaql语句可以看出,要查找的是认识John的人是谁,显示结果是George V,这就是通过它们两个的语义关系获取到的结果。