LODAC 2017 Linked Open Data Workshop

Preview:

Citation preview

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 of subset of

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 데이터 부분

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)

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

≒데이터베이스의 테이블

♂ Male Myungjin 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 Male MyungjinLee

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

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

감사합니다

joyhong@li-st.com

http://joyhong.tistory.com/