명세: 역량 질문과 ORSD
📍 현재 위치: 제1부 · 명세 — 라이프사이클의 첫 수. 단 하나의 클래스를 그리기 전에, 완성된 온톨로지가 답할 수 있어야 하는 것을 먼저 적어 둡니다. 이 장은 이 책의 나머지가 그 위에 세워지고 그것에 비추어 평가되는 요구사항 명세입니다.
온톨로지를 시작하는 흔한 방법은 편집기를 열고 클래스 이름을 짓기 시작하는 것입니다. 그것은 잘못된 방법이며, 그 이유를 첫 페이지에서 말해 둘 만합니다. 온톨로지는 공유되는, 기계가 판독할 수 있는 어휘입니다 — 컴퓨터가 추론할 수 있는, 합의된 용어(클래스)의 정밀한 집합과 그 사이의 관계입니다. 그러나 온톨로지는 세계를 기술한 것이 아닙니다 — 세계는 무한하고, 세포를 원자 단위까지 내려가 모델링하거나 조직도 단위까지 올라가 모델링해도 결코 끝나지 않습니다. 온톨로지는 목적을 위해 만들어진 도구이며, 그 목적은 질문에 답하는 것입니다. 그래서 1990년대 중반 이래 진지한 온톨로지 공학 방법론이라면 한결같이 지켜 온 규율은 동일합니다. 질문에서 출발하고, 그것을 적어 두고, 이후의 모든 모델링 선택을 그 질문 중 하나에 봉사하는지로 판단하는 것입니다 [1].
집을 지을 때 벽돌부터 사지는 않습니다. 먼저 요구서(brief)에서 시작합니다. 침실은 몇 개인지, 누가 사는지, 절대 일어나서는 안 되는 일은 무엇인지(누수, 붕괴). 그런 다음 요구서는 설계도가 되고, 마지막에는 검사관이 완성된 집을 요구서에 비추어 — 방 하나하나 — 점검한 뒤에야 누군가 입주합니다. 역량 질문(competency question)은 온톨로지를 위한 그 요구서의 한 줄이고("이 세포 은행을 공유하는 배치가 무엇인지 알려 줄 수 있는가?"), ORSD는 요구서 전체이며, 이 책의 validate.py — 명령줄에서 실행하는 작은 파이썬 스크립트 — 는 검사관입니다. 요구서의 모든 줄을 완성된 모델에 비추어 실행하고, 단 한 줄이라도 충족되지 않으면 빌드를 실패시킵니다. 요구사항이 먼저, 그다음 모델, 그다음 검사 — 결코 벽돌부터가 아닙니다.
이 책이 따르는 라이프사이클: NeOn이 초기 단계와 ORSD를 빚고, SAMOD가 중간의 테스트 우선 루프를 이끌며, LOT가 출판을 다스립니다 — 진행 중인 항체 캠페인이 모든 단계를 관통합니다.
저자가 AI의 도움을 받아 직접 제작한 그림입니다.
일찍 심어 둘 만한 주의 사항인데, 책의 나머지가 이것에 기대기 때문입니다. 역량 질문과 ORSD는 그 자체가 물리적 대상에 관한 정보입니다. BFO는 이 책이 그 위에 세워지는 기초 상위 온톨로지(foundational upper ontology)이며(제3부), 그 용어로 요구서는 정보 콘텐츠 존재(information content entity, 일반적으로 의존하는 연속체)로서 그것이 다스리는 독립 연속체 — 세포 은행, 배치, 바이알 — 에 관한 것입니다. 요구서(정보)를 그것이 기술하는 대상(물리적 로트)과 구별해 두는 것 — 연속체/정보 구분 — 은 제3부부터 제6부까지가 모델을 세우는 바로 그 분리이며, 여기서는 요구사항 문서에 먼저 적용된 것입니다.
세 가지 방법론, 하나의 척추
이 책은 프로세스를 새로 발명하지 않습니다. 여기서 방법론이란 모든 온톨로지 프로젝트가 마주하는 세 가지 질문 — 요구사항은 어디서 오는가, 모델을 어떻게 키우고 테스트하는가, 어떻게 출판하고 살아 있게 유지하는가 — 에 대한 합의된 답일 뿐이며, 단일한 출판 방법으로 이 셋을 고루 답하는 것은 없습니다. 그래서 이 책은 이 분야가 실제로 쓰는 세 방법론을 조합하는데, 각각은 이 책의 나머지가 밟아 가는 라이프사이클의 한 구간에서 가장 강합니다. 셋은 경쟁이 아니라 보완입니다.
- NeOn은 전체 형태와 요구사항 산출물을 제공합니다. NeOn 방법론(EU NeOn 연구 프로젝트의 이름을 땄습니다)은 온톨로지 구축을 하나의 경직된 폭포수가 아니라 유연한 시나리오들의 집합 — 명세, 기존 온톨로지와 자원의 재사용, 개념화, 형식화 — 으로 틀 짓고, 온톨로지 요구사항 명세 문서(Ontology Requirements Specification Document, ORSD)가 여기서 나옵니다 [2]. 제1부(이 부)와 제2부(재사용)가 NeOn의 몫입니다.
- SAMOD — 온톨로지 개발을 위한 단순화된 애자일 방법론(Simplified Agile Methodology for Ontology Development) — 은 모든 모델링 장의 리듬을 제공합니다. "모델릿(modelet)"에 대한 작은 테스트 우선 반복 — 역량 질문을 쓰고, 그 조각을 모델링하고, 데이터에 비추어 테스트하고, 리팩터링하는 — 을 모델이 온전해질 때까지 되풀이합니다 [3]. 제3부부터 제6부까지가 SAMOD의 루프 위에서 돌아갑니다.
- LOT — 링크드 오픈 텀스(Linked Open Terms) 방법 — 은 백엔드를 제공합니다. 완성된 어휘의 출판, 버전 관리, 재사용 우선 저작, FAIR 릴리스입니다 [4]. 제7부가 LOT의 몫입니다.
세 방법론은 모두 이 장이 여는 신념을 공유하며, 이는 Grüninger와 Fox의 창립 연구로 거슬러 올라가고 Ontology Development 101에서 입문자를 위해 성문화되었습니다. 온톨로지의 요구사항은 역량 질문으로 적히고, 모델은 그 질문에 답함으로써 검증된다는 것입니다 [1][5].
ORSD: 모델을 위한 요구사항 요구서
ORSD는 모델링에 앞서 합의되는 짧은 문서로, 온톨로지가 무엇을 위한 것인지를 고정합니다. 일곱 부분으로 이루어집니다. 다음은 이 책이 처음부터 끝까지 모델링하는 CHO(중국 햄스터 난소 세포) 단클론 항체(mAb) 프로세스를 위한 우리의 ORSD입니다 — 물리적 공정은 Book 1을 참고하세요.
1. 목적
하나의 바이오의약품 제조 캠페인 — 발견 표적에서 콜드체인 바이알까지 — 을 단일한, 기계가 행동에 옮길 수 있는 지식 그래프로 바꾸어, 계보·영향·품질 설계·릴리스 질문을 스프레드시트 고고학이 아니라 질의로 답할 수 있게 만드는 것입니다.
2. 범위
범위 내: 하나의 플랫폼 CHO mAb(표준화되어 재사용되는 숙주 세포주와 공정 템플릿 — 항체는 바꾸되 공정은 그대로 두는 것으로, 이것이 하나의 요구서로 캠페인 전체를 모델링할 수 있게 해 줍니다)의 발견-에서-유통까지 경로 — Book 1이 다루는 물리적 공정 — 계통(derivedFrom), 핵심 공정 파라미터와 품질 속성 그리고 그 사이의 연결, 릴리스 명세와 그 게이트, 바이러스 제거 합산, 일련번호 부여와 담음(containment), 규제 물질 동일성, 그리고 조정된 원천 레코드의 출처입니다.
범위 밖(잊은 것이 아니라 명시한 것): 임상 및 환자 데이터; 재무와 일정; 실시간 공정 제어(그래프는 설정값을 문서화할 뿐 그것을 작동시키지 않습니다); 다제품 포트폴리오; 그리고 공장 벽을 넘어선 조직 간 연합 — 이는 평결이 누락이 아니라 진정한 한계로 다루는 부분입니다.
3. 의도된 최종 용도
계보 역추적; 리콜 영향 범위 산정; CPP→CQA 근본 원인 조사; 릴리스 검증; 바이러스 제거 검토; 포장 추적·추적성; FAIR 카탈로깅; 그리고 검색 증강 AI를 위한 접지(grounding, AI에게 답의 근거가 될 검증된 사실을 제공하는 것)입니다.
4. 의도된 사용자
QA/QC 검토자, 제조 과학(MSAT) 조사자, 규제 제출 문서 작성자, 데이터 엔지니어와 온톨로지스트, 그리고 제8부에서 조사된 플랫폼·지식 그래프 벤더입니다.
5. 기능 요구사항 — 역량 질문 카탈로그
기능 요구사항이 곧 역량 질문입니다. 23개가 있으며, 답하는 질문에 따라 묶여 있습니다. 각각은 책 전반에서 쓰이는 안정적인 식별자(CQ-01 … CQ-23)를 지니며, 그리고 — 이것이 이 장 전체의 요점인데 — 각각은 실행 가능합니다. 즉 SPARQL 질의(그래프 데이터를 위한 질의 언어 — 지식 그래프를 위한 SQL과 같습니다), SHACL 게이트(데이터가 완전하고 잘 형성되어 있는지 검사하는 규칙), 또는 추론기 검사(데이터가 함의할 뿐인 새로운 사실을 도출하는 소프트웨어)로 매핑되고, validate.py가 그것을 합격/불합격 테스트로 실행합니다(다음 장이 실제 결과를 보여 줍니다).
각각이 어떻게 작성되었는가. 역량 질문은 모델링에 앞서 평이한 언어로 적힌 단 하나의 질문으로, 완성된 온톨로지가 답할 수 있어야 하는 것입니다. 좋은 질문을 짓는 일은 짧은 규율입니다 — Grüninger와 Fox로 거슬러 올라가고 Ontology Development 101에 성문화된 [1][5] — CQ-04 하나를 예로 공개적으로 해 볼 만합니다:
- 추상이 아니라 실제 시나리오에서 출발합니다. 완제의약품 로트가 QC에 실패하고, 조사자는 그 결함을 공유할 수 있는 다른 모든 로트를 찾아야 합니다. 이는 현장에서 실제로 일어나는 일이며, 누군가 압박 속에 답해야 합니다.
- 하나의 원자적 질문으로 표현합니다. 로트가 실패할 때, 어떤 다른 제품이 그 계보를 공유하는가? — 셋을 묶은 것이 아니라 하나의 질문입니다.
- 답의 형태를 고정합니다. 로트 식별자의 집합. 답의 형태를 미리 정하는 것이 질문을 반증 가능하게 만듭니다. 잘못된 모델은 잘못된 집합을 반환하고, 당신은 그것을 볼 수 있습니다.
- 질문에서 용어를 읽어 냅니다. 로트, 제품, 계보,
derivedFrom— 그다음 모델이 정의해야 할 명사들과 관계입니다. 먼저 적힌 질문은 이미 무엇을 지어야 하는지에 대한 명세입니다.
이것을 통과한 질문은 Grüninger–Fox의 의미에서 잘 형성됩니다: 원자적이고, 단일 산출물로 답할 수 있으며, 반증 가능합니다 — 그리고 아래 23개는 각각 그 기준에 맞춰 작성되었습니다.
이 23개는 허공에서 뽑은 추상이 아닙니다. 각 그룹은 앞선 책들의 캠페인이 이미 누군가에게 묻게 만드는 질문입니다. 계보와 영향은 리콜의 두 반쪽입니다 — 한 로트를 그 기원까지 거슬러, 한 세포 은행을 그것이 닿은 모든 것까지 추적하는 것 — Book 1의 세포 은행이 약속하는 추적성입니다. 궤적과 QbD는 일탈(deviation) 질문입니다. 정제 사슬의 어디에서 품질 속성이 표류했고, 어떤 핵심 공정 파라미터가 그것을 움직이는가입니다. 릴리스는 로트 처분에서의 QA 게이트이고, 바이러스 제거는 제거 입증 자료의 로그 합산이며, 포장은 창고의 집적(aggregation) 질의이고, 출처는 데이터 스튜어드의 조정이며, 특성 규명은 세포 은행 릴리스 게이트이고, 단위와 구조는 데이터 계층의 보증입니다 — 숫자는 결코 맨몸이 아니며, 장비는 그것이 담는 배치와 결코 혼동되지 않습니다. 하나하나가 앞선 책들이 제기하는 실제 필요이며, 온톨로지의 일은 각각을 단 하나의 질의로 답할 수 있게 만드는 것입니다.
아래 카탈로그는 답하는 질문의 종류에 따라 묶여 있어 CQ 번호가 엄격한 순서로 진행되지는 않습니다 — 숫자 순서CQ-01 … CQ-23는 cq-catalog.json에 보존되어 있습니다.
| 그룹 | CQ | 모델이 답해야 하는 질문 |
|---|---|---|
| 계보(Lineage) | CQ-01 | 임의의 하류 물질이 주어졌을 때, 그것은 어떤 물질들로부터 임의의 깊이로 유래하는가? |
| CQ-03 | 원료의약품 로트의 기원 생물반응기 배치는 무엇이고, 그 릴리스 단량체 값은 얼마인가? | |
| 영향(Impact) | CQ-02 | 워킹 세포 은행이 주어졌을 때, 캠페인 전체에서 그것으로부터 내려온 물질은 무엇인가? |
| CQ-04 | 완제의약품 로트가 실패할 때, 어떤 다른 제품이 그 계보를 공유하는가(세포 은행을 통한 형제)? | |
| 궤적(Trajectory) | CQ-05 | 각 정제 단계에서 공정 중 HMW-응집체 값은 얼마인가(품질이 어디서 바뀌었는가)? |
| QbD | CQ-06 | 어떤 공정 파라미터가 주어진 핵심 품질 속성에 영향을 주는가? |
| CQ-07 | CPP에서, 그 affectsQuality 연결과 그것을 실현한 런을 거쳐, 릴리스된 DS 로트까지 — 그 사슬이 해소되는가? | |
| 릴리스(Release) | CQ-08 | 릴리스된 물질 로트는 모든 필수 CQA에 대해 정확히 하나의 규격 내 값을 지니는가? |
| CQ-09 | 릴리스된 로트는 통제된 집합의 상태와 함께, 귀속 가능하게 서명되어 있는가? | |
| CQ-10 | 완제품 로트는 완제 특유의 기준(무균, 외관, 충전 부피)을 충족하는가? | |
| CQ-11 | 규격 외 로트는 정확히 실패하는 경로에만, 그 외에는 어디에도 표시되지 않는가? | |
| 바이러스 제거(Viral) | CQ-12 | 각 직교 제거 단계의 검증된 LRV는 얼마이고, 합산된 총 제거량은 얼마인가? |
| 포장(Packaging) | CQ-13 | 주어진 패키지 안에 전이적으로 담긴 일련번호 부여 단위는 무엇인가? |
| CQ-14 | 담음이 계통과 구별되어 유지되는가? | |
| 출처(Provenance) | CQ-15 | 두 원천 시스템 레코드가 owl:sameAs 과병합 없이 하나의 큐레이션된 결정으로 조정되는가? |
| CQ-16 | ISO IDMP 규제 동일성이 릴리스 게이트가 검증한 바로 그 노드에 부착되는가? | |
| 특성 규명(Characterization) | CQ-17 | 워킹 세포 은행이 완전히 특성 규명되어 세포 은행 게이트에 부합하는가? |
| CQ-18 | 워킹 세포 은행이 검증된 계대 한계 이내인가? | |
| 단위(Units) | CQ-19 | 저장된 모든 수량이 단위를 지니는가 — 맨숫자가 없는가? |
| CQ-20 | 세포주는 어떤 숙주 생물에서, 안정적인 NCBI Taxon IRI(종을 가리키는 전역 웹 식별자 — URL과 같습니다)로, 그 산물을 발현하는가? | |
| 구조(Structural) | CQ-21 | 세포 배양 런은 어떤 용기에서 일어났는가(장비가 배치 물질과 분리되어 있는가)? |
| CQ-22 | 장거리 전이적 derivedFrom 간선이 추론되는가, 그리고 장비가 BFO 물질 존재로 추론되는가? | |
| CQ-23 | disjointness 가드가 심어 둔 혼동(프로세스로 유형이 정해진 Batch, 또는 생물반응기로 유형이 정해진 Batch)을 잡아내는가? |
그 카탈로그의 각 행은 정확히 하나의 결정 가능한 산출물과 하나의 예상 답 형태에 묶입니다 — 이것이 ORSD가 제공하고자 존재하는 추적성입니다. cq-catalog.json에 기록된 check.type이 곧 예상 답의 유형입니다:
답 형태(check.type) | 무엇을 단언하는가 | CQ |
|---|---|---|
row_count | 답 집합이 고정된 크기를 가짐 | CQ-01(11행), CQ-19(0행) |
equals / contains | 답 집합이 명명된 집합과 정확히 같음 / 적어도 포함함 | CQ-02, CQ-04, CQ-05, CQ-06, CQ-13, CQ-15 |
row_match | 특정한 라벨 붙은 행이 존재함 | CQ-03, CQ-07, CQ-20, CQ-21 |
ask | 불리언이 성립함(또는 성립해서는 안 됨) | CQ-09, CQ-14, CQ-16, CQ-18 |
sum | 한 열의 합이 알려진 값이 됨 | CQ-12(ΣLRV = 8.7) |
| SHACL 부합 | 닫힌 세계 게이트가 통과하거나, 심어 둔 오류를 잡아냄 | CQ-08, CQ-10, CQ-11, CQ-17, CQ-23 |
| 추론기 폐쇄 | 추론이 실제로 도출됨 | CQ-22 |
이것은 이 절 첫머리의 잘-형성됨 기준을 기계적으로 만든 것입니다. check.type이 곧 반증 가능한 답의 형태이므로, 원자성과 단일 산출물 답변 가능성은 더 이상 문체상의 주석이 아니라 validate.py가 강제하는 무언가가 됩니다.
카탈로그가 의도적으로 부호화한 두 가지 범위 지정 주의 사항이 있습니다. 릴리스 게이트(CQ-08)는 정확히 다섯 개의 CQA — SEC 단량체, HMW 응집체, CEX 메인 피크, 숙주 세포 단백질, 단백질 농도 — 를 검사합니다; 원료의약품 로트는 잔류 숙주 세포 DNA(8.0 pg/mg)와 엔도톡신(0.5 EU/mg)도 지니는데, 데이터셋은 이를 시험성적서에 보고되는 안전성 속성으로 DS-001에 기록하지만, 워킹 명세 Spec-DS-mAb-A에 맞추기 위해 다섯 CQA 완전성 게이트 밖에 둡니다. 그리고 바이러스 제거 검토(CQ-12)는 그래프가 각 직교 장벽에 대해 기록하는 주장된, 검증된 로그 감소 값을 질의하고 그 합 — 저-pH 불활화 4.5 더하기 바이러스 보유 나노여과 4.2, 합계 8.7 로그 — 을 확인하는 것을 뜻하지, 스파이킹 연구 설계를 재구성하는 것이 아닙니다. 그 설계는 그래프가 가리키는 검증 보고서에 남아 있습니다.
6. 비기능 요구사항
어떤 단일 질문과도 무관하게 모델이 가져야 하는 품질: 접지됨(모든 클래스가 BFO 아래에 자리함); 재사용 우선(공개 온톨로지에 정렬하고, 진정으로 로컬한 것만 새로 발행); 오프라인 검증 가능(validate.py는 네트워크가 필요 없음); 다루기 쉬움(tractable)(모델이 OWL 2 RL — validate.py가 추론하는, OWL 온톨로지 언어의 제한되고 빠르게 추론되는 한 갈래 — 안에 머무르므로, 규칙 기반 OWL-RL 엔진이 완전한 폐쇄를, 즉 규칙이 도출할 수 있는 모든 사실을 한 번에 계산해, 다항 시간 안에 끝냄; derivedFrom은 진정으로 전이적이어서 — A가 B로부터 유래하고 B가 C로부터 유래하면 추론기가 A는 C로부터 유래한다고 추론함 — 계보 사슬을 미리 구체화해 가짜로 꾸민 것이 아니라 추론기가 실제로 존중하는 진짜 owl:TransitiveProperty이며, 모든 카디널리티 제약 밖에 의도적으로 두어 전이성이 기술 논리상 적법하게 유지됨); 진실됨(책의 모든 스니펫은 로드 가능한 데이터셋의 실제 발췌); 이중 언어(EN/KO 출판); 그리고 출판 시 FAIR입니다.
7. 사전 용어집(Pre-glossary)
모델링에 앞서 고정해 두는 소수의 용어로, 두 저자가 하나의 대상에 두 단어를 만들어 내지 않도록 합니다: Material, Equipment, Quality, Process, Information Artifact, Process Parameter; 관계 derivedFrom, affectsQuality, occursIn, contains; 그리고 도메인 용어 CQA, CPP, 세포 은행 계층(RCB/MCB/WCB — 연구·마스터·워킹 세포 은행), LRV(log-reduction value, 로그 감소 값 — 제거 단계가 바이러스를 10의 몇 제곱만큼 줄이는지를 나타내어 4.5 + 4.2 로그가 8.7로 합산됨), IRI(URL과 같이 사물을 모호함 없이 명명하는 안정적인 웹 식별자로, 두 시스템이 같은 존재를 가리키게 함; NCBI Taxon IRI는 종에 대한 공개적이고 해석 가능한 식별자), 릴리스 상태입니다.
핵심(critical)이 무엇을 뜻하는지에 대한 주의 사항인데, CPP→CQA 연결이 이 질문들 절반의 척추이기 때문입니다. 핵심 품질 속성(critical quality attribute, CQA)은 제품 품질을 보증하기 위해 한계 이내로 유지되어야 하는 물리적·화학적·생물학적·미생물학적 속성입니다 — mAb-A의 경우 SEC 단량체와 HMW 응집체(크기 변이체), CEX 메인 피크(전하 변이체), 숙주 세포 단백질(공정 관련 불순물), 단백질 농도(역가)입니다. 핵심 공정 파라미터(critical process parameter, CPP)는 그 범위에 걸친 변동이 CQA에 입증된 영향을 미치는 파라미터로, 품질 위험 평가(ICH Q9)와 실험 계획(design-of-experiments) 연구로 확립되며, 따라서 더 넓은 입증된 허용 범위(proven acceptable range, PAR) 안의 정상 운전 범위(normal operating range, NOR) 이내로 유지됩니다. 데이터셋이 이를 구체적으로 만듭니다: FeedRate는 hasCriticality HIGH(ICH Q9 위험 평가인 RA-01이 확립), NOR 0.35–0.45와 PAR 0.30–0.50(DOE-07이 확립)을 지니고, 단량체 CQA에 affectsQuality합니다 — 바로 CQ-06과 CQ-07이 가로지르는 사슬이며, 핵심성과 범위 공리는 형식화에서 정의됩니다. 수율이나 사이클 시간에만 영향을 주고 CQA에는 영향을 주지 않는 파라미터는 CPP가 아니라 주요(key) 공정 파라미터(KPP)이며, 모델은 그 구별을 유지합니다.
테스트가 되는 요구사항: 실행 가능한 ORSD
역량 질문을 산문으로 적는 것이 통상적인 관행입니다. 이 책은 한 걸음 더 나아가 그것을 기계 판독 가능하고 실행 가능한 산출물로 만듭니다 — 테스트할 수 없는 요구사항은 신뢰할 수 없는 요구사항이기 때문입니다. 위의 카탈로그는 examples/platform/ontology/cq-catalog.json에 바이트 단위로 그대로 미러링되어 있으며, 거기서 각 역량 질문은 자신에게 답하는 산출물과 그것이 산출해야 하는 결과를 명명합니다. 위 표에서 CQ-04를 보겠습니다 — 로트가 실패할 때 어떤 다른 제품이 그 계보를 공유하는가? 다음은 그것의 기계 판독 가능한 쌍둥이, 즉 validate.py가 읽는 바로 그 항목입니다:
{
"id": "CQ-04",
"group": "impact",
"question": "When a drug-product lot fails, which other drug products share its lineage (siblings via the shared cell bank)?",
"query": "CQ-04.rq",
"graph": "raw",
"check": { "type": "equals", "var": "affected", "values": ["DP-001", "DP-002"] }
}
("graph": "raw" 필드는 질의가 어느 그래프에 대해 실행되는지를 선택합니다 — 로드된 그대로의 단언된 데이터인지, 추론기가 도출한 사실을 더한 뒤의 추론된 그래프인지입니다.)
세 종류의 산출물이 23개 질문에 답하며, 그 구분 자체가 각 도구가 무엇을 위한 것인지에 대한 교훈입니다:
- SPARQL 질의가 그중 17개에 답합니다(
queries/에 17개의.rq파일,queries/CQ-01.rq에서queries/CQ-21.rq까지 — SHACL 시나리오가 대신 들어선 자리는 비어 있어 듬성듬성합니다) — 행 수, 결과 집합, 매칭된 행, 또는 합산된 열을 검사하는SELECT이거나, 불리언을 검사하는ASK입니다. - SHACL 게이트가 닫힌 세계의 다섯 질문(CQ-08, CQ-10, CQ-11, CQ-17, 그리고 disjointness 가드인 CQ-23)에 답합니다 — "무언가가 빠져 있거나 잘못되었는가?" 형태의 질문으로, 가진 데이터가 완전하다고 가정합니다. 사실이 언제든 더 추가될 수 있다고 가정하는 SPARQL 및 OWL 추론과는 다릅니다. 이것들은 질의가 던질 수 없는 완전성, 규격 내, 일관성 질문인데, "무언가가 빠져 있는가?"와 "이 혼동이 빠져나갈 수 있는가?"는 존재하는 트리플에 대한 질문이 아니기 때문입니다. CQ-23이 가장 날카로운 경우입니다.
validate.py가 의도적으로 심어 둔 오류(프로세스로 유형이 정해진 Batch, 그다음 생물반응기로 유형이 정해진 Batch)를 주입하고, 셰이프 그래프가 두 번 모두 부적합을 보고할 때에만 게이트가 통과합니다. - 추론기 검사가 순수하게 추론적인 단 하나의 질문(CQ-22)에 답합니다 — OWL-RL 폐쇄가 장거리 계보를 실제로 추론하고 장비를 BFO 물질 존재로 유형 지었다는 것이지, 그 사실들이 손으로 단언된 것이 아니라는 것입니다.
이것이 17 + 5 + 1 = 23입니다 — 카탈로그 전체이며, 각 질문이 그것을 실제로 결정할 수 있는 산출물에 묶여 있습니다.
validate.py는 카탈로그를 읽고, 모든 항목을 실행하고, 역량 질문마다 합격/불합격 한 줄을 출력하며, 단 하나라도 실패하면 0이 아닌 값으로 종료합니다. 이제 요구사항 문서와 테스트 스위트는 같은 파일입니다. 이후 어느 장이 클래스나 간선을 추가할 때, 관련 CQ-XX가 여전히 통과하기 전에는 성공을 주장할 수 없습니다 — 이것이 바로 SAMOD의 테스트 우선 루프이며, 선의가 아니라 스크립트로 강제됩니다. 다음 장은 그 테스트가 실행되는 대상 데이터셋을 소개하고, 전체 표가 초록색인 모습을 보여 줍니다; 그 표가 나타날 때 세 산출물 구분은 각 행에서 읽어 낼 수 있는 증거로 되돌아옵니다 — CQ-01의 SPARQL 행 수("11 row(s)"), CQ-08의 SHACL 판정("DS-001 release panel complete and in spec"), 그리고 CQ-22에 대한 추론기의 말("transitive lineage + equipment-is-material inferred")입니다.
하니스는 전적으로 오프라인으로, 그리고 표준 오픈소스 부품 위에서 돌아갑니다 — rdflib가 세 개의 Turtle 파일을 하나의 메모리 내 그래프로 파싱하고, 규칙 기반 owlrl 엔진이 CQ-22가 읽는 OWL 2 RL 폐쇄를 계산하며, pyshacl가 닫힌 세계 게이트를 실행합니다 — 그래서 리포지토리를 가진 누구든 네트워크 없이, 라이선스 추론기 없이, 노트북에서 모든 합격/불합격 줄을 다시 도출할 수 있습니다. 이 선택이 ORSD를 산문 템플릿이 아니라 실행 가능한 산출물로 만들며, 오픈소스 책이 공장 규모의 디지털 스레드 지식 그래프를 세우는 바로 그 RDFLib-및-SHACL 스택과 동일합니다 — 그 그래프는 Apache Jena Fuseki 트리플스토어에서 규모 있게 서빙됩니다. 이 카탈로그는 그 책의 두 가지 교과서적 역량 질문(계보와 기원 배치 단량체)을 23개로 키워 빌드를 게이트로 걸게 만든 것입니다.
ORSD는 학습하는 모델이 평가받는 기준 진실이다
역량 질문 하니스와 머신러닝 검증 하니스는, 구조적으로 두 가지 다른 산출물을 겨냥한 동일한 발상입니다. 동반 ML 책은 해시로 고정된 데이터셋에 대해 미리 정해진 인수 게이트에 비추어 모델을 평가하고, 증거가 기준에 못 미치면 0이 아닌 값으로 종료합니다; 이 장은 미리 정해진 23개 역량 질문에 비추어 그래프를 평가하고, 하나라도 실패하면 0이 아닌 값으로 종료합니다. 그 평행은 장식이 아닙니다 — 그것이 바로 모델을 규율하는 같은 ORSD가 그 위에 선 AI가 평가받는 기반이기도 한 이유이며, 제3절이 열거한 검색 증강 AI 최종 용도가 가리키기만 하는 세 가지 ML 규율을 날카롭게 합니다.
행 단위가 아니라 그룹 단위 평가. 인스턴스의 그래프는 독립적인 행의 평평한 표가 아닙니다. 한 캠페인의 수백 개 공정 중 측정값은 모두 하나의 세포 은행에서 하나의 생물반응기 런을 거쳐 내려오므로, 독립적이지 않고 derivedFrom으로 상관되어 있습니다 — 그리고 그 행들을 무작위로 분할해 평가한 모델은 모든 테스트 행의 형제를 이미 학습에서 보았으므로, 진정으로 새로운 배치에서는 무너지는 우호적인 점수를 보고합니다. 정직한 분할은 한 배치의 인스턴스 전부를 한 번에 보류합니다 — 그룹 단위, 리브-원-배치-아웃 교차검증(grouped, leave-one-batch-out cross-validation) — 그리고 그래프는 이미 그룹화 키를 지니고 있습니다. CQ-04가 걷는 계보 간선이 바로 어떤 인스턴스가 같은 독립 단위에 속하는지를 알려 주는 조인입니다. 계보와 영향 질문에 답하는 구조가 곧 허용 가능한 평가 폴드를 정의하며, 이는 모델과 검증 장이 ML 쪽에서 말하는 지점입니다.
SHACL로 검증된 학습 데이터. 위의 다섯 닫힌 세계 게이트(CQ-08, CQ-10, CQ-11, CQ-17, CQ-23)는 부적합한 릴리스를 거부하도록 작성되었습니다; 동일한 SHACL 셰이프가 부적합한 학습 집합이나 부적합한 검색을 거부합니다. 부분 그래프가 모델에 — 학습용으로든, 답을 접지하는 용으로든 — 건네지기 전에, 부합성은 모든 로트가 derivedFrom 부모를, 모든 CQA가 단위를 지닌 값(CQ-19)을, 모든 서명이 서명자(CQ-09)를 지님을 보증하며, 모델이 학습 기억으로 조용히 메워 버릴 부분 로드가 아님을 보증합니다. 셰이프에 실패한 그래프는 바로 유창한 모델이 망설임 없이 그 위에 서사를 펼치는 텅 빈 입력이므로, 릴리스 게이트는 학습 말뭉치에 대한 데이터 품질 게이트를 겸합니다.
검증의 역설: 모델 대 추론된 그래프. 두 하니스는 또한 다르게 실패하며, 그 차이가 접지의 전체 논거입니다. 통계 모델은 내부 신호 없이 자신 있게 틀릴 수 있습니다 — 학습 영역 안에서만큼 쉽게 그 밖에서도 또렷한 숫자를 반환합니다. 추론된 그래프는 그럴 수 없습니다. derivedFrom은 진짜 owl:TransitiveProperty이므로, CQ-22가 추론하는 계보는 추정된 것이 아니라 함의된 것이고, CQ-23이 심는 disjointness 가드는 모순(프로세스로 유형이 정해진 Batch)을 조용한 오예측이 아니라 검출 가능한 오류로 만듭니다. 그것이 실행 가능한 ORSD가 모델을 세울 올바른 토대인 이유입니다. 그것은 추론과 제약으로 사실을 보증하는데, 모델은 그것을 근사할 뿐입니다 — 그리고 접지를 위한 검색 질의는, 바이트 단위로, 하니스가 이미 초록색으로 유지하는 계보 역량 질문입니다.
미해결 과제: 요구서는 판단이지 증명이 아니다
ORSD는 모델을 규율하지만, 옳은 질문이 선택되었음을 보증하지는 못합니다. 역량 질문 카탈로그는 무엇이 중요한가에 대한 주장으로, 어려운 경우들이 알려지기 전에 사람이 내린 것입니다 — 그리고 23개 질문에 모두 답하는 모델이라도, 아무도 적어 둘 생각을 못 한 24번째 질문에는 여전히 쓸모없을 수 있습니다. 범위는 영원한 실패 양식입니다. 벽에 부딪힌 모든 조사자는 "딱 하나만 더" 존재를 원하고, 규율 없이 자라는 ORSD는 그것이 막으려던 경계 없는 모델이 되어 버립니다. 그래서 ORSD는 온톨로지 자체와 동일한 변경 통제 아래에 있는 살아 있는 문서입니다. 새 역량 질문이 제안되고, 정당화되며, 자신의 테스트와 함께 받아들여지거나 이유와 함께 거부됩니다. 실행 가능한 카탈로그는 그 거부를 정직하게 만듭니다 — cq-catalog.json에 없는 질문은 모델이 답하기로 약속하지 않은 질문이며, 그렇다고 소리 내어 말합니다.
왜 중요한가
요구사항에서 출발하는 것이 온톨로지를 유한하고, 테스트 가능하고, 신뢰할 수 있게 유지하는 길입니다. ORSD가 없으면 "모델이 완성되었는가?"에는 답이 없고 "모델이 옳은가?"에는 테스트가 없습니다. ORSD가 있으면 둘 다 validate.py를 실행하고 23줄을 읽는 것으로 환원됩니다. 이 책의 이후 모든 장은 자신이 봉사하는 역량 질문을 가리킴으로써 자신의 클래스와 공리를 정당화합니다 — 그리고 그럴 수 없다면, 그 내용은 모델에 속하지 않습니다. 그것이 공학적으로 만들어진 온톨로지와 그저 쌓여 굳은 어휘의 차이입니다.
현실 세계에서는
역량 질문 규율은 학계의 전설이 아닙니다. 그것은 산업이 실제로 채택하는 방법론들의 척추입니다. NeOn의 ORSD 템플릿은 유럽 온톨로지 프로젝트 전반에서 쓰이고 표준 요구사항 산출물로 가르쳐집니다 [2]; SAMOD의 테스트 우선 루프는 애자일 소프트웨어 팀이 이미 일하는 방식을 반영하며, 그래서 공학 조직으로 깔끔하게 전이됩니다 [3]; 그리고 LOT는 명시적으로 산업 온톨로지 개발을 위해 만들어졌고 표준 기구와 대기업에서 재사용 가능한 어휘를 출판하는 데 쓰입니다 [4]. 여전히 드문 것은 — 그리고 이 책이 주장하는 것은 — 역량 질문을 실행 가능하게 만들어, 요구사항과 회귀 스위트가 결코 어긋나지 않게 하는 것입니다.
이러한 동적 테스트에는 정적 보완물도 있습니다. OOPS!(OntOlogy Pitfall Scanner) 같은 도구는 모델 자체를 읽어 구조적 냄새를 표시합니다 — 누락된 disjointness 선언, 도메인이나 레인지가 없는 속성, 연결되지 않은 채 남겨진 클래스 — 바로 CQ-23의 disjointness 가드와 CQ-08/CQ-19의 완전성 게이트가 런타임에 잡아내는 그 결함들입니다. 스캐너는 정지 상태의 모델을 검사하고, validate.py는 그것을 데이터에 비추어 실행합니다. 성숙한 프로젝트는 둘 다 돌리며, 이 책은 형식화와 유지보수에서 OOPS!로 되돌아옵니다.
기능 요구사항은 또한 그래프의 사실이 어디서 오는지를 규정하며, 이는 데이터 관리 책이 지도화하는 바로 그 공장 데이터 스택입니다. derivedFrom 계통과 장비-대-배치 분리(CQ-21)는 ISA-95 / IEC 62264 이야기입니다 — 물질 로트, 장비 요소, 그리고 배치가 거치는 ISA-88 페이즈 — 이고, 단위를 지닌 측정값(CQ-19)은 데이터 책이 맥락 없는 Level-0 공정 값인 맨 OPC UA 태그를 유형 있는 수량으로 들어 올린다고 부르는 작업이며, 릴리스 레코드(CQ-08)는 B2MML 배치 레코드 메시지가 Level 3과 Level 4 사이에서 나르는 종류의 사실입니다. 그래프는 데이터 그림자 — 배치가 드리우는 완전한 디지털 레코드 — 를 하나의 추론된 형태로 조정한 것이고, ORSD는 그것이 어떤 그림자를 지켜야 하는지를 고정하는 것입니다. 위의 두 요구사항은 데이터 책의 CSV-에서-CSA 장과 똑같은 방식으로 조용히 규제적입니다: 귀속 가능한 서명 CQ-09이 검사하는 것과 통제된 상태 집합은 ALCOA+ 속성과 21 CFR Part 11 / EU Annex 11 전자 기록 통제에 대한 온톨로지의 표현이며, 실행 가능한 하니스가 모든 트리플을 균일하게 테스트하기보다 릴리스 결정에 영향을 주는 사실에 합격/불합격 게이트를 집중하므로, 그것 자체가 품질 책이 주장하는 위험 기반 CSV-에서-CSA 전환의 한 사례입니다 — 종이 작업을 고르게 펴는 것이 아니라 환자 위험에 비례하는 보증입니다.
핵심 용어
- 역량 질문(Competency question, CQ) — 완성된 온톨로지가 답할 수 있어야 하는 질의로, 모델링 전에 작성됩니다; 요구사항의 단위이자, 여기서는 테스트의 단위이기도 합니다.
- ORSD(온톨로지 요구사항 명세 문서, Ontology Requirements Specification Document) — 온톨로지의 목적, 범위, 사용자, 용도, 기능 요구사항(CQ 카탈로그), 비기능 요구사항, 사전 용어집을 고정하는 합의된 요구서.
- NeOn 방법론 — 시나리오 기반 온톨로지 공학 방법; ORSD와 제2부가 따르는 재사용 프로세스의 출처.
- SAMOD — 온톨로지 개발을 위한 단순화된 애자일 방법론; 각 모델링 장이 돌리는 테스트 우선 "모델릿" 루프.
- LOT(Linked Open Terms) — 재사용 가능한 어휘의 요구사항 → 구현 → 출판 → 유지보수를 위한 산업 지향 방법.
- 실행 가능한 역량 질문(Executable competency question) —
cq-catalog.json에서 SPARQL 질의, SHACL 게이트, 또는 추론기 검사에 묶여,validate.py가 합격/불합격 테스트로 실행하는 CQ. - SPARQL — 그래프 데이터를 위한 질의 언어; "어떤 행이 매칭되는가?"를 묻습니다 — 지식 그래프를 위한 SQL에 해당합니다.
- SHACL — 검증 언어; 그래프가 이미 보유한 데이터에 비추어 "필수인 무언가가 빠져 있거나 규격을 벗어났는가?"를 검사합니다(닫힌 세계 질문).
- 추론기(Reasoner) — 모델이 함의하는 새로운 사실(예:
derivedFrom의 전이적 계보 간선)을 도출하는 도구로, 손으로 단언된 사실만 읽는 것이 아닙니다. - 그룹 단위(리브-원-배치-아웃) 교차검증(Grouped (leave-one-batch-out) cross-validation) — 그래프의
derivedFrom계보를 그룹화 키로 삼아 한 배치의 상관된 인스턴스 전부를 한 번에 보류하여 모델을 평가하는 것으로, 형제 행이 학습에 새어 들어 보류 점수가 우호적으로 부풀려지지 않게 합니다. - SHACL로 검증된 학습 데이터(SHACL-validated training data) — 릴리스 게이트의 SHACL 셰이프를 사용해, 모델이 학습하거나 답을 접지하기 전에 부분 그래프가 완전하고 유형이 잘 부여되었음을 보증하는 것으로, 모델이 텅 빈 입력을 조용히 메우지 못하게 합니다.
이것이 이끄는 곳
요구서가 작성되고 실행 가능해졌습니다. 다음 장 러닝 예제와 증명 하니스는 이후 모든 장이 모델링하는 단 하나의 단클론 항체 캠페인, 그것을 담는 데이터셋 파일들, 그리고 이 23개 역량 질문 카탈로그를 23개 통과 테스트의 표로 바꾸는 하니스를 소개합니다 — 이 책 전체가 지켜 내도록 지어진 초록색 기준선입니다.