"2019 sparql"의 두 판 사이의 차이
DH 교육용 위키
(→Linked Open Data의 구축 원칙) |
(→SPARQL 문법) |
||
(같은 사용자에 의한 17개의 중간 편집이 숨겨짐) | |||
9번째 줄: | 9번째 줄: | ||
*#URL(웹 주소)를 id(식별자)로 사용 | *#URL(웹 주소)를 id(식별자)로 사용 | ||
*Linked Open Data의 표현방식 : RDF(주어-서술어-목적어) | *Linked Open Data의 표현방식 : RDF(주어-서술어-목적어) | ||
+ | |||
+ | ==SPARQL== | ||
+ | *Simple Protocol and RDF Query Language | ||
+ | *RDF 형태의 웹데이터 사용을 위한 검색(질의) 언어 | ||
+ | |||
+ | ==SPARQL 문법== | ||
+ | *[https://lod.nl.go.kr/home/application/getting.jsp 참고자료 : 국가서지 LOD] | ||
+ | (prefix) | ||
+ | SELCET 변수 WHERE { 조건 } | ||
+ | ===Prefix=== | ||
+ | 검색에서 사용할 온톨로지의 축약형태를 명시해주는 부분. | ||
+ | <pre> | ||
+ | PREFIX ekc: <http://dh.aks.ac.kr/ontologies/ekc#> | ||
+ | PREFIX ekci: <http://dh.aks.ac.kr/iri/ekc#> | ||
+ | PREFIX owl: <http://www.w3.org/2002/07/owl#> | ||
+ | PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> | ||
+ | PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> | ||
+ | PREFIX xml: <http://www.w3.org/XML/1998/namespace> | ||
+ | PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> | ||
+ | PREFIX dcterms: <http://purl.org/dc/terms#> | ||
+ | PREFIX foaf: <http://xmlns.com/foaf/0.1/> | ||
+ | PREFIX dc: <http://purl.org/dc/elements/1.1#> | ||
+ | PREFIX edm: <http://www.europeana.eu/schemas/edm#> | ||
+ | </pre> | ||
+ | |||
+ | prefix를 사용하지 않고 url주소 전체를 이용해 검색하는 것도 가능. | ||
+ | dc:creator -> <http://purl.org/dc/elements/1.1#creator> | ||
+ | |||
+ | ===기본 형태=== | ||
+ | |||
+ | SELECT ?A(변수) ?B(변수) | ||
+ | WHERE | ||
+ | { ?A(변수) Prefix:relation ?B(변수) . | ||
+ | } | ||
+ | *'''?''' : 변수의 앞에 붙임.(변수임을 표시) | ||
+ | *''';''' : 특정 변수에 조건을 추가할 때 (and) | ||
+ | *'''.''' : 기존에 선언된 변수와 관계 없이 새로운 개체나 조건을 명시할 때(end) | ||
+ | *'''#''' : comment (주석) | ||
+ | |||
+ | ♣[http://lod.nl.go.kr/sparql 실습 - 국가서지 lod] | ||
+ | <책과 책의 이름, 글쓴이> | ||
+ | prefix dcterms: <http://purl.org/dc/terms/> | ||
+ | prefix dc: <http://purl.org/dc/elements/1.1/> | ||
+ | select ?book ?bookTitle ?creator where { | ||
+ | ?book dcterms:title ?bookTitle. | ||
+ | ?book dc:creator ?creator. | ||
+ | } limit 50 | ||
+ | |||
+ | ===Order By / Limit === | ||
+ | *Order by : 정렬 / Limit : 값의 갯수 제한 | ||
+ | *<span style="color:DarkCyan"> order by를 쓴 후 limit를 써야 함.</span> | ||
+ | SELECT ?x ?title | ||
+ | WHERE {?x rdfs:label ?title} | ||
+ | ORDER BY desc(?title) | ||
+ | LIMIT 100 | ||
+ | |||
+ | ♣[http://lod.nl.go.kr/sparql 실습 - 국가서지 lod] | ||
+ | <책과 책의 이름, 글쓴이 정렬/제한> | ||
+ | prefix dcterms: <http://purl.org/dc/terms/> | ||
+ | prefix dc: <http://purl.org/dc/elements/1.1/> | ||
+ | select ?book ?bookTitle ?creator where { | ||
+ | ?book dcterms:title ?bookTitle. | ||
+ | ?book dc:creator ?creator . | ||
+ | } order by ?bookTitle | ||
+ | #order by desc(?bookTitle) | ||
+ | limit 50 | ||
+ | |||
+ | ===Distintct / Count / AS=== | ||
+ | *<span style="color:DarkCyan">sql에서의 기능과 같음</span> | ||
+ | *distinct : 중복값 제거 | ||
+ | *count : 갯수 세기 | ||
+ | *AS : 이름 짓기 | ||
+ | |||
+ | ♣[http://lod.nl.go.kr/sparql 실습 - 국가서지 lod] | ||
+ | <박완서가 지은 책, 중복값 제거> | ||
+ | prefix dcterms: <http://purl.org/dc/terms/> | ||
+ | prefix dc: <http://purl.org/dc/elements/1.1/> | ||
+ | select distinct ?bookTitle | ||
+ | where { ?book dc:creator "박완서". | ||
+ | ?book dcterms:title ?bookTitle | ||
+ | } | ||
+ | |||
+ | ♣[http://lod.nl.go.kr/sparql 실습 - 국가서지 lod] | ||
+ | <박완서가 지은 책, 갯수 세기> | ||
+ | prefix dcterms: <http://purl.org/dc/terms/> | ||
+ | prefix dc: <http://purl.org/dc/elements/1.1/> | ||
+ | select count(?book) | ||
+ | where { ?book dc:creator "박완서". | ||
+ | } | ||
+ | |||
+ | ♣[http://lod.nl.go.kr/sparql 실습 - 국가서지 lod] | ||
+ | <박완서가 지은 책, 갯수에 이름 붙이기> | ||
+ | prefix dcterms: <http://purl.org/dc/terms/> | ||
+ | prefix dc: <http://purl.org/dc/elements/1.1/> | ||
+ | select (count(?book) as ?howMany) | ||
+ | where { ?book dc:creator "박완서". | ||
+ | } | ||
+ | |||
+ | ===Optional=== | ||
+ | *추가사항(조건에 걸리면 보여주고, 걸리지 않으면 빈칸으로 보여줌 / 아님 말고) | ||
+ | WHERE { OPTIONAL { ?A prefix:title_ZH ?title_Z}} | ||
+ | |||
+ | ♣[http://lod.nl.go.kr/sparql 실습 - 국가서지 lod] | ||
+ | <책의 제목과 부제, (부제는 있으면 보여주고 아님 말고)> | ||
+ | prefix nlon: <http://lod.nl.go.kr/ontology/> | ||
+ | select * | ||
+ | where { | ||
+ | ?book dcterms:title ?bookTitle1. | ||
+ | optional {?book nlon:remainderOfTitle ?bookTitle2} | ||
+ | } | ||
+ | |||
+ | ===Filter=== | ||
+ | *상세 조건문 | ||
+ | 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> | ||
+ | |||
+ | ♣[http://lod.nl.go.kr/sparql 실습 - 국가서지 lod] | ||
+ | <제목에 '노래'가 들어가는 책> | ||
+ | prefix dcterms: <http://purl.org/dc/terms/> | ||
+ | select * | ||
+ | where { | ||
+ | ?book dcterms:title ?bookTitle. | ||
+ | filter regex( ?bookTitle, "(노래)+") | ||
+ | } | ||
+ | ===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" ) | ||
+ | |- | ||
+ | |&& || and || | ||
+ | |- | ||
+ | |<nowiki>||</nowiki> || or || | ||
+ | |} |
2019년 2월 20일 (수) 21:54 기준 최신판
목차
Linked Open Data
- 참고자료 : 알기 쉬운 Linked Open Data - 한국정보화진흥원
- Linked Open Data = Linked Data + Open Data
- Linked Data : html, RDFS와 같은 웹 표준 기술을 이용하여, 서로 연결될 수 있는 데이터
- Open Data : 누구나 이용할 수 있는 개방된 데이터
Linked Open Data의 구축 원칙
- Linked Open Data의 구현 환경 : 시맨틱 웹(인터넷) 환경
- URL(웹 주소)를 id(식별자)로 사용
- Linked Open Data의 표현방식 : RDF(주어-서술어-목적어)
SPARQL
- Simple Protocol and RDF Query Language
- RDF 형태의 웹데이터 사용을 위한 검색(질의) 언어
SPARQL 문법
(prefix) SELCET 변수 WHERE { 조건 }
Prefix
검색에서 사용할 온톨로지의 축약형태를 명시해주는 부분.
PREFIX ekc: <http://dh.aks.ac.kr/ontologies/ekc#> PREFIX ekci: <http://dh.aks.ac.kr/iri/ekc#> PREFIX owl: <http://www.w3.org/2002/07/owl#> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> PREFIX xml: <http://www.w3.org/XML/1998/namespace> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX dcterms: <http://purl.org/dc/terms#> PREFIX foaf: <http://xmlns.com/foaf/0.1/> PREFIX dc: <http://purl.org/dc/elements/1.1#> PREFIX edm: <http://www.europeana.eu/schemas/edm#>
prefix를 사용하지 않고 url주소 전체를 이용해 검색하는 것도 가능.
dc:creator -> <http://purl.org/dc/elements/1.1#creator>
기본 형태
SELECT ?A(변수) ?B(변수) WHERE { ?A(변수) Prefix:relation ?B(변수) . }
- ? : 변수의 앞에 붙임.(변수임을 표시)
- ; : 특정 변수에 조건을 추가할 때 (and)
- . : 기존에 선언된 변수와 관계 없이 새로운 개체나 조건을 명시할 때(end)
- # : comment (주석)
♣실습 - 국가서지 lod <책과 책의 이름, 글쓴이>
prefix dcterms: <http://purl.org/dc/terms/> prefix dc: <http://purl.org/dc/elements/1.1/> select ?book ?bookTitle ?creator where { ?book dcterms:title ?bookTitle. ?book dc:creator ?creator. } limit 50
Order By / Limit
- Order by : 정렬 / Limit : 값의 갯수 제한
- order by를 쓴 후 limit를 써야 함.
SELECT ?x ?title WHERE {?x rdfs:label ?title} ORDER BY desc(?title) LIMIT 100
♣실습 - 국가서지 lod <책과 책의 이름, 글쓴이 정렬/제한>
prefix dcterms: <http://purl.org/dc/terms/> prefix dc: <http://purl.org/dc/elements/1.1/> select ?book ?bookTitle ?creator where { ?book dcterms:title ?bookTitle. ?book dc:creator ?creator . } order by ?bookTitle #order by desc(?bookTitle) limit 50
Distintct / Count / AS
- sql에서의 기능과 같음
- distinct : 중복값 제거
- count : 갯수 세기
- AS : 이름 짓기
♣실습 - 국가서지 lod <박완서가 지은 책, 중복값 제거>
prefix dcterms: <http://purl.org/dc/terms/> prefix dc: <http://purl.org/dc/elements/1.1/> select distinct ?bookTitle where { ?book dc:creator "박완서". ?book dcterms:title ?bookTitle }
♣실습 - 국가서지 lod <박완서가 지은 책, 갯수 세기>
prefix dcterms: <http://purl.org/dc/terms/> prefix dc: <http://purl.org/dc/elements/1.1/> select count(?book) where { ?book dc:creator "박완서". }
♣실습 - 국가서지 lod <박완서가 지은 책, 갯수에 이름 붙이기>
prefix dcterms: <http://purl.org/dc/terms/> prefix dc: <http://purl.org/dc/elements/1.1/> select (count(?book) as ?howMany) where { ?book dc:creator "박완서". }
Optional
- 추가사항(조건에 걸리면 보여주고, 걸리지 않으면 빈칸으로 보여줌 / 아님 말고)
WHERE { OPTIONAL { ?A prefix:title_ZH ?title_Z}}
♣실습 - 국가서지 lod <책의 제목과 부제, (부제는 있으면 보여주고 아님 말고)>
prefix nlon: <http://lod.nl.go.kr/ontology/> select * where { ?book dcterms:title ?bookTitle1. optional {?book nlon:remainderOfTitle ?bookTitle2} }
Filter
- 상세 조건문
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
♣실습 - 국가서지 lod <제목에 '노래'가 들어가는 책>
prefix dcterms: <http://purl.org/dc/terms/> select * where { ?book dcterms:title ?bookTitle. filter regex( ?bookTitle, "(노래)+") }
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" ) |
&& | and | |
|| | or |