141
LOD 실습 Part 1. LOD의 기본 개념 2017-02-28

LODAC 2017 Linked Open Data Workshop

Embed Size (px)

Citation preview

Page 1: LODAC 2017 Linked Open Data Workshop

LOD 실습

Part 1. LOD의 기본 개념

2017-02-28

Page 2: LODAC 2017 Linked Open Data Workshop

워크샵 프로그램

시간 제목 발표자

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. 실습 – 프로그래밍 허홍수

Page 3: LODAC 2017 Linked Open Data Workshop

웹에서 생성되는 정보의 양

Page 4: LODAC 2017 Linked Open Data Workshop

현재의 웹

• HTML – 사람이 읽고 해석할 수 있는 연결된 문서를 만드는 것

? 정보의 재사용!!!

Page 5: LODAC 2017 Linked Open Data Workshop

만약…

• 재사용성, 기계에 의한 가독성, 새로운 서비스 생산성 향상

유라에 대한 정보를 줘.

{

"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"

}

Page 6: LODAC 2017 Linked Open Data Workshop

Linked Open Data

Linked Open Data

웹을 통해 사람과 기계가

읽고 처리할 수 있는 형태로 데이터에 대한 정보를 기술(description)

웹 페이지가 서로 연결된 것처럼 데이터들끼리 다양한 관계에 의해

연결되어 있는 형태

URI를 이용해서 누구나 데이터에 접근할 수 있으며

데이터에 대한 정보를 제공

Page 7: LODAC 2017 Linked Open Data Workshop

LOD의 네 가지 원칙

1. 웹 상의 자원을 식별하기 위해 URI를 사용하라.

2. 웹 상의 자원들이 사람과 사용자 에이전트에 의해 참조(refer)되고 탐색(look up)될 수 있는 HTTP URI를 사용하라.

3. 자원의 URI가 역참조(dereference)될 때 자원에 대한 유용한 정보를 RDF/XML과 같은 표준 형식을 사용하여 제공하라.

4. 웹에서 다른 연관된 정보의 탐색을 개선하기 위해 다른 데이터와의 URI 연결(link)를 포함하라.

Page 8: LODAC 2017 Linked Open Data Workshop

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

Page 9: LODAC 2017 Linked Open Data Workshop

웹에서의 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

Page 10: LODAC 2017 Linked Open Data Workshop

LOD를 위한 요소 기술들

문서 내부의 구조화된 콘텐츠를

기계가 읽고 처리 가능한 형태로 표기하기 위한

기본적인 요소

웹 상에 존재하는 자원에 대한 정보와 자원들 사이의 관계를

기술하기 위한 프레임워크

RDF 기반 자원의 속성과 클래스의 구조를 기술하기 위한 용어집

RDF 기반의 질의 언어 및 프로토콜

웹에 존재하는 자원들을 식별하기 위해 사용되는 문자열

Page 11: LODAC 2017 Linked Open Data Workshop

URI (Uniform Resource Identifier)

• 웹 상에서 사물(thing)을 식별하기 위한 식별자로 활용

식별하기 위해서

현실에서는 … 웹에서는 …

주민등록번호

861002-1052747

URI

http://semantics.kr/MyungjinLee

Page 12: LODAC 2017 Linked Open Data Workshop

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 )+

미국정부 공공 사례

Page 13: LODAC 2017 Linked Open Data Workshop

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

Page 14: LODAC 2017 Linked Open Data Workshop

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

Page 15: LODAC 2017 Linked Open Data Workshop

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에서 데이터를 표현하기 위한 포맷

Page 16: LODAC 2017 Linked Open Data Workshop

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

Page 17: LODAC 2017 Linked Open Data Workshop

RDFS(RDF Schema)

• RDF 형태의 데이터를 담기 위한 구조를 만드는 방법을 제공 – 클래스 정의

– 속성과 관련 제약조건에 대한 정의

– 계층 구조에 대한 정의

has wife

♂ ♀ is a is a

Male Female

Person

subset of subset of

Page 18: LODAC 2017 Linked Open Data Workshop

RDF Schema 예제

car:Car

car:Vehicle

rdfs:subClassOf

rdf:Property

