시맨틱 레이어 글을 쓰고 나서도 헷갈림이 남았습니다. Microsoft는 Fabric IQ 온톨로지라고 하고, Databricks는 Genie Ontology라고 하고, 다른 곳에서는 지식 그래프라고 합니다. 셋이 같은 말인지 다른 말인지, 이 용어들의 뿌리인 W3C 문서 두 개를 읽고 정리해 둡니다.
출발점: 트리플
RDF 1.1 Primer는 RDF를 "자원에 대한 정보를 표현하는 틀"이라고 설명합니다. 자원은 문서, 사람, 물건, 추상 개념까지 무엇이든 될 수 있습니다.
RDF의 문장은 항상 세 부분입니다. 주어, 서술어, 목적어. 그래서 트리플이라고 부릅니다.
<주문 1042> <고객은> <김철수>
<김철수> <소속은> <서울 지점>
<주문 1042> <금액은> "52000"
주어와 목적어는 IRI라는 전역 식별자로 가리킵니다. 같은 IRI를 쓰면 다른 시스템도 같은 대상을 가리킬 수 있습니다.
지식 그래프: 트리플을 모은 것
트리플을 모으면 그래프가 됩니다. 주어와 목적어는 노드, 서술어는 노드를 잇는 간선입니다. 위 예에서 주문 → 고객 → 지점으로 이어지는 길이 생깁니다.
"지식 그래프"는 이렇게 실제 사실들을 연결해 담은 데이터를 가리킬 때 주로 쓰는 말입니다. 주문 1042, 김철수, 서울 지점 같은 개별 사실이 들어갑니다.
온톨로지: 그래프에 쓰는 어휘와 규칙
그런데 "고객은"이라는 서술어는 누가 정했을까요. 주문의 고객 자리에 지점이 들어가면 틀린 걸까요.
이걸 정하는 게 어휘(vocabulary)와 온톨로지입니다. Primer는 RDF Schema로 이런 것을 정의할 수 있다고 설명합니다.
- 클래스: 주문, 고객, 지점 같은 분류
- subClassOf: VIP 고객은 고객의 한 종류
- domain과 range: "고객은"의 주어는 주문, 목적어는 고객이어야 한다
OWL 2는 여기서 더 나아갑니다. OWL 2 Overview는 OWL을 "형식적으로 정의된 의미를 가진 온톨로지 언어"라고 정의하고, 온톨로지가 클래스·속성·개체·데이터 값을 제공한다고 설명합니다. 모든 OWL 2 온톨로지는 RDF 그래프로도 볼 수 있습니다.
형식적인 의미가 있으면 추론이 됩니다. 문서는 클래스가 서로 모순되지 않는지, 한 클래스가 다른 클래스에 포함되는지, 어떤 개체가 어떤 클래스에 속하는지 같은 작업을 예로 듭니다. "VIP 고객은 고객이다"와 "김철수는 VIP 고객이다"를 적어 두면, "김철수는 고객이다"를 따로 적지 않아도 알아냅니다.
시맨틱 레이어: 지표 계산식
시맨틱 레이어는 뿌리가 다릅니다. W3C 표준이 아니라 BI와 데이터 웨어하우스 쪽에서 나온 말입니다.
관심사도 다릅니다. "매출 = 주문 금액 합계 − 환불, 취소 주문 제외"처럼 숫자를 어떻게 계산하는지를 한곳에 정의합니다. 사물 사이의 관계보다 집계 규칙이 중심입니다.
셋을 나란히 놓으면
| 담는 것 | 뿌리 | 질문 예 | |
|---|---|---|---|
| 온톨로지 | 개념, 관계, 규칙 | W3C RDF Schema·OWL | "VIP 고객도 고객인가?" |
| 지식 그래프 | 개별 사실의 연결 | RDF 트리플 등 | "주문 1042의 고객은 어느 지점 소속인가?" |
| 시맨틱 레이어 | 지표 계산식 | BI·데이터 모델링 | "지난달 매출은 얼마인가?" |
행사 발표를 다시 읽으면
벤더의 "온톨로지"는 대개 이 셋을 한 제품에 섞은 것입니다. 업무 개념과 관계(온톨로지), 실제 데이터와의 연결(지식 그래프), 지표 정의(시맨틱 레이어)를 함께 담습니다.
그래서 발표에서 "온톨로지"라는 말을 보면 하나만 확인하면 됩니다. 규칙을 적는 곳인지, 사실을 담는 곳인지, 숫자를 세는 곳인지.
W3C 표준과의 거리도 제품마다 다릅니다. Fabric IQ는 RDF, Turtle, OWL 정의를 가져올 수 있다고 문서에 적었습니다. 다만 가져올 때 지원하지 않는 항목을 따로 보여 준다고 했으니, OWL의 표현력과 추론을 모두 받는 것은 아닙니다. 이름이 같다고 W3C가 말하는 온톨로지와 같은 것이라고 단정하지 않는 편이 좋겠습니다.
이 블로그의 그래프 메뉴도 작은 온톨로지입니다. 개념과 관계 종류를 YAML로 정해 두고, 글에서 뽑은 관계를 그 위에 얹습니다. 관계 일부는 정해 둔 규칙으로 계산하지만 OWL 같은 형식 의미는 쓰지 않으니, W3C 기준으로는 어휘에 가까운 쪽입니다.