TrendHackergeeknews intel
live
← 블로그 목록
TECH NOTE · 2026-06-29

RDF·OWL·SPARQL 완전 정복: 온톨로지를 웹에 적고 추론하고 질의하는 시맨틱 웹 3대 표준

RDFOWLSPARQLSemantic WebKnowledge Graph

온톨로지를 웹에 적는 세 가지 표준

앞선 글에서 우리는 ontology가 철학의 존재론에서 출발해 "공유된 개념화에 대한 형식적·명시적 명세"라는 컴퓨터과학 용어로 전유되는 과정을 따라갔습니다. 그렇다면 그 "형식적·명시적 명세"를 실제로 어떤 언어로 적는가 하는 물음이 남습니다. 머릿속 개념화를 기계가 읽고 추론할 수 있게 적어 두려면 약속된 표기법이 필요하기 때문입니다.

이 물음에 대한 가장 표준적인 답이 W3C가 정립한 시맨틱 웹(Semantic Web) 기술 스택입니다. 그 핵심에 세 가지 표준이 있습니다.

  • RDF(Resource Description Framework): 데이터를 적는 데이터 모델. 무엇이 무엇과 어떤 관계인지를 그래프로 표현합니다.
  • OWL(Web Ontology Language): 그 데이터에 의미와 논리를 부여하는 온톨로지 언어. 클래스·속성의 규칙과 제약을 적어 기계가 추론(inference)하게 합니다.
  • SPARQL(SPARQL Protocol and RDF Query Language): 그렇게 쌓인 그래프에 질문을 던지는 질의 언어. 관계형 데이터베이스의 SQL에 해당합니다.

세 표준은 역할이 또렷이 나뉩니다. RDF가 "무엇을 적는가", OWL이 "그것이 무엇을 의미하는가", SPARQL이 "그것에 무엇을 묻는가"를 담당합니다. 이 글은 셋을 차례로 풀어 보고, 마지막에 이들이 하나의 스택으로 어떻게 맞물리는지를 정리합니다.

RDF: 세상을 트리플로 적는다

RDF의 발상은 단순합니다. 세상의 모든 사실을 주어(subject) — 술어(predicate) — 목적어(object) 세 부분으로 된 문장, 즉 트리플(triple)로 적자는 것입니다. "고흐가 별이 빛나는 밤을 그렸다"라는 사실은 이렇게 적힙니다.

<...gogh>  <...painted>  <...starry-night> .

각 트리플은 점(.)으로 끝나고, 주어와 목적어는 노드, 술어는 그 둘을 잇는 방향 있는 화살표가 됩니다. 트리플을 여러 개 모으면 자연스럽게 방향 그래프(directed graph)가 만들어집니다. RDF가 지식 그래프(Knowledge Graph)의 토대 언어로 불리는 이유입니다.

RDF를 단순한 표가 아니라 웹의 데이터 모델로 만드는 핵심은 식별자에 있습니다. RDF에서 자원(resource)은 전역적으로 유일한 IRI(URI의 국제화 버전)로 식별됩니다. '고흐'를 가리키는 IRI는 전 세계 어디서나 같은 대상을 가리키므로, 서로 다른 출처의 데이터가 같은 IRI를 공유하면 별도 작업 없이 그래프가 이어집니다. 이것이 데이터베이스의 지역적 기본 키와 결정적으로 다른 점입니다.

트리플의 목적어 자리에는 다른 자원(IRI) 대신 리터럴(literal) — 문자열·숫자·날짜 같은 구체적인 값 — 이 올 수도 있습니다. 사람을 가리키는 IRI에 이름이라는 술어로 "빈센트 반 고흐" 라는 문자열 리터럴을 매다는 식입니다.