car:body_style rdfs:domain

rdfs:range

rdfs:Class

rdf:type

rdf:type

car:Style

rdf:type

car:A6

rdf:type

car:Sedan rdf:type car:body_style

RDF 데이터 구조에 대한 정의 부분

구조에 따른 RDF 데이터 부분

Page 19: LODAC 2017 Linked Open Data Workshop

OWL (Web Ontology Language)

• 단순한 데이터의 구조를 벗어나 온톨로지를 만들기 위한 지식 표현 언어

Man Woman ∩ = Ø

Person Person descendant

Person descendant

descendant

Husband Wife 1:1

_01 Action hasGenre

ActionMovie

type

Genre

type

Page 20: LODAC 2017 Linked Open Data Workshop

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 [email protected]

Gildong Hong [email protected]

t

Grace Byun [email protected]

SPARQL

HTTP

HTTP

Page 21: LODAC 2017 Linked Open Data Workshop

LOD 에서의 역할들

응용서비스 개발

사용자 LOD서비스

구축 데이터 구축

모델링

변환

저장

발행

데이터 접근 서비스 접근

데이터 조회

Page 22: LODAC 2017 Linked Open Data Workshop

LOD 데이터 구축자

데이터 구축자

모델링 도구

온톨로지 모델링

RDF

변환 규칙 작성

RDF 변환

데이터베이스

R2RML

RDFS & OWL

URI & RDF

RDF Serialization

Page 23: LODAC 2017 Linked Open Data Workshop

LOD 데이터 구축자에게 필요한 도구

• 온톨로지 편집기 – 온톨로지 모델링 및 인스턴스 입력을 위한 도구

– 관련 도구

• Stanford Center for Biomedical Informatics Research의 Protege

• TopQuadrant의 TopBraid Composer

Page 24: LODAC 2017 Linked Open Data Workshop

LOD 데이터 구축자에게 필요한 도구

• 변환기 – 데이터베이스의 관계형 데이터를 RDF 형태로 변환하기 위한 도구

– R2RML(RDB to RDF Mapping Language)를 기반으로 변환 수행

– 관련 도구

• LiST의 OntoTrans

• OpenLink Software의

Virtuoso RDF Views

Page 25: LODAC 2017 Linked Open Data Workshop

LOD 서비스 구축자

LOD 서비스 제공자

RDF 적재

RDF

URI & RDF

RDF Serialization SPARQL

트리플 저장소

데이터 연계

LOD 서비스 프레임워크

LOD 서비스

Linked Data Platform

발행

Page 26: LODAC 2017 Linked Open Data Workshop

LOD 서비스 구축자에게 필요한 도구

• 트리플 저장소 – RDF 형태의 데이터를 저장하고 운용 및 추론과 질의 처리를 수행 – 관련 도구 – LiST의 OntoBase

• 적용사례: KDATA, 주소데이터 LOD, 수목원 LOD, 국립중앙도서관 LOD 등

– OpenLink Software의 Virtuoso – Franz의 AllegroGraph – OntoText의 OWLIM

• LOD 발행 도구

– 구축된 RDF 데이터를 웹을 통해 발행하고 접근할 수 있도록 지원 – 관련 도구

• Pubby • OpenLink Software의 Virtuoso

Page 27: LODAC 2017 Linked Open Data Workshop

LOD 사용자

LOD 서비스

응용서비스 개발자

응용서비스 개발자

URI

RDF

Query Result

SPARQL

URI & RDF SPARQL

SPARQL Query Result Format

Page 28: LODAC 2017 Linked Open Data Workshop

LOD 사용자에게 필요한 도구

• 온톨로지 편집기 – LOD 사용자에게는 모델을 이해하기 위해 필요한 도구

• 프로그래밍 라이브러리 – RDF 형태의 데이터를 처리하기 위한 라이브러리

– 관련 도구

• Apache의 Jena

• University of Manchester의 OWL API

Page 29: LODAC 2017 Linked Open Data Workshop

LOD 활용을 위한 절차

1. 활용하고자 하는 데이터 셋 검색

2. 온톨로지 모델 다운로드 및 이해

3. LOD 활용 – SPARQL을 이용하여 원하는 데이터 획득

