본문 바로가기
IT

Protégé 0부터 튜토리얼 — 가족 관계 온톨로지 만들고 HermiT·Pellet 추론기 돌리기

by 샤나엘 2026. 5. 20.
반응형

Protégé 0부터 튜토리얼 — 가족 관계 온톨로지 만들고 HermiT·Pellet 추론기 돌리기

온톨로지 편집기 시장에서 Protégé는 사실상 표준이다. Stanford BMIR가 무료 오픈소스로 배포하는 자바 기반 데스크톱 앱이며, OWL 2 표준을 완벽히 지원하고 HermiT·Pellet·ELK 같은 주요 추론기를 GUI로 직접 돌릴 수 있다. 가족 관계처럼 작은 도메인 하나를 직접 만들어 추론 결과를 눈으로 확인해 보는 것이 RDF·OWL 학습의 가장 빠른 경로다.

 

이 글은 Protégé 5.6.9(2026-03 릴리스)를 기준으로 설치부터 가족 관계 온톨로지 설계, 클래스·속성·공리·개인 추가, HermiT 추론기 실행, SPARQL DL 쿼리까지 한 번의 흐름으로 따라가는 단계별 튜토리얼이다. 자주 발생하는 함정과 해결 방법도 함께 정리한다.

 

Protégé 0부터 튜토리얼

이 글의 구성

 

01Protégé 개요와 설치
02가족 관계 온톨로지 설계
03클래스 계층과 속성 추가
04공리(Axiom)와 속성 체인
05개인(Individual) 추가
06HermiT·Pellet·ELK 추론기 실행
07SPARQL DL 쿼리와 익스포트
Q&A자주 묻는 질문 5가지

01 Protégé 개요와 설치

항목 내용
개발 주체 Stanford BMIR · 무료 오픈소스
버전 2종 Protégé Desktop (자바 데스크톱) · WebProtégé (브라우저 협업)
최신 안정 버전 5.6.9 (2026-03-12 릴리스)
Java 요구 Java 11 ~ 25 호환. Windows·Mac 배포판은 JRE 동봉
다운로드 protege.stanford.edu · github.com/protegeproject/protege-distribution

다운로드 후 압축을 풀고 Protege.exe(Windows) 또는 Applications 폴더의 Protégé 앱(Mac)을 실행하면 초기 워크스페이스가 열린다. 처음 보이는 탭은 Active Ontology · Entities · Classes · Object Properties · Data Properties · Individuals · DL Query 일곱 개로, 가족 관계 온톨로지 만들기에는 이 정도만 알아도 충분하다.


02 가족 관계 온톨로지 설계

작은 도메인이지만 클래스·속성·공리를 두루 다루기에 좋은 예제다.

요소 항목
클래스 Person (최상위) · Man · Woman · Family · Father (정의된 클래스)
객체 속성 hasParent · hasChild · hasSpouse · hasSibling · hasGrandparent
데이터 속성 hasName (xsd:string) · hasBirthDate (xsd:date)
개인 Alice (Woman) · Bob (Man) · Charlie (Man)

03 클래스 계층과 속성 추가

클래스 만들기는 Entities 탭의 Classes 서브탭에서 진행한다. owl:Thing을 선택한 뒤 좌측 상단의 "Add subclass" 버튼으로 Person을 만들고, Person 아래에 같은 방식으로 Man·Woman을 추가한다. Man과 Woman을 동시에 선택해 우클릭 → "Make selected classes disjoint"를 적용하면 한 사람이 동시에 Man·Woman일 수 없다는 disjoint 공리가 추가된다.

 

객체 속성은 Object Properties 탭에서 만든다. hasParent를 추가하고 Inverse property 박스에 hasChild를 지정하면 "A hasParent B"가 단언되는 순간 "B hasChild A"가 자동 추론된다. hasSpouse는 Characteristics 패널에서 Symmetric을 체크해 양방향성을 표현하고, hasSibling은 Symmetric + Transitive를 함께 체크해 형제 관계의 추이성까지 표현한다. Domain과 Range를 Person으로 명시하면 미분류 개인도 Person으로 자동 추론된다.

💡 Inverse·Symmetric·Transitive 의미

속성 특성(Characteristics)을 체크하는 것만으로 추론기가 자동으로 새 트리플을 만들어 낸다. 데이터에 명시적으로 양방향 어서션을 모두 넣지 않아도 GUI에서 체크 한 번이면 충분하다는 점이 Protégé의 강력함이다.


