G·Graph Daily Lab
DAY 38 / 100
내 학습 기록
DAY 38개념·실험RDF와 SPARQL

SPARQL로 패턴 찾기

RDF 그래프에 질문하는 표준 언어 SPARQL에서, 변수가 든 트리플 패턴으로 값을 찾는 법을 봅니다.

약 20분조작형 실험 확인 퀴즈
A SMALL DETOUR

이번 회차, 내 속도로.

기초를 더 짚거나 궁금한 주제로 잠깐 넓혀 보세요. 최대 3단계를 거쳐 DAY 38로 돌아옵니다.

난이도·관심 주제 고르기
이번 회차는 어느 속도로 볼까요?
더 살펴볼 주제 1~2개 선택

1/2개 선택 · 새 보충·심화 수업과 본과정 다시 읽기를 선택할 수 있어요.

이렇게 다녀와요 1단계 · 약 12분

  1. 출발 · DAY 38SPARQL 기본 그래프 패턴
  2. 1. 관심 주제빈 노드·데이터타입·언어 태그추가 15 · 새 추가 수업
  3. 복귀 · DAY 38원래 회차 이어가기
  • 빈 노드·데이터타입·언어 태그 · DAY 36·37에서 트리플과 IRI를 배운 뒤, 이름 없는 대상과 값의 타입 때문에 생기는 실수를 다루러 옵니다.

선택과 경로 기록은 이 브라우저에 저장됩니다. 본과정의 회차 완료와는 별도입니다.

복귀: DAY 38 → 본과정 다음 회차: DAY 39

핵심 개념

SPARQL은 W3C가 정한 RDF 질의 언어로, 현재 널리 쓰이는 판은 SPARQL 1.1입니다. 데이터의 트리플과 같은 모양에 ?로 시작하는 변수를 넣어 질문합니다. PREFIX ex: <http://example.org/> SELECT ?p WHERE { ?p ex:worksAt ex:graphLab . }은 그래프연구실에서 일하는 대상을 모두 ?p에 묶어 돌려줍니다. 결과는 변수 값들의 표입니다.

중괄호 안에 트리플 패턴 여러 개를 마침표로 이어 쓴 것을 기본 그래프 패턴(basic graph pattern, BGP)이라고 합니다. 패턴들이 같은 변수를 쓰면 그 변수 값이 같은 것끼리만 결과로 남습니다. 곧 공통 변수가 조인 역할을 합니다. PREFIX ex: <http://example.org/> SELECT ?p WHERE { ?p ex:worksAt ?lab . ?lab ex:city "대전" . }은 ?lab으로 두 패턴을 이어 ‘대전 연구실에서 일하는 사람’을 찾습니다.

리터럴 조건은 패턴에 값을 직접 넣거나 FILTER로 씁니다. 같은 PREFIX 아래에서 SELECT ?x WHERE { ?x ex:year ?y . FILTER(?y >= 2021) }는 2021년 이후 논문만 남깁니다. 구조는 Cypher의 MATCH–WHERE와 비슷하지만, SPARQL에서는 노드의 속성도 모두 트리플이라 속성 조건도 트리플 패턴으로 씁니다.

BGP는 정확히 일치하는 트리플만 찾습니다. 한 패턴이라도 맞는 트리플이 없으면 그 해(solution)는 사라지고, 빠진 값을 허용하려면 OPTIONAL이 필요합니다. 또 술어 IRI가 다르면 뜻이 비슷해도 일치하지 않습니다. ex:worksAt으로 질의하면 schema:worksFor로 적은 데이터는 매핑 없이는 찾지 못합니다.

SPARQL은 변수가 든 트리플 패턴으로 그래프를 찾고, 공통 변수로 여러 패턴을 조인합니다.

작은 예제로 따라가기

01

데이터: minsu와 jia가 graphLab에서, harin이 langLab에서 일하고, graphLab의 city는 "대전", langLab은 "서울"입니다. 패턴 ?p ex:worksAt ?lab의 바인딩은 3개입니다.

