所谓语义(1)

1.在http://www.ldodds.com/foaf/foaf-a-matic.html通过图形化界面生成rdf文件,文件内容如下

所谓语义(1)

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.执行结果所谓语义(1)

通过2中的spaql语句可以看出,要查找的是认识John的人是谁,显示结果是George V,这就是通过它们两个的语义关系获取到的结果。