SlideShare a Scribd company logo
1 of 141
Download to read offline
LOD 실습
Part 1. LOD의 기본 개념
2017-02-28
워크샵 프로그램
시간 제목 발표자
13:30~14:10 Part 1. LOD의 기본 개념 이명진
14:10~14:50 Part 2. LOD 모델 이명진
14:50~15:30 Part 3. SPARQL 이명진
15:30~15:50 Coffee Break
15:50~16:20 Part 4. 실습 – 모델의 이해 허홍수
16:20~17:00 Part 4. 실습 – SPARQL 허홍수
17:00~17:30 Part 4. 실습 – 프로그래밍 허홍수
웹에서 생성되는 정보의 양
현재의 웹
• HTML
– 사람이 읽고 해석할 수 있는 연결된 문서를 만드는 것
?정보의 재사용!!!
만약…
• 재사용성, 기계에 의한 가독성, 새로운 서비스 생산성 향상
유라에 대한 정보를 줘.
{
"name": "유라",
"realName": "김아영",
"job": "가수",
"birth": "1992.11.6",
"bodySize": {
"height": 168,
"weight": 49
},
"group": {
"groupName": "걸스데이",
"groupUrl": "http://www.naver.com/GirlsDay"
},
"pic": "http://www.naver.com/GirlsDay/Yura.jpg"
}
Linked Open Data
Linked Open Data
웹을 통해
사람과 기계가
읽고 처리할 수 있는 형태로
데이터에 대한 정보를
기술(description)
웹 페이지가 서로 연결된 것처럼
데이터들끼리 다양한 관계에 의해
연결되어 있는 형태
URI를 이용해서
누구나 데이터에 접근할 수 있으며
데이터에 대한 정보를 제공
LOD의 네 가지 원칙
1. 웹 상의 자원을 식별하기 위해 URI를 사용하라.
2. 웹 상의 자원들이 사람과 사용자 에이전트에 의해 참조
(refer)되고 탐색(look up)될 수 있는 HTTP URI를 사용
하라.
3. 자원의 URI가 역참조(dereference)될 때 자원에 대한 유
용한 정보를 RDF/XML과 같은 표준 형식을 사용하여 제
공하라.
4. 웹에서 다른 연관된 정보의 탐색을 개선하기 위해 다른
데이터와의 URI 연결(link)를 포함하라.
LOD의 형태
http://cafe.naver.com/yurasmarbling#me
유라
김아영
November 6, 1992
168
49
http://www.naver.com/GirlsDay/Yura.jpg
http://cafe.daum.net/Girlsday5#me
걸스데이
http://xmlns.com/foaf/0.1/nick
http://xmlns.com/foaf/0.1/name
http://xmlns.com/foaf/0.1/birthday
http://xmlns.com/foaf/0.1/height
http://xmlns.com/foaf/0.1/weight
http://xmlns.com/foaf/0.1/depiction
http://xmlns.com/foaf/0.1/member
http://xmlns.com/foaf/0.1/name
http://cafe.daum.net/Girlsday5
http://xmlns.com/foaf/0.1/homepage
웹에서의 LOD
LOD Service
<foaf:Person
rdf:about="http://cafe.naver.com/yurasmarbling#me">
<foaf:nick>유라</foaf:nick>
<foaf:name>김아영</foaf:name>
<foaf:birthday>November 6, 1992</foaf:birthday>
<foaf:height>168</foaf:height>
<foaf:weight>49</foaf:weight>
<foaf:depiction
rdf:resource="http://www.naver.com/GirlsDay/Yura.jpg" />
</foaf:Person>
RDF/XML
http://cafe.naver.com/yurasmarbling#me
유라
김아영
November 6, 1992
168
49
http://www.naver.com/GirlsDay/Yura.jpg
http://cafe.daum.net/Girlsday5#me
걸스데이
http://xmlns.com/foaf/0.1/nick
http://xmlns.com/foaf/0.1/name
http://xmlns.com/foaf/0.1/birthday
http://xmlns.com/foaf/0.1/height
http://xmlns.com/foaf/0.1/weight
http://xmlns.com/foaf/0.1/depiction
http://xmlns.com/foaf/0.1/member
http://xmlns.com/foaf/0.1/name
http://cafe.daum.net/Girlsday5
http://xmlns.com/foaf/0.1/homepage
LOD를 위한 요소 기술들
문서 내부의
구조화된 콘텐츠를
기계가 읽고 처리 가능한
형태로 표기하기 위한
기본적인 요소
웹 상에 존재하는
자원에 대한 정보와
자원들 사이의 관계를
기술하기 위한 프레임워크
RDF 기반 자원의
속성과 클래스의 구조를
기술하기 위한 용어집
RDF 기반의
질의 언어 및 프로토콜
웹에 존재하는 자원들을 식별하기 위해 사용되는 문자열
URI (Uniform Resource Identifier)
• 웹 상에서 사물(thing)을 식별하기 위한 식별자로 활용
식별하기 위해서
현실에서는 … 웹에서는 …
주민등록번호
861002-1052747
URI
http://semantics.kr/MyungjinLee
URI 생성 시 참고사항
• 단순성
– 짧고 기억하기 쉬운 형태로
• 안정성
– 가능한 오랫동안 유지될 수 있게
• 관리의 용이성
– 관리할 수 있는 형태로 만들도록
URI Type URI structure Examples
Identifier http://{domain}/id/{concept}/{reference} http://education.data.gov.uk/id/school/78
UK 공공 사례
'http://' BASE '/' 'id' '/' ORG '/' CATEGORY ( '/' TOKEN )+
미국정부 공공 사례
RDF (Resource Description Framework)
• 웹에 존재하는 자원에 대한 정보를 개념적으로 기술하거
나 모델링하기 위한 방법을 제공
“이명진은 유라의 남편이다”를 RDF로 기술하면?
hasWife
http://semantics.kr/myungjinlee http://semantics.kr/yura
http://semantics.kr/rel/hasWife
Subject
URI reference
Predicate
URI reference
Object
URI reference or Literal
Triple
RDF 예제
http://cafe.naver.com/yurasmarbling#me
유라
김아영
November 6, 1992
168
49
http://www.naver.com/GirlsDay/Yura.jpg
http://cafe.daum.net/Girlsday5#me
걸스데이
http://xmlns.com/foaf/0.1/nick
http://xmlns.com/foaf/0.1/name
http://xmlns.com/foaf/0.1/birthday
http://xmlns.com/foaf/0.1/height
http://xmlns.com/foaf/0.1/weight
http://xmlns.com/foaf/0.1/depiction
http://xmlns.com/foaf/0.1/member
http://xmlns.com/foaf/0.1/name
http://cafe.daum.net/Girlsday5
http://xmlns.com/foaf/0.1/homepage
RDF를 기계가 읽기 위한 방법
• RDF/XML
– W3C Recommendation, 10 February 2004
– RDF 그래프 모형을 쓰고 교환하기 위해 사용되는 XML 기반의 문법
• N-Triples
– RDF Test Cases, W3C Recommendation, 10 February 2004
– RDF 데이터를 저장하고 전송하기 위한 평문(plain text) 형태의 포맷
• Notation 3 (N3)
– 사용자 가독성이 보다 확장된 형태로 RDF 모델을 직렬화(serialization)하
기 위한 단축 표현
– RDF/XML보다 더 간결하고 가독성이 있는 형태
• Turtle (Terse RDF Triple Language)
– W3C Recommendation 25 February 2014
– RDF에서 데이터를 표현하기 위한 포맷
RDF를 기계가 읽기 위한 방법
<http://en.wikipedia.org/wiki/Tony_Benn> <http://purl.org/dc/elements/1.1/title> "Tony Benn" .
<http://en.wikipedia.org/wiki/Tony_Benn> <http://purl.org/dc/elements/1.1/publisher> "Wikipedia" .
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<rdf:Description rdf:about="http://en.wikipedia.org/wiki/Tony_Benn">
<dc:title>Tony Benn</dc:title>
<dc:publisher>Wikipedia</dc:publisher>
</rdf:Description>
</rdf:RDF>
@prefix dc: <http://purl.org/dc/elements/1.1/>.
<http://en.wikipedia.org/wiki/Tony_Benn> dc:title "Tony Benn";
dc:publisher "Wikipedia".
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix ex: <http://example.org/stuff/1.0/> .
<http://www.w3.org/TR/rdf-syntax-grammar>
dc:title "RDF/XML Syntax Specification (Revised)" ;
ex:editor [ ex:fullname "Dave Beckett";
ex:homePage <http://purl.org/net/dajobe/>
] .
N-Triple
RDF/XML
N3
Turtle
RDFS(RDF Schema)
• RDF 형태의 데이터를 담기 위한 구조를 만드는 방법을 제
공
– 클래스 정의
– 속성과 관련 제약조건에 대한 정의
– 계층 구조에 대한 정의
has wife
♂ ♀
is a is a
Male Female

