27분
실습: Python으로 제조 온톨로지 모델링
제조 온톨로지 설계
실습: Python으로 제조 온톨로지 모델링
온톨로지 & Knowledge Graph > 제조 온톨로지 설계
학습 목표
- 클래스 계층(is-a)과 부분-전체(part-of)를 서로 다른 필드로 나누어 온톨로지 스키마를 정의한다
- 관계의 정의역·치역을 스키마에서 읽어 적재 단계에서 검사한다
- 설비별로 구분되는 id 체계로 샘플 인스턴스를 만든다
- NetworkX와 matplotlib로 온톨로지를 그려 PNG로 저장한다
실습: Python으로 제조 온톨로지 모델링
목표
루트브릭스 스마트 팩토리의 온톨로지를 Python으로 모델링하고, NetworkX 그래프로 시각화합니다.
실습 환경 준비
pip install networkx matplotlib
이 실습의 핵심: 두 계층을 섞지 않는다
| 구분 | 뜻 | 이 코드에서 | 예 |
|---|---|---|---|
| 클래스 계층 (is-a) | A는 B의 한 종류다 | classes[...]["subClassOf"] | CNCMill은 CNCMachine의 한 종류 |
| 부분-전체 (part-of) | A는 B의 부분이다 | partOf 표 | 스핀들 유닛은 설비의 부분 |
Component의 상위 클래스를 Equipment로 적으면 "모든 구성요소는 설비다"가 된다.
구성요소는 설비의 부분이지 설비의 종류가 아니므로, 이것은 partOf에 적어야 한다.
Day 5 프로젝트 스키마까지 이 구분을 그대로 물려받는다.
진행 순서
- 온톨로지 스키마 정의 (클래스 계층, 부분-전체, 관계)
- 인스턴스 데이터 생성 (설비, 부품, 고장 데이터)
- 그래프 구성 (관계를 넣을 때 스키마로 검사)
- 탐색 함수 구현 (원인 추적, 인력 조회)
- 시각화 후 PNG 저장
주의사항
- 인스턴스 id는 설비별로 구분되게 짓습니다.
spindle_unit_003처럼 설비 번호를 붙이지 않고 "스핀들 유닛"이라는 이름으로 합치면, 설비가 여러 대로 늘어나는 Day 5에서 여덟 대의 스핀들이 노드 하나로 합쳐집니다. - 관계의 방향에 주의하세요.
CAUSED_BY는 고장에서 원인으로 나갑니다.
에디터 로딩 중...
힌트 보기
- • ancestors()가 subClassOf를 따라 올라가므로, CNCMill로 선언된 노드도 relations의 from: Equipment 검사를 통과합니다
- • G.out_edges(node_id, data=True)로 특정 노드에서 나가는 엣지를 조회합니다
- • G.nodes[node_id]로 노드의 속성에 접근합니다
- • 관계를 add_edge()로 직접 넣지 말고 add_edge_checked()로 넣으면, 스키마와 어긋난 데이터가 조용히 들어가지 않습니다
- • 한글 라벨이 네모로 깨지면 font_family를 지정하세요 (맥 AppleGothic, 윈도우 Malgun Gothic)
정답 보기
에디터 로딩 중...
AI로 학습하기 — 꿀팁
제조 온톨로지 Python 스키마 생성AI 학습 팁
AI에게 Python 딕셔너리와 dataclass로 제조 온톨로지 클래스 계층·관계·속성을 구조화한 코드를 생성시키세요.
Python으로 제조 온톨로지 스키마를 작성해줘. 설비(Equipment)·부품(Part)·공정(Process)·고장(Failure)·정비작업(MaintenanceWork) 클래스 계층을 dataclass로 정의하고, 각 클래스 간 관계(PART_OF, CAUSED_BY, REQUIRES)와 속성(타입·필수여부·예시값)을 딕셔너리 스키마로 표현해줘.
이 팁이 도움이 됐나요?