티스토리 뷰

Jena TDB에 적재된 트리플들을 select 하기 위한 여러가지 코드들을 적어보려고 한다.

제일 먼저 가장 기본적으로 사용되는 단순 SPARQL select 구문이 되겠다.

dataset.begin(ReadWrite.READ) ; 라인과 dataste.end(); 라인은 트랜잭션 처리를 위해서

사용하는 라인이기 때문에 트랜잭션 처리를 하지 않을 경우에는 사용하지 않아도 된다.

public void select() {
	String directory = "D:/Data/TDB" ;
	Dataset dataset = TDBFactory.createDataset(directory);
	dataset.begin(ReadWrite.READ) ;
	String sparqlQueryString = "SELECT * WHERE { GRAPH ?graph { ?s ?p ?o } } limit 10";
	Query query = QueryFactory.create(sparqlQueryString) ;
	QueryExecution qexec = QueryExecutionFactory.create(query, dataset) ;
	ResultSet results = qexec.execSelect() ;
	ResultSetFormatter.out(results) ;
	qexec.close() ;
	dataset.end();
	dataset.close();
}

결과는 ResultSetFormatter 를 사용하기  때문에 아래와 같이 나오게 된다.

ResultSetFormatter 를 사용하지 않고 QuerySolution을 사용하게 되면 질의 결과에 대한 유연한 처리가 가능하다.

 

	public void select2() {
		String directory = "D:/Data/TDB" ;
		Dataset dataset = TDBFactory.createDataset(directory);
		dataset.begin(ReadWrite.READ) ;
		String sparqlQueryString = "SELECT * WHERE { GRAPH ?graph { ?s ?p ?o } } limit 10";
		Query query = QueryFactory.create(sparqlQueryString) ;
		QueryExecution qexec = QueryExecutionFactory.create(query, dataset) ;
		ResultSet results = qexec.execSelect() ;
		for ( ; results.hasNext() ; ){
			QuerySolution soln = results.nextSolution() ;
			RDFNode s = soln.get("s");
			RDFNode p = soln.get("p");
			RDFNode o = soln.get("o");
			System.out.println("s = " + s +" p = " + p + " o = "+o) ;
		}
		qexec.close() ;
		dataset.end();
		dataset.close();
	}

TDB의 dataset에서 바로 처리하지 않고 Jena Model에 담아서 처리할 수도 있다.

public void selectFromDefaultModel() {
	String directory = "D:/Data/TDB" ;
	Dataset dataset = TDBFactory.createDataset(directory);
	try {
		Model model = dataset.getDefaultModel();

		System.out.println(model.size());
		String sparqlQueryString = "SELECT * WHERE { ?s ?p ?o }";
		
		Query query = QueryFactory.create(sparqlQueryString);
		QueryExecution qexec = QueryExecutionFactory.create(query, model);
		ResultSet results = qexec.execSelect();
		ResultSetFormatter.out(results) ;

	} finally {
		dataset.close();
	}
}

TDB에 적재할 때 그래프명을 따로 지정하였거나 N-Quad 형식의 데이터를 적재하였다면 그래프 단위로 select를 할 수도 있다.

public void selectFromNamedModel() {
	String directory = "D:/Data/TDB" ;
	Dataset dataset = TDBFactory.createDataset(directory);
	try {
		Model model = dataset.getNamedModel("http://test.com");
		
		System.out.println(model.size());
		String sparqlQueryString = "SELECT * WHERE { ?s ?p ?o }";
		
		Query query = QueryFactory.create(sparqlQueryString);
		QueryExecution qexec = QueryExecutionFactory.create(query, model);
		ResultSet results = qexec.execSelect();
		ResultSetFormatter.out(results) ;
		
	} finally {
		dataset.close();
	}
}

다음 포스트에는 TDB에 데이터를 적재하는 방법에 대해서 살펴보겠다.

최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함