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 .
}구성 요소:
- PREFIX — 네임스페이스 별칭 정의
- SELECT — 반환할 변수 지정
- 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 ?company6. 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
| 항목 | SPARQL | Cypher |
|---|---|---|
| 대상 | 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을 사용할까?
| 상황 | SPARQL | Cypher |
|---|---|---|
| RDF 데이터 저장소 | ✅ 필수 | ❌ 불가 |
| 의미 표준화 필수 | ✅ | ❌ |
| 빠른 쿼리 필요 | ❌ | ✅ |
| 대규모 그래프 | ❌ | ✅ |
| 학술/표준화 도메인 | ✅ | ❌ |
관련 개념
- RDF — SPARQL의 데이터 모델
- Cypher Query Language — SPARQL의 경쟁 언어 (LPG용)
- Ontology — SPARQL 쿼리 설계의 기초
- SemanticWeb — SPARQL이 지원하는 비전
- Knowledge Graph — SPARQL의 응용
출처: rdf-lpg — RDF vs LPG 비교 (SPARQL vs Cypher 포함)