jena环境配置、RDF创建、编辑和保存至本地文件,以及sparql查询

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文件访问不了,会发生异常。上述代码均调试通过。

猜你喜欢

转载自blog.csdn.net/IT_BOY__/article/details/85487523