04 공리(Axiom)와 속성 체인

공리는 클래스·속성을 더 정밀하게 정의하는 논리식이다.

정의된 클래스 — Father ≡ Man ⊓ ∃hasChild.Person

Father를 새 클래스로 추가한 뒤 "Equivalent To" 패널의 + 버튼을 눌러 Class expression editor에 다음을 입력한다.

Man and (hasChild some Person)

"자녀가 한 명 이상 있는 남자는 자동으로 Father로 분류된다"는 의미. 추론기가 인스턴스를 자동 재분류한다.

속성 체인 — hasParent ∘ hasParent → hasGrandparent

hasGrandparent 객체 속성을 새로 만든 뒤 속성 화면 하단 "SubProperty chain" 박스에 다음을 입력한다.

hasParent o hasParent

"o"는 소문자 알파벳 O. "A의 부모의 부모는 A의 조부모"라는 의미로, OWL 2 속성 체인 표현이다.


05 개인(Individual) 추가

Individuals 탭에서 "Add individual"로 Alice를 추가한 뒤 "Types" 패널에서 Woman을 지정한다. "Object property assertions" + 버튼으로 hasChild Bob을 어서션한다. 같은 방식으로 Bob(Man)과 Charlie(Man)을 추가하고, Bob에 hasChild Charlie를 어서션한다.

 

이 시점에서 단언된 사실은 매우 단순하다. Alice는 Woman이고 Bob의 부모, Bob은 Man이고 Charlie의 부모, Charlie는 Man이다. 그러나 곧 추론기를 돌리면 이 작은 데이터에서 다음 사실이 자동으로 도출된다.

  • Bob hasParent Alice (Inverse 추론)
  • Charlie hasParent Bob (Inverse 추론)
  • Alice hasGrandparent Charlie 의 역 — 즉 Charlie hasGrandparent Alice (속성 체인)
  • Bob은 자녀가 있는 Man이므로 자동으로 Father 클래스로 분류

06 HermiT·Pellet·ELK 추론기 실행

Protégé는 여러 추론기를 플러그인으로 제공한다.

HermiT

OWL 2 entailment·classification 완전 지원. hypertableau 알고리즘. 기본 권장.

Oxford 개발

Pellet

OWL 2 DL 풀 지원. 개인 추론·SWRL 룰 처리 강점.

Clark & Parsia

ELK

OWL 2 EL 전용. 멀티코어 병렬로 대형 온톨로지에서 HermiT 대비 매우 빠름.

Oxford · Ulm

실행 순서:

EXECUTION

1. Reasoner 메뉴에서 HermiT 선택 (기본 포함)
2. Reasoner → Start reasoner (Ctrl+R / Cmd+R) 클릭
3. 진행바 종료 후 Class hierarchy 드롭다운을 "Asserted" → "Inferred"로 전환
4. Asserted vs Inferred 차이를 확인 — Bob이 Father 아래로 이동, hasGrandparent 트리플이 새로 보임
5. 모순이 있으면 클래스가 빨간색으로 owl:Nothing 아래 표시됨

Reasoner → Configure... 메뉴의 "Displayed inferences"에서 객체 속성 어서션 추론까지 표시되도록 켜 두면 hasGrandparent 같은 추론 트리플도 화면에 즉시 보인다.


07 SPARQL DL 쿼리와 익스포트

Protégé 5.6.x에는 SPARQL Query 플러그인이 기본 포함된다. Window → Tabs → SPARQL Query를 활성화하면 워크스페이스에 쿼리 탭이 추가된다.

PREFIX : <http://example.org/family#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

# 추론 결과 Father 클래스의 모든 인스턴스
SELECT ?person WHERE {
  ?person rdf:type :Father .
}

DL Query 탭(별도 기능)에서는 Man and (hasChild some Person) 같은 클래스 표현을 직접 질의할 수 있어 SPARQL을 쓰지 않고도 추론 결과를 빠르게 확인할 수 있다.

익스포트는 File → Save As… 메뉴에서 RDF/XML, Turtle, OWL/XML, OBO 같은 직렬화 포맷을 선택해 진행한다. Turtle이 가장 읽기 좋고, RDF/XML이 가장 호환성이 높다. File → Export inferred axioms as ontology로 추론 결과만 별도 파일로 저장하면 다른 시스템에 추론된 사실을 그대로 전달할 수 있다.


