"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
    1. Linked Data : html, RDFS와 같은 웹 표준 기술을 이용하여, 서로 연결될 수 있는 데이터
    2. Open Data : 누구나 이용할 수 있는 개방된 데이터

Linked Open Data의 구축 원칙

  • Linked Open Data의 구현 환경 : 시맨틱 웹(인터넷) 환경
    1. 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