같은 RDF 그래프는 여러 직렬화(serialization) 형식으로 적을 수 있습니다. 사람이 읽기 쉬운 Turtle, XML 기반의 RDF/XML, 그리고 웹 개발과 친한 JSON-LD가 대표적입니다. 형식은 표기일 뿐이고, 어떤 형식으로 적든 가리키는 그래프는 동일합니다. 아래는 Turtle로 적은 짧은 예입니다. 접두어(prefix)로 긴 IRI를 줄이고, 세미콜론(;)으로 같은 주어에 대한 여러 술어를 이어 적었습니다.

@prefix ex: <http://example.org/> .

ex:gogh  ex:name     "빈센트 반 고흐" ;
         ex:painted   ex:starryNight .

RDFS: 어휘에 최소한의 뼈대를 더하다

RDF 자체는 "트리플을 적는 법"만 정할 뿐, ex:painted가 무슨 뜻인지, ex:gogh가 어떤 종류의 것인지는 모릅니다. 그래서 RDF에는 얇은 스키마 층인 RDFS(RDF Schema)가 함께 옵니다. RDFS는 몇 가지 기본 어휘를 제공합니다.

  • 클래스 선언과 소속: 어떤 자원이 특정 클래스(class)의 인스턴스임을 적습니다(rdf:type).
  • 계층: 한 클래스가 다른 클래스의 하위임을 적습니다(rdfs:subClassOf) — 예: 화가는 사람의 하위 클래스.
  • 속성의 정의역·치역: 어떤 술어의 주어가 어떤 클래스여야 하고(rdfs:domain), 목적어가 어떤 클래스여야 하는지(rdfs:range)를 적습니다.

RDFS만으로도 약한 추론이 가능합니다. "화가는 사람의 하위 클래스"이고 "고흐는 화가"라면, 명시하지 않아도 "고흐는 사람"이 따라 나옵니다. 다만 RDFS의 표현력은 제한적이어서, 더 정교한 규칙과 제약을 적으려면 OWL이 필요합니다.

OWL: 그래프에 논리를 부여한다

OWL은 RDF/RDFS 위에 세워진, 훨씬 풍부한 온톨로지 언어입니다. RDFS가 클래스와 속성의 기초 골격만 그린다면, OWL은 그 위에 형식 논리를 얹어 기계가 복잡한 함의를 추론하게 합니다. OWL의 이론적 토대는 기술 논리(Description Logics)로, 표현력과 계산 가능성 사이의 균형이 수학적으로 잘 연구된 논리 체계입니다.

OWL이 RDFS를 넘어 제공하는 것들을 추려 보면 이렇습니다.

  • 클래스 표현식(class expression): 기존 클래스들을 교집합·합집합·여집합으로 조합해 새 클래스를 정의합니다. 예를 들어 "사람이면서 미성년이 아닌 것"을 하나의 클래스로 적을 수 있습니다.
  • 속성 특성(property characteristics): 속성이 이행적(transitive)인지(예: '조상'은 조상의 조상도 조상), 대칭적(symmetric)인지(예: '배우자'), 함수적(functional)인지(값이 하나뿐), 혹은 다른 속성의 역(inverse)인지를 선언합니다.
  • 제약(restriction): 어떤 클래스의 인스턴스가 특정 속성에 대해 가져야 하는 조건을 적습니다. 예: "부모는 자식 속성을 최소 1개 가진다"는 카디널리티 제약, "채식 피자의 토핑은 모두 채소여야 한다"는 값 제약.
  • 개체·클래스 동일성: 두 IRI가 같은 개체를 가리킴(owl:sameAs), 두 클래스가 동등함 (owl:equivalentClass)을 선언합니다. 서로 다른 출처가 같은 대상에 다른 IRI를 붙였을 때 이들을 잇는 데 핵심적입니다.

이런 선언들이 모이면 추론기(reasoner)가 명시되지 않은 사실을 도출합니다. '배우자'가 대칭적이라고 선언해 두면 "A의 배우자는 B"라는 한 줄에서 "B의 배우자는 A"가 자동으로 따라 나오고, 클래스 정의들로부터 어떤 개체가 어느 클래스에 속하는지를 분류(classification) 하거나, 정의가 서로 모순되는지(consistency)를 검사할 수 있습니다.

