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