02

패턴 ?lab ex:city "대전"의 바인딩은 ?lab=graphLab 1개입니다.

03

두 패턴을 ?lab으로 조인하면 (minsu, graphLab), (jia, graphLab) 2개의 해가 남습니다.

직접 실험해 보기

쿼리 선택지를 ‘트리플 패턴 1개 → 2개 조인 → 리터럴 필터’ 순서로 바꾸며, 패턴별 중간 바인딩 수와 최종 결과 표의 행 수를 기록하세요.

LIVE EXPERIMENT · SPARQL BGP

트리플 패턴을 공통 변수로 조인하기

PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX ex: <http://example.org/lab/>

SELECT ?p ?name
WHERE {
  ?p ex:worksAt ex:lab1 .
  ?p foaf:name ?name .
}
패턴별 바인딩 — # 을 누르면 그 패턴 혼자 맞는 트리플을 표시
#트리플 패턴단독조인 후
?p ex:worksAt ex:lab133
?p foaf:name ?name63 (?p로 조인)
결과 바인딩
?p?name
ex:minsu"민수"
ex:jia"지아"
ex:seojun"서준"
최종 결과에 쓰인 트리플
주어술어목적어
ex:minsufoaf:name"민수"
ex:minsuex:worksAtex:lab1
ex:jiafoaf:name"지아"
ex:jiaex:worksAtex:lab1
ex:seojunfoaf:name"서준"
ex:seojunex:worksAtex:lab1
ex:harinfoaf:name"하린"
ex:harinex:worksAtex:lab2
ex:doyunfoaf:name"도윤"
ex:doyunex:worksAtex:lab2
ex:yunafoaf:name"유나"
ex:yunaex:worksAtex:lab2
ex:lab1ex:city"대전"
ex:lab2ex:city"서울"

변수(?p)에 값을 묶는 것이 바인딩이다. 두 패턴이 같은 변수를 쓰면 두 바인딩의 값이 같은 것만 남는다(조인). 리터럴 "대전"을 패턴에 직접 쓰면 그 값과 정확히 같은 트리플만 맞는다.

이번에는 직접 풀어 보세요

정답을 보기 전에 계산과 이유를 적어 보세요. 해설과 비교하고 확인 표시를 남기면 완료할 수 있습니다.

문제 1
힌트 보기

worksAt, city, authored 세 패턴을 공통 변수로 잇습니다.

풀이와 비교하기

PREFIX ex: <http://example.org/> SELECT ?p ?paper WHERE { ?p ex:worksAt ?lab . ?lab ex:city "대전" . ?p ex:authored ?paper . }입니다. 결과는 (ex:minsu, ex:p2)와 (ex:jia, ex:p2) 2행입니다.

풀이와 확인 표시는 이 브라우저에 저장됩니다.

YOUR NOTES

오늘 이해한 것과 다시 볼 것

계산이 달라진 이유, 헷갈린 개념, 다음에 확인할 질문을 남겨 보세요.

메모는 이 브라우저에 저장됩니다. 홈에서 전체 기록을 내려받을 수 있습니다.

오늘의 이해 확인

SPARQL 기본 그래프 패턴에서 두 트리플 패턴이 같은 변수 ?lab을 쓰면 어떻게 되나요?

완료 조건: 확인 퀴즈 정답 · / 직접 풀기 0/1

FURTHER READING

더 깊이 읽기

예제와 실험 데이터는 이 과정을 위해 만든 것입니다. 원문은 선택 자료이며, 강의와 직접 풀기만으로도 다음 회차를 이어갈 수 있습니다.

SPARQL 1.1 Query LanguageW3C

이 자료는 개념 학습용입니다. 실제 데이터베이스·라이브러리·플랫폼의 동작과 설정은 제품과 버전마다 다를 수 있습니다.