OWL을 이해할 때 빼놓을 수 없는 전제가 열린 세계 가정(Open World Assumption, OWA)입니다. 관계형 데이터베이스는 닫힌 세계 가정(Closed World Assumption)을 따라, 테이블에 없는 사실은 거짓으로 간주합니다. 반면 OWL은 적혀 있지 않다고 해서 거짓인 것은 아니다 — 단지 아직 모를 뿐 — 라고 봅니다. 웹처럼 정보가 본질적으로 불완전하고 분산된 환경을 모델링하기 위한 선택입니다. 그래서 OWL에서 "X는 자식이 없다"는 데이터의 부재로 결론 내릴 수 없고, 반드시 명시적으로 단언해야 합니다.

표현력이 클수록 추론 비용도 커지므로, OWL 2는 용도에 맞춰 표현력을 제한한 프로파일 (profile)을 제공합니다. 대규모 클래스 계층에 최적화된 OWL 2 EL, 데이터베이스 질의 재작성에 맞는 OWL 2 QL, 규칙 기반 추론에 맞는 OWL 2 RL이 대표적입니다. 각 프로파일은 일부 표현력을 포기하는 대신 추론이 다항 시간 안에 끝남을 보장합니다.

SPARQL: 그래프에 질문을 던진다

RDF로 그래프를 쌓고 OWL로 의미를 부여했다면, 이제 그 그래프에 질문을 던질 차례입니다. 그 표준 질의 언어가 SPARQL입니다. 관계형 세계의 SQL이 테이블을 질의하듯, SPARQL은 트리플 그래프를 질의합니다.

SPARQL의 핵심 발상은 그래프 패턴 매칭(graph pattern matching)입니다. 찾고 싶은 부분을 일부 자리를 비워 둔 트리플 — 즉 물음표로 시작하는 변수를 끼운 트리플 — 로 그려 두면, SPARQL 엔진이 그 패턴에 들어맞는 실제 트리플을 그래프에서 찾아 변수에 값을 채워 줍니다. "고흐가 그린 그림은 무엇인가"라는 질문은 이렇게 적힙니다.

PREFIX ex: <http://example.org/>

SELECT ?work
WHERE {
  ex:gogh ex:painted ?work .
}

WHERE 절 안의 트리플 패턴에서 ?work 자리에 들어맞는 모든 목적어가 결과로 반환됩니다. 여러 트리플 패턴을 함께 쓰면(이를 기본 그래프 패턴, Basic Graph Pattern이라 합니다) 변수들이 서로 연결되며 더 복잡한 질문을 표현합니다.

SPARQL은 네 가지 질의 형식(query form)을 제공합니다.

  • SELECT: 변수에 묶인 값들을 표 형태로 반환. 가장 흔하게 쓰입니다.
  • ASK: 패턴에 맞는 결과가 존재하는지 참/거짓으로만 답합니다.
  • CONSTRUCT: 질의 결과로 새로운 RDF 그래프를 만들어 반환합니다. 데이터 변환에 유용합니다.
  • DESCRIBE: 특정 자원에 관한 트리플들을 한데 모아 반환합니다.

여기에 SQL과 닮은 조절 장치들이 더해집니다. 조건으로 결과를 거르는 FILTER, 있으면 가져오고 없어도 결과를 버리지 않는 OPTIONAL(SQL의 외부 조인에 해당), 두 패턴의 합집합을 구하는 UNION, 그리고 ORDER BY·LIMIT·집계 같은 표현이 그것입니다.

