27

실습: Python으로 제조 온톨로지 모델링

제조 온톨로지 설계

학습 목표
  • 클래스 계층(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 프로젝트 스키마까지 이 구분을 그대로 물려받는다.

진행 순서

  1. 온톨로지 스키마 정의 (클래스 계층, 부분-전체, 관계)
  2. 인스턴스 데이터 생성 (설비, 부품, 고장 데이터)
  3. 그래프 구성 (관계를 넣을 때 스키마로 검사)
  4. 탐색 함수 구현 (원인 추적, 인력 조회)
  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)와 속성(타입·필수여부·예시값)을 딕셔너리 스키마로 표현해줘.
이 팁이 도움이 됐나요?
용어