"20180208 회의록"의 두 판 사이의 차이
khw
(→추가 논의 사항) |
|||
| 87번째 줄: | 87번째 줄: | ||
#* 데이터 내용 검토해보고 우리 데이터 형태로 전환할 방안에 대해 논의해봅시다. | #* 데이터 내용 검토해보고 우리 데이터 형태로 전환할 방안에 대해 논의해봅시다. | ||
| + | ==SPARQL== | ||
| + | ==RDF Triplestore== | ||
| + | RDF triplestore는 W3C에서 정의한 시맨틱 정보를 저장하는 그래프 데이터베이스의 형태 중 하나이다. 온톨로지라는 스키마 모델을 이용하며, 개체와 관계간의 계층 구조를 보여줄 수도 있다. | ||
| + | 데이터와 아래와 같이 각 개체와 개체관의 관계를 보여주는, 3형식(Triple, Statement)으로 저장되기 때문에 Triple Store라 불린다. | ||
| + | |||
| + | 주어(Subject) --서술어(Predicate/Verb)--> 목적어(Object) | ||
| + | |||
| + | ==LOD(Linked Open Data)== | ||
| + | *W3C에서 명시한 방법으로 구조화된, 서로 연결된, 웹(Web)상의 데이터로 RDF triple 형식을 이용한다. | ||
| + | *개체(노드)의 ID으로 URL를 사용 | ||
| + | **<small>클래스 정의용 관계어 : rdf:type / rdfs:subClassOf</small> | ||
| + | **<small>개체 네이밍 관계어 : rdfs:label </small> | ||
| + | |||
| + | ==Data Protery / Object Property== | ||
| + | *Data Propery : 특정 값으로 표현되는 속성 ex) Label | ||
| + | *Object Propery : 특정 개체로 연결되는 속성 -> ex) Creator | ||
| + | ==RDF 표현형식== | ||
| + | *Turtle | ||
| + | ekc:조선_세종 dc:creator ekc:훈민정음 | ||
| + | <nowiki><http://dh.aks.ac.kr/Encyves/resource/joseon_Sejong> rdfs:label "조선 세종"@kor</nowiki> | ||
| + | *RDF/XML | ||
| + | <nowiki><ekc:joseon_Sejong rdfs:about="http://dh.aks.ac.kr/Encyves/resource/joseon_Sejong"/> <dc:creator rdf:resource="http://dh.aks.ac.kr/Encyves/resource/hunminjeongeum"/></nowiki></span> | ||
| + | <nowiki><ekc:joseon_Sejong rdfs:about="http://dh.aks.ac.kr/Encyves/resource/joseon_Sejong"> <rdfs:label xml:lang="kor">조선 세종</rdfs:label></ekc:joseon_Sejong></nowiki> | ||
| + | *N-Triples | ||
| + | <nowiki><http://www.w3.org/2001/sw/RDFCore/ntriples/> <http://purl.org/dc/terms/title> "N-Triples"@en-US .</nowiki> | ||
| + | <nowiki><http://example.org/show/218> <http://www.w3.org/2000/01/rdf-schema#label> "That Seventies Show"^^<http://www.w3.org/2001/XMLSchema#string></nowiki> | ||
| + | <nowiki><http://example.org/#spiderman> <http://www.perceive.net/schemas/relationship/enemyOf> <http://example.org/#green-goblin></nowiki> | ||
| + | |||
| + | ==SPARQL== | ||
| + | ===Prefix=== | ||
| + | 데이터들이 어떤 층위에 속해 있는지를 지정해놓는 공간. 이름이 같은 데이터라도 층위에 따라 다른 의미를 가질 수 있다. | ||
| + | *<span style="color:DarkCyan">DC : Dublin Core, 서지정보 메타데이터[http://www.dublincore.org/]</span> | ||
| + | *<span style="color:DarkCyan">FOAF : Friend of A Friend, 현대 사람들의 관계 기술 [http://xmlns.com/foaf/spec/]</span> | ||
| + | *<span style="color:DarkCyan">BIBO : Bibliographic Ontology, 책이나 잡지 등의 서지정보 [http://bibliontology.com/]</span> | ||
| + | *<span style="color:DarkCyan">SKOS : Simple Knowledge Organization System, 지식 어휘 체계*시소러스 [https://www.w3.org/2004/02/skos/]</span> | ||
| + | *<span style="color:DarkCyan">EDM : Europeana Data Model, 유로피아나(유럽 박물관/미술관 통합 아카이브) [https://pro.europeana.eu/files/Europeana_Professional/Share_your_data/Technical_requirements/EDM_Documentation//EDM_Definition_v5.2.8_102017.pdf]</span> | ||
| + | *<span style="color:DarkCyan">RDFS : Resource Description Framework, RDF 구조를 표현하기 위한 지식표현 모델(클래스, 속성 정의)[https://en.wikipedia.org/wiki/RDF_Schema]</span> | ||
| + | |||
| + | ===기본형태=== | ||
| + | SELECT ?A(변수), ?B(변수) | ||
| + | WHERE | ||
| + | { ?A(변수) Prefix:relation ?B(변수) | ||
| + | } | ||
| + | *'''?''' : 변수의 앞에 붙임.(변수임을 표시) | ||
| + | *''';''' : 특정 변수에 조건을 추가할 때 (and) | ||
| + | *'''.''' : 기존에 선언된 변수와 관계 없이 새로운 개체나 조건을 명시할 때(end) | ||
| + | *'''&&''' : and | ||
| + | *'''||''' : or | ||
| + | |||
| + | ===Filter=== | ||
| + | *조건문, Where 대괄호 안에 넣어 검색할 개체가 가질 특정 조건을 부여 | ||
| + | WHERE { FILTER( ?A >300; ?B = "title" ) } | ||
| + | *[https://ko.wikipedia.org/wiki/%EC%A0%95%EA%B7%9C_%ED%91%9C%ED%98%84%EC%8B%9D 정규표현식] 사용 | ||
| + | WHERE { FILTER REGEX( ?A, "정규표현식") } | ||
| + | <span style="color:DarkCyan"> filter regex( ?A, "(BBB)+") : 특정문구(BBB)가 포함된 A</span><br/> | ||
| + | <span style="color:DarkCyan"> filter regex( ?A, "^(BBB)") : 특정문구(BBB)로 시작하는 A</span><br/> | ||
| + | <span style="color:DarkCyan"> filter regex( ?A, "(BBB)$") : 특정문구(BBB)로 끝나는 A</span> | ||
| + | |||
| + | ===Optional=== | ||
| + | *추가사항, Where 대괄호 안에 넣어 검색할 개체를 보여주되, 특정 속성을 가진 경우 그 특정 속성을 보여줌 | ||
| + | WHERE { OPTIONAL( ?A prefix:title_ZH ?title_ZH)} | ||
| + | *filer와 함께 사용 가능 : <span style="color:darkcyan">OPTIONAL { ?x ns:price ?price . FILTER (?price < 30) }</span> | ||
| + | ===UNION=== | ||
| + | *합집합, 값을 나란한 열이 아닌, 여러 행으로 보여줌 | ||
| + | WHERE { { ?book dc10:title ?title } UNION { ?book dc11:title ?title } } | ||
| + | ===GRAPH / FROM === | ||
| + | *특정 개체의 주소(DB)을 나타낼 때 | ||
| + | WHERE { GRAPH ?src { ?A rdfs:label ?name} } | ||
| + | *특정 DB로 제한할 때 | ||
| + | SELECT ?name | ||
| + | FROM <http://example.org/foaf/aliceFoaf> | ||
| + | WHERE { ?x foaf:name ?name } | ||
| + | ===Order By / Limit / Offset=== | ||
| + | *Order by : 정렬 / Limit : 값의 갯수 제한 / Offset: 값 중 몇개의 값을 제외 | ||
| + | WHERE {?x rdfs:label ?title} | ||
| + | order by desc(?title) | ||
| + | limit 100 | ||
| + | offset 50 | ||
| + | ===ASK=== | ||
| + | *특정 조건에 해당하는 값이 있는지 없는지를 yes/no의 값으로 보여줌. | ||
| + | ASK { ?x foaf:name "Alice" } | ||
| + | ===Filter와 함께 쓰는 기타 기능들=== | ||
| + | {|class="wikitable | ||
| + | !명칭 !! 기능!!사용예시 | ||
| + | |- | ||
| + | |bound || 값이 있는 경우 is not null<br/>특정 값이 없는 경우 is null : !bound || FILTER(bound(?date)) | ||
| + | |- | ||
| + | |isLiteral || 값이 문자인 경우 || FILTER(isLiteral(?date)) | ||
| + | |- | ||
| + | |str || 값을 문자형태로 변환 || FILTER regex(str(?mbox), "@work.example") | ||
| + | |- | ||
| + | |lang || 값이 어느 언어를 사용하지를 명시(Languagage 태그)<br/>한국어 KO / 영어 EN / 일본어 JA / 중국-간체 ZH-HANS / 중국-번체 ZH-HANT || FILTER ( lang(?name) = "ES" ) | ||
| + | |} | ||
| + | ===기타 추가사항=== | ||
| + | *[https://www.w3.org/2001/sw/DataAccess/rq23/ W3C SPARQL Query Language for RDF] | ||
| + | |||
| + | ==사용예시== | ||
| + | *부산문화관광LOD : 역린[http://lod.busan.go.kr/Page/Movie_%EC%97%AD%EB%A6%B0] | ||
| + | *부산문화관광LOD EndPoint : [http://lod.busan.go.kr/sparqlEndpoint.do] | ||
| + | *부산문화관광LOD 기본 PREFIX : | ||
| + | PREFIX ns: <http://lod.busan.go.kr/ontology/> | ||
| + | PREFIX resource: <http://lod.busan.go.kr/resource/> | ||
| + | PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> | ||
| + | PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> | ||
| + | PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> | ||
| + | PREFIX foaf: <http://xmlns.com/foaf/0.1/> | ||
| + | PREFIX skos: <http://www.w3.org/2004/02/skos/core#> | ||
| + | PREFIX schema: <http://schema.org/> | ||
| + | PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#> | ||
| + | |||
| + | *영화의 이름, 영문이름, 제작년도 | ||
| + | select ?movie_title ?movie_title_en ?make_year | ||
| + | where{ | ||
| + | ?movie rdf:type ns:Movie; | ||
| + | rdfs:label ?movie_title; | ||
| + | ns:title_en ?movie_title_en; | ||
| + | ns:makeYear ?make_year | ||
| + | } limit 50 | ||
| + | |||
| + | *국제시장에 출연한 배우들은? | ||
| + | select * | ||
| + | where{ | ||
| + | ?movie ns:hasActor ?actor; | ||
| + | rdfs:label ?movie_name. | ||
| + | ?actor rdfs:label ?actor_name | ||
| + | filter(?movie_name="국제시장") | ||
| + | } | ||
| + | |||
| + | *개체의 이름과 해당 DB주소 | ||
| + | select ?src ?name | ||
| + | where{ graph ?src { | ||
| + | ?some rdfs:label ?name | ||
| + | }} limit 100 | ||
| + | |||
| + | *개채의 이름을 가나다순으로 정렬했을 때 상위 50위부터 100위까지 보여라 | ||
| + | select ?name | ||
| + | where{ ?some rdfs:label ?name} | ||
| + | order by ?name | ||
| + | limit 50 offset 51 | ||
[[분류: 전통문화 융복합 자원 시맨틱 데이터 개발 연구]] | [[분류: 전통문화 융복합 자원 시맨틱 데이터 개발 연구]] | ||
2018년 2월 8일 (목) 12:32 판
| ← Previous | 회의록 | |
| 20180206 회의록 | 20180208 회의록 | |
목차
온톨로지 및 데이터 정제
온톨로지
- Class는 상위 7개만 유지. (Heritage, Actor, Place, Event, Object, Concept, Text)
- 기존의 클래스는 ekc:hasType을 통해서 데이터타입처리
- 예) 현재=각성 hasClass 승려
==> 변경 = 각성 hasClass 인물 / 각성 hasType 승려
- 예) 현재=각성 hasClass 승려
- 프로퍼티는 서브프로퍼티 허용
- dcterms:creator 하위에 3가지 - ekc:writer / ekc:calligrapher /ekc:inscriber
- 기본 prefix에 ekci http://dh.aks.ac.kr/iri/ekc 추가
- 네임스페이스 목록
RDF
ID의 class 정의
select distinct '<http://dh.aks.ac.kr/iri/ekc#'+a.node_id+'>'+' '+
'<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>'+' '+
'<http://dh.aks.ac.kr/iri/ekc#'+b.class+'>'+' .'
from u_nodelist as a, nodelist as b
where a.node_id=b.node_id
ID의 type 정의
select distinct '<http://dh.aks.ac.kr/iri/ekc#'+a.node_id+'>'+' '+
'<http://dh.aks.ac.kr/ontologies/ekc#hasType>'+' '+
'"'+b.type+'"@ko .'
from u_nodelist as a, nodelist as b
where a.node_id=b.node_id
ID의 label 정의
select distinct '<http://dh.aks.ac.kr/iri/ekc#'+a.node_id+'>'+' '+
'<http://www.w3.org/2000/01/rdf-schema#label>'+' '+
'"'+b.node_label+'"@ko .'
from u_nodelist as a, nodelist as b
where a.node_id=b.node_id
ID와 ID 관계 정의
select '<http://dh.aks.ac.kr/iri/ekc#'+source+'>'+' '+
'<'+b.fullname+'#'+ b.relationname+ '> '+
'<http://dh.aks.ac.kr/iri/ekc#'+target+'>'+' .'
from u_linklist as a, name_space_full as b
where a.relation = b.relation
데이터 업로드
- owl 파일을 ttl 형식으로 변환
- 전체 소스 데이터를 nt 형식으로 변환
- 변환된 ttl 파일 아래에 nt 형식의 소스 데이터 추가
- 전체 파일을 nt 형식으로 변환
- 업로드
추가 논의 사항
- gephi 분석 중 발견된 degree=0 노드들
- 실제로는 링크 데이터 있음. LST 파일 대상으로 수작업으로 추가할 필요 있음.
- 한국문화정보원 데이터
- 데이터 내용 검토해보고 우리 데이터 형태로 전환할 방안에 대해 논의해봅시다.
SPARQL
RDF Triplestore
RDF triplestore는 W3C에서 정의한 시맨틱 정보를 저장하는 그래프 데이터베이스의 형태 중 하나이다. 온톨로지라는 스키마 모델을 이용하며, 개체와 관계간의 계층 구조를 보여줄 수도 있다. 데이터와 아래와 같이 각 개체와 개체관의 관계를 보여주는, 3형식(Triple, Statement)으로 저장되기 때문에 Triple Store라 불린다.
주어(Subject) --서술어(Predicate/Verb)--> 목적어(Object)
LOD(Linked Open Data)
- W3C에서 명시한 방법으로 구조화된, 서로 연결된, 웹(Web)상의 데이터로 RDF triple 형식을 이용한다.
- 개체(노드)의 ID으로 URL를 사용
- 클래스 정의용 관계어 : rdf:type / rdfs:subClassOf
- 개체 네이밍 관계어 : rdfs:label
Data Protery / Object Property
- Data Propery : 특정 값으로 표현되는 속성 ex) Label
- Object Propery : 특정 개체로 연결되는 속성 -> ex) Creator
RDF 표현형식
- Turtle
ekc:조선_세종 dc:creator ekc:훈민정음 <http://dh.aks.ac.kr/Encyves/resource/joseon_Sejong> rdfs:label "조선 세종"@kor
- RDF/XML
<ekc:joseon_Sejong rdfs:about="http://dh.aks.ac.kr/Encyves/resource/joseon_Sejong"/> <dc:creator rdf:resource="http://dh.aks.ac.kr/Encyves/resource/hunminjeongeum"/></span> <ekc:joseon_Sejong rdfs:about="http://dh.aks.ac.kr/Encyves/resource/joseon_Sejong"> <rdfs:label xml:lang="kor">조선 세종</rdfs:label></ekc:joseon_Sejong>
- N-Triples
<http://www.w3.org/2001/sw/RDFCore/ntriples/> <http://purl.org/dc/terms/title> "N-Triples"@en-US . <http://example.org/show/218> <http://www.w3.org/2000/01/rdf-schema#label> "That Seventies Show"^^<http://www.w3.org/2001/XMLSchema#string> <http://example.org/#spiderman> <http://www.perceive.net/schemas/relationship/enemyOf> <http://example.org/#green-goblin>
SPARQL
Prefix
데이터들이 어떤 층위에 속해 있는지를 지정해놓는 공간. 이름이 같은 데이터라도 층위에 따라 다른 의미를 가질 수 있다.
- DC : Dublin Core, 서지정보 메타데이터[1]
- FOAF : Friend of A Friend, 현대 사람들의 관계 기술 [2]
- BIBO : Bibliographic Ontology, 책이나 잡지 등의 서지정보 [3]
- SKOS : Simple Knowledge Organization System, 지식 어휘 체계*시소러스 [4]
- EDM : Europeana Data Model, 유로피아나(유럽 박물관/미술관 통합 아카이브) [5]
- RDFS : Resource Description Framework, RDF 구조를 표현하기 위한 지식표현 모델(클래스, 속성 정의)[6]
기본형태
SELECT ?A(변수), ?B(변수)
WHERE
{ ?A(변수) Prefix:relation ?B(변수)
}
- ? : 변수의 앞에 붙임.(변수임을 표시)
- ; : 특정 변수에 조건을 추가할 때 (and)
- . : 기존에 선언된 변수와 관계 없이 새로운 개체나 조건을 명시할 때(end)
- && : and
- || : or
Filter
- 조건문, Where 대괄호 안에 넣어 검색할 개체가 가질 특정 조건을 부여
WHERE { FILTER( ?A >300; ?B = "title" ) }
- 정규표현식 사용
WHERE { FILTER REGEX( ?A, "정규표현식") }
filter regex( ?A, "(BBB)+") : 특정문구(BBB)가 포함된 A
filter regex( ?A, "^(BBB)") : 특정문구(BBB)로 시작하는 A
filter regex( ?A, "(BBB)$") : 특정문구(BBB)로 끝나는 A
Optional
- 추가사항, Where 대괄호 안에 넣어 검색할 개체를 보여주되, 특정 속성을 가진 경우 그 특정 속성을 보여줌
WHERE { OPTIONAL( ?A prefix:title_ZH ?title_ZH)}
- filer와 함께 사용 가능 : OPTIONAL { ?x ns:price ?price . FILTER (?price < 30) }
UNION
- 합집합, 값을 나란한 열이 아닌, 여러 행으로 보여줌
WHERE { { ?book dc10:title ?title } UNION { ?book dc11:title ?title } }
GRAPH / FROM
- 특정 개체의 주소(DB)을 나타낼 때
WHERE { GRAPH ?src { ?A rdfs:label ?name} }
- 특정 DB로 제한할 때
SELECT ?name FROM <http://example.org/foaf/aliceFoaf> WHERE { ?x foaf:name ?name }
Order By / Limit / Offset
- Order by : 정렬 / Limit : 값의 갯수 제한 / Offset: 값 중 몇개의 값을 제외
WHERE {?x rdfs:label ?title}
order by desc(?title)
limit 100
offset 50
ASK
- 특정 조건에 해당하는 값이 있는지 없는지를 yes/no의 값으로 보여줌.
ASK { ?x foaf:name "Alice" }
Filter와 함께 쓰는 기타 기능들
| 명칭 | 기능 | 사용예시 |
|---|---|---|
| bound | 값이 있는 경우 is not null 특정 값이 없는 경우 is null : !bound |
FILTER(bound(?date)) |
| isLiteral | 값이 문자인 경우 | FILTER(isLiteral(?date)) |
| str | 값을 문자형태로 변환 | FILTER regex(str(?mbox), "@work.example") |
| lang | 값이 어느 언어를 사용하지를 명시(Languagage 태그) 한국어 KO / 영어 EN / 일본어 JA / 중국-간체 ZH-HANS / 중국-번체 ZH-HANT |
FILTER ( lang(?name) = "ES" ) |
기타 추가사항
사용예시
PREFIX ns: <http://lod.busan.go.kr/ontology/> PREFIX resource: <http://lod.busan.go.kr/resource/> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> PREFIX foaf: <http://xmlns.com/foaf/0.1/> PREFIX skos: <http://www.w3.org/2004/02/skos/core#> PREFIX schema: <http://schema.org/> PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
- 영화의 이름, 영문이름, 제작년도
select ?movie_title ?movie_title_en ?make_year
where{
?movie rdf:type ns:Movie;
rdfs:label ?movie_title;
ns:title_en ?movie_title_en;
ns:makeYear ?make_year
} limit 50
- 국제시장에 출연한 배우들은?
select *
where{
?movie ns:hasActor ?actor;
rdfs:label ?movie_name.
?actor rdfs:label ?actor_name
filter(?movie_name="국제시장")
}
- 개체의 이름과 해당 DB주소
select ?src ?name
where{ graph ?src {
?some rdfs:label ?name
}} limit 100
- 개채의 이름을 가나다순으로 정렬했을 때 상위 50위부터 100위까지 보여라
select ?name
where{ ?some rdfs:label ?name}
order by ?name
limit 50 offset 51