메뉴 건너뛰기

Bigdata, Semantic IoT, Hadoop, NoSQL

Bigdata, 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를 지정하여 조회하기

 - URL : http://www.gooper.com/rdf4j-server/repositories/gTest?query=select%20*%20where%20%7B%3Chttp%3A%2F%2Fwww.gooper.com%2Fgooper%3E%20%3Fp%20%3Fo%7D&limit_query=100&infer=true&queryLn=SPARQL&

 - 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에 해당되는 모든 데이타 삭제

 - URL : http://www.gooper.com/rdf4j-server/repositories/gTest/statements?subj=<http://www.gooper.com/gooper>&pred=<http://www.gooper.com/hasName1>

 - 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




번호 제목 글쓴이 날짜 조회 수
140 python 2.6.6에서 print 'A=' 형태의 사용이 python 3.5.1에서 오류(SyntaxError: Missing parentheses in call to 'print') 발생함.. 총관리자 2016.05.27 62
139 [TLS/SSL]Kudu Master 설정하기 총관리자 2022.05.13 61
138 [TLS]TLS용 사설 인증서 변경 혹은 신규 지정시 No trusted certificate found 오류 발생시 확인및 조치사항 총관리자 2022.03.15 60
137 lagom-windows용 build.sbt파일 내용 총관리자 2017.10.12 60
136 Mysql DB 생성 및 권한. 특정아이피, 대역에 대한 접근 허용 총관리자 2017.05.04 60
135 Master rejected startup because clock is out of sync 오류 해결방법 총관리자 2016.05.03 60
134 queryTranslator실행시 NullPointerException가 발생전에 java.lang.ArrayIndexOutOfBoundsException발생시 조치사항 총관리자 2016.06.16 58
133 Lagom프레임웍에서 제공하는 HelloWorld 테스트를 수행시 [unknown-version]오류가 발생하면서 빌드가 되지 않는 경우 조치사항 총관리자 2017.12.22 56
132 9대가 hbase cluster로 구성된 서버에서 테스트 data를 halyard에 적재하고 테스트 하는 방법및 절차 총관리자 2017.07.21 56
131 [hive] hive.tbls테이블의 owner컬럼값은 hadoop.security.auth_to_local에 의해서 filtering된다. 총관리자 2022.04.14 55
130 HDFS에서 quota 설정 방법및 확인 방법 총관리자 2022.03.30 55
129 [Impala jdbc]CDP7.1.7환경에서 java프로그램을 이용하여 kerberized impala cluster에 접근하여 SQL을 수행하는 방법 gooper 2023.08.22 54
128 fuseki가 제공하는 web ui를 통해서 dataset를 remove->create할 경우 동일한 동일한 이름으로 지정했을때 fuseki-server.jar가 뜨지 않는 현상 총관리자 2017.02.03 54
127 Windows에서 sbt개발환경 구축 방법(링크) 총관리자 2016.06.02 54
126 서버 5대에 solr 5.5.0 설치하고 index data를 HDFS에 저장/search하도록 설치/설정하는 방법 총관리자 2016.04.08 54
125 DataSetCreator.py 실행시 파일을 찾을 수 없는 오류 총관리자 2016.05.27 53
124 [HDFS]Encryption Zone에 생성된 테이블 조회시 Failed to open HDFS file hdfs://nameservice1/tmp/zone1/sec_test_file.txt Error(255): Unknown error 255 Root cause: AuthorizationException: User:impala not allowd to do 'DECRYPT_EEK' on 'testkey' gooper 2023.06.29 52
123 jar파일의 dependency찾는 프로그램 총관리자 2016.08.11 52
» RDF4J의 rdf4j-server.war가 제공하는 RESTFul API를 이용하여 repository에 CRUD테스트 총관리자 2017.08.30 51
121 hadoop에서 yarn jar ..를 이용하여 appliction을 실행하여 정상적으로 수행되었으나 yarn UI의 어플리케이션 목록에 나타나지 않는 문제 총관리자 2017.05.02 51

A personal place to organize information learned during the development of such Hadoop, Hive, Hbase, Semantic IoT, etc.
We are open to the required minutes. Please send inquiries to gooper@gooper.com.

위로