– URI를 이용하여 데이터 조회

4. 응용 프로그램 개발

Page 30: LODAC 2017 Linked Open Data Workshop

30 30

Dr. Myungjin Lee

e-Mail : [email protected] Twitter : http://twitter.com/MyungjinLee

Facebook : http://www.facebook.com/mjinlee SlideShare : http://www.slideshare.net/onlyjiny/

Page 31: LODAC 2017 Linked Open Data Workshop

LOD 실습

Part 2. LOD 모델

2017-02-28

Page 32: LODAC 2017 Linked Open Data Workshop

워크샵 프로그램

시간 제목 발표자

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. 실습 – 프로그래밍 허홍수

Page 33: LODAC 2017 Linked Open Data Workshop

LOD의 구조 이해하기

데이터베이스 온톨로지 객체지향 ≠ ≠

데이터베이스 온톨로지 객체지향 ≒ ≒

그러나 오늘만은,

Page 34: LODAC 2017 Linked Open Data Workshop

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

Page 35: LODAC 2017 Linked Open Data Workshop

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

Page 36: LODAC 2017 Linked Open Data Workshop

데이터베이스(RDB)와 LOD의 데이터 구조

아이디 이름 나이 학과

MJLee 이명진 27 IE

학과 학과명

IE 정보산업공학과

데이터베이스

LOD

MJLee

이명진

27

IE 정보산업공학과

이름

학과

나이

학과명

Page 37: LODAC 2017 Linked Open Data Workshop

URI의 사용

• 왜 URI를 사용하지? – 각각의 자원을 구별하기 위해서

– 중복된 이름이 없도록 하기 위해

– 웹에서 접근할 수 있도록 하기 위해서

– 접근했을 때 해당 자원에 대한 정보를 제공하기 위해서

Page 38: LODAC 2017 Linked Open Data Workshop

데이터베이스(RDB)와 LOD의 데이터 구조

아이디 이름 나이 학과

MJLee 이명진 27 IE

학과 학과명

IE 정보산업공학과

데이터베이스

LOD

http://li-st.com/resourceMJLee

이명진

27

http://li-st.com/resourceIE

정보산업공학과

이름

학과

나이

학과명

Page 39: LODAC 2017 Linked Open Data Workshop

클래스 (Class)

• 아주 간단히 무엇들의 집합

≒데이터베이스의 테이블

♂ Male Myungjin Lee

Page 40: LODAC 2017 Linked Open Data Workshop

