SPARQL

정의: SPARQL Protocol and RDF Query Language. RDF 데이터를 검색하고 조작하기 위한 W3C 표준 쿼리 언어. SQL의 그래프 버전.

기본 구조

SELECT 쿼리

PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX ex: <http://example.org/>
 
SELECT ?person ?name
WHERE {
  ?person a foaf:Person ;
          foaf:name ?name ;
          foaf:knows ?other .
}

구성 요소:

  1. PREFIX — 네임스페이스 별칭 정의
  2. SELECT — 반환할 변수 지정
  3. WHERE — 트리플 패턴으로 쿼리 조건 정의

트리플 패턴

?person foaf:name ?name .
  • ?person — 변수 (검색할 대상)
  • foaf:name — 술어 (속성)
  • ?name — 값 변수

SPARQL의 주요 기능

1. 기본 검색

SELECT ?name ?age
WHERE {
  ?person foaf:name ?name ;
          foaf:age ?age .
}

2. 필터 조건

SELECT ?name
WHERE {
  ?person foaf:name ?name ;
          foaf:age ?age .
  FILTER (?age > 25)
}

3. 선택적 패턴 (Optional)

SELECT ?name ?email
WHERE {
  ?person foaf:name ?name .
  OPTIONAL { ?person foaf:mbox ?email . }
}

4. UNION (또는 조건)

SELECT ?name
WHERE {
  {
    ?person foaf:name ?name ;
            a foaf:Person .
  }
  UNION
  {
    ?person foaf:name ?name ;
            a foaf:Company .
  }
}

5. COUNT, GROUP BY

SELECT ?company (COUNT(?person) AS ?count)
WHERE {
  ?person ex:worksAt ?company .
}
GROUP BY ?company

6. CONSTRUCT (결과를 새로운 RDF로 생성)

PREFIX foaf: <http://xmlns.com/foaf/0.1/>
 
CONSTRUCT {
  ?person foaf:knows ?friend .
}
WHERE {
  ?person foaf:knows ?friend .
  ?friend foaf:age ?age .
  FILTER (?age > 30)
}

SPARQL vs Cypher

항목SPARQLCypher
대상RDF 데이터LPG (Neo4j)
표준화W3C 표준Neo4j 독점
문법선언형 (SQL스러움)선언형 + 시각적
복잡한 쿼리번거로움간결함
성능느림 (복잡 쿼리)빠름
학습곡선가파름완만함

쿼리 비교: “Person과 Company의 관계 찾기”

SPARQL:

PREFIX ex: <http://example.org/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
 
SELECT ?person ?company
WHERE {
  ?person a foaf:Person ;
          ex:worksAt ?company .
  ?company a ex:Company .
}

Cypher:

MATCH (p:Person)-[:WORKS_AT]->(c:Company)
RETURN p.name, c.name

→ Cypher가 더 직관적이고 간결함

SPARQL 쿼리 형식

형식용도
SELECT변수 선택 및 반환 (결과: 행과 열)
CONSTRUCT새로운 RDF 그래프 생성 (결과: RDF)
DESCRIBE리소스의 모든 정보 조회 (결과: RDF)
ASK참/거짓 쿼리 (결과: boolean)

SPARQL의 장점

W3C 표준 — 국제 표준으로 광범위 지원 ✅ 상호운용성 — RDF 저장소 간 이식성 높음 ✅ 강력한 표현 — 복잡한 의미 검색 가능 ✅ 의미론적 정밀 — 트리플 기반 정확한 쿼리

SPARQL의 단점

복잡한 문법 — SQL보다 배우기 어려움 ❌ 성능 — 복잡한 쿼리에서 느림 ❌ 도구 생태 — Cypher보다 도구가 적음 ❌ 실무 채용 — 주로 학술·표준화 도메인

실제 예시: 지식그래프 검색

영화 데이터 (SPARQL)

PREFIX dbprop: <http://dbpedia.org/property/>
PREFIX dbo: <http://dbpedia.org/ontology/>
 
SELECT ?movie ?director
WHERE {
  ?movie a dbo:Film ;
         dbo:director ?director ;
         dbprop:releaseDate ?date .
  FILTER (YEAR(?date) > 2020)
}
LIMIT 10

동일 쿼리 (Cypher, Neo4j)

MATCH (movie:Film)-[:DIRECTED_BY]->(director:Person)
WHERE movie.releaseDate.year > 2020
RETURN movie.title, director.name
LIMIT 10

언제 SPARQL을 사용할까?

상황SPARQLCypher
RDF 데이터 저장소✅ 필수❌ 불가
의미 표준화 필수
빠른 쿼리 필요
대규모 그래프
학술/표준화 도메인

관련 개념


출처: rdf-lpg — RDF vs LPG 비교 (SPARQL vs Cypher 포함)