08 자주 묻는 질문 5가지

Q1. Reasoner를 시작했는데 결과가 변하지 않는다.

클래스 계층 드롭다운을 "Asserted"에서 "Inferred"로 전환하지 않은 경우가 가장 흔하다. 객체 속성 어서션 추론은 Reasoner → Configure... → Displayed inferences에서 별도로 켜 줘야 화면에 표시된다.

Q2. 온톨로지가 inconsistent라는 빨간 알림이 떴다.

disjoint 공리가 충돌하는 경우가 흔하다. 예를 들어 Man과 Woman을 disjoint로 두고 같은 개인을 둘 다 단언하면 발생한다. 알림창의 explain 버튼을 누르면 원인 공리를 추적할 수 있다.

Q3. HermiT와 Pellet 중 어떤 것을 써야 하나?

기본은 HermiT다. 개인(Individual) 추론·SWRL 룰을 함께 다뤄야 하면 Pellet이 강점이 있다. 대형 EL 온톨로지(SNOMED CT 등)에서는 ELK가 성능 면에서 압도적으로 빠르므로 도메인에 맞춰 골라 쓴다.

Q4. 속성 체인이 추론에 반영되지 않는다.

SubProperty chain 입력 시 "o" 사이에 띄어쓰기가 정확히 들어갔는지 확인한다(`hasParent o hasParent`). 또한 속성 체인은 OWL 2 기능이라 추론기가 OWL 2를 지원해야 하며 HermiT·Pellet·ELK 모두 지원한다.

Q5. 협업이 필요한데 데스크톱 앱이 불편하다.

WebProtégé가 브라우저 기반 협업 클라우드 버전이다. 설치 없이 webprotege.stanford.edu에서 바로 시작할 수 있고, 여러 사용자가 같은 온톨로지를 동시 편집할 수 있다. 다만 일부 고급 추론 기능은 데스크톱 버전이 더 풍부하다.


마무리

Protégé는 GUI 한 화면에서 클래스·속성·공리·개인·추론까지 모두 다룰 수 있어 온톨로지를 처음 만져 보는 단계에 가장 적합한 도구다. 가족 관계처럼 작은 도메인 하나를 직접 만들어 추론기를 돌려 보면 OWL의 표현력과 추론 동작이 직관적으로 이해된다. Inverse·Symmetric·Transitive 같은 속성 특성을 체크하는 것만으로 새 트리플이 자동 생성되는 경험은 이론서만 읽어서는 잘 와닿지 않는다.

 

실무에서는 작은 학습용 온톨로지를 만든 뒤 도메인 표준(SNOMED CT·FIBO 등)으로 확장하는 흐름이 일반적이다. 추론기 선택은 도메인 크기와 표현력 요구에 따라 결정한다. 대형 EL 분류 체계라면 ELK, 일반 OWL 2 DL이라면 HermiT, 개인·SWRL 룰이 많다면 Pellet을 우선 검토한다. 작업이 끝난 뒤 익스포트 포맷은 호환성을 위해 Turtle을 기본으로 두고 필요할 때 RDF/XML을 함께 저장한다.

Protégé 실습 체크리스트

 

01Protégé 5.6.9 다운로드 후 JRE 동봉 버전으로 설치.
02Person·Man·Woman 클래스 + disjoint 공리로 구조 시작.
03hasParent · hasChild Inverse, hasSpouse Symmetric, hasSibling Transitive 설정.
04Father ≡ Man ⊓ ∃hasChild.Person 정의된 클래스 추가.
05hasGrandparent 속성 체인 `hasParent o hasParent` 등록.
06HermiT Start reasoner 실행 후 Inferred 뷰로 전환해 결과 확인.
07Turtle로 저장, Export inferred axioms로 추론 결과 별도 파일 보관.

본 글은 Protégé 5.6 기준 OWL 2 온톨로지 입문 실습 가이드다. 버전·UI는 변경될 수 있으므로 protege.stanford.edu 공식 문서·W3C OWL 2 권고·각 추론기 매뉴얼의 최신 기준을 함께 확인한다.

 

#Protege #OntologyEditor #OWL2 #HermiT #Pellet #ELK #ReasonerTutorial #ObjectProperty #SubPropertyChain #InverseProperty #SPARQLDL #DLQuery #FamilyOntology #WebProtege #StanfordBMIR

반응형

댓글