메뉴 건너뛰기

Bigdata, Semantic IoT, Hadoop, NoSQL

Bigdata, Hadoop ecosystem, Semantic IoT등의 프로젝트를 진행중에 습득한 내용을 정리하는 곳입니다.
필요한 분을 위해서 공개하고 있습니다. 문의사항은 gooper@gooper.com로 메일을 보내주세요.


참조 : http://joyhong.tistory.com/18


SWRL(Semantic Web Rule Language)와 SPIN(SPARQL Inferencing Notation)


SWRL과 SPIN은 rule을 RDF syntax로 표현한다. 하지만 SPIN은 SWRL보다 모든 면에서 우수하다고 생각한다. 

SPIN은 SPARQL을 기초로한다. SPARQL은 많은 엔진과 데이터베이스에서 사용 및 제공하고 있기 때문에 데이터베이스에 직접 실행될 수 있고, 중간에 상호작용할 엔진이 따로 필요가 없다. 또한 SPARQL이 UNION과 FILTER 표현과 같이 다양한 feature를 제공하기 때문에 SPIN은 SWRL보다 표현력이 더 좋다. 그리고 SPIN은 단순한 규칙언어를 넘어서서 constraint를 표현하고 새로운 기능과 템플릿을 정의하기 위한 방법을 제공한다.




SPIN으로 무엇을 할 수 있나?


SPIN은 개별적인 규칙 언어를 배우지 않아도 된다. SPIN은 SPARQL로 표현하기 때문이다.

SPIN은 다른 프로퍼티들을 기초로 프로퍼티의 값을 계산하는 것에 사용할 수 있다. 예를 들면, 제품의 높이와 너비를 통한 면적, 오늘 날짜와 생일 차이를 통한 사람의 나이, 성과 이름의 연결로 사람의 성명을 계산하는데 사용할 수 있다.

또한 특정 조건하에서 실행되는 규칙의 집합을 분리하는 것에 사용할 수 있다. 예를 들면, 증분 추론을 지원한다거나, 리소스가 처음 생성될 때 특정 값을 초기화한다거나, 대화형 애플리케이션으로 사용하도록 할 수 있다.



SPIN은 SPARQL의 CONSTRUCT나 UPDATE 문을 사용하여 구현된다. SPIN 템플릿은 고레벨의 도메인 특정 언어에서 이러한 규칙을 정의할 수 있도록 해 줌으로서 규칙 디자이너가 직접적으로 SPARQL로 작업할 필요가 없다.

애플리케이션의 또 다른 일반적인 요구는 데이터 유효성을 체크하는 것이다. 예를 들면, 필드 입력 또는 입력된 문자열이 해당 형식 요구 사항을 만족하도록 요구할 수 있다. SPIN은 닫힌 세계 의미(closed world semantics)로 제약사항을 체크하는 것과 현재 사용 가능한 정보가 지정된 무결성 제약 조건과 맞지 않을 때 자동적으로 불일치 표시를 나타내도록 제공한다. 제약 조건은 SPARQL의 ASK나 CONSTRUCT 쿼리를 사용하거나 해당하는 SPIN 템플릿을 사용하여 지정한다.

또한 SPIN은 명확하고 웹 친화적인 프레임워크를 통해 새로운 SPARQL function의 정의를 지원해준다.



SPIN을 이용한 추론


SPARQL의 CONSTRUCT 쿼리를 이용하여 

학생이 3개 이상의 수업을 수강하고 있다면 그 학생은 바쁜 학생이라고 추론하도록 

spin:rule을 사용하여 규칙을 작성하였다.


CONSTRUCT {

    ?s a :BusyStudent .

}

WHERE {

    {

        SELECT ?s ((COUNT(?s)) AS ?scount)

        WHERE {

            ?s :registerFor ?cls .

            ?cls a :Credit3Course .

        }

        GROUP BY ?s

    } .

    FILTER (?scount > 2) .

}



SPIN을 이용한 초기값 설정


instance 생성시 특정한 초기값을 자동으로 생성하도록 

spin:constructor를 사용하여 설정하였다.


CONSTRUCT {

    ?this :createdAt ?date .

}

WHERE {

    BIND (afn:now() AS ?date) .

}



SPIN을 이용한 제약사항 설정


대학생이 되는 조건으로 나이가 21세 이상이라는 제약사항을

spin:constraint를 사용하여 설정하였다.


ASK WHERE {

    ?this :age ?age .

    FILTER (?age < 20) .

}

번호 제목 글쓴이 날짜 조회 수
39 슬라이딩 윈도우 예제 총관리자 2016.07.28 67
38 거침없이 배우는 Drools 책의 샘플소스 file 총관리자 2016.07.22 1233
37 drools를 이용한 로그,rule matching등의 테스트 java프로그램 file 총관리자 2016.07.21 181
36 ServerInfo객체파일 총관리자 2016.07.21 35
35 drools에서 drl관련 로그를 기록하기 위한 클래스 파일 총관리자 2016.07.21 74
34 워킹 메모리에 대한 정보를 처리하는 클래스 파일 총관리자 2016.07.21 49
33 커리 변경 이벤트를 처리하기 위한 구현클래스 총관리자 2016.07.21 41
32 룰에 매칭되면 발생되는 엑티베이션 객체에 대한 작업(이전값 혹은 현재값)을 처리하는 클래스 파일 총관리자 2016.07.21 285
31 실시간 쿼리 변환 모니터링(팩트내 필드값의 변경사항을 실시간으로 추적함)하는 테스트 java 프로그램 file 총관리자 2016.07.21 67
30 Drools 6.0 - 비즈니스 룰 기반으로 간단한 룰 애플리케이션 만들기 file 총관리자 2016.07.18 440
29 DataSetCreator실행시 "Illegal character in fragment at index"오류가 나는 경우 조치방안 총관리자 2016.06.17 481
28 5건의 triple data를 이용하여 특정 작업 폴더에서 작업하는 방법/절차 총관리자 2016.06.16 36
27 queryTranslator실행시 NullPointerException가 발생전에 java.lang.ArrayIndexOutOfBoundsException발생시 조치사항 총관리자 2016.06.16 58
26 S2RDF를 실행부분만 추출하여 1건의 triple data를 HDFS에 등록, sparql을 sql로 변환, sql실행하는 방법및 S2RDF소스 컴파일 방법 총관리자 2016.06.15 410
25 S2RDF모듈의 실행부분만 추출하여 별도록 실행하는 방법(draft) 총관리자 2016.06.14 36
24 --master yarn 옵션으로 spark client프로그램 실행할때 메모리 부족 오류발생시 조치방법 총관리자 2016.05.27 141
23 DataSetCreator.py 실행시 파일을 찾을 수 없는 오류 총관리자 2016.05.27 53
22 python실행시 ValueError: zero length field name in format오류 해결방법 총관리자 2016.05.27 44
21 S2RDF 테스트(벤치마크 테스트를 기준으로 python, scala소스가 만들어져서 기능은 파악되지 못함) [2] file 총관리자 2016.05.27 76
20 RDF storage조합에대한 test결과(4store, Jena+HBase, Hive+HBase, CumulusRDF, Couchbase) 페이지 링크 총관리자 2016.05.26 102

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.

위로