클래스 (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 클래스

Page 41: LODAC 2017 Linked Open Data Workshop

클래스 (Class)

Movie owl:Class rdf:type

rdf:type은 is-a 관계를 의미

즉, 해석하면 “Movie는 Class이다”

Page 42: LODAC 2017 Linked Open Data Workshop

클래스의 상하위 관계

Person 클래스

Male 클래스

Female 클래스

Male 클래스

Female 클래스

Person 클래스

rdfs:subClassOf

rdfs:subClassOf

Page 43: LODAC 2017 Linked Open Data Workshop

자원의 이름과 설명을 위한 속성

• rdfs:label – 자원에 대한 이름을 정의

• rdfs:comment – 자원에 대한 설명을 작성

rdfs:label Movie 영화

일정한 의미를 갖고 움직이는 대상을 촬영하여 영사기로

영사막에 재현하는 종합 예술 rdfs:comment

Page 44: LODAC 2017 Linked Open Data Workshop

인스턴스 (Instance)

• 클래스를 구성하는 멤버 ≒ 데이터베이스의 행

rdf:type Male MyungjinLee

owl:Class

rdf:type

Male

• MyungjinLee

Page 45: LODAC 2017 Linked Open Data Workshop

인스턴스 (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 클래스의 인스턴스

Page 46: LODAC 2017 Linked Open Data Workshop

속성(Property)

• 속성 – 둘 사이의 관계를 나타내기 위한 것

• 속성의 두 가지 유형 – 자원과 자원 사이의 관계: Object Property

– 자원과 값 사이의 관계: Datatype Property

has wife

age

30

Object Property

Datatype Property

Page 47: LODAC 2017 Linked Open Data Workshop

데이터타입 속성 (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

Page 48: LODAC 2017 Linked Open Data Workshop

객체 속성 (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

Page 49: LODAC 2017 Linked Open Data Workshop

속성들이 가지고 있는 제약

• rdfs:domain – 속성을 가질 수 있는 클래스가 무엇인가?

• rdfs:range – 속성 값의 타입은 무엇인가?

Subject Predicate Object

has wife ? ?

domain: 주어를 위한

클래스는 머지?

range: 목적어를 위한 클래스는 머지?

Page 50: LODAC 2017 Linked Open Data Workshop

속성들이 가지고 있는 제약

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

Page 51: LODAC 2017 Linked Open Data Workshop

데이터타입 속성이 가질 수 있는 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

Page 52: LODAC 2017 Linked Open Data Workshop

22 22

Dr. Myungjin Lee

e-Mail : [email protected] Twitter : http://twitter.com/MyungjinLee

Facebook : http://www.facebook.com/mjinlee SlideShare : http://www.slideshare.net/onlyjiny/

Page 53: LODAC 2017 Linked Open Data Workshop

LOD 실습

Part 3. SPARQL

2017-02-28

Page 54: LODAC 2017 Linked Open Data Workshop

워크샵 프로그램

시간 제목 발표자

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. 실습 – 프로그래밍 허홍수

Page 55: LODAC 2017 Linked Open Data Workshop

SPARQL

• SPARQL Protocol and RDF Query Language – SPARQL 위한 프로토콜에 대한 정의

– RDF 질의를 위한 질의 문법에 대한 정의

– W3C Recommendation 21 March 2013

– http://www.w3.org/TR/sparql11-query/

Page 56: LODAC 2017 Linked Open Data Workshop

SPARQL의 구성

• SELECT – 질의 결과로 얻기 위한 변수를 지정

• FROM – 질의 대상이 되는 데이터 셋을 지정

• WHERE – 질의에 대응되는 조건 그래프 구조(트리플)를 작성

Page 57: LODAC 2017 Linked Open Data Workshop

예제 데이터

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 그래프

Page 58: LODAC 2017 Linked Open Data Workshop

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

원하는 결과 질의 대상 질의 조건

Page 59: LODAC 2017 Linked Open Data Workshop

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 형태로 기술

Page 60: LODAC 2017 Linked Open Data Workshop

SELECT 절

• 질의 변수 지정하기 – "?" 표를 이용하여 변수임을 지정

– ?name, ?title, ?author

• 질의 결과는 테이블 형태를 가짐

SELECT ?title ?author

title author

Novel XML Myungjin Lee

Web Tim-Berners Lee

SPARQL

Query Results

Knowledge Base

Page 61: LODAC 2017 Linked Open Data Workshop

WHERE 절

• WHERE 절 – 질의하고자 하는 조건을 트리플 단위로 기술

– 주어, 동사, 목적어는 공백으로 구분하며,

– 각각의 트리플은 "."로 구분

Page 62: LODAC 2017 Linked Open Data Workshop

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”

Page 63: LODAC 2017 Linked Open Data Workshop

WHERE 절 예시

Data

@prefix foaf: <http://xmlns.com/foaf/0.1/> .

_:a foaf:name "Johnny Lee Outlaw" .

_:a foaf:mbox <mailto:[email protected]> .

_:b foaf:name "Peter Goodguy" .

_:b foaf:mbox <mailto:[email protected]> .

_:c foaf:mbox <mailto:[email protected]> .

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:[email protected]>

“Peter Goodguy” <mailto:[email protected]>

Page 64: LODAC 2017 Linked Open Data Workshop

WHERE 절에 작성된 트리플의 축약식

• 동사-목적어 축약식

?x foaf:name ?name ;

foaf:mbox ?mbox .

?x foaf:name ?name .

?x foaf:mbox ?mbox .

Page 65: LODAC 2017 Linked Open Data Workshop

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_" .

Page 66: LODAC 2017 Linked Open Data Workshop

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 }

Page 67: LODAC 2017 Linked Open Data Workshop

값을 갖는 트리플에 대한 질의

@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>

Page 68: LODAC 2017 Linked Open Data Workshop

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 .

Page 69: LODAC 2017 Linked Open Data Workshop

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

Page 70: LODAC 2017 Linked Open Data Workshop

정렬

• 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)

Page 71: LODAC 2017 Linked Open Data Workshop

결과의 중복 제거

• DISTINCT – 중복된 결과 제거

Data

@prefix foaf: <http://xmlns.com/foaf/0.1/> .

_:x foaf:name "Alice" .

_:x foaf:mbox <mailto:[email protected]> .

_:y foaf:name "Alice" .

_:y foaf:mbox <mailto:[email protected]> .

_:z foaf:name "Alice" .

_:z foaf:mbox <mailto:[email protected]> .

Query

PREFIX foaf: <http://xmlns.com/foaf/0.1/>

SELECT DISTINCT ?name WHERE { ?x foaf:name ?name }

Query Result name

“Alice”

Page 72: LODAC 2017 Linked Open Data Workshop

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

Page 73: LODAC 2017 Linked Open Data Workshop

SPARQL의 질의 유형

• SELECT – 지정된 변수에 바인딩 된 값을 추출하기 위한 질의

• CONSTRUCT – SELECT와 유사하지만 결과를 그래프 형태로 구성하고자 할 경우 사용하는 질의

• ASK – 지정된 조건을 만족하는지에 따라 true와 false를 반환하는 질의

• DESCRIBE – 지정된 URI에 대한 RDF 데이터를 포함하는 그래프를 얻고자 사용하는 질의

Page 74: LODAC 2017 Linked Open Data Workshop

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”

Page 75: LODAC 2017 Linked Open Data Workshop

CONSTRUCT 유형

Data

@prefix foaf: <http://xmlns.com/foaf/0.1/> .

_:a foaf:name "Alice" .

_:a foaf:mbox <mailto:[email protected]> .

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" .

Page 76: LODAC 2017 Linked Open Data Workshop

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:[email protected]> .

Query

PREFIX foaf: <http://xmlns.com/foaf/0.1/>

ASK { ?x foaf:name "Alice" }

Query Result

yes

Page 77: LODAC 2017 Linked Open Data Workshop

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:[email protected]> .

Query

PREFIX foaf: <http://xmlns.com/foaf/0.1/>

DESCRIBE ?x

WHERE { ?x foaf:mbox <mailto:[email protected]> }

Query Result

_:b foaf:name "Bob" .

_:b foaf:mbox <mailto:[email protected]> .

Page 78: LODAC 2017 Linked Open Data Workshop

26 26

Dr. Myungjin Lee

e-Mail : [email protected] Twitter : http://twitter.com/MyungjinLee

Facebook : http://www.facebook.com/mjinlee SlideShare : http://www.slideshare.net/onlyjiny/

Page 79: LODAC 2017 Linked Open Data Workshop

LOD 실습

Part 4. 실습

허 홍 수

2017-02-28

Page 80: LODAC 2017 Linked Open Data Workshop

워크샵 프로그램

시간 제목 발표자

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. 실습 – 프로그래밍 허홍수

Page 81: LODAC 2017 Linked Open Data Workshop

Chapter 1

LOD 모델

Page 82: LODAC 2017 Linked Open Data Workshop

LOD 모델

• 왜 모델을 이해해야 하지?

• LOD 모델은 어디에서 얻을 수 있지?

• 획득한 모델은 어떻게 해석하지?

• 해석할 때 어떤 도구를 써야 하지?

• 모델을 획득하지 못할 경우에는?

Page 83: LODAC 2017 Linked Open Data Workshop

데이터베이스와 LOD 모델

데이터베이스 Linked Open Data

Page 84: LODAC 2017 Linked Open Data Workshop

LOD 모델 획득하기

제공

형태

파일

그래픽

그림

명세표

Page 85: LODAC 2017 Linked Open Data Workshop

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/

Page 86: LODAC 2017 Linked Open Data Workshop

LOD 모델 살펴보기 1

• Class, ObjectProperty, DatatypeProperty 구분하기 – Class : Resource들의 집합

– ObjectProperty : Resource와 다른 Resource간의 연결에 사용

– DatatypeProperty : Resource와 그 Resource가 가지는 Literal 값 연결에 사용

홍길동

임꺽정

이순신

유성룡 궁예

을지문덕 왕건 사람 유성룡 이순신

추천

1598

사망연도 ObjectProperty

DatatypeProperty

Page 87: LODAC 2017 Linked Open Data Workshop

LOD 모델 살펴보기 2

• Class의 목록 파악 – Class의 종류에는 어떤 것들이 있는가?

– 주요한 Class는 무엇인가?

• Class의 계층(관계) 파악 – Class 간의 상·하위 계층은 어떻게 구성되어 있는가?

– 주요하게 살펴볼 Class는 어떤 외부 Class와 관계를 맺고 있는가?

Page 88: LODAC 2017 Linked Open Data Workshop

LOD 모델 살펴보기 3

• Property의 목록 파악 – Property의 종류에는 어떤 것들이 있는가?

– ObjectProperty와 DatatypeProperty를 구분

• Property의 조건(관계) 파악 – Domain과 Range는 어떻게 되는가?

– Property에 어떠한 제약사항이 있는가?

Page 89: LODAC 2017 Linked Open Data Workshop

그림/그래픽 표현의 이해 1

• Class – 대체적으로 원 또는 타원으로 표기함

– 원 안에 Class의 레이블을 표기

Page 90: LODAC 2017 Linked Open Data Workshop

그림/그래픽 표현의 이해 2

• Property – 화살표가 있는 선으로 표기함

– 화살표가 있는 부분은 Range에 해당, 화살표가 없는 부분은 Domain에 해당

– 선 위에 해당 Property의 레이블을 표기

Page 91: LODAC 2017 Linked Open Data Workshop

그림/그래픽 표현의 이해 3

• Literal – 네모 상자로 표기

Page 92: LODAC 2017 Linked Open Data Workshop

그림/그래픽 표현의 이해 4

• Instance – 대체적으로 마름모 혹은 사각형과 원이 아닌 도형으로 표기

– Class 표기 안에 직접 Instance의 레이블을 넣는 경우도 있음

Page 93: LODAC 2017 Linked Open Data Workshop

Chapter 2

TopBraid Composer를 이용한 모델 분석

Page 94: LODAC 2017 Linked Open Data Workshop

LOD 모델 파일을 통한 분석

• LOD 모델 파일 – RDF/XML (xxx.rdf / xxx.owl)

– TTL (xxx.ttl)

– N-TRIPLE (xxx.nt)

• 활용 도구 – Text Editor (RDF를 읽을 수 있는 경우)

– 명세 생성 도구 (웹 환경에서 명세표를 생성하여 제공)

– 그래픽 뷰어 (웹 환경에서 모델을 그래픽으로 변경하여 제공)

– 온톨로지 모델링 도구

Page 95: LODAC 2017 Linked Open Data Workshop

도구 활용 - 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> .

Page 96: LODAC 2017 Linked Open Data Workshop

도구 활용 - 명세 생성 도구

• OntoSpec – http://ontospec.com 에서 파일을 업로드하여 모델 명세를 확인할 수 있음

Page 97: LODAC 2017 Linked Open Data Workshop

도구 활용 - 그래픽 뷰어

• WebVOWL – http://vowl.visualdataweb.org/ 에서 제공하는 그래픽 뷰어

Page 98: LODAC 2017 Linked Open Data Workshop

도구 활용 - 온톨로지 모델링 도구

• TopBraid Composer – TopQuadrant 사에서 제작한 온톨로지 모델링 도구

– 모델파일을 읽어 직접 생성, 수정, 삭제를 할 수 있음

Page 99: LODAC 2017 Linked Open Data Workshop

모델 분석 준비 (1/3)

• 프로젝트 생성 (1/2)

Page 100: LODAC 2017 Linked Open Data Workshop

모델 분석 준비 (2/3)

• 프로젝트 생성 (2/2) – 프로젝트명 넣기

Page 101: LODAC 2017 Linked Open Data Workshop

모델 분석 준비 (3/3)

• 파일 복사 – 분석 대상 파일을 복사하여 생성한 프로젝트에 붙여넣기

Page 102: LODAC 2017 Linked Open Data Workshop

TBC의 구성

Class 영역 Property 영역

Project 영역

Form 영역

Page 103: LODAC 2017 Linked Open Data Workshop

모델 분석 (1/9)

• Import한 모델 확인하기

Page 104: LODAC 2017 Linked Open Data Workshop

모델 분석 (2/9)

• Namespace 확인

Page 105: LODAC 2017 Linked Open Data Workshop

모델 분석 (3/9)

• Class 보기 토글

Page 106: LODAC 2017 Linked Open Data Workshop

모델 분석 (4/9)

• Class 보기

국가서지LOD에서 정의한 Class들

Namespace에서 확인한 바와 같이 Base URI의 Prefix로 시작하는 Class들은 해당 모델에서 직접 정의하여 생성한 Class이다.

Page 107: LODAC 2017 Linked Open Data Workshop

모델 분석 (5/9)

• Property 보기

ObjectProperties DatatypeProperties

Page 108: LODAC 2017 Linked Open Data Workshop

모델 분석 (6/9)

• Property의 관계 파악

① ② Ctrl+좌클릭

Page 109: LODAC 2017 Linked Open Data Workshop

모델 분석 (7/9)

• 해당 Class를 Domain으로 가지는 Property 찾기

Page 110: LODAC 2017 Linked Open Data Workshop

모델 분석 (8/9)

• 해당 Class를 Range로 가지는 Property 찾기

Page 111: LODAC 2017 Linked Open Data Workshop

모델 분석 (9/9)

• Form 영역에서 보기

Page 112: LODAC 2017 Linked Open Data Workshop

Chapter 3

SPARQL 활용

Page 113: LODAC 2017 Linked Open Data Workshop

TBC를 이용한 SPARQL 활용

• 모델을 획득하지 못했다면? – SPARQL을 통해 질의하여 확인 가능

(SPARQL Endpoint를 제공할 경우에만 가능)

• SPARQL 예제를 통한 모델 구조 파악하기

• 실제 LOD에 질의하여 데이터를 확인하기

• SPARQL Endpoint에서 질의하기

Page 114: LODAC 2017 Linked Open Data Workshop

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 에서 참고하세요

Page 115: LODAC 2017 Linked Open Data Workshop

TBC에서의 SPARQL 사용

SPARQL 입력 부분

SPARQL 실행

Page 116: LODAC 2017 Linked Open Data Workshop

SPARQL을 통한 모델 구조 파악 (1/13)

• Class 목록

SELECT * WHERE { ?s rdfs:subClassOf owl:Thing . }

owl:Thing 클래스의 하위 클래스들을 반환하시오

Page 117: LODAC 2017 Linked Open Data Workshop

SPARQL을 통한 모델 구조 파악 (2/13)

• Class 전체 목록

SELECT * WHERE { ?s rdfs:subClassOf* owl:Thing . }

owl:Thing 클래스의 하위 클래스들과 그 클래스들의 하위 클래스들까지 모두 반환하시오

Page 118: LODAC 2017 Linked Open Data Workshop

SPARQL을 통한 모델 구조 파악 (3/13)

• Class 목록과 레이블

SELECT * WHERE { ?s rdfs:subClassOf owl:Thing . ?s rdfs:label ?label . }

owl:Thing 클래스의 하위 클래스들과 그 클래스들의 label을 반환하시오

Page 119: LODAC 2017 Linked Open Data Workshop

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 클래스의 모든 하위 클래스들과 그 클래스들의 하위 클래스들을 반환하시오

Page 120: LODAC 2017 Linked Open Data Workshop

SPARQL을 통한 모델 구조 파악 (5/13)

• 직접 정의한 Class 목록

SELECT ?s WHERE { ?s a owl:Class . filter(regex(str(?s), '^http://lod.nl.go.kr')) }

국가서지LOD에서 직접 정의한 클래스들을 반환하시오

Page 121: LODAC 2017 Linked Open Data Workshop

SPARQL을 통한 모델 구조 파악 (6/13)

• Property 목록 - ObjectProperty

SELECT ?s WHERE { ?s a owl:ObjectProperty . }

ObjectProperty에 해당하는 프로퍼티들을 반환하시오

Page 122: LODAC 2017 Linked Open Data Workshop

SPARQL을 통한 모델 구조 파악 (7/13)

• Property 목록 - DatatypeProperty

SELECT ?s WHERE { ?s a owl:DatatypeProperty . }

DatatypeProperty에 해당하는 프로퍼티들을 반환하시오

Page 123: LODAC 2017 Linked Open Data Workshop

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에서 직접 정의한 프로퍼티들을 반환하시오

Page 124: LODAC 2017 Linked Open Data Workshop

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를 반환하시오

Page 125: LODAC 2017 Linked Open Data Workshop

SPARQL을 통한 모델 구조 파악 (10/13)

• Instance 목록

SELECT * WHERE { ?s a nlon:ContinuousDataType . }

ContinuousDataType 클래스에 속한 인스턴스를 반환하시오

Page 126: LODAC 2017 Linked Open Data Workshop

SPARQL을 통한 모델 구조 파악 (11/13)

• 실제LOD에 질의하기 1

SELECT * WHERE { SERVICE <http://lod.nl.go.kr/sparql> { ?s a nlon:Author . } }

국가서지LOD의 SPARQL Endpoint에 저자 클래스의 인스턴스를 반환하시오

Page 127: LODAC 2017 Linked Open Data Workshop

SPARQL을 통한 모델 구조 파악 (12/13)

• 실제LOD에 질의하기 2

SELECT * WHERE { SERVICE <http://lod.nl.go.kr/sparql> { ?s a nlon:Author . ?s foaf:name "윤동주" . } }

국가서지LOD의 SPARQL Endpoint에 저자 클래스의 인스턴스 중 이름이 윤동주인 저자를 반환하시오

Page 128: LODAC 2017 Linked Open Data Workshop

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의 윤동주가 제공하는 데이터를 반환하시오

Page 129: LODAC 2017 Linked Open Data Workshop

Chapter 4

JENA를 이용한 LOD 활용

Page 130: LODAC 2017 Linked Open Data Workshop

LOD에서 데이터 획득

• URI로 접근하여 데이터 획득

• 획득한 데이터를 Model에 담기

• 획득한 데이터에 SPARQL 질의

• 로컬파일에 대한 처리(다운로드 받은 데이터)

• 실제 SPARQL Endpoint에서 데이터 획득

• 결과를 JSON으로 변경

• 하나의 데이터셋 획득

• 두개의 데이터셋 획득

Page 131: LODAC 2017 Linked Open Data Workshop

구동 환경

• Tool – Eclipse

• JAVA 환경 – JAVA1.8

• 필요한 라이브러리 – apache-jena-3.0.1

jena 3.x 버전부터는 java1.8 이상이 필요함

Page 132: LODAC 2017 Linked Open Data Workshop

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

Page 133: LODAC 2017 Linked Open Data Workshop

획득한 데이터를 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 이라는 그릇에 담에 자신이 원하는 대로 조작할 수 있는 기반을 마련해 줄 수 있다.

Page 134: LODAC 2017 Linked Open Data Workshop

획득한 데이터에 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 질의를 통해 원하는 데이터를 질의할 수 있다.

Page 135: LODAC 2017 Linked Open Data Workshop

로컬파일에 대한 처리

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 질의를 해서 원하는 데이터를 획득할 수 있다.

Page 136: LODAC 2017 Linked Open Data Workshop

실제 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();

Page 137: LODAC 2017 Linked Open Data Workshop

결과를 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 형식으로 변경하여 가공할수 도 있다.

Page 138: LODAC 2017 Linked Open Data Workshop

하나의 데이터셋 획득

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에 대한 데이터를 가져올 수 있다.

Page 139: LODAC 2017 Linked Open Data Workshop

두개의 데이터셋 획득

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");

Page 140: LODAC 2017 Linked Open Data Workshop

그림 출처

• 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=1421992005830kdata.rdf&lang=ko&fileName=kdata.rdf

• http://pro.europeana.eu/page/edm-documentation

Page 141: LODAC 2017 Linked Open Data Workshop

감사합니다

[email protected]

http://joyhong.tistory.com/