한국관광공사의 데이터셋은 SPARQL Endpoint (https://data.visitkorea.or.kr/sparql) 을 통해서 탐색하거나
접근, 다운로드(JSON, RDF)할 수 있습니다.
SPARQL Endpoint 이용하기
시작하기 전에 알아야 할 기본 개념
관광공사의 데이터는 트리플(Triple)로 표현되어 있습니다.
예를 들어, 치악산은 다음과 같이 표현됩니다.
SPARQL 질의하기
네임스페이스 선택
네임스페이스는 자원(resources)을 식별하기 위한 것으로 “PREFIX kto: <https://data.visitkorea.or.kr/ontology/>”와 같이 표현합니다.
K-TDM 모델에서 클래스와 속성은 https://data.visitkorea.or.kr/ontology/,https://data.visitkorea.or.kr/property/, 데이터는 https://data.visitkorea.or.kr/resource/ 로 표현하고 있습니다.
따라서, SPARQL질의 작성 시 PREFIX는 다음과 같이 작성합니다.
PREFIX ktop: <https://data.visitkorea.or.kr/property/>
PREFIX ids: <https://data.visitkorea.or.kr/resource/>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
변수 정의
변수(variables)는 질의 패턴 중 얻고자 하는 것(things)으로 다음과 같이 작성 합니다.
WHERE {
?resource rdf:type kto:Place ;
foaf:name ?place_name ;
kto:category ?category.
?category skos:prefLabel ?categoryName.
}
WHERE에서 모든 변수에 대한 값을 가져오고 싶을 경우는 SELECT 절에 다음과 같이 정의합니다.
만약, 원하는 변수의 값만 가져오고 싶을 경우는 WHERE절 내에 정의된 특정 변수명을 적어줍니다.
여기서, WHERE 내에 정의된 “?resource rdf:type kto:Place“는 리소스(resouces)에 대한 결과를 Place(장소)로 제약하는 예입니다.
LIMIT 정의
LIMIT는 질의 결과에 대한 반환을 제약하는 것으로 다음과 같이 정의합니다.
WHERE {
?resource rdf:type kto:Place ;
foaf:name ?place_name ;
kto:category ?category.
?category skos:prefLabel ?categoryName.
} LIMIT 100
좀더 복잡한 질의 정의
SPARQL1.1에는 다양한 질의함수를 제공합니다. 질의결과에 대한 개수, 그룹, 정렬, 문자열 처리 등 목적에 맞게 이용할 수 있습니다. (COUNT, GORUP BY, ORDER BY, BIND, FILTER) 다음은 장소의 이름으로 결과를 정렬하기 위한 예입니다.
WHERE {
?resource rdf:type kto:Place ;
foaf:name ?place_name ;
kto:category ?category.
?category skos:prefLabel ?categoryName.
}
ORDER BY asc(?place_name)
LIMIT 100
SPARQL 더 알아보기
SPARQL 구문에 대한 자세한 사항은 아래 사이트를 방문하시면 많은 정보를 얻을 수 있습니다.
- How To SPARQL : http://rdf.myexperiment.org/howtosparql
- SPARQL Tutorial : https://en.wikibooks.org/wiki/XQuery/SPARQL_Tutorial
- SPARQL Query Language for RDF : http://www.w3.org/TR/rdf-sparql-query/