Cloudera CDH/CDP 및 Hadoop EcoSystem, Semantic IoT등의 개발/운영 기술을 정리합니다. gooper@gooper.com로 문의 주세요.
0. RDF4J의 rdf4j-server.war가 제공하는 RESTFul API를 이용하여 repository에 대해서 triple(statement) data를 이용하여 CRUD operation하는 방법을 기록한다(많은 부분에서 일부만 정리함).(POSTMAN등의 툴을 이용하여 호출한다, 리포지토리명 : gTest)
(*참조 : http://docs.rdf4j.org/rest-api/#_repository_queries)
* Content-Type은 Body값(data)에 따라서 다르게 지정해야함
가. text/plain;charset=UTF-8 : triple data는 text형태로 1개만 지정 가능함
나. application/x-turtle;charset=UTF-8 : triple data를 text형태로 여러개 지정 가능함
다. text/turtle;charset=UTF-8 : triple data를 text형태로 여러개 지정 가능함
라. application/rdf+xml;charset=UTF-8 : post data를 rdf+xml로 지정해야함
* 주석은 #을 이용함
1. 데이타(statements 혹은 triples) 등록/수정
가. POST방식으로 입력
- URL : http://www.gooper.com/rdf4j-server/repositories/gTest/statements
- METHOD : POST
- HEADERS : Content-Type-> application/x-turtle;charset=UTF-8
- BODY : 등록할 triple data
- 수행결과 : HTTP/1.1 204 NO CONTENT
: 여러개의 triple입력 가능함(triple 끝에는 각각 .을 찍어줄것)
: body에 등록할 데이타를 triple형태로 나열함
: 동일한것은 무시하고 새로운것만 등록함
: ?s ?p가 동일하고 ?o가 다른 경우는 ?o의 값을 update하지 않고 새로운 statement로 입력함.
나. PUT방식으로 입력(전체 데이타를 지우고 PUT에서 지정된 data를 입력하는 경우가 대부분이고 가끔 정상적으로 동작함)
- URL : http://www.gooper.com/rdf4j-server/repositories/gTest/statements
- METHOD : PUT
- HEADERS : Content-Type-> application/x-turtle;charset=UTF-8
- BODY : 등록할 triple data
- 수행결과 : 없음
: 여러개의 triple지정 가능함 (triple 끝에는 각각 .을 찍어줄것)
: ?s ?p가 같고 ?o가 다른 경우는 새롭게 등록하지 않고 ?o값을 update함.
다. SPARQL 1.1의 Update string에 설명되어 있는 update수행 <- sample로 기록한 내용은 실행되나 언제 쓰는건지 모르겟음
- URL : http://www.gooper.com/rdf4j-server/repositories/gTest/statements
- METHOD : POST
- HEADERS : Content-Type-> application/x-www-form-urlencoded
- BODY : update=INSERT%20{?s%20?p%20?o}%20WHERE%20{?s%20?p%20?o}
- 수행결과 : HTTP/1.1 204 NO CONTENT
라. BODY에 나열된 데이타를 단일 transaction으로 취급하여 POST 수행 <- sample로 기록한 내용은 실행되나 오류가 1건있는 데이타 포함 총 2건의 triple data로 테스트 하면 오류없는 1건만 등록됨
- URL : http://www.gooper.com/rdf4j-server/repositories/gTest/statements
- METHOD : POST
- HEADERS : Content-Type-> application/x-rdftransaction(?) -> text/plain으로 지정해야 text로 기록된 데이타를 정상처리함
- BODY : triple 데이타 목록
- 수행결과 : HTTP/1.1 204 NO CONTENT
2. 데이타 조회
가. GET방식으로 ?s ?p ?o를 지정하여 조회하기
- METHOD : GET (GET, POsT모두 사용가능하며 URL-encoded값이 GET의 길이를 넘어가는 경우 POST를 사용하고 POST를 사용하는 경우는 Content-Type을 www-form-urlencoded로 지정해야한다)
- HEADERS : Accept-> application/sparql-results+xml, */*;q=0.5
- BODY : 없음
- 수행결과 : 조회결과
<?xml version='1.0' encoding='UTF-8'?> <sparql xmlns='http://www.w3.org/2005/sparql-results#'> <head> <variable name='p'/> <variable name='o'/> </head> <results> <result> <binding name='p'> <uri>http://www.gooper.com/hasName1</uri> </binding> <binding name='o'> <uri>http://www.gooper.com/parksanghyeon1</uri> </binding> </result> </results> </sparql>
: 호출할때 query부분은 sparql문장을 사용하며 반드시 URL encoding해서 지정해야한다.
: limit_query=100는 리턴되는 결과 개수를 100개로 제한한다.
: infer=true는 추론을 수행여부를 true로 설정한다.
: queryLn=SPARQL은 sparql로 쿼리를 수행한다고 표시함
: distinct=true는 distinct 적용여부를 true로 설정
: timeout=0, maximum query수행시간을 초단위로 지정한다. 0(defualt)는 제한없음.
: offset=10, query결과에서 skip할 개수를 지정한다.
: $<varname>, 바인딩한 변수를 지정한다. sparql에서 바인딩으로 지정한 변수가 있으면 여기서 지정한 값으로 치환한다.
나. 전체를 조회하는 경우 : GET방식으로 인수를 지정하지 않고 호출하면 전체 데이타가 리턴됨
- URL : http://www.gooper.com/rdf4j-server/repositories/gTest/statements
- METHOD : GET
- HEADERS : Accept->application/rdf+xml
- BODY : 없음
- 수행결과 : gTest가 가지고 있는 전체 data
HTTP/1.1 200 OK
Content-Type: application/rdf+xml;charset=UTF-8
[RDF/XML ENCODED RDF DATA]
3. 데이타 삭제
가. ?s 지정 : ?s를 지정하여 ?s에 해당되는 모든 데이타 삭제
- URL : http://www.gooper.com/rdf4j-server/repositories/gTest/statements?subj=<http://www.gooper.com/gooper>
- METHOD : DELETE
- HEADERS : 없음
- BODY : 없음
- 수행결과 : HTTP/1.1 204 NO CONTENT
나. ?s ?p 지정 : ?s ?p를 지정하여 ?s ?p에 해당되는 모든 데이타 삭제
- METHOD : DELETE
- HEADERS : 없음
- BODY : 없음
- 수행결과 : HTTP/1.1 204 NO CONTENT
다. ?s ?p ?o 지정 : ?s ?p ?o를 지정하여 ?s ?p ?o에 해당되는 모든 데이타 삭제
- URL : http://www.gooper.com/rdf4j-server/repositories/gTest/statements?subj=<http://www.gooper.com/gooper>&pred=<http://www.gooper.com/hasName1>&obj=<http://www.gooper.com/parksanghyeon>
- METHOD : DELETE
- HEADERS : 없음
- BODY : 없음
- 수행결과 : HTTP/1.1 204 NO CONTENT
라. 전체데이타 삭제 : gTest의 전체 데이타 삭제
- URL : http://www.gooper.com/rdf4j-server/repositories/gTest/statements
- METHOD : DELETE
- HEADERS : 없음
- BODY : 없음
- 수행결과 : HTTP/1.1 204 NO CONTENT
댓글 0
번호 | 제목 | 날짜 | 조회 수 |
---|---|---|---|
10 | halyard 1.3의 console을 이용하여 100억건의 데이타에 대한 쿼리수행시 ScannerTimeoutException 발생시 조치사항 | 2017.09.06 | 939 |
9 | RDF4J의 RESTFul API처리 클래스 소스 파악(web module위주) | 2017.08.30 | 455 |
8 | RDF4J의 rdf4j-server.war가 제공하는 RESTFul API를 이용한 CRUD테스트(트랜잭션처리) | 2017.08.30 | 970 |
» | RDF4J의 rdf4j-server.war가 제공하는 RESTFul API를 이용하여 repository에 CRUD테스트 | 2017.08.30 | 899 |
6 | 9대가 hbase cluster로 구성된 서버에서 테스트 data를 halyard에 적재하고 테스트 하는 방법및 절차 | 2017.07.21 | 190 |
5 | halyard의 console스크립트에서 생성한 repository는 RDF4J Web Applications에서 공유가 되지 않는다. | 2017.07.05 | 840 |
4 | halyard 1.3의 rdf4j-server.war와 rdf4j-workbench.war를 tomcat deploy후 조회시 java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/Cell발생시 조치사항 | 2017.07.05 | 263 |
3 | halyard 1.3을 다른 서버로 이전하는 방법 | 2017.07.05 | 828 |
2 | https://github.com/Merck/Halyard프로젝트 컴파일및 배포/테스트 | 2017.01.24 | 247 |
1 | Halyard - RDF4J와 Apache HBase를 이용하여 구현된 TripleStore이며 SPARQL 1.1쿼리를 지원한다. | 2016.12.29 | 823 |