Step 1: 확장 온톨로지 설계 및 데이터 모델링
설비-공정 Knowledge Graph
Step 1: 확장 온톨로지 설계 및 데이터 모델링
온톨로지 & Knowledge Graph > 설비-공정 Knowledge Graph
- Day 2 정본 시드 위에 프로젝트 요구사항(Product, QualityInspection)을 얹는다
- 클래스 계층과 부분-전체를 나눈 채로 엔티티 14종·관계 18종까지 확장한다
- 노드 50건·관계 80건 기준을 넘는 데이터셋을 만들어 dataset.json으로 저장한다
- 관계 수를 직접 세고 정의역·치역까지 확인하는 검증기를 구현한다
Step 1: 확장 온톨로지 설계
목표
Day 2의 정본 시드(seed_kg.py, 노드 115 / 관계 183) 위에
프로젝트 요구사항을 얹어 제출용 데이터셋을 완성합니다.
seed_kg.py를 같은 폴더에 두고 시작하세요. 처음부터 다시 만들 필요가 없습니다.
추가할 엔티티
- Product: 감속기 제품 두 가지
- QualityInspection: 검사 항목·규격·측정값·판정을 담은 기록 여섯 건 (불합격 사례를 섞으세요)
시드에 이미 들어 있는 것: Process 6종, MaintenanceRecord 12건, NEXT_PROCESS, USES_EQUIPMENT, FOR_EQUIPMENT.
추가할 관계
PRODUCES(Process → Product)INSPECTS(QualityInspection → Product)MEASURED_BY(QualityInspection → Equipment)
검증기를 직접 만듭니다
validate_dataset()이 이 Step의 핵심입니다. 관계를 세는 방법이 틀리면 아무도 통과하지 못합니다.
항목에 belongs_to 키가 있는지로 세면 노드 하나가 관계를 최대 1개만 만들 수 있으므로,
관계 수가 노드 수를 절대 넘지 못합니다. 그 상태로 "노드 50 / 관계 80"을 기준으로 두면
요구사항을 다 채운 사람도 계속 미달을 봅니다.
검증기가 확인할 것:
| 항목 | 통과 조건 |
|---|---|
| 노드 수 | 50 이상 |
| 관계 수 | 80 이상 (관계 목록을 직접 센다) |
| 중복 id | 없어야 함 |
| 참조 무결성 | 관계의 양 끝 노드가 실제로 존재 |
| 정의역·치역 | 관계의 출발·도착 클래스가 온톨로지와 일치 (하위 클래스는 통과) |
| 고아 노드 | 어느 관계에도 연결되지 않은 노드 없음 |
결과
총 노드 수: 123 (기준 50)
총 관계 수: 197 (기준 80)
모든 검증 통과
dataset.json 저장 완료Tip: Graph Schema Designer로 먼저 그려보기
코드로 곧장 스키마를 짜기 전에 그림으로 먼저 그려보면 빠진 엔티티·관계가 한눈에 보입니다.
- 제조 온톨로지 라벨 팔레트(Equipment·Component·Part·Fault·Process…) + 프리셋 내장
- 노드·관계를 드래그로 그리면 CREATE/MERGE Cypher가 실시간으로 생성됩니다
- 위 ONTOLOGY의 엔티티와 관계를 캔버스에 옮겨 Product·QualityInspection을 시각적으로 이어보세요
더 풍부한 편집이 필요하면 Neo4j Labs의 arrows.app에서 그린 뒤 Export ▸ Cypher로 내보냅니다.
두 도구가 내보내는 Cypher는 설계를 눈으로 확인하는 용도입니다. 실제 적재는 Step 2의
load_from_json()으로 하세요. 화면에서 내보낸 Cypher를 그대로 붙이면 id 없이 이름으로만 노드가 만들어져, 다시 실행할 때마다 그래프가 늘어나거나 기존 노드와 어긋납니다.
힌트 보기
- • seed_kg.build_dataset()이 {'nodes': [...], 'relationships': [...]} 를 돌려줍니다. 그 리스트에 append 하면 확장이 끝납니다
- • 노드는 {'labels': [...], 'id': ..., 'props': {...}}, 관계는 {'from_label','from','type','to_label','to','props'} 형식입니다
- • 정의역·치역 검사에서 CNCMill 같은 하위 클래스도 Equipment로 통과시켜야 합니다. subClassOf를 따라 올라가는 함수를 하나 만드세요
- • 고아 노드 검사는 관계의 from/to를 모두 모은 집합과 노드 id 집합의 차집합으로 구합니다
- • dataset.json은 Step 2에서 그대로 읽어 Neo4j에 넣습니다. 형식을 바꾸면 Step 2도 함께 고쳐야 합니다
정답 보기
AI에게 8개 이상 엔티티 타입과 10개 이상 관계를 포함한 확장 온톨로지를 Neo4j 노드·엣지 초기화 코드와 함께 생성시키세요.
제조 프로젝트용 확장 온톨로지를 설계하고 Python 코드로 작성해줘. Equipment·Part·Process·Failure·Sensor·MaintenanceWork·Supplier·Operator 8개 엔티티와 PART_OF·CAUSED_BY·REQUIRES·DETECTED_BY·PERFORMED_BY·SUPPLIED_BY·OPERATED_BY·TRIGGERS·PREVENTS·MITIGATES 10개 관계를 정의하고, Neo4j에 초기 샘플 데이터를 삽입하는 Cypher 스크립트도 함께 작성해줘.