SPARQL을 단순한 질의 언어 이상으로 만드는 것은 그 이름의 첫 글자, 프로토콜(Protocol) 입니다. SPARQL 질의는 SPARQL 엔드포인트(endpoint)라 불리는 HTTP 서비스로 보내집니다. DBpedia, Wikidata 같은 거대한 공개 지식 그래프는 모두 SPARQL 엔드포인트를 제공합니다. 나아가 SPARQL 1.1은 한 질의 안에서 여러 엔드포인트에 동시에 질문을 분산하는 연합 질의 (federated query, SERVICE 키워드)와, 그래프에 트리플을 넣고 빼는 갱신(SPARQL Update) 까지 표준화했습니다. 흩어진 데이터를 IRI로 잇고 한 질의로 가로지르는 일이 가능해지는 지점입니다.

세 표준이 맞물리는 방식

이제 셋을 하나의 그림으로 합쳐 보겠습니다. 시맨틱 웹 스택에서 이들은 층층이 쌓입니다.

표준층위역할비유
RDF데이터 모델사실을 트리플 그래프로 적는다데이터(행)
RDFS / OWL온톨로지·논리클래스·속성의 의미와 규칙을 적어 추론하게 한다스키마 + 제약 + 추론
SPARQL질의그래프에 질문을 던져 답을 얻는다SQL

흐름은 이렇습니다. 먼저 RDF로 세상의 사실을 트리플 그래프로 적습니다. 그 위에 OWL로 온톨로지 — 어떤 클래스들이 있고, 속성이 어떤 성질을 가지며, 무엇이 무엇을 함의하는지 — 를 선언합니다. 추론기는 OWL 선언을 적용해 명시되지 않은 트리플까지 그래프에 채워 넣습니다. 마지막으로 SPARQL이 그 (추론으로 확장된) 그래프에 질의해 답을 끌어냅니다. 같은 IRI를 공유하는 한, 이 모든 과정은 한 출처의 데이터에 갇히지 않고 웹 전체의 그래프로 자연스럽게 확장됩니다.

여기서 앞 글과의 연결이 또렷해집니다. 철학의 존재론이 "무엇이 존재하는가"를 묻고, 컴퓨터과학의 온톨로지가 "무엇을 존재한다고 약속할 것인가"를 설계하는 일이라면, RDF·OWL·SPARQL은 그 약속을 웹에서 실제로 적고·추론하고·질의하기 위한 구체적인 표기 체계입니다. OWL로 클래스와 속성을 선언하는 행위는 곧 "이 도메인에서 무엇이 존재하며 어떻게 관계 맺는지"를 형식적으로 확정하는 것 — 콰인의 표현을 빌리면 그 모델의 존재론적 개입을 명문화하는 것입니다.

RECAP

지금까지의 내용을 정리합니다.

  • RDF는 세상을 주어-술어-목적어 트리플로 적는 그래프 데이터 모델입니다. 자원을 전역 IRI로 식별하기에, 서로 다른 출처의 데이터가 같은 IRI를 공유하면 그래프가 이어집니다. Turtle·RDF/XML·JSON-LD 등으로 직렬화되며, 얇은 스키마 층 RDFS가 클래스·계층·정의역을 더합니다.
  • OWL은 RDF/RDFS 위에 기술 논리(Description Logics)를 얹어, 클래스 표현식·속성 특성·제약·동일성을 선언하고 추론기로 함의를 도출합니다. 열린 세계 가정을 따르며, 표현력과 계산 비용의 균형을 위해 EL·QL·RL 프로파일을 제공합니다.
  • SPARQL은 변수를 끼운 그래프 패턴 매칭으로 RDF 그래프를 질의하는 표준 언어이자 프로토콜입니다. SELECT·ASK·CONSTRUCT·DESCRIBE 네 형식과 FILTER·OPTIONAL·UNION, 그리고 엔드포인트·연합 질의·갱신을 제공합니다.

세 표준은 각각 데이터·의미·질의를 맡아, 흩어진 지식을 IRI로 잇고 추론으로 확장하며 한 질의로 가로지르는 시맨틱 웹의 토대를 이룹니다. 이 블로그가 다뤄 온 지식 그래프와 온톨로지 엔지니어링의 많은 논의가 바로 이 스택 위에서, 혹은 이 스택과의 대비 속에서 이루어집니다.