1. RDF4J 설치 방법
https://rdf4j.org/download/#rdf4j-35 링크 접속
1) RDF4J 3.6.3 SDK를 다운로드
2) 압축 파일 해제
3) .war 파일 Eclipse로 Import
2. Tomcat Server 8.0 설치
현재 테스트한 톰캣 버전은 8.0.36 버전이다.
# 톰캣 서버에 꼭 rdf4j-server와 rdf4j-workbench 2개의 .war 파일이 동작해야 정상적으로 동작한다.
3. RDF4J 서버와 워크벤치 가동
http://localhost:8080/rdf4j-workbench/ 링크를 통해 워크벤치 웹페이지에 접속해본다.
위 워크벤치에서 Repository를 자유롭게 생성할 수 있고, Repository에 RDF와 같은 Triple을 업로드하여 조회, 관리 기능을 사용할 수 있게 된다.
4. RDF4J 서버에 RDF 파일 추가
Workbench에서 Modify – Add 를 선택하면 RDF파일을 업로드 할 수 있는 화면이 나오는데, 여기서 파일을 선택하면 자동적으로 Base URI, Context가 설정된다.
5. FilePath 설정
기본적으로 응용 프로그램이 Windows에서 'LocalService'사용자 계정으로 실행되는 경우의 디렉터리는 “C:\Documents and Settings\LocalService\Application Data\RDF4J\”로 설정된다.
http://localhost:8080/rdf4j-server/system/overview.view 에 접속해서 Repository의 경로를 확인할 수 있다.
# Tomcat 실행시 Arguments의 설정에 -Dorg.eclipse.rdf4j.appdata.basedir=“경로”를 입력해주면 해당 경로로 Repository가 설정된다.
6. 라이브러리 설정
Java측에서 RDF4J Server로 Select하거나 Create 등 제어, 조회를 할 때 위와 같은 라이브러리가 요구된다.
기본적으로 rdf4j-xxxx-.3.0.jar과 같은 3.0 버전을 이용할 때에 정상적으로 작동했다.
또한 server와 connect할 때에 uri와 repository를 통해서 접근하기 때문에 추가적으로 httpclient-4.5.2, httpcore-4.4.14, commons-logging-1.2의 라이브러리가 필요했다.
RDF4J는 Maven Project 기반을 권장하고 있어서, pom.xml에 Dependency를 사용해도 된다.
하지만 위와 같은 요구되는 라이브러리를 빠짐없이 사용해야만 정상적으로 RDF4J API를 사용할 수 있다.
7. AddFile
import java.io.File;
import java.io.IOException;
import org.eclipse.rdf4j.RDF4JException;
import org.eclipse.rdf4j.repository.Repository;
import org.eclipse.rdf4j.repository.RepositoryConnection;
import org.eclipse.rdf4j.repository.http.HTTPRepository;
import org.eclipse.rdf4j.rio.RDFFormat;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public static void main(String[] args) {
Logger logger = LoggerFactory.getLogger(AddFile.class);
logger.info("Hello World");
long startTime = System.currentTimeMillis();
String rdf4jServer = "http://localhost:8080/rdf4j-server/";
String repositoryID = "test1";
Repository repo = new HTTPRepository(rdf4jServer, repositoryID);
RepositoryConnection con = null;
File file = new File("D://DumpEarth20130604.rdf");
String baseURI = "http://www.w3.org/1999/02/22-rdf-syntax-ns#";
try {
con = repo.getConnection();
con.add(file, baseURI, RDFFormat.RDFXML);
} catch (RDF4JException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
con.close();
repo.shutDown();
}
long endTime = System.currentTimeMillis();
System.out.println("### Run Time : " + (endTime - startTime) / 1000.0 + "sec");
System.out.println("### Finish");
}
AddFile의 코드에서 Import되는 패키지는 위와 같다.
정상적으로 실행이 될 경우 위와 같은 출력물이 나온다.
8. AddFile(2)
임의로 지정했던 temp_repository 저장소에 test2라는 repository를 생성하고,
Workbench를 확인해보면 RDFFile이 정상적으로 들어간 것을 확인할 수 있다.
9. SelectQuery
import org.eclipse.rdf4j.model.Value;
import org.eclipse.rdf4j.query.BindingSet;
import org.eclipse.rdf4j.query.QueryLanguage;
import org.eclipse.rdf4j.query.TupleQuery;
import org.eclipse.rdf4j.query.TupleQueryResult;
import org.eclipse.rdf4j.repository.Repository;
import org.eclipse.rdf4j.repository.RepositoryConnection;
import org.eclipse.rdf4j.repository.http.HTTPRepository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public static void main(String[] args) {
Logger logger = LoggerFactory.getLogger(SelectQuery.class);
logger.info("Hello World");
String rdf4jServer = "http://localhost:8080/rdf4j-server/";
String repositoryID = "test1";
HTTPRepository repo = new HTTPRepository(rdf4jServer, repositoryID);
try (RepositoryConnection con = repo.getConnection()) {
String queryString = "SELECT ?s ?p ?o WHERE { ?s ?p ?o }";
TupleQuery tupleQuery = con.prepareTupleQuery(QueryLanguage.SPARQL, queryString);
try (TupleQueryResult result = tupleQuery.evaluate()) {
while (result.hasNext()) {
BindingSet bindingSet = result.next();
// System.out.println(bindingSet);
Value s = bindingSet.getValue("s");
Value p = bindingSet.getValue("p");
Value o = bindingSet.getValue("o");
//
System.out.println("=====");
System.out.println(s);
System.out.println(p);
System.out.println(o);
System.out.println("=====");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
con.close();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
repo.shutDown();
}
}
Select Query도 Jena와 동일하게 SPARQL문법을 사용하여 해당 RDF Server에 등록된 RDF 파일을 조회할 수가 있다.
'Java > RDF&Jena' 카테고리의 다른 글
[Ontology] 온톨로지란? 시맨틱 웹의 기초 (0) | 2020.03.30 |
---|---|
Jena TDB CRUD 사용 (0) | 2020.03.27 |
[Jena] Apache Jena TDB란? (0) | 2020.03.27 |
[RDF] Parse error: Bad character in IRI(space) 해결 방법 (0) | 2020.03.27 |
[Jena] Apache Jena Fuseki 리눅스 설치 방법 (0) | 2020.03.27 |