logo

RDF

RDF란 무엇입니까

RDF(Resource Description Framework)는 자원과 자원 사이의 관계를 표현하기 위한 웹 표준입니다. RDF는 데이터를 주어, 술어, 목적어로 구성된 트리플(triple)의 집합으로 표현합니다.

예를 들어 "앨리스는 책001을 구입했습니다"라는 사실은 다음과 같이 표현할 수 있습니다.

ex:Alice ex:bought ex:Book001 .

여기서 ex:Alice는 주어, ex:bought는 술어, ex:Book001은 목적어입니다.

트리플의 구성

RDF의 기본 단위는 트리플입니다.

  • 주어는 설명하려는 대상입니다.
  • 술어는 대상의 속성이나 관계입니다.
  • 목적어는 속성값 또는 관계의 대상입니다.

목적어는 다른 자원일 수도 있고 문자열, 숫자, 날짜 같은 리터럴(literal)일 수도 있습니다.

트리플은 문장처럼 쓰지만, 실제로는 다음과 같은 방향 그래프를 만듭니다.

flowchart LR
    subject["주어<br/>ex:Alice"]
    object["목적어<br/>ex:Book001"]
    literal["리터럴<br/>지식 그래프 입문"]

    subject -- "술어: ex:bought" --> object
    object -- "술어: ex:title" --> literal
ex:Book001 ex:title "지식 그래프 입문" .
ex:Book001 ex:price 25000 .

첫 번째 문장의 목적어는 문자열입니다. 두 번째 문장의 목적어는 숫자입니다.

자원 식별자

RDF에서 자원은 보통 국제화 자원 식별자로 구분합니다. 식별자는 사람이 보는 이름이 아니라 시스템이 같은 대상을 안정적으로 구분하기 위한 주소입니다.

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

ex:Alice ex:name "앨리스" .

위 예시에서 ex:는 긴 주소를 짧게 쓰기 위한 접두어입니다. 실제 식별자는 http://example.org/Alice처럼 확장됩니다.

Turtle 문법

터틀(Turtle)은 RDF를 사람이 읽기 쉽게 적는 문법입니다. 같은 주어에 여러 술어를 붙일 때 세미콜론을 사용할 수 있습니다.

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

ex:Book001
    ex:title "지식 그래프 입문" ;
    ex:price 25000 ;
    ex:author ex:Alice .

위 코드는 하나의 책에 제목, 가격, 저자 관계를 연결합니다.

빈 노드

빈 노드(blank node)는 별도의 식별자가 필요하지 않은 임시 자원을 표현할 때 사용합니다. 예를 들어 주소를 독립적으로 재사용하지 않을 경우 다음과 같이 적을 수 있습니다.

ex:Alice ex:address [
    ex:city "서울" ;
    ex:district "마포구"
] .

빈 노드는 편리하지만 나중에 다른 데이터와 연결하기 어렵습니다. 중요한 개체라면 명시적인 식별자를 부여하는 것이 좋습니다.

파이썬으로 RDF 만들기

간단한 실습에서는 RDFLib를 사용할 수 있습니다.

from rdflib import Graph, Namespace, Literal

g = Graph()
ex = Namespace("http://example.org/")

g.add((ex.Alice, ex.bought, ex.Book001))
g.add((ex.Book001, ex.title, Literal("지식 그래프 입문")))

print(g.serialize(format="turtle"))

이 코드는 그래프에 두 개의 트리플을 추가하고 터틀 형식으로 출력합니다.

RDF의 장점과 한계

RDF의 장점은 데이터 교환과 의미 표현에 강하다는 점입니다. 서로 다른 시스템이 같은 식별자와 표준 어휘를 사용하면 데이터를 연결하기 쉽습니다.

한계도 있습니다. 단순한 트리플만으로는 복잡한 사건이나 제약을 표현하기 번거로울 수 있습니다. 이때는 RDFS, OWL, SHACL 같은 표준을 함께 사용합니다.

정리

RDF는 지식 그래프를 웹 표준 방식으로 표현하는 기본 데이터 모델입니다. 핵심은 모든 사실을 주어, 술어, 목적어의 트리플로 표현한다는 점입니다.

Previous
온톨로지 모델링 기초
Next
RDFS