jena安装以及环境配置参考:https://blog.csdn.net/u013819513/article/details/79903106
创建,编辑,输出RDF三元组数据,并保存至文件里,再sparql检索。
例如:
person1 name 张三
person2 name 李四
person3 name 王五
person4 name 赵六
import java.io.FileWriter;
import java.io.IOException;
import org.apache.jena.rdf.model.Model;
import org.apache.jena.rdf.model.ModelFactory;
import org.apache.jena.rdf.model.Property;
import org.apache.jena.rdf.model.RDFNode;
import org.apache.jena.rdf.model.Resource;
import org.apache.jena.rdf.model.Statement;
import org.apache.jena.rdf.model.StmtIterator;
import org.apache.jena.vocabulary.VCARD;
public class CreateRDF {
public static void main(String[] args) {
String[] personURI ={ "http://somewhere/Person1", "http://somewhere/Person2",
"http://somewhere/Person3","http://somewhere/Person4"};
String[] fullName = {"张三","李四","王五","赵六"};
Model model = ModelFactory.createDefaultModel();
for (int i=0;i<personURI.length;i++){
Resource person = model.createResource(personURI[i]);
person.addProperty(VCARD.FN, fullName[i]);
}
FileWriter fwriter = null;
try {
fwriter = new FileWriter("D:\\person.rdf");//没有文件会自动创建
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
model.write(fwriter); //写入文件,默认是xml方式,可以自己指定
model.write(System.out,"Turtle");//以Turtle的形式标准输出至控制台
StmtIterator iter = model.listStatements();
while(iter.hasNext())
{
Statement statement = iter.nextStatement();
Resource subject = statement.getSubject();
Property predicate = statement.getPredicate();
RDFNode object = statement.getObject();
System.out.print(subject.toString()+" "+predicate.toString()+" ");
if(object instanceof Resource){
System.out.println(object.toString()+".");
}else{
System.out.println("\""+object.toString()+"\""+".");
}
}
}
}
使用sparql进行检索:
import org.apache.jena.query.Query;
import org.apache.jena.query.QueryExecution;
import org.apache.jena.query.QueryExecutionFactory;
import org.apache.jena.query.QueryFactory;
import org.apache.jena.query.ResultSet;
import org.apache.jena.query.ResultSetFormatter;
import org.apache.jena.rdf.model.Model;
import org.apache.jena.rdf.model.ModelFactory;
public class MyQuery {
public static void main(String[] args) {
// TODO Auto-generated method stub
Model model = ModelFactory.createDefaultModel();
model.read("D:\\person.rdf");//默认是xml读取,如该rdf是以其他形式存储的,则加上相应的参数
//model.read("D:\\person.rdf","Turtle");
model.write(System.out);
String queryString = "SELECT ?x WHERE{<http://somewhere/Person4> ?e ?x}";
Query query = QueryFactory.create(queryString);
QueryExecution qExecution = QueryExecutionFactory.create(query,model);
ResultSet results = qExecution.execSelect();
ResultSetFormatter.out(System.out, results, query);//查询结果以标准格式输出至控制台
qExecution.close();
}
}
注意:文件需要以绝对路径给出,放在项目下的rdf文件访问不了,会发生异常。上述代码均调试通过。