Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

LODAC 2017 Linked Open Data Workshop

2,057 views

Published on

LODAC 2017 Linked Open Data Workshop에서 발표한 자료입니다.
LOD에 대한 설명을 포함하여 LOD를 사용하는 사용자 관점에서 실습할 수 있는 내용을 포함하고 있습니다.

Published in: Technology
  • Be the first to comment

LODAC 2017 Linked Open Data Workshop

  1. 1. LOD 실습 Part 1. LOD의 기본 개념 2017-02-28
  2. 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. 실습 – 프로그래밍 허홍수
  3. 3. 웹에서 생성되는 정보의 양
  4. 4. 현재의 웹 • HTML – 사람이 읽고 해석할 수 있는 연결된 문서를 만드는 것 ?정보의 재사용!!!
  5. 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. 6. Linked Open Data Linked Open Data 웹을 통해 사람과 기계가 읽고 처리할 수 있는 형태로 데이터에 대한 정보를 기술(description) 웹 페이지가 서로 연결된 것처럼 데이터들끼리 다양한 관계에 의해 연결되어 있는 형태 URI를 이용해서 누구나 데이터에 접근할 수 있으며 데이터에 대한 정보를 제공
  7. 7. LOD의 네 가지 원칙 1. 웹 상의 자원을 식별하기 위해 URI를 사용하라. 2. 웹 상의 자원들이 사람과 사용자 에이전트에 의해 참조 (refer)되고 탐색(look up)될 수 있는 HTTP URI를 사용 하라. 3. 자원의 URI가 역참조(dereference)될 때 자원에 대한 유 용한 정보를 RDF/XML과 같은 표준 형식을 사용하여 제 공하라. 4. 웹에서 다른 연관된 정보의 탐색을 개선하기 위해 다른 데이터와의 URI 연결(link)를 포함하라.
  8. 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. 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. 10. LOD를 위한 요소 기술들 문서 내부의 구조화된 콘텐츠를 기계가 읽고 처리 가능한 형태로 표기하기 위한 기본적인 요소 웹 상에 존재하는 자원에 대한 정보와 자원들 사이의 관계를 기술하기 위한 프레임워크 RDF 기반 자원의 속성과 클래스의 구조를 기술하기 위한 용어집 RDF 기반의 질의 언어 및 프로토콜 웹에 존재하는 자원들을 식별하기 위해 사용되는 문자열
  11. 11. URI (Uniform Resource Identifier) • 웹 상에서 사물(thing)을 식별하기 위한 식별자로 활용 식별하기 위해서 현실에서는 … 웹에서는 … 주민등록번호 861002-1052747 URI http://semantics.kr/MyungjinLee
  12. 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. 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. 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. 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. 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. 17. RDFS(RDF Schema) • RDF 형태의 데이터를 담기 위한 구조를 만드는 방법을 제 공 – 클래스 정의 – 속성과 관련 제약조건에 대한 정의 – 계층 구조에 대한 정의 has wife ♂ ♀ is a is a Male Female  Person subset ofsubset of
  18. 18. 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 데이터 부분
  19. 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. 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
  21. 21. LOD 에서의 역할들 응용서비스 개발 사용자 LOD서비스 구축 데이터 구축 모델링 변환 저장 발행 데이터 접근 서비스 접근 데이터 조회
  22. 22. LOD 데이터 구축자 데이터 구축자 모델링 도구 온톨로지 모델링 RDF 변환 규칙 작성 RDF 변환 데이터베이스 R2RML RDFS & OWL URI & RDF RDF Serialization
  23. 23. LOD 데이터 구축자에게 필요한 도구 • 온톨로지 편집기 – 온톨로지 모델링 및 인스턴스 입력을 위한 도구 – 관련 도구 • Stanford Center for Biomedical Informatics Research의 Protege • TopQuadrant의 TopBraid Composer
  24. 24. LOD 데이터 구축자에게 필요한 도구 • 변환기 – 데이터베이스의 관계형 데이터를 RDF 형태로 변환하기 위한 도 구 – R2RML(RDB to RDF Mapping Language)를 기반으로 변환 수행 – 관련 도구 • LiST의 OntoTrans • OpenLink Software의 Virtuoso RDF Views
  25. 25. LOD 서비스 구축자 LOD 서비스 제공자 RDF 적재 RDF URI & RDF RDF Serialization SPARQL 트리플 저장소 데이터 연계 LOD 서비스 프레임워크 LOD 서비스 Linked Data Platform 발행
  26. 26. LOD 서비스 구축자에게 필요한 도구 • 트리플 저장소 – RDF 형태의 데이터를 저장하고 운용 및 추론과 질의 처리를 수행 – 관련 도구 – LiST의 OntoBase • 적용사례: KDATA, 주소데이터 LOD, 수목원 LOD, 국립중앙도서관 LOD 등 – OpenLink Software의 Virtuoso – Franz의 AllegroGraph – OntoText의 OWLIM • LOD 발행 도구 – 구축된 RDF 데이터를 웹을 통해 발행하고 접근할 수 있도록 지원 – 관련 도구 • Pubby • OpenLink Software의 Virtuoso
  27. 27. LOD 사용자 LOD 서비스 응용서비스 개발자 응용서비스 개발자 URI RDF Query Result SPARQL URI & RDF SPARQL SPARQL Query Result Format
  28. 28. LOD 사용자에게 필요한 도구 • 온톨로지 편집기 – LOD 사용자에게는 모델을 이해하기 위해 필요한 도구 • 프로그래밍 라이브러리 – RDF 형태의 데이터를 처리하기 위한 라이브러리 – 관련 도구 • Apache의 Jena • University of Manchester의 OWL API
  29. 29. LOD 활용을 위한 절차 1. 활용하고자 하는 데이터 셋 검색 2. 온톨로지 모델 다운로드 및 이해 3. LOD 활용 – SPARQL을 이용하여 원하는 데이터 획득 – URI를 이용하여 데이터 조회 4. 응용 프로그램 개발
  30. 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. 31. LOD 실습 Part 2. LOD 모델 2017-02-28
  32. 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. 33. LOD의 구조 이해하기 데이터베이스 온톨로지 객체지향≠ ≠ 데이터베이스 온톨로지 객체지향≒ ≒ 그러나 오늘만은,
  34. 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. 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. 36. 데이터베이스(RDB)와 LOD의 데이터 구조 아이디 이름 나이 학과 MJLee 이명진 27 IE 학과 학과명 IE 정보산업공학과 데이터베이스 LOD MJLee 이명진 27 IE 정보산업공학과 이름 학과 나이 학과명
  37. 37. URI의 사용 • 왜 URI를 사용하지? – 각각의 자원을 구별하기 위해서 – 중복된 이름이 없도록 하기 위해 – 웹에서 접근할 수 있도록 하기 위해서 – 접근했을 때 해당 자원에 대한 정보를 제공하기 위해서
  38. 38. 데이터베이스(RDB)와 LOD의 데이터 구조 아이디 이름 나이 학과 MJLee 이명진 27 IE 학과 학과명 IE 정보산업공학과 데이터베이스 LOD http://li-st.com/resourceMJLee 이명진 27 http://li-st.com/resourceIE 정보산업공학과 이름 학과 나이 학과명
  39. 39. 클래스 (Class) • 아주 간단히 무엇들의 집합 ≒데이터베이스의 테이블 ♂ MaleMyungjin Lee
  40. 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. 41. 클래스 (Class) Movie owl:Class rdf:type rdf:type은 is-a 관계를 의미 즉, 해석하면 “Movie는 Class이다”
  42. 42. 클래스의 상하위 관계 Person 클래스 Male 클래스 Female 클래스 Male 클래스 Female 클래스 Person 클래스 rdfs:subClassOf rdfs:subClassOf
  43. 43. 자원의 이름과 설명을 위한 속성 • rdfs:label – 자원에 대한 이름을 정의 • rdfs:comment – 자원에 대한 설명을 작성 rdfs:label Movie 영화 일정한 의미를 갖고 움직이는 대상을 촬영하여 영사기로 영사막에 재현하는 종합 예술rdfs:comment
  44. 44. 인스턴스 (Instance) • 클래스를 구성하는 멤버 ≒ 데이터베이스의 행 rdf:type MaleMyungjinLee owl:Class rdf:type Male • MyungjinLee
  45. 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. 46. 속성(Property) • 속성 – 둘 사이의 관계를 나타내기 위한 것 • 속성의 두 가지 유형 – 자원과 자원 사이의 관계: Object Property – 자원과 값 사이의 관계: Datatype Property has wife age 30 Object Property Datatype Property
  47. 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. 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. 49. 속성들이 가지고 있는 제약 • rdfs:domain – 속성을 가질 수 있는 클래스가 무엇인가? • rdfs:range – 속성 값의 타입은 무엇인가? Subject Predicate Object has wife? ? domain: 주어를 위한 클래스는 머지? range: 목적어를 위한 클래스는 머지?
  50. 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. 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. 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. 53. LOD 실습 Part 3. SPARQL 2017-02-28
  54. 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. 55. SPARQL • SPARQL Protocol and RDF Query Language – SPARQL 위한 프로토콜에 대한 정의 – RDF 질의를 위한 질의 문법에 대한 정의 – W3C Recommendation 21 March 2013 – http://www.w3.org/TR/sparql11-query/
  56. 56. SPARQL의 구성 • SELECT – 질의 결과로 얻기 위한 변수를 지정 • FROM – 질의 대상이 되는 데이터 셋을 지정 • WHERE – 질의에 대응되는 조건 그래프 구조(트리플)를 작성
  57. 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. 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. 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. 60. SELECT 절 • 질의 변수 지정하기 – "?" 표를 이용하여 변수임을 지정 – ?name, ?title, ?author • 질의 결과는 테이블 형태를 가짐 SELECT ?title ?author title author Novel XML Myungjin Lee Web Tim-Berners Lee SPARQL Query Results Knowledge Base
  61. 61. WHERE 절 • WHERE 절 – 질의하고자 하는 조건을 트리플 단위로 기술 – 주어, 동사, 목적어는 공백으로 구분하며, – 각각의 트리플은 "."로 구분
  62. 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. 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. 64. WHERE 절에 작성된 트리플의 축약식 • 동사-목적어 축약식 ?x foaf:name ?name ; foaf:mbox ?mbox . ?x foaf:name ?name . ?x foaf:mbox ?mbox .
  65. 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. 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. 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. 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. 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. 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. 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. 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. 73. SPARQL의 질의 유형 • SELECT – 지정된 변수에 바인딩 된 값을 추출하기 위한 질의 • CONSTRUCT – SELECT와 유사하지만 결과를 그래프 형태로 구성하고자 할 경우 사용하는 질의 • ASK – 지정된 조건을 만족하는지에 따라 true와 false를 반환하는 질의 • DESCRIBE – 지정된 URI에 대한 RDF 데이터를 포함하는 그래프를 얻고자 사용 하는 질의
  74. 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. 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. 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. 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. 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. 79. LOD 실습 Part 4. 실습 허 홍 수 2017-02-28
  80. 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. 실습 – 프로그래밍 허홍수
  81. 81. Chapter 1 LOD 모델
  82. 82. LOD 모델 • 왜 모델을 이해해야 하지? • LOD 모델은 어디에서 얻을 수 있지? • 획득한 모델은 어떻게 해석하지? • 해석할 때 어떤 도구를 써야 하지? • 모델을 획득하지 못할 경우에는?
  83. 83. 데이터베이스와 LOD 모델 데이터베이스 Linked Open Data
  84. 84. LOD 모델 획득하기 제공 형태 파일 그래픽 그림 명세표
  85. 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. 86. LOD 모델 살펴보기 1 • Class, ObjectProperty, DatatypeProperty 구분하기 – Class : Resource들의 집합 – ObjectProperty : Resource와 다른 Resource간의 연결에 사용 – DatatypeProperty : Resource와 그 Resource가 가지는 Literal 값 연결에 사용 홍길동 임꺽정 이순신 유성룡 궁예 을지문덕 왕건사람 유성룡 이순신 추천 1598 사망연도 ObjectProperty DatatypeProperty
  87. 87. LOD 모델 살펴보기 2 • Class의 목록 파악 – Class의 종류에는 어떤 것들이 있는가? – 주요한 Class는 무엇인가? • Class의 계층(관계) 파악 – Class 간의 상·하위 계층은 어떻게 구성되어 있는가? – 주요하게 살펴볼 Class는 어떤 외부 Class와 관계를 맺고 있는 가?
  88. 88. LOD 모델 살펴보기 3 • Property의 목록 파악 – Property의 종류에는 어떤 것들이 있는가? – ObjectProperty와 DatatypeProperty를 구분 • Property의 조건(관계) 파악 – Domain과 Range는 어떻게 되는가? – Property에 어떠한 제약사항이 있는가?
  89. 89. 그림/그래픽 표현의 이해 1 • Class – 대체적으로 원 또는 타원으로 표기함 – 원 안에 Class의 레이블을 표기
  90. 90. 그림/그래픽 표현의 이해 2 • Property – 화살표가 있는 선으로 표기함 – 화살표가 있는 부분은 Range에 해당, 화살표가 없는 부분은 Domain에 해당 – 선 위에 해당 Property의 레이블을 표기
  91. 91. 그림/그래픽 표현의 이해 3 • Literal – 네모 상자로 표기
  92. 92. 그림/그래픽 표현의 이해 4 • Instance – 대체적으로 마름모 혹은 사각형과 원이 아닌 도형으로 표기 – Class 표기 안에 직접 Instance의 레이블을 넣는 경우도 있음
  93. 93. Chapter 2 TopBraid Composer를 이용한 모델 분석
  94. 94. LOD 모델 파일을 통한 분석 • LOD 모델 파일 – RDF/XML (xxx.rdf / xxx.owl) – TTL (xxx.ttl) – N-TRIPLE (xxx.nt) • 활용 도구 – Text Editor (RDF를 읽을 수 있는 경우) – 명세 생성 도구 (웹 환경에서 명세표를 생성하여 제공) – 그래픽 뷰어 (웹 환경에서 모델을 그래픽으로 변경하여 제공) – 온톨로지 모델링 도구
  95. 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. 96. 도구 활용 - 명세 생성 도구 • OntoSpec – http://ontospec.com 에서 파일을 업로드하여 모델 명세를 확 인할 수 있음
  97. 97. 도구 활용 - 그래픽 뷰어 • WebVOWL – http://vowl.visualdataweb.org/ 에서 제공하는 그래픽 뷰어
  98. 98. 도구 활용 - 온톨로지 모델링 도구 • TopBraid Composer – TopQuadrant 사에서 제작한 온톨로지 모델링 도구 – 모델파일을 읽어 직접 생성, 수정, 삭제를 할 수 있음
  99. 99. 모델 분석 준비 (1/3) • 프로젝트 생성 (1/2)
  100. 100. 모델 분석 준비 (2/3) • 프로젝트 생성 (2/2) – 프로젝트명 넣기
  101. 101. 모델 분석 준비 (3/3) • 파일 복사 – 분석 대상 파일을 복사하여 생성한 프로젝트에 붙여넣기
  102. 102. TBC의 구성 Class 영역 Property 영역 Project 영역 Form 영역
  103. 103. 모델 분석 (1/9) • Import한 모델 확인하기 ① ②
  104. 104. 모델 분석 (2/9) • Namespace 확인 ① ②
  105. 105. 모델 분석 (3/9) • Class 보기 토글
  106. 106. 모델 분석 (4/9) • Class 보기 국가서지LOD에서 정의한 Class들 Namespace에서 확인한 바와 같이 Base URI의 Prefix로 시작하는 Class들은 해당 모델에서 직접 정의하여 생성한 Class이다.
  107. 107. 모델 분석 (5/9) • Property 보기 ObjectProperties DatatypeProperties
  108. 108. 모델 분석 (6/9) • Property의 관계 파악 ①② Ctrl+좌클릭
  109. 109. 모델 분석 (7/9) • 해당 Class를 Domain으로 가지는 Property 찾기
  110. 110. 모델 분석 (8/9) • 해당 Class를 Range로 가지는 Property 찾기
  111. 111. 모델 분석 (9/9) • Form 영역에서 보기
  112. 112. Chapter 3 SPARQL 활용
  113. 113. TBC를 이용한 SPARQL 활용 • 모델을 획득하지 못했다면? – SPARQL을 통해 질의하여 확인 가능 (SPARQL Endpoint를 제공할 경우에만 가능) • SPARQL 예제를 통한 모델 구조 파악하기 • 실제 LOD에 질의하여 데이터를 확인하기 • SPARQL Endpoint에서 질의하기
  114. 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. 115. TBC에서의 SPARQL 사용 SPARQL 입력 부분 SPARQL 실행
  116. 116. SPARQL을 통한 모델 구조 파악 (1/13) • Class 목록 SELECT * WHERE { ?s rdfs:subClassOf owl:Thing . }  owl:Thing 클래스의 하위 클래스들을 반환하시오
  117. 117. SPARQL을 통한 모델 구조 파악 (2/13) • Class 전체 목록 SELECT * WHERE { ?s rdfs:subClassOf* owl:Thing . }  owl:Thing 클래스의 하위 클래스들과 그 클래스들의 하위 클래스들까지 모두 반환하시오
  118. 118. SPARQL을 통한 모델 구조 파악 (3/13) • Class 목록과 레이블 SELECT * WHERE { ?s rdfs:subClassOf owl:Thing . ?s rdfs:label ?label . }  owl:Thing 클래스의 하위 클래스들과 그 클래스들의 label을 반환하시오
  119. 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. 120. SPARQL을 통한 모델 구조 파악 (5/13) • 직접 정의한 Class 목록 SELECT ?s WHERE { ?s a owl:Class . filter(regex(str(?s), '^http://lod.nl.go.kr')) }  국가서지LOD에서 직접 정의한 클래스들을 반환하시오
  121. 121. SPARQL을 통한 모델 구조 파악 (6/13) • Property 목록 - ObjectProperty SELECT ?s WHERE { ?s a owl:ObjectProperty . }  ObjectProperty에 해당하는 프로퍼티들을 반환하시오
  122. 122. SPARQL을 통한 모델 구조 파악 (7/13) • Property 목록 - DatatypeProperty SELECT ?s WHERE { ?s a owl:DatatypeProperty . }  DatatypeProperty에 해당하는 프로퍼티들을 반환하시오
  123. 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. 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. 125. SPARQL을 통한 모델 구조 파악 (10/13) • Instance 목록 SELECT * WHERE { ?s a nlon:ContinuousDataType . }  ContinuousDataType 클래스에 속한 인스턴스를 반환하시오
  126. 126. SPARQL을 통한 모델 구조 파악 (11/13) • 실제LOD에 질의하기 1 SELECT * WHERE { SERVICE <http://lod.nl.go.kr/sparql> { ?s a nlon:Author . } }  국가서지LOD의 SPARQL Endpoint에 저자 클래스의 인스턴스를 반환하시오
  127. 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. 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의 윤동주가 제공하는 데이터를 반환하시오
  129. 129. Chapter 4 JENA를 이용한 LOD 활용
  130. 130. LOD에서 데이터 획득 • URI로 접근하여 데이터 획득 • 획득한 데이터를 Model에 담기 • 획득한 데이터에 SPARQL 질의 • 로컬파일에 대한 처리(다운로드 받은 데이터) • 실제 SPARQL Endpoint에서 데이터 획득 • 결과를 JSON으로 변경 • 하나의 데이터셋 획득 • 두개의 데이터셋 획득
  131. 131. 구동 환경 • Tool – Eclipse • JAVA 환경 – JAVA1.8 • 필요한 라이브러리 – apache-jena-3.0.1 jena 3.x 버전부터는 java1.8 이상이 필요함
  132. 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. 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. 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. 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. 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. 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. 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. 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. 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
  141. 141. 감사합니다 joyhong@li-st.com http://joyhong.tistory.com/

×