본문 바로가기
역량 UP!/Knowledge Graph

4. SPARQL이란?

by 태하팍 2024. 2. 29.
반응형


스파클- SPARQL : Simple Protocol and RDF Query Language

2008년 웹 표준화 기구인 W3C(월드와이드 웹 컨소시엄)에서 제정하였습니다.
관계형 데이터베이스(RDB)에서 데이터 검색과 질의를 위해 구조화 질의 언어(SQL)가 사용되는 것과 같이
웹 환경의 RDF 데이터베이스에서는 SPARQL이 사용 됩니다.
다시 말해 RDF(Resource Description Framework)로 표현된 지식 그래프에 대한 쿼리 언어입니다. 
SPARQL은 SQL과 유사한 구조를 가지고 있으며, RDF 트리에서 데이터를 검색하고 조작할 수 있습니다.


SPARQL의 기본구조

아래와 같은 기본구조로 되어있습니다.
PREFIX
(SELECT, CONSTRUCT, DESCRIBE, ASK)

  - SELECT:  RDF 데이터에서 특정 속성 또는 관계의 값을 반환합니다.
  - CONSTRUCT: 새로운 RDF 트리를 생성합니다.
  - DESCRIBE: 특정 엔티티에 대한 정보를 반환합니다.
  - ASK: 특정 조건을 만족하는지 여부를 확인합니다.

WHERE{

}


PRIFIX

SPARQL 예제를 살펴보면
uri는 일반적으로 긴 문자열로 구성되어있기 때문에 사용하기 불편하여
prefix를 사용하여 uri을 간결하게 표현 합니다.

SELECT ?name
FROM <http://example.com/people>
WHERE {
  ?person <http://example.com/name> ?name .
}

prefix를 사용하면 다음과 같이 간결하게 표현할 수 있습니다.
PREFIX : <http://example.com/>

SELECT ?name
FROM :people
WHERE {
  ?person :name ?name .
}

위 쿼리를 살펴보면 :people prefix를 사용하여 <http://example.com/people> uri를 대체 하였습니다.
또한 <http://example.com/name>를 :name으로 사용!


SELECT

SELECT는 SQL처럼 RDF데이터에서 특정 정보를 가져오는 쿼리 입니다.
SELECT, FROM, WHERE 3가지 구성요소로 구성됩니다.

SQL과 동일하게
SELECT :  가져올 데이터를 지정
FROM : 데이터를 조회할 소스를 지정
WHERE : 조회할 데이터를 필터할수 있는 조건을 지정 합니다.

예제를 살펴보면
변수는 ?를 변수명 앞에 붙여서 선언 합니다. 즉, SELECT절에서는 name을 가져오겠다라는 것이며
FROM <http://example.com/people>에서 가져오겠다는 뜻 입니다.
어떤조건? 바로 WHERE조건에서 필터된 name을 가져오겠다!
맨 뒤에 . 은 끝을 나타내는 구분 기호 입니다.

SELECT ?name
FROM <http://example.com/people>
WHERE {
  ?person <http://example.com/name> ?name .
}

FROM이 없는 경우는 기본적으로 RDF그래프 전체에서 데이터를 조회합니다.

SELECT ?name
WHERE {
  ?person <http://example.com/name> ?name .
}

다시 돌아와서 WHERE절을 살펴보면 크게 3가지로 구성됩니다.
?person
<http://example.com/name>
?name

이 3가지를 이해하려면 RDF에 대해서 알아야 합니다.
RDF는 graph를 구성하는 최소 단위인 triple구조를 가지고 있습니다.
triple구조는 subject(주어), predicate(서술어), object(목적어) 입니다.
SPO라고 부르기도 합니다.
subject와 object는 리소스로 보면 되는데 predicate는 properties 입니다.
여기에서 속성이라는 개념이 나옵니다.
속성은 S와 O를 연결하는 관계를 나타냅니다.

WHERE조건에 있는 S : ?person과 O : ?name을 연결하는 속성!

동작 순서를 살펴보면
1. ?person변수에 조회할 데이터의 subject(S)를 할당 합니다.
2. <http://example.com/name> uri를 통해 name속성을 찾습니다.
3. ?name변수에 name 속성값을 할당 합니다.
4. ?person변수와 ?name변수를 사용하여 조회할 데이터를 필터링 합니다.
따라서 ?person변수는 조회할 데이터의 Subject를 나타내며 <http://example.com/name>속성을 가진 Subject이며
<http://example.com/name> 속성을 가진 모든 사람의 이름을 조회하는 쿼리 입니다.

tip) RDF 데이터는 S, P, O의 3가지 요소로 구성!
주어(S)는 데이터의 식별자를 나타냅니다. 속성(P)은 주체와 객체를 연결하는 관계를 나타냅니다.
객체 속성의 값을 나타냅니다.

반응형