클래스 계층과 is-a의 함정
‘~이다’라는 말 하나에 세 가지 다른 관계가 숨어 있습니다. 하위 클래스, 부분, 인스턴스를 섞으면 추론이 그 실수를 그대로 퍼뜨립니다.
이번 회차, 내 속도로.
기초를 더 짚거나 궁금한 주제로 잠깐 넓혀 보세요. 최대 3단계를 거쳐 DAY 54로 돌아옵니다.
난이도·관심 주제 고르기
1/2개 선택 · 새 보충·심화 수업과 본과정 다시 읽기를 선택할 수 있어요.
이렇게 다녀와요 1단계 · 약 12분
- 출발 · DAY 54is-a·part-of·instance-of
- 1. 관심 주제ConceptScheme·레이블 규칙·broader 방향추가 21 · 새 추가 수업
- 복귀 · DAY 54원래 회차 이어가기
- ConceptScheme·레이블 규칙·broader 방향 · DAY 52에서 시소러스 단계를 개념으로 봤다면, 여기서는 실제 SKOS 트리플을 써 보며 어떤 레이블이 허용되고 어떤 계층이 추론되는지 확인합니다.
선택과 경로 기록은 이 브라우저에 저장됩니다. 본과정의 회차 완료와는 별도입니다.
핵심 개념
클래스 계층은 is-a 관계입니다. Noy와 McGuinness의 기준으로 A가 B의 하위 클래스라면 A의 모든 인스턴스는 B의 인스턴스여야 합니다. 그래서 ‘모든 A는 B의 한 종류인가?’를 문장으로 읽어 보는 것이 가장 간단한 시험입니다. 모든 자동차는 탈것이므로 :자동차 rdfs:subClassOf :탈것은 맞습니다. 하위 클래스 관계는 이행적이라 이 시험을 통과한 단계들은 위로 이어집니다.
부분 관계(part-of)는 다릅니다. 바퀴는 자동차의 일부이지 자동차의 한 종류가 아닙니다. :바퀴 rdfs:subClassOf :자동차라고 쓰면 모든 바퀴가 자동차로 분류되어 ‘자동차는 몇 대인가?’에 바퀴가 섞이고, 자동차에 붙인 번호판·좌석 수 같은 속성 기대가 바퀴에도 적용됩니다. 부분은 :partOf 같은 객체 속성으로 개체 사이에 표현합니다.
인스턴스 관계(instance-of)도 하위 클래스와 다릅니다. 바둑이는 개의 한 종류가 아니라 개 한 마리이므로 :바둑이 a :개입니다. 수준을 섞는 실수도 흔합니다. ‘개는 종(Species)이다’를 :개 rdfs:subClassOf :종으로 쓰면 :바둑이 a :개와 합쳐져 바둑이가 하나의 종으로 추론됩니다. ‘개’라는 분류가 종의 한 사례라는 뜻이면 개를 종의 인스턴스로 다루는 별도 수준으로 표현해야 합니다.
점검 질문 세 가지를 기억하면 대부분의 함정을 피합니다. ‘모든 X는 Y인가?’(is-a), ‘X는 Y의 일부인가?’(part-of), ‘X는 특정한 하나인가?’(instance-of). Noy와 McGuinness는 이 밖에도 단수와 복수를 섞는 실수(Wine을 Wines의 하위 클래스로), 동의어를 다른 클래스로 만드는 실수, 계층의 순환(두 클래스를 사실상 동치로 만듦)을 경계하라고 합니다.
작은 예제로 따라가기
‘자동차 is-a 탈것’을 ‘모든 자동차는 탈것인가?’로 읽으면 참이므로 :자동차 rdfs:subClassOf :탈것으로 적습니다.
‘바퀴 is-a 자동차’는 ‘모든 바퀴는 자동차인가?’가 거짓이므로 :바퀴1 :partOf :자동차1처럼 부분 관계로 고칩니다. 그대로 두면 자동차 한 대와 바퀴 네 개가 ‘자동차 5대’로 집계됩니다.
‘바둑이 is-a 개’는 바둑이가 특정한 한 마리이므로 :바둑이 a :개로 적고, 하위 클래스로 만들지 않습니다.
직접 실험해 보기
관계 진술을 하나씩 골라 subClassOf·partOf·instanceOf 중 무엇이 맞는지 먼저 예측한 뒤, 결과와 잘못 썼을 때 생기는 오추론 설명을 확인하세요.
is-a를 종류·부분·개체로 갈라 오추론 막기
실선 = 명시 · 점선 = 추론 · ⊑ = rdfs:subClassOf · a = rdf:type · 사각형 = 클래스 · 원 = 개체 · 주황 = 틀림
:앞바퀴 a :자동차 .rdfs9:바퀴 rdfs:subClassOf :탈것 .rdfs11:바둑이 rdfs:subClassOf :동물 .rdfs11:엔진 rdfs:subClassOf :탈것 .rdfs11:앞바퀴 a :탈것 .rdfs9
빠진 추론: :바둑이 a :동물 . (바둑이를 클래스로 적으면 개체가 사라져 동물로 셀 수 없습니다)
?x a :자동차 → 내차, 앞바퀴 · ?x a :동물 → 없음
이번에는 직접 풀어 보세요
정답을 보기 전에 계산과 이유를 적어 보세요. 해설과 비교하고 확인 표시를 남기면 완료할 수 있습니다.
힌트 보기
‘모든 부서는 회사인가?’, ‘김대리는 특정한 한 사람인가?’처럼 문장으로 읽어 보세요.
풀이와 비교하기
부서는 회사의 일부이므로 :영업부 :partOf :한빛상사처럼 부분 관계로, 직원은 부서에 소속되므로 :김대리 :memberOf :영업부 같은 관계로 바꿉니다. 김대리는 특정한 한 사람이므로 :김대리 a :직원입니다. 그대로 두면 모든 직원이 부서와 회사로 분류되어 ‘회사는 몇 곳인가?’ 집계에 직원과 부서가 섞입니다.
풀이와 확인 표시는 이 브라우저에 저장됩니다.
오늘 이해한 것과 다시 볼 것
계산이 달라진 이유, 헷갈린 개념, 다음에 확인할 질문을 남겨 보세요.
메모는 이 브라우저에 저장됩니다. 홈에서 전체 기록을 내려받을 수 있습니다.오늘의 이해 확인
:개 rdfs:subClassOf :종과 :바둑이 a :개를 함께 두면 생기는 문제는?
완료 조건: 확인 퀴즈 정답 · / 직접 풀기 0/1
더 깊이 읽기
예제와 실험 데이터는 이 과정을 위해 만든 것입니다. 원문은 선택 자료이며, 강의와 직접 풀기만으로도 다음 회차를 이어갈 수 있습니다.
Ontology Development 101: A Guide to Creating Your First OntologyNoy & McGuinness (2001)OWL 2 Web Ontology Language PrimerW3C이 자료는 개념 학습용입니다. 실제 데이터베이스·라이브러리·플랫폼의 동작과 설정은 제품과 버전마다 다를 수 있습니다.