Person
subset ofsubset of
RDF Schema 예제
car:Car
car:Vehicle
rdfs:subClassOf
rdf:Property
car:body_styl
erdfs:domain
rdfs:range
rdfs:Class
rdf:type
rdf:type
car:Style
rdf:type
car:A6
rdf:type
car:Sedan
rdf:typecar:body_style
RDF 데이터 구조에 대한 정의 부분
구조에 따른 RDF 데이터 부분
OWL (Web Ontology Language)
• 단순한 데이터의 구조를 벗어나 온톨로지를 만들기 위한
지식 표현 언어
Man Woman
∩ = Ø
Person Person
descendant
Person
descendant
descendant
Husband Wife
1:1
_01 Action
hasGenre
ActionMovie
type
Genre
type
SPARQL (SPARQL Protocol and RDF Query Language)
• RDF 형식으로 저장된 데이터를 검색하고 조작하기 위한
언어 HTTP를 통한 SPARQL의 사용
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?name ?email
WHERE {
?person a foaf:Person.
?person foaf:name ?name.
?person foaf:mbox ?email.
} RDF Storage
?name ?email
Myungjin Lee mjlee@li-st.com
Gildong Hong
gildong@daum.ne
t
Grace Byun grace@naver.com
SPARQL
HTTP
HTTP
LOD 에서의 역할들
응용서비스
개발
사용자
LOD서비스
구축
데이터
구축
모델링
변환
저장
발행
데이터 접근 서비스 접근
데이터 조회
LOD 데이터 구축자
데이터 구축자
모델링 도구
온톨로지 모델링
RDF
변환 규칙 작성
RDF 변환
데이터베이스
R2RML
RDFS & OWL
URI & RDF
RDF Serialization
LOD 데이터 구축자에게 필요한 도구
• 온톨로지 편집기
– 온톨로지 모델링 및 인스턴스 입력을 위한 도구
– 관련 도구
• Stanford Center for Biomedical Informatics Research의
Protege
• TopQuadrant의 TopBraid Composer
LOD 데이터 구축자에게 필요한 도구
• 변환기
– 데이터베이스의 관계형 데이터를 RDF 형태로 변환하기 위한 도
구
– R2RML(RDB to RDF Mapping Language)를 기반으로 변환
수행
– 관련 도구
• LiST의 OntoTrans
• OpenLink Software의
Virtuoso RDF Views
LOD 서비스 구축자
LOD 서비스 제공자
RDF 적재
RDF
URI & RDF
RDF Serialization
SPARQL
트리플 저장소
데이터 연계
LOD 서비스 프레임워크
LOD 서비스
Linked Data Platform
발행
LOD 서비스 구축자에게 필요한 도구
• 트리플 저장소
– RDF 형태의 데이터를 저장하고 운용 및 추론과 질의 처리를 수행
– 관련 도구
– LiST의 OntoBase
• 적용사례: KDATA, 주소데이터 LOD, 수목원 LOD, 국립중앙도서관
LOD 등
– OpenLink Software의 Virtuoso
– Franz의 AllegroGraph
– OntoText의 OWLIM
• LOD 발행 도구
– 구축된 RDF 데이터를 웹을 통해 발행하고 접근할 수 있도록 지원
– 관련 도구
• Pubby
• OpenLink Software의 Virtuoso
LOD 사용자
LOD 서비스
응용서비스 개발자
응용서비스 개발자
URI
RDF
Query Result
SPARQL
URI & RDF
SPARQL
SPARQL Query Result Format
LOD 사용자에게 필요한 도구
• 온톨로지 편집기
– LOD 사용자에게는 모델을 이해하기 위해 필요한 도구
• 프로그래밍 라이브러리
– RDF 형태의 데이터를 처리하기 위한 라이브러리
– 관련 도구
• Apache의 Jena
• University of Manchester의 OWL API
LOD 활용을 위한 절차
1. 활용하고자 하는 데이터 셋 검색
2. 온톨로지 모델 다운로드 및 이해
3. LOD 활용
– SPARQL을 이용하여 원하는 데이터 획득
– URI를 이용하여 데이터 조회
4. 응용 프로그램 개발
30
30
Dr. Myungjin Lee
e-Mail : mjlee@li-st.com
Twitter : http://twitter.com/MyungjinLee
Facebook : http://www.facebook.com/mjinlee
SlideShare : http://www.slideshare.net/onlyjiny/
LOD 실습
Part 2. LOD 모델
2017-02-28
워크샵 프로그램
시간 제목 발표자
13:30~14:10 Part 1. LOD의 기본 개념 이명진
14:10~14:50 Part 2. LOD 모델 이명진
14:50~15:30 Part 3. SPARQL 이명진
15:30~15:50 Coffee Break
15:50~16:20 Part 4. 실습 – 모델의 이해 허홍수
16:20~17:00 Part 4. 실습 – SPARQL 허홍수
17:00~17:30 Part 4. 실습 – 프로그래밍 허홍수
LOD의 구조 이해하기
데이터베이스 온톨로지 객체지향≠ ≠
데이터베이스 온톨로지 객체지향≒ ≒
그러나 오늘만은,
LOD의 데이터 구조
• RDF(Resource Description Framework) 기반
– http://www.example.org/index.html has a creator whose
value is John Smith
– the subject(주어) is the URL
http://www.example.org/index.html
– the predicate(동사) is the word "creator"
– the object(목적어) is the phrase "John Smith"
http://www.example.org/index.html
John Smith
creator
LOD의 데이터 구조
http://semantics.kr/myungjinlee http://semantics.kr/Yura
http://semantics.kr/rel/hasWife
Subject
URI reference
Predicate
URI reference
Object
URI reference or Literal
Statement
데이터베이스(RDB)와 LOD의 데이터 구조
아이디 이름 나이 학과
MJLee 이명진 27 IE
학과 학과명
IE 정보산업공학과
데이터베이스
LOD
MJLee
이명진
27
IE 정보산업공학과
이름
학과
나이
학과명
URI의 사용
• 왜 URI를 사용하지?
– 각각의 자원을 구별하기 위해서
– 중복된 이름이 없도록 하기 위해
– 웹에서 접근할 수 있도록 하기 위해서
– 접근했을 때 해당 자원에 대한 정보를 제공하기 위해서
데이터베이스(RDB)와 LOD의 데이터 구조
아이디 이름 나이 학과
MJLee 이명진 27 IE
학과 학과명
IE 정보산업공학과
데이터베이스
LOD
http://li-st.com/resourceMJLee
이명진
27
http://li-st.com/resourceIE
정보산업공학과
이름
학과
나이
학과명
클래스 (Class)
• 아주 간단히 무엇들의 집합
≒데이터베이스의 테이블
♂
MaleMyungjin Lee
클래스 (Class)
rrn name affiliation
841002-1045617 Myungjin Lee 10
410203-3983612 Gildong Hong 20
841105-2056143 Grace Byun 10
Person Table
Person 클래스
sid sname
10 Yonsei Univ.
20 Seoul Univ.
School Table
School 클래스
클래스 (Class)
Movie owl:Class
rdf:type
rdf:type은 is-a 관계를 의미
즉, 해석하면 “Movie는 Class이다”
클래스의 상하위 관계
Person
클래스
Male
클래스
Female
클래스
Male 클래스
Female 클래스
Person 클래스
rdfs:subClassOf
rdfs:subClassOf
자원의 이름과 설명을 위한 속성
• rdfs:label
– 자원에 대한 이름을 정의
• rdfs:comment
– 자원에 대한 설명을 작성
rdfs:label
Movie 영화
일정한 의미를 갖고 움직이는
대상을 촬영하여 영사기로
영사막에 재현하는 종합 예술rdfs:comment
인스턴스 (Instance)
• 클래스를 구성하는 멤버
≒ 데이터베이스의 행
rdf:type
MaleMyungjinLee
owl:Class
rdf:type
Male
• MyungjinLee
인스턴스 (Instance)
rrn name affiliation
841002-1045617 Myungjin Lee 10
410203-3983612 Gildong Hong 20
841105-2056143 Grace Byun 10
Person Table sid sname
10 Yonsei Univ.
20 Seoul Univ.
School Table
Person 클래스의 인스턴스
School 클래스의 인스턴스
속성(Property)
• 속성
– 둘 사이의 관계를 나타내기 위한 것
• 속성의 두 가지 유형
– 자원과 자원 사이의 관계: Object Property
– 자원과 값 사이의 관계: Datatype Property
has wife
age
30
Object Property
Datatype Property
데이터타입 속성 (Datatype Property)
• 자원과 값 사이의 관계
≒데이터베이스의 일반 필드
rrn name affiliation
841002-1045617 Myungjin Lee 10
410203-3983612 Gildong Hong 20
841105-2056143 Grace Byun 10
Person Table sid sname
10 Yonsei Univ.
20 Seoul Univ.
School Table
Datatype Property
객체 속성 (Object Property)
• 자원과 자원 사이의 관계
≒ 데이터베이스의 기본키와 외래키의 관계
rrn name affiliation
841002-1045617 Myungjin Lee 10
410203-3983612 Gildong Hong 20
841105-2056143 Grace Byun 10
Person Table sid sname
10 Yonsei Univ.
20 Seoul Univ.
School Table
Object Property
속성들이 가지고 있는 제약
• rdfs:domain
– 속성을 가질 수 있는 클래스가 무엇인가?
• rdfs:range
– 속성 값의 타입은 무엇인가?
Subject Predicate Object
has wife? ?
domain:
주어를 위한
클래스는 머지?
range:
목적어를 위한
클래스는 머지?
속성들이 가지고 있는 제약
rrn name affiliation
841002-1045617 Myungjin Lee 10
410203-3983612 Gildong Hong 20
841105-2056143 Grace Byun 10
Person Table sid sname
10 Yonsei Univ.
20 Seoul Univ.
School Table
name 속성의 domain
name 속성의 range
affiliation 속성의 domain
affiliation 속성의 range
데이터타입 속성이 가질 수 있는 range
• XML Schema의 데이터 타입을 따름
Simple Type Examples
string Confirm this is electric
integer ...-1, 0, 1, ...
long -9223372036854775808, ... -1, 0, 1, ... 9223372036854775807
float -INF, -1E4, -0, 0, 12.78E-2, 12, INF, NaN
date 1999-05-31
time 13:20:00.000, 13:20:00.000-05:00
boolean true, false, 1, 0
22
22
Dr. Myungjin Lee
e-Mail : mjlee@li-st.com
Twitter : http://twitter.com/MyungjinLee
Facebook : http://www.facebook.com/mjinlee
SlideShare : http://www.slideshare.net/onlyjiny/
LOD 실습
Part 3. SPARQL
2017-02-28
워크샵 프로그램
시간 제목 발표자
13:30~14:10 Part 1. LOD의 기본 개념 이명진
14:10~14:50 Part 2. LOD 모델 이명진
14:50~15:30 Part 3. SPARQL 이명진
15:30~15:50 Coffee Break
15:50~16:20 Part 4. 실습 – 모델의 이해 허홍수
16:20~17:00 Part 4. 실습 – SPARQL 허홍수
17:00~17:30 Part 4. 실습 – 프로그래밍 허홍수
SPARQL
• SPARQL Protocol and RDF Query Language
– SPARQL 위한 프로토콜에 대한 정의
– RDF 질의를 위한 질의 문법에 대한 정의
– W3C Recommendation 21 March 2013
– http://www.w3.org/TR/sparql11-query/
SPARQL의 구성
• SELECT
– 질의 결과로 얻기 위한 변수를 지정
• FROM
– 질의 대상이 되는 데이터 셋을 지정
• WHERE
– 질의에 대응되는 조건 그래프 구조(트리플)를 작성
예제 데이터
rrn name affiliation
841002-1045617 Myungjin Lee 10
410203-3983612 Gildong Hong 20
841105-2056143 Grace Byun 10
Person Table
http://localhost:8890/test/MyungjinLee
841002-1045617
Myungjin Lee
Yonsei Univ.
http://localhost:8890/test/Yonsei
http://localhost:8890/test/rrn
http://localhost:8890/test/name
http://localhost:8890/test/sname
http://localhost:8890/test/affilication
sid sname
10 Yonsei Univ.
20 Seoul Univ.
School Table
http://localhost:8890/test 그래프
SPARQL의 구성
SELECT name FROM Person WHERE rrn = “841002-1045617”
SELECT ?y
FROM <http://localhost:8890/test>
WHERE {
?x <http://localhost:8890/rrn> “841002-1045617” .
?x <http://localhost:8890/name> ?y .
}
SQL
SPARQL
원하는 결과 질의 대상
질의 조건
SPARQL의 상세 구성
SELECT ?y
FROM <http://localhost:8890/test>
WHERE {
?x <http://localhost:8890/rrn> “841002-1045617” .
?x <http://localhost:8890/name> ?y .
}
SQL의 SELECT와 같이 특정
정보를 꺼내오기 위한 구문
그래프 구조이기 때문에 SQL과 달리 필드를
지정하는 것이 아니라 변수를 지정하여 해당 변수에
바인딩 된 결과를 획득하기 위해 변수를 지정
질의의 대상이 되는 그래프를 지정
(생략 가능. 생략할 경우 전체를
대상으로 조회)
지정된 그래프에서 결과를 추출
조건을 지정하기 위한 영역 선언
질의의 조건을 그래프의 트리플
구조에 따른 AND 형태로 기술
SELECT 절
• 질의 변수 지정하기
– "?" 표를 이용하여 변수임을 지정
– ?name, ?title, ?author
• 질의 결과는 테이블 형태를 가짐
SELECT ?title ?author
title author
Novel XML Myungjin Lee
Web Tim-Berners Lee
SPARQL
Query Results
Knowledge Base
WHERE 절
• WHERE 절
– 질의하고자 하는 조건을 트리플 단위로 기술
– 주어, 동사, 목적어는 공백으로 구분하며,
– 각각의 트리플은 "."로 구분
WHERE 절 예시
Data
<http://example.org/book/book1> <http://purl.org/dc/elements/1.1/title> "SPARQL Tutorial" .
Query
SELECT ?title
WHERE
{
<http://example.org/book/book1> <http://purl.org/dc/elements/1.1/title> ?title .
}
Query Result
title
“SPARQL Tutorial”
WHERE 절 예시
Data
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
_:a foaf:name "Johnny Lee Outlaw" .
_:a foaf:mbox <mailto:jlow@example.com> .
_:b foaf:name "Peter Goodguy" .
_:b foaf:mbox <mailto:peter@example.org> .
_:c foaf:mbox <mailto:carol@example.org> .
Query
SELECT ?name ?mbox
WHERE
{ ?x <http://xmlns.com/foaf/0.1/name> ?name .
?x <http://xmlns.com/foaf/0.1/mbox> ?mbox }
Query Result
name mbox
“Johnny Lee Outlaw” <mailto:jlow@example.com>
“Peter Goodguy” <mailto:peter@example.org>
WHERE 절에 작성된 트리플의 축약식
• 동사-목적어 축약식
?x foaf:name ?name ;
foaf:mbox ?mbox .
?x foaf:name ?name .
?x foaf:mbox ?mbox .
WHERE 절에 작성된 트리플의 축약식
• 목적어 축약식
?x foaf:nick "Alice" , "Alice_" .
?x foaf:nick "Alice" .
?x foaf:nick "Alice_" .
?x foaf:name ?name ; foaf:nick "Alice" , "Alice_" .
?x foaf:name ?name .
?x foaf:nick "Alice" .
?x foaf:nick "Alice_" .
PREFIX 키워드
• PREFIX 키워드
– URI에서 접두어를 선언하기 위한 키워드
– WHERE 절에 작성되는 URI를 축약하여 쓰기 위해 선언
PREFIX dc: <http://purl.org/dc/elements/purl.org/>
SELECT ?title
WHERE { <http://example.org/book/book> dc:title ?title }
PREFIX dc: <http://purl.org/dc/elements/1.1/>
PREFIX : <http://example.org/book/>
SELECT ?title
WHERE { :book1 dc:title ?title }
값을 갖는 트리플에 대한 질의
@prefix dt: <http://example.org/datatype#> .
@prefix ns: <http://example.org/ns#> .
@prefix : <http://example.org/ns#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
:x ns:p "cat"@en .
:y ns:p "42"^^xsd:integer .
:z ns:p "abc"^^dt:specialDatatype .
• 언어 태그를 갖는 값
– @ 기호와 언어 태그를 사용
하여 표현된 것들
• 데이터 타입을 갖는 값
– xsd:integer 데이터타입으
로 지정된 값을 가지고 있는
것들
Query
SELECT ?v WHERE { ?v ?p "cat" }
Query Result
v
Query
SELECT ?v WHERE { ?v ?p 42 }
Query Result
v
<http://example.org/ns#y>
FILTER 키워드
• FILTER 키워드
– 특정 조건을 만족하는지를 검사하기 위한 방법
Data
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix : <http://example.org/book/> .
@prefix ns: <http://example.org/ns#> .
:book1 dc:title "SPARQL Tutorial" .
:book1 ns:price 42 .
:book2 dc:title "The Semantic Web" .
:book2 ns:price 23 .
FILTER 키워드
• 문자열 값에 대한 검사
– regex 함수
• 문자열에 대한 정규식 비교
• 숫자 값에 대한 검사
Query
PREFIX dc: <http://purl.org/dc/elements/1.1/>
SELECT ?title
WHERE { ?x dc:title ?title
FILTER regex(?title, "^SPARQL")
}
Query Result
title
“SPARQL Tutorial”
Query
PREFIX dc: <http://purl.org/dc/elements/1.1/>
PREFIX ns: <http://example.org/ns#>
SELECT ?title ?price
WHERE { ?x ns:price ?price .
FILTER (?price < 30.5)
?x dc:title ?title . }
Query Result
title price
“The Semantic Web” 23
정렬
• ORDER BY 절
– 결과에 대한 정렬
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?name
WHERE { ?x foaf:name ?name }
ORDER BY ?name
PREFIX : <http://example.org/ns#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
SELECT ?name
WHERE { ?x foaf:name ?name ; :empId ?emp }
ORDER BY DESC(?emp)
결과의 중복 제거
• DISTINCT
– 중복된 결과 제거
Data
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
_:x foaf:name "Alice" .
_:x foaf:mbox <mailto:alice@example.com> .
_:y foaf:name "Alice" .
_:y foaf:mbox <mailto:asmith@example.com> .
_:z foaf:name "Alice" .
_:z foaf:mbox <mailto:alice.smith@example.com> .
Query
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT DISTINCT ?name WHERE { ?x foaf:name ?name }
Query Result name
“Alice”
OFFSET과 LIMIT
• LIMIT 절
– 출력될 결과의 최대 수를 지정
• OFFSET 절
– 출력될 결과의 시작 위치를 지정
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?name
WHERE { ?x foaf:name ?name }
ORDER BY ?name
LIMIT 5
OFFSET 10
SPARQL의 질의 유형
• SELECT
– 지정된 변수에 바인딩 된 값을 추출하기 위한 질의
• CONSTRUCT
– SELECT와 유사하지만 결과를 그래프 형태로 구성하고자 할 경우
사용하는 질의
• ASK
– 지정된 조건을 만족하는지에 따라 true와 false를 반환하는 질의
• DESCRIBE
– 지정된 URI에 대한 RDF 데이터를 포함하는 그래프를 얻고자 사용
하는 질의
SELECT 유형
Data
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
_:a foaf:name "Alice" .
_:a foaf:knows _:b .
_:a foaf:knows _:c .
_:b foaf:name "Bob" .
_:c foaf:name "Clare" .
_:c foaf:nick "CT" .
Query
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?nameX ?nameY ?nickY
WHERE
{ ?x foaf:knows ?y ;
foaf:name ?nameX .
?y foaf:name ?nameY .
OPTIONAL { ?y foaf:nick ?nickY }
}
Query Result nameX nameY nickY
“Alice” “Bob”
“Alice” “Clare” “CT”
CONSTRUCT 유형
Data
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
_:a foaf:name "Alice" .
_:a foaf:mbox <mailto:alice@example.org> .
Query
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX vcard: <http://www.w3.org/2001/vcard-rdf/3.0#>
CONSTRUCT { <http://example.org/person#Alice> vcard:FN ?name }
WHERE { ?x foaf:name ?name }
Query Result
@prefix vcard: <http://www.w3.org/2001/vcard-rdf/3.0#> .
<http://example.org/person#Alice> vcard:FN "Alice" .
ASK 유형
Data
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
_:a foaf:name "Alice" .
_:a foaf:homepage <http://work.example.org/alice/> .
_:b foaf:name "Bob" .
_:b foaf:mbox <mailto:bob@work.example> .
Query
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
ASK { ?x foaf:name "Alice" }
Query Result
yes
DESCRIBE 유형
Data
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
_:a foaf:name "Alice" .
_:a foaf:homepage <http://work.example.org/alice/> .
_:b foaf:name "Bob" .
_:b foaf:mbox <mailto:bob@work.example> .
Query
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
DESCRIBE ?x
WHERE { ?x foaf:mbox <mailto:bob@work.example> }
Query Result
_:b foaf:name "Bob" .
_:b foaf:mbox <mailto:bob@work.example> .
26
26
Dr. Myungjin Lee
e-Mail : mjlee@li-st.com
Twitter : http://twitter.com/MyungjinLee
Facebook : http://www.facebook.com/mjinlee
SlideShare : http://www.slideshare.net/onlyjiny/
LOD 실습
Part 4. 실습
허 홍 수
2017-02-28
워크샵 프로그램
시간 제목 발표자
13:30~14:10 Part 1. LOD의 기본 개념 이명진
14:10~14:50 Part 2. LOD 모델 이명진
14:50~15:30 Part 3. SPARQL 이명진
15:30~15:50 Coffee Break
15:50~16:20 Part 4. 실습 – 모델의 이해 허홍수
16:20~17:00 Part 4. 실습 – SPARQL 허홍수
17:00~17:30 Part 4. 실습 – 프로그래밍 허홍수
Chapter 1
LOD 모델
LOD 모델
• 왜 모델을 이해해야 하지?
• LOD 모델은 어디에서 얻을 수 있지?
• 획득한 모델은 어떻게 해석하지?
• 해석할 때 어떤 도구를 써야 하지?
• 모델을 획득하지 못할 경우에는?
데이터베이스와 LOD 모델
데이터베이스 Linked Open Data
LOD 모델 획득하기
제공
형태
파일
그래픽
그림
명세표
LOD 모델에 대한 실제 주소
• 국립중앙도서관 국가서지LOD (http://lod.nl.go.kr)
– http://lod.nl.go.kr/spec/
• KDATA (http://kdata.kr)
– http://kdata.kr/kdata/spec.jsp
• 생물정보LOD (http://lod.nature.go.kr/main/)
– http://lod.nature.go.kr/main/intro/datadownload_list.jsp
• NDSL LOD (http://lod.ndsl.kr/)
– http://lod.ndsl.kr/home/intro/ontology.jsp
• 스마트관광정보LOD (http://data.visitkorea.or.kr/)
– http://data.visitkorea.or.kr/ontology/
LOD 모델 살펴보기 1
• Class, ObjectProperty, DatatypeProperty 구분하기
– Class : Resource들의 집합
– ObjectProperty : Resource와 다른 Resource간의 연결에 사용
– DatatypeProperty : Resource와 그 Resource가 가지는 Literal
값 연결에 사용
홍길동
임꺽정
이순신
유성룡
궁예
을지문덕
왕건사람 유성룡 이순신
추천
1598
사망연도
ObjectProperty
DatatypeProperty
LOD 모델 살펴보기 2
• Class의 목록 파악
– Class의 종류에는 어떤 것들이 있는가?
– 주요한 Class는 무엇인가?
• Class의 계층(관계) 파악
– Class 간의 상·하위 계층은 어떻게 구성되어 있는가?
– 주요하게 살펴볼 Class는 어떤 외부 Class와 관계를 맺고 있는
가?
LOD 모델 살펴보기 3
• Property의 목록 파악
– Property의 종류에는 어떤 것들이 있는가?
– ObjectProperty와 DatatypeProperty를 구분
• Property의 조건(관계) 파악
– Domain과 Range는 어떻게 되는가?
– Property에 어떠한 제약사항이 있는가?
그림/그래픽 표현의 이해 1
• Class
– 대체적으로 원 또는 타원으로 표기함
– 원 안에 Class의 레이블을 표기
그림/그래픽 표현의 이해 2
• Property
– 화살표가 있는 선으로 표기함
– 화살표가 있는 부분은 Range에 해당, 화살표가 없는 부분은
Domain에 해당
– 선 위에 해당 Property의 레이블을 표기
그림/그래픽 표현의 이해 3
• Literal
– 네모 상자로 표기
그림/그래픽 표현의 이해 4
• Instance
– 대체적으로 마름모 혹은 사각형과 원이 아닌 도형으로 표기
– Class 표기 안에 직접 Instance의 레이블을 넣는 경우도 있음
Chapter 2
TopBraid Composer를 이용한
모델 분석
LOD 모델 파일을 통한 분석
• LOD 모델 파일
– RDF/XML (xxx.rdf / xxx.owl)
– TTL (xxx.ttl)
– N-TRIPLE (xxx.nt)
• 활용 도구
– Text Editor (RDF를 읽을 수 있는 경우)
– 명세 생성 도구 (웹 환경에서 명세표를 생성하여 제공)
– 그래픽 뷰어 (웹 환경에서 모델을 그래픽으로 변경하여 제공)
– 온톨로지 모델링 도구
도구 활용 - TextEditor
• RDF로 표현된 LOD 모델
– RDF/XML 형태
– TTL 형태
– N-Triple 형태
<owl:Class rdf:about="http://lod.nl.go.kr/ontology/Library">
<rdfs:label xml:lang="en">Library</rdfs:label>
<rdfs:label xml:lang="ko">도서관</rdfs:label>
<rdfs:subClassOf rdf:resource="http://xmlns.com/foaf/0.1/Organization"/>
<rdfs:isDefinedBy rdf:resource="http://lod.nl.go.kr/ontology/"/>
<vs:term_status>stable</vs:term_status>
</owl:Class>
<http://lod.nl.go.kr/library/011001>
a nlon:Library ;
rdfs:label "국립중앙도서관" ;
dct:subject nlk:KoreaLibraryMark .
<http://lod.nl.go.kr/resource/KSH00387796> <http://www.w3.org/2004/02/skos/core#closeMatch> <http://id.loc.gov/authorities/subjects/sh85134089> .
<http://lod.nl.go.kr/resource/KSH00223343> <http://www.w3.org/2004/02/skos/core#closeMatch> <http://id.loc.gov/authorities/subjects/sh85082139> .
<http://lod.nl.go.kr/resource/KSH00223343> <http://www.w3.org/2004/02/skos/core#closeMatch> <http://id.loc.gov/authorities/subjects/sh2002007922> .
<http://lod.nl.go.kr/resource/KSH00416120> <http://www.w3.org/2004/02/skos/core#closeMatch> <http://id.loc.gov/authorities/subjects/sh85095839> .
도구 활용 - 명세 생성 도구
• OntoSpec
– http://ontospec.com 에서 파일을 업로드하여 모델 명세를 확
인할 수 있음
도구 활용 - 그래픽 뷰어
• WebVOWL
– http://vowl.visualdataweb.org/ 에서 제공하는 그래픽 뷰어
도구 활용 - 온톨로지 모델링 도구
• TopBraid Composer
– TopQuadrant 사에서 제작한 온톨로지 모델링 도구
– 모델파일을 읽어 직접 생성, 수정, 삭제를 할 수 있음
모델 분석 준비 (1/3)
• 프로젝트 생성 (1/2)
모델 분석 준비 (2/3)
• 프로젝트 생성 (2/2)
– 프로젝트명 넣기
모델 분석 준비 (3/3)
• 파일 복사
– 분석 대상 파일을 복사하여 생성한 프로젝트에 붙여넣기
TBC의 구성
Class 영역 Property
영역
Project
영역
Form 영역
모델 분석 (1/9)
• Import한 모델 확인하기
①
②
모델 분석 (2/9)
• Namespace 확인
①
②
모델 분석 (3/9)
• Class 보기 토글
모델 분석 (4/9)
• Class 보기
국가서지LOD에서 정의한 Class들
Namespace에서 확인한 바와 같이
Base URI의 Prefix로 시작하는
Class들은 해당 모델에서
직접 정의하여 생성한 Class이다.
모델 분석 (5/9)
• Property 보기
ObjectProperties DatatypeProperties
모델 분석 (6/9)
• Property의 관계 파악
①② Ctrl+좌클릭
모델 분석 (7/9)
• 해당 Class를 Domain으로 가지는 Property 찾기
모델 분석 (8/9)
• 해당 Class를 Range로 가지는 Property 찾기
모델 분석 (9/9)
• Form 영역에서 보기
Chapter 3
SPARQL 활용
TBC를 이용한 SPARQL 활용
• 모델을 획득하지 못했다면?
– SPARQL을 통해 질의하여 확인 가능
(SPARQL Endpoint를 제공할 경우에만 가능)
• SPARQL 예제를 통한 모델 구조 파악하기
• 실제 LOD에 질의하여 데이터를 확인하기
• SPARQL Endpoint에서 질의하기
SPARQL 기본 문법
SELECT 찾을변수
WHERE {
조건식
}
SELECT ?s ?name
WHERE {
?id rdf:type <http://lod.nl.go.kr/ontology/Author> .
?id foaf:name ?name .
}
 변수라는 것을 나타내는 ? 를 앞에 붙인다.
 조건식은 S-P-O의 한 문장을 기본으로 한다.
 조건식은 복수개가 가능하며 복수개일 경우
AND 조건으로 연결된다.
 조건식의 구분은 문장 단위로 . 로 구분한다.
보다 자세한 내용은 http://lod.nl.go.kr/home/sparql/getting.jsp 에서 참고하세요
TBC에서의 SPARQL 사용
SPARQL 입력 부분
SPARQL 실행
SPARQL을 통한 모델 구조 파악 (1/13)
• Class 목록
SELECT *
WHERE {
?s rdfs:subClassOf owl:Thing .
}
 owl:Thing 클래스의 하위 클래스들을
반환하시오
SPARQL을 통한 모델 구조 파악 (2/13)
• Class 전체 목록
SELECT *
WHERE {
?s rdfs:subClassOf* owl:Thing .
}
 owl:Thing 클래스의 하위 클래스들과
그 클래스들의 하위 클래스들까지
모두 반환하시오
SPARQL을 통한 모델 구조 파악 (3/13)
• Class 목록과 레이블
SELECT *
WHERE {
?s rdfs:subClassOf owl:Thing .
?s rdfs:label ?label .
}
 owl:Thing 클래스의 하위 클래스들과
그 클래스들의 label을 반환하시오
SPARQL을 통한 모델 구조 파악 (4/13)
• Class 상하위 관계
SELECT ?super ?s
WHERE {
?s a owl:Class .
?s rdfs:subClassOf* owl:Thing .
optional{
?s rdfs:subClassOf ?super.
filter(ISURI(?super))
}
}
 owl:Thing 클래스의 모든 하위
클래스들과 그 클래스들의 하위
클래스들을 반환하시오
SPARQL을 통한 모델 구조 파악 (5/13)
• 직접 정의한 Class 목록
SELECT ?s
WHERE {
?s a owl:Class .
filter(regex(str(?s), '^http://lod.nl.go.kr'))
}
 국가서지LOD에서 직접 정의한
클래스들을 반환하시오
SPARQL을 통한 모델 구조 파악 (6/13)
• Property 목록 - ObjectProperty
SELECT ?s
WHERE {
?s a owl:ObjectProperty .
}
 ObjectProperty에 해당하는
프로퍼티들을 반환하시오
SPARQL을 통한 모델 구조 파악 (7/13)
• Property 목록 - DatatypeProperty
SELECT ?s
WHERE {
?s a owl:DatatypeProperty .
}
 DatatypeProperty에 해당하는
프로퍼티들을 반환하시오
SPARQL을 통한 모델 구조 파악 (8/13)
• 직접 정의한 Property 목록
SELECT ?s
WHERE {
?s a ?o .
FILTER (?o = owl:ObjectProperty || ?o = owl:DatatypeProperty )
filter(regex(str(?s), '^http://lod.nl.go.kr'))
}
 국가서지LOD에서 직접 정의한 프로퍼티들을 반환하시오
SPARQL을 통한 모델 구조 파악 (9/13)
• 직접 정의한 Property의 domain과 range
SELECT *
WHERE {
?s a ?o .
FILTER (?o = owl:ObjectProperty || ?o = owl:DatatypeProperty )
filter(regex(str(?s), '^http://lod.nl.go.kr'))
OPTIONAL { ?s rdfs:domain ?domain. }
OPTIONAL { ?s rdfs:range ?range . }
}
 국가서지LOD에서 직접 정의한 프로퍼티들의 domain과 range를 반환하시오
SPARQL을 통한 모델 구조 파악 (10/13)
• Instance 목록
SELECT *
WHERE {
?s a nlon:ContinuousDataType .
}
 ContinuousDataType 클래스에 속한
인스턴스를 반환하시오
SPARQL을 통한 모델 구조 파악 (11/13)
• 실제LOD에 질의하기 1
SELECT *
WHERE {
SERVICE <http://lod.nl.go.kr/sparql> {
?s a nlon:Author .
}
}
 국가서지LOD의
SPARQL Endpoint에
저자 클래스의 인스턴스를
반환하시오
SPARQL을 통한 모델 구조 파악 (12/13)
• 실제LOD에 질의하기 2
SELECT *
WHERE {
SERVICE <http://lod.nl.go.kr/sparql> {
?s a nlon:Author .
?s foaf:name "윤동주" .
}
}
 국가서지LOD의
SPARQL Endpoint에
저자 클래스의 인스턴스 중
이름이 윤동주인 저자를
반환하시오
SPARQL을 통한 모델 구조 파악 (13/13)
• 실제LOD에 질의하기 3
SELECT *
WHERE {
SERVICE <http://lod.nl.go.kr/sparql> {
nlk:KAC201110203 owl:sameAs ?o .
FILTER(regex(str(?o), '^http://data.kdata'))
}
SERVICE <http://kdata.kr/sparql> {
?o ?p ?kdata.
}
}
 윤동주와 같은 개체로
식별된 KDATA의 윤동주가
제공하는 데이터를
반환하시오
Chapter 4
JENA를 이용한 LOD 활용
LOD에서 데이터 획득
• URI로 접근하여 데이터 획득
• 획득한 데이터를 Model에 담기
• 획득한 데이터에 SPARQL 질의
• 로컬파일에 대한 처리(다운로드 받은 데이터)
• 실제 SPARQL Endpoint에서 데이터 획득
• 결과를 JSON으로 변경
• 하나의 데이터셋 획득
• 두개의 데이터셋 획득
구동 환경
• Tool
– Eclipse
• JAVA 환경
– JAVA1.8
• 필요한 라이브러리
– apache-jena-3.0.1
jena 3.x 버전부터는 java1.8 이상이 필요함
URI로 접근하여 데이터 획득
String uri = "http://lod.nl.go.kr/resource/KAC201110203";
try {
URL url = new URL(uri);
URLConnection conn = url.openConnection();
BufferedReader br = new BufferedReader(
new InputStreamReader(conn.getInputStream(), "UTF-8"));
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
}
http://lod.nl.go.kr/resource/KAC201110203
http://lod.nl.go.kr/data/KAC201110203?output=ttl
http://dbpedia.org/data/Yun_Dong-ju.json
자동으로 인식하여 RDF 데이터를 반환
TTL 형식으로 RDF 데이터를 반환
JSON 형식으로 RDF 데이터를 반환
관련 예제
- Ex01
- Ex01_1
- Ex01_2
획득한 데이터를 Model에 담기
String uri = "http://lod.nl.go.kr/resource/KAC201110203";
Model model = FileManager.get().loadModel(uri);
model.write(System.out, "TTL");
StmtIterator iter = model.listStatements(ResourceFactory.createResource(uri), null,
(RDFNode)null);
Statement stmt = null;
String sub = null, prop = null, obj = null;
while(iter.hasNext()){
stmt = iter.next();
sub = stmt.getSubject().toString();
prop = stmt.getPredicate().toString();
obj = stmt.getObject().toString();
System.out.println(sub +"t"+ prop +"t"+ obj);
}
관련 예제
- Ex02
- Ex03
- Ex03_1
Model 이라는 그릇에 담에 자신이 원하는 대로 조작할 수 있는 기반을 마련해 줄 수 있다.
획득한 데이터에 SPARQL 질의
String uri = "http://lod.nl.go.kr/resource/KAC201110203";
Model model = FileManager.get().loadModel(uri);
String queryString = "PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?name WHERE {?s foaf:name ?name}" ;
Query query = QueryFactory.create(queryString) ;
QueryExecution qexec = QueryExecutionFactory.create(query, model);
ResultSet rs = qexec.execSelect();
for (; rs.hasNext();) {
QuerySolution rb = rs.nextSolution();
RDFNode x = rb.get("name");
if (x.isLiteral()) {
Literal titleStr = (Literal) x;
System.out.println(" " + titleStr);
} else
System.out.println("Strange - not a literal: " + x);
}
관련 예제
- Ex04
Model 이라는 그릇에서 SPARQL 질의를 통해 원하는 데이터를 질의할 수 있다.
로컬파일에 대한 처리
String filename = "./doc/nlk_ontology.rdf";
Model model = FileManager.get().loadModel(filename);
StmtIterator iter = model.listStatements();
Statement stmt = null;
String sub = null, prop = null, obj = null;
while(iter.hasNext()){
stmt = iter.next();
sub = stmt.getSubject().toString();
prop = stmt.getPredicate().toString();
obj = stmt.getObject().toString();
System.out.println(sub +"t"+ prop +"t"+ obj);
}
관련 예제
- Ex05
- Ex06
- Ex06_1
- Ex06_2
내 로컬 컴퓨터에 다운로드 받은 온톨로지 모델파일이나 RDF 데이터가 있다면
이를 읽어 Model이라는 그릇에 담을 수 있다.
Model에 담긴 데이터는 앞장에서와 같이 SPARQL 질의를 해서 원하는 데이터를 획득할 수 있다.
실제 SPARQL Endpoint에서 데이터 획득
String queryString = "PREFIX owl: <http://www.w3.org/2002/07/owl#> SELECT *
WHERE { SERVICE <http://lod.nl.go.kr/sparql> {?s a owl:ObjectProperty . } }" ;
Query query = QueryFactory.create(queryString) ;
try (QueryExecution qexec = QueryExecutionFactory.create(query,
ModelFactory.createDefaultModel())) {
ResultSet rs = qexec.execSelect() ;
ResultSetFormatter.out(System.out, rs, query) ;
}
관련 예제
- Ex07
- Ex08
실제 SPARQL Endpoint에 SPARQL 질의를 하여 데이터를 가져올 수 있다.
String queryString = "PREFIX owl: <http://www.w3.org/2002/07/owl#> SELECT *
WHERE { ?s a owl:ObjectProperty . } " ;
String service = "http://lod.nl.go.kr/sparql";
Query query = QueryFactory.create(queryString) ;
QueryExecution qexec = QueryExecutionFactory.sparqlService(service, query);
ResultSet rs = qexec.execSelect();
결과를 JSON으로 변경
String queryString = "PREFIX owl: <http://www.w3.org/2002/07/owl#> SELECT *
WHERE { <http://lod.nl.go.kr/resource/KAC201110203> ?p ?o. } " ;
String service = "http://lod.nl.go.kr/sparql";
Query query = QueryFactory.create(queryString) ;
QueryExecution qexec = QueryExecutionFactory.sparqlService(service, query);
ResultSet rs = null;
try {
rs = qexec.execSelect();
} catch (Exception e) {
e.printStackTrace();
}
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ResultSetFormatter.outputAsJSON(outputStream, rs);
String json = new String(outputStream.toByteArray());
System.out.println(json);
관련 예제
- Ex09
SPARQL Endpoint에서 반환 받는 데이터를 JSON 형식으로 변경하여 가공할수 도 있다.
하나의 데이터셋 획득
String queryString = "DESCRIBE <http://lod.nl.go.kr/resource/KAC201110203>
" ;
String service = "http://lod.nl.go.kr/sparql";
Query query = QueryFactory.create(queryString) ;
QueryExecution qexec = QueryExecutionFactory.sparqlService(service, query);
Model model = null;
try {
model = qexec.execDescribe();
} catch (Exception e) {
e.printStackTrace();
}
model.write(System.out, "TTL");
관련 예제
- Ex10
- Ex11
<http://lod.nl.go.kr/resource/KAC201110203> 이 URI를 따라가면 이 URI에 대한 데이터를 웹 상에
서 볼 수 있으며, DESCRIBE 라는 질의를 통해 이 URI에 대한 데이터를 가져올 수 있다.
두개의 데이터셋 획득
String queryString = "DESCRIBE <http://lod.nl.go.kr/resource/KAC201110203> " ;
String service = "http://lod.nl.go.kr/sparql";
Query query = QueryFactory.create(queryString) ;
QueryExecution qexec = QueryExecutionFactory.sparqlService(service, query);
model = qexec.execDescribe();
관련 예제
- Ex12
- Ex13
두 곳의 SPARQL Endpoint에서 데이터를 획득하여 하나의 Model에 담을 수 있다.
String queryString = "DESCRIBE <http://data.kdata.kr/resource/Yun_Dong-ju> " ;
String service = "http://kdata.kr/sparql";
Query query = QueryFactory.create(queryString) ;
QueryExecution qexec = QueryExecutionFactory.sparqlService(service, query);
model.add(qexec.execDescribe());
model.write(System.out, "TTL");
그림 출처
• http://lod.nl.go.kr/home/images/m_diagram_book.png
• http://vowl.visualdataweb.org/
• http://kdata.kr/model/
• http://ontospec.com/jsp/make/result.jsp?path=142199200583
0kdata.rdf&lang=ko&fileName=kdata.rdf
• http://pro.europeana.eu/page/edm-documentation
감사합니다
joyhong@li-st.com
http://joyhong.tistory.com/

More Related Content

What's hot

SPARQL 사용법
SPARQL 사용법SPARQL 사용법
SPARQL 사용법홍수 허
 
온톨로지 개념 및 표현언어
온톨로지 개념 및 표현언어온톨로지 개념 및 표현언어
온톨로지 개념 및 표현언어Dongbum Kim
 
An Introduction to SPARQL
An Introduction to SPARQLAn Introduction to SPARQL
An Introduction to SPARQLOlaf Hartig
 
Graph and RDF databases
Graph and RDF databasesGraph and RDF databases
Graph and RDF databasesNassim Bahri
 
Jena – A Semantic Web Framework for Java
Jena – A Semantic Web Framework for JavaJena – A Semantic Web Framework for Java
Jena – A Semantic Web Framework for JavaAleksander Pohl
 
The Semantic Web #9 - Web Ontology Language (OWL)
The Semantic Web #9 - Web Ontology Language (OWL)The Semantic Web #9 - Web Ontology Language (OWL)
The Semantic Web #9 - Web Ontology Language (OWL)Myungjin Lee
 
지식그래프 개념과 활용방안 (Knowledge Graph - Introduction and Use Cases)
지식그래프 개념과 활용방안 (Knowledge Graph - Introduction and Use Cases)지식그래프 개념과 활용방안 (Knowledge Graph - Introduction and Use Cases)
지식그래프 개념과 활용방안 (Knowledge Graph - Introduction and Use Cases)Myungjin Lee
 
Azure data bricks by Eugene Polonichko
Azure data bricks by Eugene PolonichkoAzure data bricks by Eugene Polonichko
Azure data bricks by Eugene PolonichkoAlex Tumanoff
 
Property graph vs. RDF Triplestore comparison in 2020
Property graph vs. RDF Triplestore comparison in 2020Property graph vs. RDF Triplestore comparison in 2020
Property graph vs. RDF Triplestore comparison in 2020Ontotext
 
[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영NAVER D2
 
Elastic search Walkthrough
Elastic search WalkthroughElastic search Walkthrough
Elastic search WalkthroughSuhel Meman
 
Linked Data and Knowledge Graphs -- Constructing and Understanding Knowledge ...
Linked Data and Knowledge Graphs -- Constructing and Understanding Knowledge ...Linked Data and Knowledge Graphs -- Constructing and Understanding Knowledge ...
Linked Data and Knowledge Graphs -- Constructing and Understanding Knowledge ...Jeff Z. Pan
 
Azure Synapse Analytics 専用SQL Poolベストプラクティス
Azure Synapse Analytics 専用SQL PoolベストプラクティスAzure Synapse Analytics 専用SQL Poolベストプラクティス
Azure Synapse Analytics 専用SQL PoolベストプラクティスMicrosoft
 
Spark + S3 + R3를 이용한 데이터 분석 시스템 만들기
Spark + S3 + R3를 이용한 데이터 분석 시스템 만들기Spark + S3 + R3를 이용한 데이터 분석 시스템 만들기
Spark + S3 + R3를 이용한 데이터 분석 시스템 만들기AWSKRUG - AWS한국사용자모임
 

What's hot (20)

SPARQL 사용법
SPARQL 사용법SPARQL 사용법
SPARQL 사용법
 
SHACL by example
SHACL by exampleSHACL by example
SHACL by example
 
RDF Data Model
RDF Data ModelRDF Data Model
RDF Data Model
 
SPARQL Cheat Sheet
SPARQL Cheat SheetSPARQL Cheat Sheet
SPARQL Cheat Sheet
 
온톨로지 개념 및 표현언어
온톨로지 개념 및 표현언어온톨로지 개념 및 표현언어
온톨로지 개념 및 표현언어
 
An Introduction to SPARQL
An Introduction to SPARQLAn Introduction to SPARQL
An Introduction to SPARQL
 
Graph and RDF databases
Graph and RDF databasesGraph and RDF databases
Graph and RDF databases
 
Jena – A Semantic Web Framework for Java
Jena – A Semantic Web Framework for JavaJena – A Semantic Web Framework for Java
Jena – A Semantic Web Framework for Java
 
The Semantic Web #9 - Web Ontology Language (OWL)
The Semantic Web #9 - Web Ontology Language (OWL)The Semantic Web #9 - Web Ontology Language (OWL)
The Semantic Web #9 - Web Ontology Language (OWL)
 
RDF, linked data and semantic web
RDF, linked data and semantic webRDF, linked data and semantic web
RDF, linked data and semantic web
 
지식그래프 개념과 활용방안 (Knowledge Graph - Introduction and Use Cases)
지식그래프 개념과 활용방안 (Knowledge Graph - Introduction and Use Cases)지식그래프 개념과 활용방안 (Knowledge Graph - Introduction and Use Cases)
지식그래프 개념과 활용방안 (Knowledge Graph - Introduction and Use Cases)
 
RDF data model
RDF data modelRDF data model
RDF data model
 
Azure data bricks by Eugene Polonichko
Azure data bricks by Eugene PolonichkoAzure data bricks by Eugene Polonichko
Azure data bricks by Eugene Polonichko
 
Property graph vs. RDF Triplestore comparison in 2020
Property graph vs. RDF Triplestore comparison in 2020Property graph vs. RDF Triplestore comparison in 2020
Property graph vs. RDF Triplestore comparison in 2020
 
[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영
 
Elastic search Walkthrough
Elastic search WalkthroughElastic search Walkthrough
Elastic search Walkthrough
 
Linked Data and Knowledge Graphs -- Constructing and Understanding Knowledge ...
Linked Data and Knowledge Graphs -- Constructing and Understanding Knowledge ...Linked Data and Knowledge Graphs -- Constructing and Understanding Knowledge ...
Linked Data and Knowledge Graphs -- Constructing and Understanding Knowledge ...
 
Azure Synapse Analytics 専用SQL Poolベストプラクティス
Azure Synapse Analytics 専用SQL PoolベストプラクティスAzure Synapse Analytics 専用SQL Poolベストプラクティス
Azure Synapse Analytics 専用SQL Poolベストプラクティス
 
JSON-LD and SHACL for Knowledge Graphs
JSON-LD and SHACL for Knowledge GraphsJSON-LD and SHACL for Knowledge Graphs
JSON-LD and SHACL for Knowledge Graphs
 
Spark + S3 + R3를 이용한 데이터 분석 시스템 만들기
Spark + S3 + R3를 이용한 데이터 분석 시스템 만들기Spark + S3 + R3를 이용한 데이터 분석 시스템 만들기
Spark + S3 + R3를 이용한 데이터 분석 시스템 만들기
 

Viewers also liked

Linked Data in Healthcare and Life Sciences
Linked Data in Healthcare and Life SciencesLinked Data in Healthcare and Life Sciences
Linked Data in Healthcare and Life SciencesJames G. Boram Kim
 
Linked Data Technology and Status
Linked Data Technology and StatusLinked Data Technology and Status
Linked Data Technology and StatusMyungjin Lee
 
Linked Data 4 principles
Linked Data 4 principles Linked Data 4 principles
Linked Data 4 principles LiST Inc
 
쉽게 이해하는 LOD
쉽게 이해하는 LOD쉽게 이해하는 LOD
쉽게 이해하는 LODMyungjin Lee
 
웹의 또 다른 모습, 글로벌 데이터베이스 Linked open data
웹의 또 다른 모습, 글로벌 데이터베이스 Linked open data웹의 또 다른 모습, 글로벌 데이터베이스 Linked open data
웹의 또 다른 모습, 글로벌 데이터베이스 Linked open dataHansung University
 
공공데이터와 Linked open data
공공데이터와 Linked open data공공데이터와 Linked open data
공공데이터와 Linked open dataMyungjin Lee
 

Viewers also liked (8)

Linked Data in Healthcare and Life Sciences
Linked Data in Healthcare and Life SciencesLinked Data in Healthcare and Life Sciences
Linked Data in Healthcare and Life Sciences
 
Linked Data Technology and Status
Linked Data Technology and StatusLinked Data Technology and Status
Linked Data Technology and Status
 
Linked Data 4 principles
Linked Data 4 principles Linked Data 4 principles
Linked Data 4 principles
 
링크드 데이터 사례
링크드 데이터 사례링크드 데이터 사례
링크드 데이터 사례
 
쉽게 이해하는 LOD
쉽게 이해하는 LOD쉽게 이해하는 LOD
쉽게 이해하는 LOD
 
Open Data and Linked Data
Open Data and Linked DataOpen Data and Linked Data
Open Data and Linked Data
 
웹의 또 다른 모습, 글로벌 데이터베이스 Linked open data
웹의 또 다른 모습, 글로벌 데이터베이스 Linked open data웹의 또 다른 모습, 글로벌 데이터베이스 Linked open data
웹의 또 다른 모습, 글로벌 데이터베이스 Linked open data
 
공공데이터와 Linked open data
공공데이터와 Linked open data공공데이터와 Linked open data
공공데이터와 Linked open data
 

Similar to LODAC 2017 Linked Open Data Workshop

LOD 구축현황 과 현황
LOD 구축현황 과 현황LOD 구축현황 과 현황
LOD 구축현황 과 현황sbchae
 
Linked open data
Linked open dataLinked open data
Linked open dataToby Yun
 
Swc발표자료2 2(restful)
Swc발표자료2 2(restful)Swc발표자료2 2(restful)
Swc발표자료2 2(restful)마경근 마
 
페이스북과 트위터에서의 소셜 시맨틱 웹
페이스북과 트위터에서의 소셜 시맨틱 웹페이스북과 트위터에서의 소셜 시맨틱 웹
페이스북과 트위터에서의 소셜 시맨틱 웹Myungjin Lee
 
Technology Trends for LOD and Semantic Web
Technology Trends for LOD and Semantic WebTechnology Trends for LOD and Semantic Web
Technology Trends for LOD and Semantic WebSaltlux Inc.
 
문돌이가 가르치는 서버사이드 PHP
문돌이가 가르치는 서버사이드 PHP문돌이가 가르치는 서버사이드 PHP
문돌이가 가르치는 서버사이드 PHP동현 조
 
파이콘 2017 그만퇴근합시다_이지호
파이콘 2017 그만퇴근합시다_이지호파이콘 2017 그만퇴근합시다_이지호
파이콘 2017 그만퇴근합시다_이지호Jiho Lee
 
Node.js에서 공공API를 활용해서 개발하기
Node.js에서 공공API를 활용해서 개발하기Node.js에서 공공API를 활용해서 개발하기
Node.js에서 공공API를 활용해서 개발하기Inho Kwon
 
도서관은 웹에 존재하는가
도서관은 웹에 존재하는가도서관은 웹에 존재하는가
도서관은 웹에 존재하는가Hansung University
 
2012.12_ 서울시 공공데이터 Open api 검증보고서
2012.12_ 서울시 공공데이터 Open api 검증보고서 2012.12_ 서울시 공공데이터 Open api 검증보고서
2012.12_ 서울시 공공데이터 Open api 검증보고서 codenamu
 
Open source engineering - 0.1
Open source engineering - 0.1Open source engineering - 0.1
Open source engineering - 0.1YoungSu Son
 
인터링킹, InterLinking, LOD
인터링킹, InterLinking, LOD인터링킹, InterLinking, LOD
인터링킹, InterLinking, LOD경욱 이
 
티켓몬스터를 위한 PHP 개발 방법
티켓몬스터를 위한 PHP 개발 방법티켓몬스터를 위한 PHP 개발 방법
티켓몬스터를 위한 PHP 개발 방법Young D
 
서울시 열린데이터 광장 문화관광 분야 LOD 서비스
서울시 열린데이터 광장 문화관광 분야 LOD 서비스서울시 열린데이터 광장 문화관광 분야 LOD 서비스
서울시 열린데이터 광장 문화관광 분야 LOD 서비스Myungjin Lee
 
Web http spec(basic)
Web http spec(basic)Web http spec(basic)
Web http spec(basic)Julia Park
 

Similar to LODAC 2017 Linked Open Data Workshop (20)

LOD 구축현황 과 현황
LOD 구축현황 과 현황LOD 구축현황 과 현황
LOD 구축현황 과 현황
 
Linked open data
Linked open dataLinked open data
Linked open data
 
Swc발표자료2 2(restful)
Swc발표자료2 2(restful)Swc발표자료2 2(restful)
Swc발표자료2 2(restful)
 
페이스북과 트위터에서의 소셜 시맨틱 웹
페이스북과 트위터에서의 소셜 시맨틱 웹페이스북과 트위터에서의 소셜 시맨틱 웹
페이스북과 트위터에서의 소셜 시맨틱 웹
 
Technology Trends for LOD and Semantic Web
Technology Trends for LOD and Semantic WebTechnology Trends for LOD and Semantic Web
Technology Trends for LOD and Semantic Web
 
1.sos2010 tony
1.sos2010 tony1.sos2010 tony
1.sos2010 tony
 
library linked data
library linked datalibrary linked data
library linked data
 
문돌이가 가르치는 서버사이드 PHP
문돌이가 가르치는 서버사이드 PHP문돌이가 가르치는 서버사이드 PHP
문돌이가 가르치는 서버사이드 PHP
 
파이콘 2017 그만퇴근합시다_이지호
파이콘 2017 그만퇴근합시다_이지호파이콘 2017 그만퇴근합시다_이지호
파이콘 2017 그만퇴근합시다_이지호
 
Node.js에서 공공API를 활용해서 개발하기
Node.js에서 공공API를 활용해서 개발하기Node.js에서 공공API를 활용해서 개발하기
Node.js에서 공공API를 활용해서 개발하기
 
도서관은 웹에 존재하는가
도서관은 웹에 존재하는가도서관은 웹에 존재하는가
도서관은 웹에 존재하는가
 
Linked Open Data
Linked Open DataLinked Open Data
Linked Open Data
 
2012.12_ 서울시 공공데이터 Open api 검증보고서
2012.12_ 서울시 공공데이터 Open api 검증보고서 2012.12_ 서울시 공공데이터 Open api 검증보고서
2012.12_ 서울시 공공데이터 Open api 검증보고서
 
Open source engineering - 0.1
Open source engineering - 0.1Open source engineering - 0.1
Open source engineering - 0.1
 
인터링킹, InterLinking, LOD
인터링킹, InterLinking, LOD인터링킹, InterLinking, LOD
인터링킹, InterLinking, LOD
 
티켓몬스터를 위한 PHP 개발 방법
티켓몬스터를 위한 PHP 개발 방법티켓몬스터를 위한 PHP 개발 방법
티켓몬스터를 위한 PHP 개발 방법
 
서울시 열린데이터 광장 문화관광 분야 LOD 서비스
서울시 열린데이터 광장 문화관광 분야 LOD 서비스서울시 열린데이터 광장 문화관광 분야 LOD 서비스
서울시 열린데이터 광장 문화관광 분야 LOD 서비스
 
Web http spec
Web http specWeb http spec
Web http spec
 
Web http spec(basic)
Web http spec(basic)Web http spec(basic)
Web http spec(basic)
 
Web http spec
Web http specWeb http spec
Web http spec
 

More from Myungjin Lee

JSP 프로그래밍 #05 HTML과 JSP
JSP 프로그래밍 #05 HTML과 JSPJSP 프로그래밍 #05 HTML과 JSP
JSP 프로그래밍 #05 HTML과 JSPMyungjin Lee
 
JSP 프로그래밍 #04 JSP 의 기본
JSP 프로그래밍 #04 JSP 의 기본JSP 프로그래밍 #04 JSP 의 기본
JSP 프로그래밍 #04 JSP 의 기본Myungjin Lee
 
JSP 프로그래밍 #03 서블릿
JSP 프로그래밍 #03 서블릿JSP 프로그래밍 #03 서블릿
JSP 프로그래밍 #03 서블릿Myungjin Lee
 
JSP 프로그래밍 #02 서블릿과 JSP 시작하기
JSP 프로그래밍 #02 서블릿과 JSP 시작하기JSP 프로그래밍 #02 서블릿과 JSP 시작하기
JSP 프로그래밍 #02 서블릿과 JSP 시작하기Myungjin Lee
 
JSP 프로그래밍 #01 웹 프로그래밍
JSP 프로그래밍 #01 웹 프로그래밍JSP 프로그래밍 #01 웹 프로그래밍
JSP 프로그래밍 #01 웹 프로그래밍Myungjin Lee
 
관광 지식베이스와 스마트 관광 서비스 (Knowledge base and Smart Tourism)
관광 지식베이스와 스마트 관광 서비스 (Knowledge base and Smart Tourism)관광 지식베이스와 스마트 관광 서비스 (Knowledge base and Smart Tourism)
관광 지식베이스와 스마트 관광 서비스 (Knowledge base and Smart Tourism)Myungjin Lee
 
오픈 데이터와 인공지능
오픈 데이터와 인공지능오픈 데이터와 인공지능
오픈 데이터와 인공지능Myungjin Lee
 
법령 온톨로지의 구축 및 검색
법령 온톨로지의 구축 및 검색법령 온톨로지의 구축 및 검색
법령 온톨로지의 구축 및 검색Myungjin Lee
 
도서관과 Linked Data
도서관과 Linked Data도서관과 Linked Data
도서관과 Linked DataMyungjin Lee
 
공공데이터, 현재 우리는?
공공데이터, 현재 우리는?공공데이터, 현재 우리는?
공공데이터, 현재 우리는?Myungjin Lee
 
Introduction of Deep Learning
Introduction of Deep LearningIntroduction of Deep Learning
Introduction of Deep LearningMyungjin Lee
 
LOD(Linked Open Data) Recommendations
LOD(Linked Open Data) RecommendationsLOD(Linked Open Data) Recommendations
LOD(Linked Open Data) RecommendationsMyungjin Lee
 
Interlinking for Linked Data
Interlinking for Linked DataInterlinking for Linked Data
Interlinking for Linked DataMyungjin Lee
 
Linked Data Usecases
Linked Data UsecasesLinked Data Usecases
Linked Data UsecasesMyungjin Lee
 
공공데이터와 Linked open data
공공데이터와 Linked open data공공데이터와 Linked open data
공공데이터와 Linked open dataMyungjin Lee
 
Linked Data Modeling for Beginner
Linked Data Modeling for BeginnerLinked Data Modeling for Beginner
Linked Data Modeling for BeginnerMyungjin Lee
 
The Semantic Web #10 - SPARQL
The Semantic Web #10 - SPARQLThe Semantic Web #10 - SPARQL
The Semantic Web #10 - SPARQLMyungjin Lee
 
Development of Twitter Application #8 - Streaming API
Development of Twitter Application #8 - Streaming APIDevelopment of Twitter Application #8 - Streaming API
Development of Twitter Application #8 - Streaming APIMyungjin Lee
 
Development of Twitter Application #7 - Search
Development of Twitter Application #7 - SearchDevelopment of Twitter Application #7 - Search
Development of Twitter Application #7 - SearchMyungjin Lee
 
Development of Twitter Application #6 - Trends
Development of Twitter Application #6 - TrendsDevelopment of Twitter Application #6 - Trends
Development of Twitter Application #6 - TrendsMyungjin Lee
 

More from Myungjin Lee (20)

JSP 프로그래밍 #05 HTML과 JSP
JSP 프로그래밍 #05 HTML과 JSPJSP 프로그래밍 #05 HTML과 JSP
JSP 프로그래밍 #05 HTML과 JSP
 
JSP 프로그래밍 #04 JSP 의 기본
JSP 프로그래밍 #04 JSP 의 기본JSP 프로그래밍 #04 JSP 의 기본
JSP 프로그래밍 #04 JSP 의 기본
 
JSP 프로그래밍 #03 서블릿
JSP 프로그래밍 #03 서블릿JSP 프로그래밍 #03 서블릿
JSP 프로그래밍 #03 서블릿
 
JSP 프로그래밍 #02 서블릿과 JSP 시작하기
JSP 프로그래밍 #02 서블릿과 JSP 시작하기JSP 프로그래밍 #02 서블릿과 JSP 시작하기
JSP 프로그래밍 #02 서블릿과 JSP 시작하기
 
JSP 프로그래밍 #01 웹 프로그래밍
JSP 프로그래밍 #01 웹 프로그래밍JSP 프로그래밍 #01 웹 프로그래밍
JSP 프로그래밍 #01 웹 프로그래밍
 
관광 지식베이스와 스마트 관광 서비스 (Knowledge base and Smart Tourism)
관광 지식베이스와 스마트 관광 서비스 (Knowledge base and Smart Tourism)관광 지식베이스와 스마트 관광 서비스 (Knowledge base and Smart Tourism)
관광 지식베이스와 스마트 관광 서비스 (Knowledge base and Smart Tourism)
 
오픈 데이터와 인공지능
오픈 데이터와 인공지능오픈 데이터와 인공지능
오픈 데이터와 인공지능
 
법령 온톨로지의 구축 및 검색
법령 온톨로지의 구축 및 검색법령 온톨로지의 구축 및 검색
법령 온톨로지의 구축 및 검색
 
도서관과 Linked Data
도서관과 Linked Data도서관과 Linked Data
도서관과 Linked Data
 
공공데이터, 현재 우리는?
공공데이터, 현재 우리는?공공데이터, 현재 우리는?
공공데이터, 현재 우리는?
 
Introduction of Deep Learning
Introduction of Deep LearningIntroduction of Deep Learning
Introduction of Deep Learning
 
LOD(Linked Open Data) Recommendations
LOD(Linked Open Data) RecommendationsLOD(Linked Open Data) Recommendations
LOD(Linked Open Data) Recommendations
 
Interlinking for Linked Data
Interlinking for Linked DataInterlinking for Linked Data
Interlinking for Linked Data
 
Linked Data Usecases
Linked Data UsecasesLinked Data Usecases
Linked Data Usecases
 
공공데이터와 Linked open data
공공데이터와 Linked open data공공데이터와 Linked open data
공공데이터와 Linked open data
 
Linked Data Modeling for Beginner
Linked Data Modeling for BeginnerLinked Data Modeling for Beginner
Linked Data Modeling for Beginner
 
The Semantic Web #10 - SPARQL
The Semantic Web #10 - SPARQLThe Semantic Web #10 - SPARQL
The Semantic Web #10 - SPARQL
 
Development of Twitter Application #8 - Streaming API
Development of Twitter Application #8 - Streaming APIDevelopment of Twitter Application #8 - Streaming API
Development of Twitter Application #8 - Streaming API
 
Development of Twitter Application #7 - Search
Development of Twitter Application #7 - SearchDevelopment of Twitter Application #7 - Search
Development of Twitter Application #7 - Search
 
Development of Twitter Application #6 - Trends
Development of Twitter Application #6 - TrendsDevelopment of Twitter Application #6 - Trends
Development of Twitter Application #6 - Trends
 

LODAC 2017 Linked Open Data Workshop

  • 1. LOD 실습 Part 1. LOD의 기본 개념 2017-02-28
  • 2. 워크샵 프로그램 시간 제목 발표자 13:30~14:10 Part 1. LOD의 기본 개념 이명진 14:10~14:50 Part 2. LOD 모델 이명진 14:50~15:30 Part 3. SPARQL 이명진 15:30~15:50 Coffee Break 15:50~16:20 Part 4. 실습 – 모델의 이해 허홍수 16:20~17:00 Part 4. 실습 – SPARQL 허홍수 17:00~17:30 Part 4. 실습 – 프로그래밍 허홍수
  • 4. 현재의 웹 • HTML – 사람이 읽고 해석할 수 있는 연결된 문서를 만드는 것 ?정보의 재사용!!!
  • 5. 만약… • 재사용성, 기계에 의한 가독성, 새로운 서비스 생산성 향상 유라에 대한 정보를 줘. { "name": "유라", "realName": "김아영", "job": "가수", "birth": "1992.11.6", "bodySize": { "height": 168, "weight": 49 }, "group": { "groupName": "걸스데이", "groupUrl": "http://www.naver.com/GirlsDay" }, "pic": "http://www.naver.com/GirlsDay/Yura.jpg" }
  • 6. Linked Open Data Linked Open Data 웹을 통해 사람과 기계가 읽고 처리할 수 있는 형태로 데이터에 대한 정보를 기술(description) 웹 페이지가 서로 연결된 것처럼 데이터들끼리 다양한 관계에 의해 연결되어 있는 형태 URI를 이용해서 누구나 데이터에 접근할 수 있으며 데이터에 대한 정보를 제공
  • 7. LOD의 네 가지 원칙 1. 웹 상의 자원을 식별하기 위해 URI를 사용하라. 2. 웹 상의 자원들이 사람과 사용자 에이전트에 의해 참조 (refer)되고 탐색(look up)될 수 있는 HTTP URI를 사용 하라. 3. 자원의 URI가 역참조(dereference)될 때 자원에 대한 유 용한 정보를 RDF/XML과 같은 표준 형식을 사용하여 제 공하라. 4. 웹에서 다른 연관된 정보의 탐색을 개선하기 위해 다른 데이터와의 URI 연결(link)를 포함하라.
  • 8. LOD의 형태 http://cafe.naver.com/yurasmarbling#me 유라 김아영 November 6, 1992 168 49 http://www.naver.com/GirlsDay/Yura.jpg http://cafe.daum.net/Girlsday5#me 걸스데이 http://xmlns.com/foaf/0.1/nick http://xmlns.com/foaf/0.1/name http://xmlns.com/foaf/0.1/birthday http://xmlns.com/foaf/0.1/height http://xmlns.com/foaf/0.1/weight http://xmlns.com/foaf/0.1/depiction http://xmlns.com/foaf/0.1/member http://xmlns.com/foaf/0.1/name http://cafe.daum.net/Girlsday5 http://xmlns.com/foaf/0.1/homepage
  • 9. 웹에서의 LOD LOD Service <foaf:Person rdf:about="http://cafe.naver.com/yurasmarbling#me"> <foaf:nick>유라</foaf:nick> <foaf:name>김아영</foaf:name> <foaf:birthday>November 6, 1992</foaf:birthday> <foaf:height>168</foaf:height> <foaf:weight>49</foaf:weight> <foaf:depiction rdf:resource="http://www.naver.com/GirlsDay/Yura.jpg" /> </foaf:Person> RDF/XML http://cafe.naver.com/yurasmarbling#me 유라 김아영 November 6, 1992 168 49 http://www.naver.com/GirlsDay/Yura.jpg http://cafe.daum.net/Girlsday5#me 걸스데이 http://xmlns.com/foaf/0.1/nick http://xmlns.com/foaf/0.1/name http://xmlns.com/foaf/0.1/birthday http://xmlns.com/foaf/0.1/height http://xmlns.com/foaf/0.1/weight http://xmlns.com/foaf/0.1/depiction http://xmlns.com/foaf/0.1/member http://xmlns.com/foaf/0.1/name http://cafe.daum.net/Girlsday5 http://xmlns.com/foaf/0.1/homepage
  • 10. LOD를 위한 요소 기술들 문서 내부의 구조화된 콘텐츠를 기계가 읽고 처리 가능한 형태로 표기하기 위한 기본적인 요소 웹 상에 존재하는 자원에 대한 정보와 자원들 사이의 관계를 기술하기 위한 프레임워크 RDF 기반 자원의 속성과 클래스의 구조를 기술하기 위한 용어집 RDF 기반의 질의 언어 및 프로토콜 웹에 존재하는 자원들을 식별하기 위해 사용되는 문자열
  • 11. URI (Uniform Resource Identifier) • 웹 상에서 사물(thing)을 식별하기 위한 식별자로 활용 식별하기 위해서 현실에서는 … 웹에서는 … 주민등록번호 861002-1052747 URI http://semantics.kr/MyungjinLee
  • 12. URI 생성 시 참고사항 • 단순성 – 짧고 기억하기 쉬운 형태로 • 안정성 – 가능한 오랫동안 유지될 수 있게 • 관리의 용이성 – 관리할 수 있는 형태로 만들도록 URI Type URI structure Examples Identifier http://{domain}/id/{concept}/{reference} http://education.data.gov.uk/id/school/78 UK 공공 사례 'http://' BASE '/' 'id' '/' ORG '/' CATEGORY ( '/' TOKEN )+ 미국정부 공공 사례
  • 13. RDF (Resource Description Framework) • 웹에 존재하는 자원에 대한 정보를 개념적으로 기술하거 나 모델링하기 위한 방법을 제공 “이명진은 유라의 남편이다”를 RDF로 기술하면? hasWife http://semantics.kr/myungjinlee http://semantics.kr/yura http://semantics.kr/rel/hasWife Subject URI reference Predicate URI reference Object URI reference or Literal Triple
  • 14. RDF 예제 http://cafe.naver.com/yurasmarbling#me 유라 김아영 November 6, 1992 168 49 http://www.naver.com/GirlsDay/Yura.jpg http://cafe.daum.net/Girlsday5#me 걸스데이 http://xmlns.com/foaf/0.1/nick http://xmlns.com/foaf/0.1/name http://xmlns.com/foaf/0.1/birthday http://xmlns.com/foaf/0.1/height http://xmlns.com/foaf/0.1/weight http://xmlns.com/foaf/0.1/depiction http://xmlns.com/foaf/0.1/member http://xmlns.com/foaf/0.1/name http://cafe.daum.net/Girlsday5 http://xmlns.com/foaf/0.1/homepage
  • 15. RDF를 기계가 읽기 위한 방법 • RDF/XML – W3C Recommendation, 10 February 2004 – RDF 그래프 모형을 쓰고 교환하기 위해 사용되는 XML 기반의 문법 • N-Triples – RDF Test Cases, W3C Recommendation, 10 February 2004 – RDF 데이터를 저장하고 전송하기 위한 평문(plain text) 형태의 포맷 • Notation 3 (N3) – 사용자 가독성이 보다 확장된 형태로 RDF 모델을 직렬화(serialization)하 기 위한 단축 표현 – RDF/XML보다 더 간결하고 가독성이 있는 형태 • Turtle (Terse RDF Triple Language) – W3C Recommendation 25 February 2014 – RDF에서 데이터를 표현하기 위한 포맷
  • 16. RDF를 기계가 읽기 위한 방법 <http://en.wikipedia.org/wiki/Tony_Benn> <http://purl.org/dc/elements/1.1/title> "Tony Benn" . <http://en.wikipedia.org/wiki/Tony_Benn> <http://purl.org/dc/elements/1.1/publisher> "Wikipedia" . <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"> <rdf:Description rdf:about="http://en.wikipedia.org/wiki/Tony_Benn"> <dc:title>Tony Benn</dc:title> <dc:publisher>Wikipedia</dc:publisher> </rdf:Description> </rdf:RDF> @prefix dc: <http://purl.org/dc/elements/1.1/>. <http://en.wikipedia.org/wiki/Tony_Benn> dc:title "Tony Benn"; dc:publisher "Wikipedia". @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . @prefix dc: <http://purl.org/dc/elements/1.1/> . @prefix ex: <http://example.org/stuff/1.0/> . <http://www.w3.org/TR/rdf-syntax-grammar> dc:title "RDF/XML Syntax Specification (Revised)" ; ex:editor [ ex:fullname "Dave Beckett"; ex:homePage <http://purl.org/net/dajobe/> ] . N-Triple RDF/XML N3 Turtle
  • 17. RDFS(RDF Schema) • RDF 형태의 데이터를 담기 위한 구조를 만드는 방법을 제 공 – 클래스 정의 – 속성과 관련 제약조건에 대한 정의 – 계층 구조에 대한 정의 has wife ♂ ♀ is a is a Male Female  Person subset ofsubset of
  • 19. OWL (Web Ontology Language) • 단순한 데이터의 구조를 벗어나 온톨로지를 만들기 위한 지식 표현 언어 Man Woman ∩ = Ø Person Person descendant Person descendant descendant Husband Wife 1:1 _01 Action hasGenre ActionMovie type Genre type
  • 20. SPARQL (SPARQL Protocol and RDF Query Language) • RDF 형식으로 저장된 데이터를 검색하고 조작하기 위한 언어 HTTP를 통한 SPARQL의 사용 PREFIX foaf: <http://xmlns.com/foaf/0.1/> SELECT ?name ?email WHERE { ?person a foaf:Person. ?person foaf:name ?name. ?person foaf:mbox ?email. } RDF Storage ?name ?email Myungjin Lee mjlee@li-st.com Gildong Hong gildong@daum.ne t Grace Byun grace@naver.com SPARQL HTTP HTTP
  • 22. LOD 데이터 구축자 데이터 구축자 모델링 도구 온톨로지 모델링 RDF 변환 규칙 작성 RDF 변환 데이터베이스 R2RML RDFS & OWL URI & RDF RDF Serialization
  • 23. LOD 데이터 구축자에게 필요한 도구 • 온톨로지 편집기 – 온톨로지 모델링 및 인스턴스 입력을 위한 도구 – 관련 도구 • Stanford Center for Biomedical Informatics Research의 Protege • TopQuadrant의 TopBraid Composer
  • 24. LOD 데이터 구축자에게 필요한 도구 • 변환기 – 데이터베이스의 관계형 데이터를 RDF 형태로 변환하기 위한 도 구 – R2RML(RDB to RDF Mapping Language)를 기반으로 변환 수행 – 관련 도구 • LiST의 OntoTrans • OpenLink Software의 Virtuoso RDF Views
  • 25. LOD 서비스 구축자 LOD 서비스 제공자 RDF 적재 RDF URI & RDF RDF Serialization SPARQL 트리플 저장소 데이터 연계 LOD 서비스 프레임워크 LOD 서비스 Linked Data Platform 발행
  • 26. LOD 서비스 구축자에게 필요한 도구 • 트리플 저장소 – RDF 형태의 데이터를 저장하고 운용 및 추론과 질의 처리를 수행 – 관련 도구 – LiST의 OntoBase • 적용사례: KDATA, 주소데이터 LOD, 수목원 LOD, 국립중앙도서관 LOD 등 – OpenLink Software의 Virtuoso – Franz의 AllegroGraph – OntoText의 OWLIM • LOD 발행 도구 – 구축된 RDF 데이터를 웹을 통해 발행하고 접근할 수 있도록 지원 – 관련 도구 • Pubby • OpenLink Software의 Virtuoso
  • 27. LOD 사용자 LOD 서비스 응용서비스 개발자 응용서비스 개발자 URI RDF Query Result SPARQL URI & RDF SPARQL SPARQL Query Result Format
  • 28. LOD 사용자에게 필요한 도구 • 온톨로지 편집기 – LOD 사용자에게는 모델을 이해하기 위해 필요한 도구 • 프로그래밍 라이브러리 – RDF 형태의 데이터를 처리하기 위한 라이브러리 – 관련 도구 • Apache의 Jena • University of Manchester의 OWL API
  • 29. LOD 활용을 위한 절차 1. 활용하고자 하는 데이터 셋 검색 2. 온톨로지 모델 다운로드 및 이해 3. LOD 활용 – SPARQL을 이용하여 원하는 데이터 획득 – URI를 이용하여 데이터 조회 4. 응용 프로그램 개발
  • 30. 30 30 Dr. Myungjin Lee e-Mail : mjlee@li-st.com Twitter : http://twitter.com/MyungjinLee Facebook : http://www.facebook.com/mjinlee SlideShare : http://www.slideshare.net/onlyjiny/
  • 31. LOD 실습 Part 2. LOD 모델 2017-02-28
  • 32. 워크샵 프로그램 시간 제목 발표자 13:30~14:10 Part 1. LOD의 기본 개념 이명진 14:10~14:50 Part 2. LOD 모델 이명진 14:50~15:30 Part 3. SPARQL 이명진 15:30~15:50 Coffee Break 15:50~16:20 Part 4. 실습 – 모델의 이해 허홍수 16:20~17:00 Part 4. 실습 – SPARQL 허홍수 17:00~17:30 Part 4. 실습 – 프로그래밍 허홍수
  • 33. LOD의 구조 이해하기 데이터베이스 온톨로지 객체지향≠ ≠ 데이터베이스 온톨로지 객체지향≒ ≒ 그러나 오늘만은,
  • 34. LOD의 데이터 구조 • RDF(Resource Description Framework) 기반 – http://www.example.org/index.html has a creator whose value is John Smith – the subject(주어) is the URL http://www.example.org/index.html – the predicate(동사) is the word "creator" – the object(목적어) is the phrase "John Smith" http://www.example.org/index.html John Smith creator
  • 35. LOD의 데이터 구조 http://semantics.kr/myungjinlee http://semantics.kr/Yura http://semantics.kr/rel/hasWife Subject URI reference Predicate URI reference Object URI reference or Literal Statement
  • 36. 데이터베이스(RDB)와 LOD의 데이터 구조 아이디 이름 나이 학과 MJLee 이명진 27 IE 학과 학과명 IE 정보산업공학과 데이터베이스 LOD MJLee 이명진 27 IE 정보산업공학과 이름 학과 나이 학과명
  • 37. URI의 사용 • 왜 URI를 사용하지? – 각각의 자원을 구별하기 위해서 – 중복된 이름이 없도록 하기 위해 – 웹에서 접근할 수 있도록 하기 위해서 – 접근했을 때 해당 자원에 대한 정보를 제공하기 위해서
  • 38. 데이터베이스(RDB)와 LOD의 데이터 구조 아이디 이름 나이 학과 MJLee 이명진 27 IE 학과 학과명 IE 정보산업공학과 데이터베이스 LOD http://li-st.com/resourceMJLee 이명진 27 http://li-st.com/resourceIE 정보산업공학과 이름 학과 나이 학과명
  • 39. 클래스 (Class) • 아주 간단히 무엇들의 집합 ≒데이터베이스의 테이블 ♂ MaleMyungjin Lee
  • 40. 클래스 (Class) rrn name affiliation 841002-1045617 Myungjin Lee 10 410203-3983612 Gildong Hong 20 841105-2056143 Grace Byun 10 Person Table Person 클래스 sid sname 10 Yonsei Univ. 20 Seoul Univ. School Table School 클래스
  • 41. 클래스 (Class) Movie owl:Class rdf:type rdf:type은 is-a 관계를 의미 즉, 해석하면 “Movie는 Class이다”
  • 42. 클래스의 상하위 관계 Person 클래스 Male 클래스 Female 클래스 Male 클래스 Female 클래스 Person 클래스 rdfs:subClassOf rdfs:subClassOf
  • 43. 자원의 이름과 설명을 위한 속성 • rdfs:label – 자원에 대한 이름을 정의 • rdfs:comment – 자원에 대한 설명을 작성 rdfs:label Movie 영화 일정한 의미를 갖고 움직이는 대상을 촬영하여 영사기로 영사막에 재현하는 종합 예술rdfs:comment
  • 44. 인스턴스 (Instance) • 클래스를 구성하는 멤버 ≒ 데이터베이스의 행 rdf:type MaleMyungjinLee owl:Class rdf:type Male • MyungjinLee
  • 45. 인스턴스 (Instance) rrn name affiliation 841002-1045617 Myungjin Lee 10 410203-3983612 Gildong Hong 20 841105-2056143 Grace Byun 10 Person Table sid sname 10 Yonsei Univ. 20 Seoul Univ. School Table Person 클래스의 인스턴스 School 클래스의 인스턴스
  • 46. 속성(Property) • 속성 – 둘 사이의 관계를 나타내기 위한 것 • 속성의 두 가지 유형 – 자원과 자원 사이의 관계: Object Property – 자원과 값 사이의 관계: Datatype Property has wife age 30 Object Property Datatype Property
  • 47. 데이터타입 속성 (Datatype Property) • 자원과 값 사이의 관계 ≒데이터베이스의 일반 필드 rrn name affiliation 841002-1045617 Myungjin Lee 10 410203-3983612 Gildong Hong 20 841105-2056143 Grace Byun 10 Person Table sid sname 10 Yonsei Univ. 20 Seoul Univ. School Table Datatype Property
  • 48. 객체 속성 (Object Property) • 자원과 자원 사이의 관계 ≒ 데이터베이스의 기본키와 외래키의 관계 rrn name affiliation 841002-1045617 Myungjin Lee 10 410203-3983612 Gildong Hong 20 841105-2056143 Grace Byun 10 Person Table sid sname 10 Yonsei Univ. 20 Seoul Univ. School Table Object Property
  • 49. 속성들이 가지고 있는 제약 • rdfs:domain – 속성을 가질 수 있는 클래스가 무엇인가? • rdfs:range – 속성 값의 타입은 무엇인가? Subject Predicate Object has wife? ? domain: 주어를 위한 클래스는 머지? range: 목적어를 위한 클래스는 머지?
  • 50. 속성들이 가지고 있는 제약 rrn name affiliation 841002-1045617 Myungjin Lee 10 410203-3983612 Gildong Hong 20 841105-2056143 Grace Byun 10 Person Table sid sname 10 Yonsei Univ. 20 Seoul Univ. School Table name 속성의 domain name 속성의 range affiliation 속성의 domain affiliation 속성의 range
  • 51. 데이터타입 속성이 가질 수 있는 range • XML Schema의 데이터 타입을 따름 Simple Type Examples string Confirm this is electric integer ...-1, 0, 1, ... long -9223372036854775808, ... -1, 0, 1, ... 9223372036854775807 float -INF, -1E4, -0, 0, 12.78E-2, 12, INF, NaN date 1999-05-31 time 13:20:00.000, 13:20:00.000-05:00 boolean true, false, 1, 0
  • 52. 22 22 Dr. Myungjin Lee e-Mail : mjlee@li-st.com Twitter : http://twitter.com/MyungjinLee Facebook : http://www.facebook.com/mjinlee SlideShare : http://www.slideshare.net/onlyjiny/
  • 53. LOD 실습 Part 3. SPARQL 2017-02-28
  • 54. 워크샵 프로그램 시간 제목 발표자 13:30~14:10 Part 1. LOD의 기본 개념 이명진 14:10~14:50 Part 2. LOD 모델 이명진 14:50~15:30 Part 3. SPARQL 이명진 15:30~15:50 Coffee Break 15:50~16:20 Part 4. 실습 – 모델의 이해 허홍수 16:20~17:00 Part 4. 실습 – SPARQL 허홍수 17:00~17:30 Part 4. 실습 – 프로그래밍 허홍수
  • 55. SPARQL • SPARQL Protocol and RDF Query Language – SPARQL 위한 프로토콜에 대한 정의 – RDF 질의를 위한 질의 문법에 대한 정의 – W3C Recommendation 21 March 2013 – http://www.w3.org/TR/sparql11-query/
  • 56. SPARQL의 구성 • SELECT – 질의 결과로 얻기 위한 변수를 지정 • FROM – 질의 대상이 되는 데이터 셋을 지정 • WHERE – 질의에 대응되는 조건 그래프 구조(트리플)를 작성
  • 57. 예제 데이터 rrn name affiliation 841002-1045617 Myungjin Lee 10 410203-3983612 Gildong Hong 20 841105-2056143 Grace Byun 10 Person Table http://localhost:8890/test/MyungjinLee 841002-1045617 Myungjin Lee Yonsei Univ. http://localhost:8890/test/Yonsei http://localhost:8890/test/rrn http://localhost:8890/test/name http://localhost:8890/test/sname http://localhost:8890/test/affilication sid sname 10 Yonsei Univ. 20 Seoul Univ. School Table http://localhost:8890/test 그래프
  • 58. SPARQL의 구성 SELECT name FROM Person WHERE rrn = “841002-1045617” SELECT ?y FROM <http://localhost:8890/test> WHERE { ?x <http://localhost:8890/rrn> “841002-1045617” . ?x <http://localhost:8890/name> ?y . } SQL SPARQL 원하는 결과 질의 대상 질의 조건
  • 59. SPARQL의 상세 구성 SELECT ?y FROM <http://localhost:8890/test> WHERE { ?x <http://localhost:8890/rrn> “841002-1045617” . ?x <http://localhost:8890/name> ?y . } SQL의 SELECT와 같이 특정 정보를 꺼내오기 위한 구문 그래프 구조이기 때문에 SQL과 달리 필드를 지정하는 것이 아니라 변수를 지정하여 해당 변수에 바인딩 된 결과를 획득하기 위해 변수를 지정 질의의 대상이 되는 그래프를 지정 (생략 가능. 생략할 경우 전체를 대상으로 조회) 지정된 그래프에서 결과를 추출 조건을 지정하기 위한 영역 선언 질의의 조건을 그래프의 트리플 구조에 따른 AND 형태로 기술
  • 60. SELECT 절 • 질의 변수 지정하기 – "?" 표를 이용하여 변수임을 지정 – ?name, ?title, ?author • 질의 결과는 테이블 형태를 가짐 SELECT ?title ?author title author Novel XML Myungjin Lee Web Tim-Berners Lee SPARQL Query Results Knowledge Base
  • 61. WHERE 절 • WHERE 절 – 질의하고자 하는 조건을 트리플 단위로 기술 – 주어, 동사, 목적어는 공백으로 구분하며, – 각각의 트리플은 "."로 구분
  • 62. WHERE 절 예시 Data <http://example.org/book/book1> <http://purl.org/dc/elements/1.1/title> "SPARQL Tutorial" . Query SELECT ?title WHERE { <http://example.org/book/book1> <http://purl.org/dc/elements/1.1/title> ?title . } Query Result title “SPARQL Tutorial”
  • 63. WHERE 절 예시 Data @prefix foaf: <http://xmlns.com/foaf/0.1/> . _:a foaf:name "Johnny Lee Outlaw" . _:a foaf:mbox <mailto:jlow@example.com> . _:b foaf:name "Peter Goodguy" . _:b foaf:mbox <mailto:peter@example.org> . _:c foaf:mbox <mailto:carol@example.org> . Query SELECT ?name ?mbox WHERE { ?x <http://xmlns.com/foaf/0.1/name> ?name . ?x <http://xmlns.com/foaf/0.1/mbox> ?mbox } Query Result name mbox “Johnny Lee Outlaw” <mailto:jlow@example.com> “Peter Goodguy” <mailto:peter@example.org>
  • 64. WHERE 절에 작성된 트리플의 축약식 • 동사-목적어 축약식 ?x foaf:name ?name ; foaf:mbox ?mbox . ?x foaf:name ?name . ?x foaf:mbox ?mbox .
  • 65. WHERE 절에 작성된 트리플의 축약식 • 목적어 축약식 ?x foaf:nick "Alice" , "Alice_" . ?x foaf:nick "Alice" . ?x foaf:nick "Alice_" . ?x foaf:name ?name ; foaf:nick "Alice" , "Alice_" . ?x foaf:name ?name . ?x foaf:nick "Alice" . ?x foaf:nick "Alice_" .
  • 66. PREFIX 키워드 • PREFIX 키워드 – URI에서 접두어를 선언하기 위한 키워드 – WHERE 절에 작성되는 URI를 축약하여 쓰기 위해 선언 PREFIX dc: <http://purl.org/dc/elements/purl.org/> SELECT ?title WHERE { <http://example.org/book/book> dc:title ?title } PREFIX dc: <http://purl.org/dc/elements/1.1/> PREFIX : <http://example.org/book/> SELECT ?title WHERE { :book1 dc:title ?title }
  • 67. 값을 갖는 트리플에 대한 질의 @prefix dt: <http://example.org/datatype#> . @prefix ns: <http://example.org/ns#> . @prefix : <http://example.org/ns#> . @prefix xsd: <http://www.w3.org/2001/XMLSchema#> . :x ns:p "cat"@en . :y ns:p "42"^^xsd:integer . :z ns:p "abc"^^dt:specialDatatype . • 언어 태그를 갖는 값 – @ 기호와 언어 태그를 사용 하여 표현된 것들 • 데이터 타입을 갖는 값 – xsd:integer 데이터타입으 로 지정된 값을 가지고 있는 것들 Query SELECT ?v WHERE { ?v ?p "cat" } Query Result v Query SELECT ?v WHERE { ?v ?p 42 } Query Result v <http://example.org/ns#y>
  • 68. FILTER 키워드 • FILTER 키워드 – 특정 조건을 만족하는지를 검사하기 위한 방법 Data @prefix dc: <http://purl.org/dc/elements/1.1/> . @prefix : <http://example.org/book/> . @prefix ns: <http://example.org/ns#> . :book1 dc:title "SPARQL Tutorial" . :book1 ns:price 42 . :book2 dc:title "The Semantic Web" . :book2 ns:price 23 .
  • 69. FILTER 키워드 • 문자열 값에 대한 검사 – regex 함수 • 문자열에 대한 정규식 비교 • 숫자 값에 대한 검사 Query PREFIX dc: <http://purl.org/dc/elements/1.1/> SELECT ?title WHERE { ?x dc:title ?title FILTER regex(?title, "^SPARQL") } Query Result title “SPARQL Tutorial” Query PREFIX dc: <http://purl.org/dc/elements/1.1/> PREFIX ns: <http://example.org/ns#> SELECT ?title ?price WHERE { ?x ns:price ?price . FILTER (?price < 30.5) ?x dc:title ?title . } Query Result title price “The Semantic Web” 23
  • 70. 정렬 • ORDER BY 절 – 결과에 대한 정렬 PREFIX foaf: <http://xmlns.com/foaf/0.1/> SELECT ?name WHERE { ?x foaf:name ?name } ORDER BY ?name PREFIX : <http://example.org/ns#> PREFIX foaf: <http://xmlns.com/foaf/0.1/> PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> SELECT ?name WHERE { ?x foaf:name ?name ; :empId ?emp } ORDER BY DESC(?emp)
  • 71. 결과의 중복 제거 • DISTINCT – 중복된 결과 제거 Data @prefix foaf: <http://xmlns.com/foaf/0.1/> . _:x foaf:name "Alice" . _:x foaf:mbox <mailto:alice@example.com> . _:y foaf:name "Alice" . _:y foaf:mbox <mailto:asmith@example.com> . _:z foaf:name "Alice" . _:z foaf:mbox <mailto:alice.smith@example.com> . Query PREFIX foaf: <http://xmlns.com/foaf/0.1/> SELECT DISTINCT ?name WHERE { ?x foaf:name ?name } Query Result name “Alice”
  • 72. OFFSET과 LIMIT • LIMIT 절 – 출력될 결과의 최대 수를 지정 • OFFSET 절 – 출력될 결과의 시작 위치를 지정 PREFIX foaf: <http://xmlns.com/foaf/0.1/> SELECT ?name WHERE { ?x foaf:name ?name } ORDER BY ?name LIMIT 5 OFFSET 10
  • 73. SPARQL의 질의 유형 • SELECT – 지정된 변수에 바인딩 된 값을 추출하기 위한 질의 • CONSTRUCT – SELECT와 유사하지만 결과를 그래프 형태로 구성하고자 할 경우 사용하는 질의 • ASK – 지정된 조건을 만족하는지에 따라 true와 false를 반환하는 질의 • DESCRIBE – 지정된 URI에 대한 RDF 데이터를 포함하는 그래프를 얻고자 사용 하는 질의
  • 74. SELECT 유형 Data @prefix foaf: <http://xmlns.com/foaf/0.1/> . _:a foaf:name "Alice" . _:a foaf:knows _:b . _:a foaf:knows _:c . _:b foaf:name "Bob" . _:c foaf:name "Clare" . _:c foaf:nick "CT" . Query PREFIX foaf: <http://xmlns.com/foaf/0.1/> SELECT ?nameX ?nameY ?nickY WHERE { ?x foaf:knows ?y ; foaf:name ?nameX . ?y foaf:name ?nameY . OPTIONAL { ?y foaf:nick ?nickY } } Query Result nameX nameY nickY “Alice” “Bob” “Alice” “Clare” “CT”
  • 75. CONSTRUCT 유형 Data @prefix foaf: <http://xmlns.com/foaf/0.1/> . _:a foaf:name "Alice" . _:a foaf:mbox <mailto:alice@example.org> . Query PREFIX foaf: <http://xmlns.com/foaf/0.1/> PREFIX vcard: <http://www.w3.org/2001/vcard-rdf/3.0#> CONSTRUCT { <http://example.org/person#Alice> vcard:FN ?name } WHERE { ?x foaf:name ?name } Query Result @prefix vcard: <http://www.w3.org/2001/vcard-rdf/3.0#> . <http://example.org/person#Alice> vcard:FN "Alice" .
  • 76. ASK 유형 Data @prefix foaf: <http://xmlns.com/foaf/0.1/> . _:a foaf:name "Alice" . _:a foaf:homepage <http://work.example.org/alice/> . _:b foaf:name "Bob" . _:b foaf:mbox <mailto:bob@work.example> . Query PREFIX foaf: <http://xmlns.com/foaf/0.1/> ASK { ?x foaf:name "Alice" } Query Result yes
  • 77. DESCRIBE 유형 Data @prefix foaf: <http://xmlns.com/foaf/0.1/> . _:a foaf:name "Alice" . _:a foaf:homepage <http://work.example.org/alice/> . _:b foaf:name "Bob" . _:b foaf:mbox <mailto:bob@work.example> . Query PREFIX foaf: <http://xmlns.com/foaf/0.1/> DESCRIBE ?x WHERE { ?x foaf:mbox <mailto:bob@work.example> } Query Result _:b foaf:name "Bob" . _:b foaf:mbox <mailto:bob@work.example> .
  • 78. 26 26 Dr. Myungjin Lee e-Mail : mjlee@li-st.com Twitter : http://twitter.com/MyungjinLee Facebook : http://www.facebook.com/mjinlee SlideShare : http://www.slideshare.net/onlyjiny/
  • 79. LOD 실습 Part 4. 실습 허 홍 수 2017-02-28
  • 80. 워크샵 프로그램 시간 제목 발표자 13:30~14:10 Part 1. LOD의 기본 개념 이명진 14:10~14:50 Part 2. LOD 모델 이명진 14:50~15:30 Part 3. SPARQL 이명진 15:30~15:50 Coffee Break 15:50~16:20 Part 4. 실습 – 모델의 이해 허홍수 16:20~17:00 Part 4. 실습 – SPARQL 허홍수 17:00~17:30 Part 4. 실습 – 프로그래밍 허홍수
  • 82. LOD 모델 • 왜 모델을 이해해야 하지? • LOD 모델은 어디에서 얻을 수 있지? • 획득한 모델은 어떻게 해석하지? • 해석할 때 어떤 도구를 써야 하지? • 모델을 획득하지 못할 경우에는?
  • 85. LOD 모델에 대한 실제 주소 • 국립중앙도서관 국가서지LOD (http://lod.nl.go.kr) – http://lod.nl.go.kr/spec/ • KDATA (http://kdata.kr) – http://kdata.kr/kdata/spec.jsp • 생물정보LOD (http://lod.nature.go.kr/main/) – http://lod.nature.go.kr/main/intro/datadownload_list.jsp • NDSL LOD (http://lod.ndsl.kr/) – http://lod.ndsl.kr/home/intro/ontology.jsp • 스마트관광정보LOD (http://data.visitkorea.or.kr/) – http://data.visitkorea.or.kr/ontology/
  • 86. LOD 모델 살펴보기 1 • Class, ObjectProperty, DatatypeProperty 구분하기 – Class : Resource들의 집합 – ObjectProperty : Resource와 다른 Resource간의 연결에 사용 – DatatypeProperty : Resource와 그 Resource가 가지는 Literal 값 연결에 사용 홍길동 임꺽정 이순신 유성룡 궁예 을지문덕 왕건사람 유성룡 이순신 추천 1598 사망연도 ObjectProperty DatatypeProperty
  • 87. LOD 모델 살펴보기 2 • Class의 목록 파악 – Class의 종류에는 어떤 것들이 있는가? – 주요한 Class는 무엇인가? • Class의 계층(관계) 파악 – Class 간의 상·하위 계층은 어떻게 구성되어 있는가? – 주요하게 살펴볼 Class는 어떤 외부 Class와 관계를 맺고 있는 가?
  • 88. LOD 모델 살펴보기 3 • Property의 목록 파악 – Property의 종류에는 어떤 것들이 있는가? – ObjectProperty와 DatatypeProperty를 구분 • Property의 조건(관계) 파악 – Domain과 Range는 어떻게 되는가? – Property에 어떠한 제약사항이 있는가?
  • 89. 그림/그래픽 표현의 이해 1 • Class – 대체적으로 원 또는 타원으로 표기함 – 원 안에 Class의 레이블을 표기
  • 90. 그림/그래픽 표현의 이해 2 • Property – 화살표가 있는 선으로 표기함 – 화살표가 있는 부분은 Range에 해당, 화살표가 없는 부분은 Domain에 해당 – 선 위에 해당 Property의 레이블을 표기
  • 91. 그림/그래픽 표현의 이해 3 • Literal – 네모 상자로 표기
  • 92. 그림/그래픽 표현의 이해 4 • Instance – 대체적으로 마름모 혹은 사각형과 원이 아닌 도형으로 표기 – Class 표기 안에 직접 Instance의 레이블을 넣는 경우도 있음
  • 93. Chapter 2 TopBraid Composer를 이용한 모델 분석
  • 94. LOD 모델 파일을 통한 분석 • LOD 모델 파일 – RDF/XML (xxx.rdf / xxx.owl) – TTL (xxx.ttl) – N-TRIPLE (xxx.nt) • 활용 도구 – Text Editor (RDF를 읽을 수 있는 경우) – 명세 생성 도구 (웹 환경에서 명세표를 생성하여 제공) – 그래픽 뷰어 (웹 환경에서 모델을 그래픽으로 변경하여 제공) – 온톨로지 모델링 도구
  • 95. 도구 활용 - TextEditor • RDF로 표현된 LOD 모델 – RDF/XML 형태 – TTL 형태 – N-Triple 형태 <owl:Class rdf:about="http://lod.nl.go.kr/ontology/Library"> <rdfs:label xml:lang="en">Library</rdfs:label> <rdfs:label xml:lang="ko">도서관</rdfs:label> <rdfs:subClassOf rdf:resource="http://xmlns.com/foaf/0.1/Organization"/> <rdfs:isDefinedBy rdf:resource="http://lod.nl.go.kr/ontology/"/> <vs:term_status>stable</vs:term_status> </owl:Class> <http://lod.nl.go.kr/library/011001> a nlon:Library ; rdfs:label "국립중앙도서관" ; dct:subject nlk:KoreaLibraryMark . <http://lod.nl.go.kr/resource/KSH00387796> <http://www.w3.org/2004/02/skos/core#closeMatch> <http://id.loc.gov/authorities/subjects/sh85134089> . <http://lod.nl.go.kr/resource/KSH00223343> <http://www.w3.org/2004/02/skos/core#closeMatch> <http://id.loc.gov/authorities/subjects/sh85082139> . <http://lod.nl.go.kr/resource/KSH00223343> <http://www.w3.org/2004/02/skos/core#closeMatch> <http://id.loc.gov/authorities/subjects/sh2002007922> . <http://lod.nl.go.kr/resource/KSH00416120> <http://www.w3.org/2004/02/skos/core#closeMatch> <http://id.loc.gov/authorities/subjects/sh85095839> .
  • 96. 도구 활용 - 명세 생성 도구 • OntoSpec – http://ontospec.com 에서 파일을 업로드하여 모델 명세를 확 인할 수 있음
  • 97. 도구 활용 - 그래픽 뷰어 • WebVOWL – http://vowl.visualdataweb.org/ 에서 제공하는 그래픽 뷰어
  • 98. 도구 활용 - 온톨로지 모델링 도구 • TopBraid Composer – TopQuadrant 사에서 제작한 온톨로지 모델링 도구 – 모델파일을 읽어 직접 생성, 수정, 삭제를 할 수 있음
  • 99. 모델 분석 준비 (1/3) • 프로젝트 생성 (1/2)
  • 100. 모델 분석 준비 (2/3) • 프로젝트 생성 (2/2) – 프로젝트명 넣기
  • 101. 모델 분석 준비 (3/3) • 파일 복사 – 분석 대상 파일을 복사하여 생성한 프로젝트에 붙여넣기
  • 102. TBC의 구성 Class 영역 Property 영역 Project 영역 Form 영역
  • 103. 모델 분석 (1/9) • Import한 모델 확인하기 ① ②
  • 104. 모델 분석 (2/9) • Namespace 확인 ① ②
  • 105. 모델 분석 (3/9) • Class 보기 토글
  • 106. 모델 분석 (4/9) • Class 보기 국가서지LOD에서 정의한 Class들 Namespace에서 확인한 바와 같이 Base URI의 Prefix로 시작하는 Class들은 해당 모델에서 직접 정의하여 생성한 Class이다.
  • 107. 모델 분석 (5/9) • Property 보기 ObjectProperties DatatypeProperties
  • 108. 모델 분석 (6/9) • Property의 관계 파악 ①② Ctrl+좌클릭
  • 109. 모델 분석 (7/9) • 해당 Class를 Domain으로 가지는 Property 찾기
  • 110. 모델 분석 (8/9) • 해당 Class를 Range로 가지는 Property 찾기
  • 111. 모델 분석 (9/9) • Form 영역에서 보기
  • 113. TBC를 이용한 SPARQL 활용 • 모델을 획득하지 못했다면? – SPARQL을 통해 질의하여 확인 가능 (SPARQL Endpoint를 제공할 경우에만 가능) • SPARQL 예제를 통한 모델 구조 파악하기 • 실제 LOD에 질의하여 데이터를 확인하기 • SPARQL Endpoint에서 질의하기
  • 114. SPARQL 기본 문법 SELECT 찾을변수 WHERE { 조건식 } SELECT ?s ?name WHERE { ?id rdf:type <http://lod.nl.go.kr/ontology/Author> . ?id foaf:name ?name . }  변수라는 것을 나타내는 ? 를 앞에 붙인다.  조건식은 S-P-O의 한 문장을 기본으로 한다.  조건식은 복수개가 가능하며 복수개일 경우 AND 조건으로 연결된다.  조건식의 구분은 문장 단위로 . 로 구분한다. 보다 자세한 내용은 http://lod.nl.go.kr/home/sparql/getting.jsp 에서 참고하세요
  • 115. TBC에서의 SPARQL 사용 SPARQL 입력 부분 SPARQL 실행
  • 116. SPARQL을 통한 모델 구조 파악 (1/13) • Class 목록 SELECT * WHERE { ?s rdfs:subClassOf owl:Thing . }  owl:Thing 클래스의 하위 클래스들을 반환하시오
  • 117. SPARQL을 통한 모델 구조 파악 (2/13) • Class 전체 목록 SELECT * WHERE { ?s rdfs:subClassOf* owl:Thing . }  owl:Thing 클래스의 하위 클래스들과 그 클래스들의 하위 클래스들까지 모두 반환하시오
  • 118. SPARQL을 통한 모델 구조 파악 (3/13) • Class 목록과 레이블 SELECT * WHERE { ?s rdfs:subClassOf owl:Thing . ?s rdfs:label ?label . }  owl:Thing 클래스의 하위 클래스들과 그 클래스들의 label을 반환하시오
  • 119. SPARQL을 통한 모델 구조 파악 (4/13) • Class 상하위 관계 SELECT ?super ?s WHERE { ?s a owl:Class . ?s rdfs:subClassOf* owl:Thing . optional{ ?s rdfs:subClassOf ?super. filter(ISURI(?super)) } }  owl:Thing 클래스의 모든 하위 클래스들과 그 클래스들의 하위 클래스들을 반환하시오
  • 120. SPARQL을 통한 모델 구조 파악 (5/13) • 직접 정의한 Class 목록 SELECT ?s WHERE { ?s a owl:Class . filter(regex(str(?s), '^http://lod.nl.go.kr')) }  국가서지LOD에서 직접 정의한 클래스들을 반환하시오
  • 121. SPARQL을 통한 모델 구조 파악 (6/13) • Property 목록 - ObjectProperty SELECT ?s WHERE { ?s a owl:ObjectProperty . }  ObjectProperty에 해당하는 프로퍼티들을 반환하시오
  • 122. SPARQL을 통한 모델 구조 파악 (7/13) • Property 목록 - DatatypeProperty SELECT ?s WHERE { ?s a owl:DatatypeProperty . }  DatatypeProperty에 해당하는 프로퍼티들을 반환하시오
  • 123. SPARQL을 통한 모델 구조 파악 (8/13) • 직접 정의한 Property 목록 SELECT ?s WHERE { ?s a ?o . FILTER (?o = owl:ObjectProperty || ?o = owl:DatatypeProperty ) filter(regex(str(?s), '^http://lod.nl.go.kr')) }  국가서지LOD에서 직접 정의한 프로퍼티들을 반환하시오
  • 124. SPARQL을 통한 모델 구조 파악 (9/13) • 직접 정의한 Property의 domain과 range SELECT * WHERE { ?s a ?o . FILTER (?o = owl:ObjectProperty || ?o = owl:DatatypeProperty ) filter(regex(str(?s), '^http://lod.nl.go.kr')) OPTIONAL { ?s rdfs:domain ?domain. } OPTIONAL { ?s rdfs:range ?range . } }  국가서지LOD에서 직접 정의한 프로퍼티들의 domain과 range를 반환하시오
  • 125. SPARQL을 통한 모델 구조 파악 (10/13) • Instance 목록 SELECT * WHERE { ?s a nlon:ContinuousDataType . }  ContinuousDataType 클래스에 속한 인스턴스를 반환하시오
  • 126. SPARQL을 통한 모델 구조 파악 (11/13) • 실제LOD에 질의하기 1 SELECT * WHERE { SERVICE <http://lod.nl.go.kr/sparql> { ?s a nlon:Author . } }  국가서지LOD의 SPARQL Endpoint에 저자 클래스의 인스턴스를 반환하시오
  • 127. SPARQL을 통한 모델 구조 파악 (12/13) • 실제LOD에 질의하기 2 SELECT * WHERE { SERVICE <http://lod.nl.go.kr/sparql> { ?s a nlon:Author . ?s foaf:name "윤동주" . } }  국가서지LOD의 SPARQL Endpoint에 저자 클래스의 인스턴스 중 이름이 윤동주인 저자를 반환하시오
  • 128. SPARQL을 통한 모델 구조 파악 (13/13) • 실제LOD에 질의하기 3 SELECT * WHERE { SERVICE <http://lod.nl.go.kr/sparql> { nlk:KAC201110203 owl:sameAs ?o . FILTER(regex(str(?o), '^http://data.kdata')) } SERVICE <http://kdata.kr/sparql> { ?o ?p ?kdata. } }  윤동주와 같은 개체로 식별된 KDATA의 윤동주가 제공하는 데이터를 반환하시오
  • 130. LOD에서 데이터 획득 • URI로 접근하여 데이터 획득 • 획득한 데이터를 Model에 담기 • 획득한 데이터에 SPARQL 질의 • 로컬파일에 대한 처리(다운로드 받은 데이터) • 실제 SPARQL Endpoint에서 데이터 획득 • 결과를 JSON으로 변경 • 하나의 데이터셋 획득 • 두개의 데이터셋 획득
  • 131. 구동 환경 • Tool – Eclipse • JAVA 환경 – JAVA1.8 • 필요한 라이브러리 – apache-jena-3.0.1 jena 3.x 버전부터는 java1.8 이상이 필요함
  • 132. URI로 접근하여 데이터 획득 String uri = "http://lod.nl.go.kr/resource/KAC201110203"; try { URL url = new URL(uri); URLConnection conn = url.openConnection(); BufferedReader br = new BufferedReader( new InputStreamReader(conn.getInputStream(), "UTF-8")); String line; while ((line = br.readLine()) != null) { System.out.println(line); } } http://lod.nl.go.kr/resource/KAC201110203 http://lod.nl.go.kr/data/KAC201110203?output=ttl http://dbpedia.org/data/Yun_Dong-ju.json 자동으로 인식하여 RDF 데이터를 반환 TTL 형식으로 RDF 데이터를 반환 JSON 형식으로 RDF 데이터를 반환 관련 예제 - Ex01 - Ex01_1 - Ex01_2
  • 133. 획득한 데이터를 Model에 담기 String uri = "http://lod.nl.go.kr/resource/KAC201110203"; Model model = FileManager.get().loadModel(uri); model.write(System.out, "TTL"); StmtIterator iter = model.listStatements(ResourceFactory.createResource(uri), null, (RDFNode)null); Statement stmt = null; String sub = null, prop = null, obj = null; while(iter.hasNext()){ stmt = iter.next(); sub = stmt.getSubject().toString(); prop = stmt.getPredicate().toString(); obj = stmt.getObject().toString(); System.out.println(sub +"t"+ prop +"t"+ obj); } 관련 예제 - Ex02 - Ex03 - Ex03_1 Model 이라는 그릇에 담에 자신이 원하는 대로 조작할 수 있는 기반을 마련해 줄 수 있다.
  • 134. 획득한 데이터에 SPARQL 질의 String uri = "http://lod.nl.go.kr/resource/KAC201110203"; Model model = FileManager.get().loadModel(uri); String queryString = "PREFIX foaf: <http://xmlns.com/foaf/0.1/> SELECT ?name WHERE {?s foaf:name ?name}" ; Query query = QueryFactory.create(queryString) ; QueryExecution qexec = QueryExecutionFactory.create(query, model); ResultSet rs = qexec.execSelect(); for (; rs.hasNext();) { QuerySolution rb = rs.nextSolution(); RDFNode x = rb.get("name"); if (x.isLiteral()) { Literal titleStr = (Literal) x; System.out.println(" " + titleStr); } else System.out.println("Strange - not a literal: " + x); } 관련 예제 - Ex04 Model 이라는 그릇에서 SPARQL 질의를 통해 원하는 데이터를 질의할 수 있다.
  • 135. 로컬파일에 대한 처리 String filename = "./doc/nlk_ontology.rdf"; Model model = FileManager.get().loadModel(filename); StmtIterator iter = model.listStatements(); Statement stmt = null; String sub = null, prop = null, obj = null; while(iter.hasNext()){ stmt = iter.next(); sub = stmt.getSubject().toString(); prop = stmt.getPredicate().toString(); obj = stmt.getObject().toString(); System.out.println(sub +"t"+ prop +"t"+ obj); } 관련 예제 - Ex05 - Ex06 - Ex06_1 - Ex06_2 내 로컬 컴퓨터에 다운로드 받은 온톨로지 모델파일이나 RDF 데이터가 있다면 이를 읽어 Model이라는 그릇에 담을 수 있다. Model에 담긴 데이터는 앞장에서와 같이 SPARQL 질의를 해서 원하는 데이터를 획득할 수 있다.
  • 136. 실제 SPARQL Endpoint에서 데이터 획득 String queryString = "PREFIX owl: <http://www.w3.org/2002/07/owl#> SELECT * WHERE { SERVICE <http://lod.nl.go.kr/sparql> {?s a owl:ObjectProperty . } }" ; Query query = QueryFactory.create(queryString) ; try (QueryExecution qexec = QueryExecutionFactory.create(query, ModelFactory.createDefaultModel())) { ResultSet rs = qexec.execSelect() ; ResultSetFormatter.out(System.out, rs, query) ; } 관련 예제 - Ex07 - Ex08 실제 SPARQL Endpoint에 SPARQL 질의를 하여 데이터를 가져올 수 있다. String queryString = "PREFIX owl: <http://www.w3.org/2002/07/owl#> SELECT * WHERE { ?s a owl:ObjectProperty . } " ; String service = "http://lod.nl.go.kr/sparql"; Query query = QueryFactory.create(queryString) ; QueryExecution qexec = QueryExecutionFactory.sparqlService(service, query); ResultSet rs = qexec.execSelect();
  • 137. 결과를 JSON으로 변경 String queryString = "PREFIX owl: <http://www.w3.org/2002/07/owl#> SELECT * WHERE { <http://lod.nl.go.kr/resource/KAC201110203> ?p ?o. } " ; String service = "http://lod.nl.go.kr/sparql"; Query query = QueryFactory.create(queryString) ; QueryExecution qexec = QueryExecutionFactory.sparqlService(service, query); ResultSet rs = null; try { rs = qexec.execSelect(); } catch (Exception e) { e.printStackTrace(); } ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); ResultSetFormatter.outputAsJSON(outputStream, rs); String json = new String(outputStream.toByteArray()); System.out.println(json); 관련 예제 - Ex09 SPARQL Endpoint에서 반환 받는 데이터를 JSON 형식으로 변경하여 가공할수 도 있다.
  • 138. 하나의 데이터셋 획득 String queryString = "DESCRIBE <http://lod.nl.go.kr/resource/KAC201110203> " ; String service = "http://lod.nl.go.kr/sparql"; Query query = QueryFactory.create(queryString) ; QueryExecution qexec = QueryExecutionFactory.sparqlService(service, query); Model model = null; try { model = qexec.execDescribe(); } catch (Exception e) { e.printStackTrace(); } model.write(System.out, "TTL"); 관련 예제 - Ex10 - Ex11 <http://lod.nl.go.kr/resource/KAC201110203> 이 URI를 따라가면 이 URI에 대한 데이터를 웹 상에 서 볼 수 있으며, DESCRIBE 라는 질의를 통해 이 URI에 대한 데이터를 가져올 수 있다.
  • 139. 두개의 데이터셋 획득 String queryString = "DESCRIBE <http://lod.nl.go.kr/resource/KAC201110203> " ; String service = "http://lod.nl.go.kr/sparql"; Query query = QueryFactory.create(queryString) ; QueryExecution qexec = QueryExecutionFactory.sparqlService(service, query); model = qexec.execDescribe(); 관련 예제 - Ex12 - Ex13 두 곳의 SPARQL Endpoint에서 데이터를 획득하여 하나의 Model에 담을 수 있다. String queryString = "DESCRIBE <http://data.kdata.kr/resource/Yun_Dong-ju> " ; String service = "http://kdata.kr/sparql"; Query query = QueryFactory.create(queryString) ; QueryExecution qexec = QueryExecutionFactory.sparqlService(service, query); model.add(qexec.execDescribe()); model.write(System.out, "TTL");
  • 140. 그림 출처 • http://lod.nl.go.kr/home/images/m_diagram_book.png • http://vowl.visualdataweb.org/ • http://kdata.kr/model/ • http://ontospec.com/jsp/make/result.jsp?path=142199200583 0kdata.rdf&lang=ko&fileName=kdata.rdf • http://pro.europeana.eu/page/edm-documentation