본문으로 건너뛰기

개념화: 관계, derivedFrom, 그리고 계보의 척추

📍 현재 위치: 제3부 · 개념화 — 지난 장의 클래스들을 관계로 서로 연결하는 라이프사이클 단계입니다. 방법론: NeOn의 개념화 활동을 SAMOD의 테스트 우선 루프 위에서 돌립니다(명세 장에서 소개한 두 온톨로지 공학 방법론) — 각 관계는 역량 질문(competency question)에 답함으로써 자기 자리를 얻습니다. 역량 질문이란 완성된 온톨로지가 반드시 답할 수 있어야 하는 평이한 질문으로, 여기서는 합격/불합격 인수 시험으로 쓰입니다(23개가 명세에서 CQ-01…CQ-23으로 번호 매겨져 있습니다). 실행 예제는 실제 CHO(Chinese Hamster Ovary, 업계 표준 항체 생산 세포주) 단클론 항체(mAb) 캠페인입니다.

클래스의 분류 체계는 라벨이 붙은 상자들의 집합입니다. 그것을 그래프 — 걸어 다니고, 질의하고, 추론할 수 있는 무언가 — 로 만드는 것은 상자들 사이의 관계(relations)입니다. 이 장은 하중을 지는 관계들을 개념화하며, 그 무게의 대부분을 단 하나의 관계 bp:derivedFrom에 씁니다. 그 한 간선이 단클론 항체 로트의 디지털 스레드(제품 제조의 모든 단계를 잇는 연결된 기록) 전체가 매달리는 척추이기 때문입니다. 환자가 받는 모든 바이알은 한 홉 한 홉, 워킹 세포 은행(특성 규명되어 얼려 둔 생산 세포의 원료 비축분으로, 아래에서 충분히 설명합니다)의 얼린 바이알 하나로 거슬러 올라갑니다. 아래의 습식 실험실 용어들 — 유가식, 역가, 당화, 형질주입, 세포 은행 — 은 1권의 바이오프로세싱 개요에서 평이한 말로 다루며, 이 장은 그것들을 다시 가르치기보다 모델링합니다. 이 장이 세우는 나머지 세 관계 — affectsQuality, occursIn, contains — 는 각각 서로 다른 제조 질문에 답하며, 그중 하나인 contains는 리콜 범위를 정해야 할 때 계보와 혼동되지 않기 위해 바로 그 목적으로 존재합니다.

쉽게 말하면

가계도에는 두 종류의 선이 있습니다. 하나는 "~의 후손"이라고 말합니다 — 무슨 일이 있어도 조부모는 영원히 당신의 조상입니다. 다른 하나는 "지금 같은 집에 산다"고 말합니다 — 누군가 이사를 나가면 바뀌는 선입니다. 둘을 혼동하면 헛소리가 됩니다("내 룸메이트는 내 조상이다"). 바이오프로세스 그래프에도 똑같은 두 선이 있습니다. derivedFrom은 모든 항체 바이알을 하나의 얼린 세포 은행에 뿌리내리게 하는 영구적인 "~로 만들어졌다"는 혈통이고, contains는 운송 케이스를 열 때마다 바뀌는, 가변적인 "지금 안에 담겨 있다"입니다. 이 장은 둘 다 그리되 일부러 따로 떼어 놓고, 어떤 공정 손잡이가 약의 어떤 품질에 영향을 주는지 말해 주는 품질 설계(Quality by Design) 간선을 더합니다.

질문에서 출발하라

명세의 네 가지 역량 질문이 이 장을 빚어내며, 그것들은 네 관계에 깔끔하게 나뉘어 걸립니다. CQ-06("어떤 공정 파라미터가 단량체 순도에 영향을 주는가?")은 affectsQuality가 직접 답하며 — 단량체 순도는 항체의 대표 출하 속성으로, 크기 배제 크로마토그래피(SEC)로 온전한 단량체로 용출되는 분율이며, 고분자량 응집체나 저분자량 단편과 대비됩니다. CQ-21("세포 배양 작업은 어느 용기에서 일어났는가?")은 occursIn이 답하는데, 이 간선은 배치 물질과 그 생물반응기를 별개의 존재로 유지하게 해 줍니다. CQ-13("주어진 팔레트 안에 전이적으로 담긴 직렬화 바이알은 무엇인가?")은 contains 순회이고, CQ-14("담음(containment)은 계보와 구별되어 유지되는가?")은 containsderivedFrom이 결코 서로 무너져 합쳐지지 않음을 증명하는 가드입니다 — 계보로 리콜 범위를 정하는 것과 실수로 운송 카톤을 리콜하는 것 사이의 차이입니다. 이 넷을 시야에 두고, 아래의 모든 관계는 자신의 제조 질문에 답을 줄 수 있게 만드는지로 판정됩니다. 이 장이 그 무게를 특히 derivedFromcontains에 싣는 까닭은, 그 둘이 이 장의 유일한 두 전이적 관계 — 부주의하게 작성하면 장거리 순회가 조용히 합쳐져 버릴 짝 — 이기 때문입니다. 그래서 affectsQualityoccursIn이 아니라 이 둘에 작성 절차를 적용해 보는 것이, 관계가 어떻게 만들어지는지와 리콜에서의 단 하나의 위험한 혼동이 어떻게 설계로 제거되는지를 둘 다 보여 줍니다.

모든 것을 결정하는 갈림: 객체 속성 대 데이터타입 속성

OWL(Web Ontology Language, 모델을 작성한 W3C 표준)은 어떤 관계를 작성하기 전에 못 박아 둘 가치가 있는 구별 하나를 긋습니다. 객체 속성(object property)은 한 사물을 다른 사물에 잇고, 데이터타입 속성(datatype property)은 한 사물을 리터럴 값에 잇습니다 [1]. bp:derivedFrom은 한 로트를 부모 로트에 관계 짓습니다 — 세포 은행까지 거슬러 걸어 갈 수 있는 간선입니다. bp:monomerPct는 원료의약품 로트를 숫자 98.611에 관계 짓습니다 — 그 SEC %단량체 출하 측정값(산물 중 온전한 단량체로 용출되는 비율)으로, 읽을 수 있는 값입니다. 이것이 관계와 측정의 차이이며, 둘 중 어느 것을 작성할지를 결정합니다. 계보 척추는 끝까지 객체 속성이고, 항체 로트가 맞춰야 할 출하 수치 — 단량체 순도, 고분자량 응집체, 전하 변이체 분포, 단백질 농도 — 는 로트에 매달린 데이터타입 속성입니다. 이 장이 세우는 네 객체 속성은 다음과 같이 늘어섭니다 — 각 간선을 못 박는 도메인과 레인지, 둘 중 어느 것이 장거리 순회로 닫히는지, 각각이 답하는 역량 질문, 그리고 각각이 정렬되어 올라가는 외부 용어(OBO Relation Ontology의 RO_0001000 derives from [5]와 BFO의 BFO_0000066 occurs in [6])입니다:

관계도메인 → 레인지전이적?답하는 질문정렬 대상
derivedFromMaterial → MaterialCQ-01/02/04 계보와 영향RO derives from (RO_0001000)
affectsQualityProcessParameter → QualityAttribute아니오CQ-06 QbD 링크로컬(1:1 표준 없음)
occursInProcess → Equipment아니오CQ-21 작업-용기BFO occurs in (BFO_0000066)
containsPackage → MaterialCQ-13 포장 순회; CQ-14 가드로컬(계보에서 분리)

두 전이적 행은 이 장이 가장 애써 떼어 놓는 것입니다: 둘 다 장거리 순회로 닫히므로, 합쳐 버리면 운송 카톤이 조상 행세를 하게 됩니다. 여기 그 솔기가 있으며, 두 종류 모두 어휘에서 그대로 선언됩니다. (Turtle — 이 책 전체에서 쓰는 RDF의 텍스트 구문 — 에서 a는 "~이다"를 뜻하고, 세미콜론은 같은 주어에 대한 또 다른 사실을 더하며, bp:, owl:, rdfs: 같은 콜론 접두사는 단지 용어에 이름공간을 붙일 뿐입니다. 각 블록을 둘러싼 산문이 그것이 무엇을 말하는지 설명합니다.)

# bioproc.ttl — object property (an edge to walk) vs datatype property (a value to read).
bp:derivedFrom a owl:ObjectProperty , owl:TransitiveProperty ;
rdfs:label "derived from" ;
rdfs:domain bp:Material ; rdfs:range bp:Material ;
skos:definition "Relates a material to the parent material it originated from; transitive, so lineage is inferable to any depth." .

bp:monomerPct a owl:DatatypeProperty ; rdfs:label "SEC %monomer" .
bp:passageNumber a owl:DatatypeProperty ; rdfs:label "passage number" ; rdfs:range xsd:integer .

derivedFrom에 붙은 rdfs:domainrdfs:range는 문서가 아닙니다 — 규칙입니다. 양 끝이 모두 bp:Material에 고정되어 있기 때문에, X derivedFrom Y를 단언하면 X와 Y가 모두 물질로 유형이 정해지고, 만약 Y가 bp:Material과 disjoint한 무언가 — 배치 기록에 서명한 사람, 장비 한 점, 프로세스 — 로 선언되어 있었다면 그래프는 비일관(inconsistent)으로 표시됩니다. 느슨한 간선이 유형 있는 간선이 됩니다. 이것이 중요한 이유는 계보 간선이 여러 출처 시스템 — 전자 실험 노트(ELN), 제조 실행 시스템(MES), 실험실 정보 관리 시스템(LIMS) — 에서 적재되기 때문이며, 한 로트의 부모를 그것을 돌린 작업자나 그것이 자란 생물반응기로 가리키는 부주의한 적재는 계보 순회를 조용히 오염시키는 바로 그런 종류의 오류입니다. 도메인과 레인지는 그 오류를 조용한 거짓 대신 표시된 모순으로 바꿔 놓습니다.

관계는 어떻게 작성되었는가. 위 표의 모든 간선은 같은 짧은 절차로 쓰였습니다 — 명세의 역량 질문 레시피의 관계 수준 유비물 — 그리고 이 장의 나머지가 기대고 있는 척추인 derivedFrom에 대해 공개적으로 해 볼 가치가 있습니다:

  1. 역량 질문에서 동사를 읽어 낸다. CQ-01은 주어진 물질은 어떤 물질들에서 유래하는가?를 묻습니다. 관계의 이름은 질문의 동사를 통째로 들어 올린 것입니다: derive frombp:derivedFrom. (CQ-13의 팔레트 안에 무엇이 담겨 있는가?에 같은 단계를 적용하면 bp:contains가 나옵니다.)
  2. 질문의 두 명사에서 도메인과 레인지를 못 박는다. 물질은 물질에서 유래하므로 양 끝은 모두 bp:Material입니다. 그것들을 못 박는 것이 잘못된 적재 — 부모가 작업자나 용기인 경우 — 를 순회를 오염시키는 대신 모순으로 표시되게 만듭니다.
  3. 질문이 강제하는 BFO/RO 상위 속성과 속성 특성을 선언한다. CQ-01은 어떤 깊이로든이라고 말하는데, 이는 owl:TransitiveProperty에 대한 요청입니다. 그리고 이 분야에 "한 물질이 다른 물질에서 나온다"에 대한 충실한 용어가 이미 있으므로, derivedFromalign.ttl에서 Relation Ontology의 derives from(RO_0001000)의 rdfs:subPropertyOf로 선언됩니다 [5] — 충실하게 들어맞는 기존 표준 용어가 있을 때는 그것을 재사용하고, 충실한 부모가 없을 때만 새 로컬 용어를 주조(coining)합니다(이는 정확히 affectsQuality의 경우입니다).
  4. 간선이 이제 답하는 역량 질문의 이름을 붙여, 시험 가능하게 만든다. derivedFrom은 CQ-01/02/04에 묶여 있습니다. 나중의 편집이 계보 순회를 깨면 그 시험들이 빨갛게 됩니다. 이렇게 쓰인 관계는 이미 그것이 만족해야 할 질의의 명세입니다.

contains에 같은 네 단계를 돌리면, 3단계에서 일부러 다른 답에 도달합니다 — derivedFrom처럼 전이적이지만, 그것의 하위 속성으로는 선언되지 않습니다 — 그리고 그 단 하나의 갈라짐이 이 장이 담음(한 단위가 지금 무엇 안에 포장되어 있는가)과 계보(한 물질이 무엇으로 영구히 만들어졌는가)를 떼어 놓는 까닭 전부이며, CQ-14가 지키려고 존재하는 구별입니다.

단 하나의 전이적 척추: derivedFrom

전이성(transitivity)은 이 책에서 가장 가치 있는 단 하나의 공리이며, 그것은 한 속성 위에 삽니다 [1]. bp:derivedFrom a owl:TransitiveProperty를 선언하면 추론기는 만약 SEED-001 derivedFrom SEEDFLASK-001이고 SEEDFLASK-001 derivedFrom WCB-CHO-001이면 SEED-001 derivedFrom WCB-CHO-001임을 알고 — 그리고 홉을 거듭하며, 원료의약품 DS-001이 누구도 단 하나의 장거리 링크를 단언하지 않았는데도 연구 세포 은행까지 죽 거슬러 올라가 유래함을 압니다. 단언되는 것은 직속 부모 간선뿐입니다. 실행 예제에서 DS-001은 조상이 열한 개이므로, 로트 자신을 포함하면 계보 사슬은 물질 열두 단계 깊이이며, 시드 트레인은 특정 캠페인의 구체적 간선이 처음 놓이는 곳입니다: WCB-CHO-001 바이알 하나를 해동해 진탕 플라스크를 거쳐, 그다음 시드 생물반응기를 거쳐 확장하며, 각 스케일업은 한 물질을 소모하고 다음 물질을 산출하는 프로세스입니다.

# instances.ttl — the seed train lays the first derivedFrom edges of the campaign, passage climbing.
bp:SEEDFLASK-001 a bp:ShakeFlaskCulture ; rdfs:label "shake-flask seed culture" ;
bp:derivedFrom bp:WCB-CHO-001 ; # rooted in the cell bank
bp:participatesIn bp:EXP-001 ;
bp:passageNumber 12 .
bp:SEED-001 a bp:SeedBioreactorCulture ; rdfs:label "SEED-001 (seed bioreactor culture)" ;
bp:derivedFrom bp:SEEDFLASK-001 ; # ...one hop back to the shake flask
bp:participatesIn bp:EXP-002 ;
bp:passageNumber 16 . # the count carried forward, checkable at release
bp:BATCH-2026-001 a bp:Batch ; rdfs:label "BATCH-2026-001" ;
bp:derivedFrom bp:SEED-001 . # ...and so, transitively, back to WCB-CHO-001

뿌리에 계보가 필요한 이유: 세포 은행 계층

이 모든 간선이 향해 올라가는 노드는 임의의 것이 아닙니다. 포유류 세포 항체 제조는 세포 기질을 계층(tiers)으로 구축합니다 — 연구 세포 은행(research cell bank, RCB), 거기서 뽑은 마스터 세포 은행(master cell bank, MCB), 그리고 마스터에서 뽑은 워킹 세포 은행(working cell bank, WCB) — 그리고 각 일상 캠페인은 WCB 바이알 하나에서 접종되어, 드물고 대체 불가능한 마스터가 천천히 소모됩니다. 이것은 선택적인 정리정돈이 아닙니다. 계층 구조는 세포 기질에 대한 규제 기대이며 [4], 미래의 모든 로트의 동일성, 무균성, 바이러스 안전성 전체가 특성 규명된 얼린 기원 위에 놓이기 때문입니다. 모델은 이 계층을 bp:CellBank 아래의 작은 분류 체계로 만들고 — 결정적으로 — 그것들을 상호 disjoint로 선언하여, 단일 은행이 결코 동시에 두 계층으로 유형이 정해질 수 없게 합니다:

# bioproc.ttl — the cell-bank tiers, and the axiom that keeps a bank in exactly one tier.
bp:CellBank a owl:Class ; rdfs:subClassOf bp:Material ; rdfs:label "Cell bank" .
bp:ResearchCellBank a owl:Class ; rdfs:subClassOf bp:CellBank ; rdfs:label "Research cell bank (RCB)" .
bp:MasterCellBank a owl:Class ; rdfs:subClassOf bp:CellBank ; rdfs:label "Master cell bank (MCB)" .
bp:WorkingCellBank a owl:Class ; rdfs:subClassOf bp:CellBank ; rdfs:label "Working cell bank (WCB)" .
[] a owl:AllDisjointClasses ; owl:members ( bp:ResearchCellBank bp:MasterCellBank bp:WorkingCellBank ) .

데이터셋에서 이 계층들은 그 자체가 derivedFrom 사슬입니다 — WCB-CHO-001 derivedFrom MCB-CHO-001 derivedFrom RCB-CHO-001 — 그래서 척추는 워킹 은행에서 시작하지 않고, 마스터와 연구 은행을 거쳐 가장 첫 번째 얼린 앰풀까지 올라갑니다. 워킹 은행은 또한 척추에서 옆으로 뻗어 그것을 쓸 수 있게 만드는 사실들에 닿습니다: expresses bp:mAb-A(생산하는 항체)이고, bp:hasClone이 그것이 유래하는 마스터 은행에 단언되어 있기 때문에 그 세포주가 선택되어 나온 단일 세포 클론 bp:CLONE-7로 전이적으로 되돌아 가리킵니다. 발현을 수행하는 CHO 숙주는 문자열이 아닙니다 — bp:WCB-CHO-001 bp:hasHostOrganism bp:CHO-host, 조작된 세포주가 지니는 바로 그 bp:CHO-host 인스턴스 — 그래서 "어떤 생물이 이 산물을 만드는가?"는 NCBI Taxonomy(생물에 대한 외부의 권위 있는 등록부)에 정렬된 하나의 공유 개체로 해결됩니다 — 철자가 표류할 수 있는 열두 곳에 자유 입력된 단어 "CHO"가 아니라, 숙주를 언급하는 모든 곳이 해결해 가는 하나의 거버넌스된 식별자입니다.

은행들이 분주되어 나오는 세포 자체가 occurrent의 산출물입니다 — bp:CELLLINE-001 createdBy bp:TF-001, 즉 유전 구성체를 입력으로 받아 조작된 세포주를 출력으로 산출하는 형질주입입니다(createdBy는 도메인이 bp:CellLine으로 제한되어 있어 은행이 아니라 세포주에 붙습니다). 은행은 그다음 그 세포주의 얼린 분주물입니다. 그 단계를 (각주가 아니라) 프로세스로 모델링하는 것이 "이 세포주는 어디서 왔는가?"를 개발 보고서의 한 단락이 아니라 한 홉짜리 답으로 만들어 줍니다.

계대 수는 같은 사슬을 타고 흐른다

계대 수(passage count) — 배양이 몇 번 분할되고 다시 자랐는가 — 는 계보를 타고 흐릅니다. 워킹 세포 은행은 passageNumber 8을, 진탕 플라스크 배양은 12를, 시드 생물반응기 배양은 16을 지니며, 각 확장은 세대를 더합니다 [1]. 계대 수는 장부 기록이 아닙니다: 생산성이 표류하고 산물 품질이 바뀌기 전까지 살아 있는 세포를 얼마나 오래 키울 수 있는지를 한정하므로, 검증된 계대 한계(validated passage limit)(여기서는 bp:PassageLimit-mAb-A bp:validatedPassageLimit 40)는 배치가 반드시 지켜야 할 거버넌스 제약입니다. 그 수가 각 물질에 붙은 데이터타입 속성이고 계보가 그것들 사이의 전이적 객체 속성이기 때문에, 그래프는 GMP 질문 이 배치는 검증된 계대 한계 안의 세포에서 접종되었는가?를 실험 노트에서 수작업으로 재구성하는 대신 조인으로 답합니다 — 뿌리에서 확립된 사실이 트레인을 따라 누적된 수와 만나는 것입니다.

derivedFrom은 두 개의 rdfs:subPropertyOf 정련 — bp:fromBatchbp:includedFraction — 을 지니므로, 더 구체적인 하류 간선(Protein A 포획 풀에 포함된 정화된 분율, 배치에서 나온 물질)도 여전히 추론기가 걷는 일반 계보 간선을 함의합니다. 이 정련들은 계보가 진정으로 뒤로 갈라지는 단 한 곳 — 포획 풀 — 에서 그 값을 합니다. 세 번의 컬럼 주기가 각각 용출액을 산출하지만(bp:ELU-001a, bp:ELU-001b, bp:ELU-001c, 각각 정화 수확물을 derivedFrom), 풀링 결정은 둘만 포함합니다: bp:PApool-001 includedFraction bp:ELU-001a , bp:ELU-001bbp:PApool-001 fromBatch bp:BATCH-2026-001. includedFractionfromBatch가 둘 다 derivedFrom의 하위 속성이기 때문에, 추론기는 여전히 풀에서 수확물과 배치까지 일반 척추를 걸어 올라가지만 — 이제 기록은 갈림을 익명의 배치 간선 하나로 무너뜨리는 대신 어느 주기가 풀링되었는지를 말합니다. 제외된 주기 bp:ELU-001c는 형제 용출액으로서 여전히 도달 가능하지만 올바르게 풀의 includedFraction아닙니다: 무엇이 빠졌는지 기억하는 계보가 조사가 실제로 쓸 수 있는 계보입니다(구체적 개체들은 인스턴스 장에 놓입니다).

왼쪽에서 오른쪽으로 읽는 계보 사슬: 계대 8의 워킹 세포 은행 WCB-CHO-001이 진탕 플라스크 SF-01에서 프로세스 EXP-001을 통해 계대 12의 진탕 플라스크 배양 SEEDFLASK-001로 확장되고, 이것이 시드 생물반응기 SBR-01에서 EXP-002를 통해 계대 16의 시드 생물반응기 배양 SEED-001로 확장되며, 이것이 BR-101에서 생산 배치 BATCH-2026-001을 산출하는 세포 배양 런 CCP-001의 입력입니다. 점선으로 된 전이적 derivedFrom 호가 배치에서 세포 은행으로 거슬러 이어지고, 주석은 계대 8, 12, 16이 모두 그 안에 드는 검증된 계대 한계 40을 기록합니다. 작동 중인 전이적 척추: 각 확장은 한 세포 물질을 다음 것으로 바꾸는 프로세스이고, 직속 derivedFrom 간선만 단언되며, 점선 호는 추론기가 추론하는 것입니다 — 배치는 누구도 진술하지 않은 홉들을 거쳐 워킹 세포 은행으로 거슬러 올라갑니다. 저자가 AI의 도움을 받아 직접 제작한 그림입니다.

은행이 특성 규명되어야 하는 이유 — 그리고 추론기만으로는 그것을 강제하지 못하는 이유

뿌리에서 계보가 중요한 이유는, 오인식된 세포 은행이 이 산업 전체에서 가능한 한 최악의 오류이기 때문입니다. 교차오염되고 오인식된 세포주가 생명과학 작업 수십 년을 조용히 망쳐 왔으며, 제조 뿌리 노드에서 그 실패는 유독 위험합니다: 세포 은행에서의 잘못된 동일성은 전이적으로, 완전한 확신을 가지고 모든 배치, 모든 원료의약품 로트, 그리고 거기서 유래하는 모든 바이알로 전파되며 — 어떤 하류 무결성 검사도 그것을 잡아내지 못합니다. 모든 하류 기록이 내부적으로 일관되기 때문입니다. 그래서 워킹 세포 은행은 특성 규명 증거를 지니도록 요구됩니다 — 동일성(identity)(우리가 생각하는 그 세포주인가? — 동위효소 또는 STR 프로파일링, 혹은 서열 수준 확인), 무균성/마이코플라스마(sterility/mycoplasma)(세균과 진균 오염이 없으며, 광범위 무균 시험이 잡지 못하는 전용 마이코플라스마 시험까지), 외래 인자/바이러스 안전성(adventitious-agent / viral safety)(CHO 세포주가 지니는 것으로 알려진 내인성 레트로바이러스 유사 입자를 포함하는 패널), 그리고 유전적 안정성(genetic stability)(구성체와 카피 수가 해동 시점뿐 아니라 검증된 계대 한계의 끝까지 유지됨) — 각각 하나의 bp:CharacterizationResult입니다. 계대 상한 40과 이 특성 규명 게이트는 하나의 논증의 두 절반입니다: 게이트는 은행이 자신이 주장하는 바로 그것임을 그리고 상한이 허용하는 세대에 걸쳐 그대로 유지됨을 증명합니다. 모델은 그 요구를 WCB 클래스에 대한 한정 카디널리티 제약으로 부호화합니다:

# bioproc.ttl — a working cell bank must carry at least one characterization result.
bp:WorkingCellBank rdfs:subClassOf [ a owl:Restriction ;
owl:onProperty bp:hasCharacterization ;
owl:minQualifiedCardinality "1"^^xsd:nonNegativeInteger ; owl:onClass bp:CharacterizationResult ] .

실행 예제에서 WCB-CHO-001은 넷 모두를 지닙니다: bp:hasCharacterization bp:CR-identity , bp:CR-sterility , bp:CR-viral , bp:CR-genetic, 각각 은행에 대해 isAbout하며 verdict "PASS"를 가진 결과입니다. 그러나 OWL은 열린 세계(open-world)입니다 — OWL 추론기는 진술하지 않은 무엇이든 단지 아직 알려지지 않은 것으로 다루지 결코 거짓으로 다루지 않으므로, 빠진 특성 규명은 없음이 아니라 미지로 읽힙니다 — 그래서 제약은 필요 조건을 진술하되 누락을 잡지는 못합니다. 실행 가능한 포착은 은행이 적합 판정을 받기 전에 실제로 증거를 지니고(CQ-17) 정확히 하나의 계대 수를 지닐 것을 요구하는 닫힌 세계 SHACL(Shapes Constraint Language, 셰이프 검증 언어) 게이트입니다 — 닫힌 세계(closed-world)란 데이터에 없는 것을 거짓으로 다룬다는 뜻입니다:

# shapes.ttl — the cell-bank gate: a WCB must carry characterization and exactly one passage count.
bp:CellBankShape a sh:NodeShape ;
sh:targetClass bp:WorkingCellBank ;
sh:property [
sh:path bp:hasCharacterization ;
sh:minCount 1 ;
sh:message "A working cell bank must carry at least one characterization result." ] ;
sh:property [
sh:path bp:passageNumber ;
sh:minCount 1 ; sh:maxCount 1 ; sh:datatype xsd:integer ;
sh:message "A working cell bank must record exactly one passage count." ] .

함수 속성 bp:hasHostOrganism, bp:hasClone, bp:createdBy는 같은 이유로 owl:FunctionalProperty로 선언됩니다: 은행은 정확히 하나의 클론에서 내려오고, 정확히 하나의 숙주를 가지며, 하나의 형질주입에 의해 만들어졌으므로 — 두 출처 시스템이 각각 숙주를 단언하면 출처를 중복하는 대신 하나의 사실로 무너져 합쳐집니다. 여기가 인스턴스 장이 관계에 자기 흔적을 남기는 지점입니다: 그래프는 은행에 안정적인 IRI를 못 박을 수는 있어도, 살아 있는 배양이 돌연변이를 멈추게 할 수는 없습니다. 계대 60의 배양은 생물학적으로 계대 5일 때와 같은 집단이 아니며, owl:sameAs는 그것이 여전히 "같은 세포주"인지를 판정할 수 없습니다. IRI는 안정적이고, 세포는 표류합니다. 그 긴장이 바로 계대 한계와 특성 규명 게이트가 관리하려고 존재하는 정직한 한계이며 — 계보 척추를 정확히 옳게 잡을 가치가 있는 이유입니다.

affectsQuality: QbD 지식을 하나의 간선으로

서문은 품질 설계(Quality by Design)가 실은 비밀스레 하나의 온톨로지라고 약속했고, 여기서 그것이 문자 그대로 사실이 됩니다. 개발 팀이 확립하려고 가장 애쓰는 링크 — 이 핵심 공정 파라미터(CPP)가 저 핵심 품질 속성(CQA)에 영향을 준다 — 는 선언되기를 기다리는 하나의 객체 속성입니다 [2]. (CPP는 프로세스가 돌릴 수 있는 손잡이입니다 — 공급 속도, 온도; CQA는 로트가 맞춰야 할 약의 속성입니다 — 단량체 순도.) 항체에서 "공급 속도가 단량체 순도에 영향을 준다"는 구호가 아닙니다. 로트가 생물반응기에서 응집할지 온전한 단량체로 나올지를 결정하는 종류의 발견입니다. bp:ProcessParameter에서 bp:QualityAttribute로 가는 bp:affectsQuality로 선언되면, 그 사실은 개발 보고서 안에 사는 것을 멈추고 질의 가능한 간선이 됩니다:

# bioproc.ttl — the QbD link, declared with its domain and range.
bp:affectsQuality a owl:ObjectProperty ;
rdfs:label "affects quality" ;
rdfs:domain bp:ProcessParameter ; rdfs:range bp:QualityAttribute ;
skos:definition "The Quality-by-Design link: a critical process parameter affects a critical quality attribute." .

그러나 간선 하나만으로는 뒷받침 없는 주장입니다. 공정 지식을 신뢰할 수 있게 만드는 것은 파라미터에 매달린 증거 — 중요도 평가, 정상 운전 범위(normal operating range, NOR), 더 넓은 입증된 허용 범위(proven acceptable range, PAR), 그리고 그 링크를 확립한 실험 설계 연구입니다 [2]. 데이터셋에서 공급 속도와 배양 온도는 모두 단량체 CQA로 가는 실제 affectsQuality 간선을 지니며, 공급 속도는 그 완전한 증거 흔적을 지닙니다:

# instances.ttl — affectsQuality with its NOR/PAR evidence and the study that proved it.
bp:FeedRate a bp:ProcessParameter ; rdfs:label "feed rate (CPP)" ;
bp:affectsQuality bp:MonomerPct-CQA ;
bp:hasCriticality bp:CRIT-FeedRate ;
bp:hasNormalOperatingRange bp:NOR-FeedRate ; # NOR 0.35-0.45
bp:hasProvenAcceptableRange bp:PAR-FeedRate ; # PAR 0.30-0.50 (wider)
bp:establishedBy bp:DOE-07 .
bp:Temperature a bp:ProcessParameter ; rdfs:label "culture temperature (CPP)" ;
bp:affectsQuality bp:MonomerPct-CQA ;
bp:hasCriticality bp:CRIT-Temp . # temperature carries its own HIGH criticality too
bp:NOR-FeedRate a bp:NormalOperatingRange ; rdfs:label "feed-rate NOR 0.35-0.45" ;
bp:norLow 0.35 ; bp:norHigh 0.45 .
bp:PAR-FeedRate a bp:ProvenAcceptableRange ; rdfs:label "feed-rate PAR 0.30-0.50" ;
bp:parLow 0.30 ; bp:parHigh 0.50 .

NOR은 파라미터가 유지되는 더 좁은 일상 운전 창이고, PAR은 여전히 허용 가능한 항체를 산출함이 입증된 더 넓은 영역입니다. 산문이 떨어뜨려서는 안 되는 단위에 주목하십시오: 여기서 공급 속도는 상대적인, 용기 부피로 정규화된 일일 공급량입니다 — 설정점에서 0.40 용기-부피/일(즉 용기 작업 부피의 40 %를 하루에 더함; /d는 측정 단위의 표준 목록인 UCUM의 일일 단위 코드)이며, PAR 0.30–0.50 /d 안의 NOR 0.35–0.45로 유지됩니다 — 실현된 설정 bp:RPS-feedrate-CCP001-qv가 지니는 바로 그 단위 IRI이고, OPC UA EngineeringUnits 필드와 히스토리안의 단위 열이 내보내는 바로 그것입니다(와이어-대-그래프 경계가 그 PAT 태그들이 QuantityValue가 되는 곳입니다). 단위 없는 범위는 정확히 세 독자에게 세 가지 다른 작업을 뜻하는 종류의 벌거벗은 숫자입니다. 그래프는 단위를 붙여 두어 공급 설정점이 결코 조용히 잘못 읽힐 수 없게 합니다. 배양 온도도 자기 자신의 HIGH 중요도(bp:CRIT-Temp, 같은 위험 평가가 확립)를 지니며, 여기서는 간결함을 위해 공급 속도의 완전한 NOR/PAR/DoE 흔적만 보입니다.

두 범위를 모두 보고서의 한 문장이 아니라 유형 있는 범위로 모델링하는 것이 "공급 속도가 중요하다"를 "공급 속도는 연구 DOE-07에 따라 단량체 순도에 영향을 주며, PAR 0.30–0.50 안의 NOR 0.35–0.45로 제어된다"로 바꾸어, 저단량체 배치에서 일탈을 추적하는 조사자나 감사자가 딛고 설 수 있는 사실로 만듭니다.

온도가 애초에 그 간선 위에 속하는 이유 자체가 명시할 가치가 있는 공정 지식입니다. 유가식(fed-batch) CHO 배양은 모델링된 두 단계로 돌아갑니다 — 생존 세포량을 쌓는 성장 단계(bp:CCP-001-growth), 그다음 역가, 당화, 응집을 조종하기 위해 자기 자신의 제어된 온도 설정점(여기서는 36.5 °C, NOR 36.0–37.0; bp:CCP-001-production)에 유지되는 생산 단계로, 실제 프로세스는 이 레버를 더 옮깁니다 — 흔히 대략 30–33 °C까지 내리며, 1권의 생산 생물반응기 장에서 다룹니다. 그 이상성(biphasic) 레시피는 이미 그래프 안에 있으며, 그래서 공급 속도와 온도가 단량체에 함께 떨어집니다: 둘은 생산 단계가 조율되는 두 손잡이입니다. 주어진 공급 속도가 정확히 단량체를 얼마나 사 주는지 말해 주는 반응 표면은 트리플로 평탄화되지 않습니다 — 그렇게 하면 그래프가 의미 없는 수백만 행으로 부풀고도 표면의 형태를 잃을 것입니다. 그것은 bp:DESIGNSPACE-mAb-A bp:referencesModel을 통해 IRI로 참조되어, 그래프를 설계 공간의 창고가 아니라 항해 가능한 색인으로 유지합니다(그 IRI가 가리키는 적합된 모델은 머신러닝 책의 공정 개발 장에서 구축됩니다). 그래프는 공급 속도와 온도가 단량체에 함께 영향을 준다고 말하고, 적합된 모델은 얼마나인지를 말합니다 — 그리고 affectsQuality 간선은 두 파라미터가 오직 조합으로만 중요하다고 말할 수 없는데, 이것이 바로 이 장이 되돌아가는 미해결 부분입니다.

정렬 파일이 우리에게 강요하는 정직 노트 하나: derivedFrom과 달리 affectsQuality충실한 외부 대응물이 없으며, 그것은 누락이 아니라 의도적 선택입니다. Relation Ontology의 규제 및 인과 관계는 occurrent분자 기능에 한정됩니다 — 기능을 실현하는 프로세스, 다른 분자 개체와 상호작용하는 분자 개체. 우리의 간선은 정보 아티팩트 안의 두 유형 사이를 달립니다: 공정 파라미터 유형(공급 속도)과 품질 속성 유형(단량체 순도)입니다. 그것을 RO 인과 관계 아래에 포섭하는 것은 충실하지 않은 범주 도약이므로, align.ttlaffectsQuality를 RO로의 rdfs:subPropertyOf가 없는 로컬 QbD 관계로 기록합니다. OOPS! 스캔은 그것을 고립된 관계로 표시할 것입니다. 그 방어는 충실한 로컬 용어가 잘못된 정렬보다 낫다는 것이며, ICH 출처는 강제된 동등성이 아니라 인용 [2]에 삽니다.

같은 간선들이 모델이 학습하는 그라운드 트루스다

referencesModel 링크는 반대 방향으로도 가리킵니다: 그래프가 끝나는 곳에서 머신러닝 책시작되며, 이 장이 저작한 관계들이야말로 그 학습을 정직하게 유지하는 것입니다. 세 가지 전달이 명시할 가치가 있는데, 온톨로지가 문서이기를 멈추고 모델의 기질(substrate)이 되는 자리이기 때문입니다.

첫째, 그래프는 누출 없는 레이블 저장소입니다. 공정 설정에서 단량체 순도를 예측하는 지도 학습 모델은 (공급 속도, 온도) → 단량체 행을 필요로 하는데, affectsQuality 간선과 xsd 타입의 데이터타입 속성이 바로 그 행이며, 이미 단위가 점검되고 계보에 닻 내려져 있습니다. 위험은 누출(leakage) — 정답을 몰래 인코딩하는 특징 — 이며, 계보 척추가 그것이 숨는 곳입니다: BATCH-2026-001 조상을 공유하는 두 원료의약품 로트는 독립된 행이 아니므로, 보통의 무작위 학습/검정 분할로 채점된 모델은 화려해 보이지만 아무것에도 일반화하지 못합니다. 거의 중복인 형제들이 분할을 가로질러 누출되었기 때문입니다. 해법은 척추로 분할하는 것입니다: 한 번에 derivedFrom으로 연결된 계보 하나를 통째로 떼어 두어 떼어 둔 배치가 진정으로 미관찰이 되게 하는 배치 단위 leave-one-batch-out 교차 검증입니다. 리콜의 범위를 정하는 바로 그 (bp:derivedFrom)+ 순회가 검증 점수를 인정 가능하게 만드는 그룹화 키이며 — 5권의 데이터 장이 고집하는 바로 그 배치 단위 분할이, 관계가 어느 행이 한 캠페인에서 유래하는지 이미 기록하고 있기에 여기서는 모델에 공짜로 건네집니다.

둘째, SHACL은 출하만이 아니라 학습 집합을 게이트합니다. 세포 은행 및 출하 셰이프(shapes.ttl, CQ-17)는 부적합한 로트를 거절하도록 만들어졌지만, 후보 학습 부분 그래프에 겨누면 부적합한 데이터셋을 거절합니다 — 단 한 행이 학습기에 건네지기 전에, 모든 로트가 그 bp:derivedFrom 부모를, 모든 CQA가 그 단위 보유 값을, 모든 특성 규명이 그 판정을 지녀야 합니다. 이것은 열린 세계 추론기가 할 수 없는 닫힌 세계의 포착입니다: 누락된 특징이 OWL에는 미상으로 읽히지만 SHACL에는 간극으로 읽히며, 조용한 간극이 있는 그래프로 학습한 모델은 데이터가 결코 말하지 않은 것을 기꺼이 지어냅니다. 학습 전 적합성 검사는 검증 역설 — 참된 계보만큼이나 매끄럽게 거짓 계보를 서술하는 유창한 모델 — 을 막아 두는 방법입니다: 추론되고 셰이프로 검증된 그래프가 모델이 대조되는 그라운드 트루스이지, 그 반대가 아닙니다.

셋째, 타입 부여된 간선 자체가 특징입니다. 계보 깊이, 풀을 만든 includedFraction 사이클의 수, 작업이 이전 오염이 있던 용기에서 occursIn하는지 여부, 한계 대비 레진의 cycleCount — 이 그래프 유래 특징들은 평탄한 특징 표가 잃는 공정 구조를 담으며, 역량 질문이 이미 돌리는 바로 그 속성 경로로 계산됩니다. CQ-04에 답하기에 충분한 그래프는 출하 예측기를 위한 특징을 공학하기에 충분한 그래프입니다. 관계는 모델 입력으로서 두 번째 생을 얻습니다. 이 가운데 어느 것도 이 장의 정직 노트를 느슨하게 하지 않습니다 — affectsQuality는 여전히 공급 속도×온도 상호작용의 형태를 인코딩할 수 없으며, 바로 그래서 그 효과는 트리플로 위조되는 대신 적합된 반응 표면으로 referencesModel을 통해 미뤄집니다. 역할 분담은 깔끔합니다: 그래프는 식별되고 검증되며 계보로 그룹화된 실체를 공급하고, 모델은 그 위의 함수를 공급합니다.

occursIn: 작업을 그 용기로

다음 관계는 분류 체계 장이 경고한 범주 오류 — MES가 "BR-101에서의 작업"에 대해 행 하나를 가질 때 누군가 그것을 물질이자 용기로 유형 짓는 데서 생기는 "배치가 생물반응기"라는 혼동 — 를 막기 위해 존재합니다. 배치는 bp:Material이고, 생산 생물반응기는 bp:Equipment이며, 둘은 disjoint로 선언됩니다. 그래서 둘 사이의 링크는 한 노드 위의 두 번째 rdf:type일 수 없습니다. 그것은 프로세스에서 장비로 가는 명시적 객체 속성입니다:

# bioproc.ttl — occursIn ties a run to the persisting vessel it happened in, not by re-typing the batch.
bp:occursIn a owl:ObjectProperty ; rdfs:label "occurs in" ;
rdfs:domain bp:Process ; rdfs:range bp:Equipment ;
skos:definition "Relates a process to the persisting equipment in which it occurs (the run to its vessel) — in place of typing the batch material as equipment." .

시드 트레인 확장들은 이미 그것을 씁니다 — bp:EXP-001 ... bp:occursIn bp:SF-01(진탕 플라스크), bp:EXP-002 ... bp:occursIn bp:SBR-01(시드 생물반응기) — 그리고 생산 배양 작업도 그렇습니다: bp:CCP-001 ... bp:occursIn bp:BR-101. 이것이 CQ-21을 배치 노드 위의 모호한 두 번째 유형이 아니라 한 홉짜리 질의로 만듭니다: 어느 bp:CellCultureProcess가 어느 용기에서 일어났는지 물으면, 작업-용기 사실이 바로 거기 자기 간선 위에 있고, 용기는 ProductionBioreactorBR-101로 해결됩니다. 이 구별은 한 용기가 오염에 연루될 때 그 값을 합니다: 생물반응기는 캠페인을 가로질러 지속되는 반면 각 배치 물질은 소모되므로, "이 같은 용기에서 어떤 다른 작업이 일어났는가?"는 용기가 한 배치에 융합된 라벨이 아니라 자기 자신의 개체일 때만 답할 수 있습니다. 정련된 속성 bp:performedOn(occursIn의 하위 속성)은 단위 작업을 그것이 돌아간 특정 크로마토그래피 컬럼이나 레진 로트에 못 박으므로, "어떤 배치들이 이 레진을 공유했는가?" — Protein A 레진은 여러 주기 동안 재사용되므로 실제 이월 조사 질문입니다 — 도 답할 수 있습니다. 레진은 그래프가 지니는 사용 이력을 가진 지속적 소모품입니다: cycleLifetimeLimit 200에 대한 bp:RESIN-PrA-07 cycleCount 38이므로, "이 레진이 검증된 주기 수명을 초과했는가?"는 컬럼 일지를 뒤지는 것이 아니라 두 리터럴에 대한 비교입니다.

한 층 아래에 더 미묘한 도메인 결정이 있으며, 이는 바로 이 장이 경고하는 과잉 약속이기에 드러낼 가치가 있습니다. 용기 BR-101은 작업을 주최하기만 하는 것이 아닙니다. 역할을 지닙니다bp:BR-101 hasRole bp:BR-101-role, 즉 ProductionReactorRole입니다. 그래서 hasRole, hasDisposition, hasFunctionrdfs:domain bp:Material을 취할 수 없습니다: 레진, 필터, 용기는 모두 bp:Equipment이며, 도메인을 bp:Material에 못 박으면 역할을 지닌 모든 용기를 물질로 추론하게 됩니다 — occursIn이 존중하려고 존재하는 바로 그 Material/Equipment disjointness 가드를 다시 발화시킵니다. 그래서 모델은 그것들의 도메인을 obo:BFO_0000040(BFO 물질 개체(material entity)), 즉 bp:Materialbp:Equipment 둘 다의 공유 부모로 선언하여, 용기가 산물로 잘못 유형 지어지지 않고도 역할을 지닐 수 있게 합니다(형식화 장이 그 도메인 선택이 적히는 곳입니다). 한 클래스만큼 너무 빡빡한 도메인은 한 클래스만큼 너무 헐거운 도메인만큼이나 버그입니다.

contains: 계보가 아닌 위계

네 번째 관계는 첫 번째와 가장 쉽게 혼동되는 것이며, 모델은 둘을 떼어 놓는 데 일부러 공을 들입니다. 항체가 바이알에 충전되고 나면, 로트는 농도로 측정되는 벌크 물질이기를 멈추고 세어지고 개별적으로 식별되는 단위들의 집단이 됩니다 — 인스턴스 장이 구체화하는 벌크-대-이산 전환입니다. 집적(aggregation) — 바이알이 카톤에, 카톤이 케이스에, 케이스가 팔레트에 포장되는 것 — 은 추적·이력관리 규제가 의무화하는 부모-자식 담음(containment) 구조입니다 [3]. 카톤은 자기 바이알들로부터 유래하지 않습니다. 그것들을 포함합니다. 그래서 bp:contains는 자기 자신의 전이적 객체 속성이며, 그 선언에 붙은 주석은 그것이 derivedFrom의 하위 속성이 아님을 명시합니다:

# bioproc.ttl — contains is transitive like derivedFrom, but deliberately NOT a sub-property of it.
bp:contains a owl:ObjectProperty , owl:TransitiveProperty ; rdfs:label "contains" ;
rdfs:domain bp:Package ; rdfs:range bp:Material ;
skos:definition "The packing containment hierarchy (carton contains vials, case contains cartons, pallet contains cases). DELIBERATELY NOT a sub-property of derivedFrom: containment is mutable and is not lineage." .

인스턴스는 데이터셋의 단 하나의 직렬화 바이알에 대한 깔끔한 세 단계 사슬입니다 — 그 바이알 자체는 자기 완제의약품 로트를 derivedFrom하므로, 그 출하 품질은 모든 바이알에 다시 진술되는 대신 로트를 통해 상속됩니다:

# instances.ttl — vial -> carton -> case -> pallet (containment, NOT genealogy).
bp:CARTON-001 a bp:Carton ; rdfs:label "carton C-001" ; bp:contains bp:VIAL-DP-001-000042 .
bp:CASE-001 a bp:Case ; rdfs:label "case CS-001" ; bp:contains bp:CARTON-001 .
bp:PALLET-001 a bp:Pallet ; rdfs:label "pallet P-001" ; bp:contains bp:CASE-001 .

containsderivedFrom은 둘 다 전이적이며, 바로 그렇기에 둘은 반드시 분리되어 있어야 합니다: bp:contains+ 순회는 "이것은 지금 무엇 안에 포장되어 있는가?"에 답하고(가변적 — 케이스가 유통업체에서 열리고 다시 포장될 때 바뀝니다), bp:derivedFrom+ 순회는 "이것은 무엇으로 만들어졌는가?"에 답합니다(영구적 — 바이알이 세포 은행으로 거슬러 가는 경로는 결코 바뀌지 않습니다). 둘을 합쳐 버리면 리콜 질의가 운송 카톤을 그 내용물의 조상으로 취급하게 됩니다 — 가계도-대-룸메이트 혼동이며, 규제상의 결과를 동반합니다: 뒤죽박죽된 관계로 범위를 정한 리콜은 오염된 단위를 놓치거나 하역장을 격리합니다. (직렬화 바이알 자체의 GS1 품목 키 대 그 온톨로지 IRI — 한 객체에 대한 두 정당한 동일성 체계 — 는 직렬화 모델이 다루는 로트-대-품목 개체화 긴장이며, contains가 그 미래를 계보 척추에서 깔끔하게 떼어 두도록 지금 설계된 이유입니다.)

평가: 관계가 자기 질문에 답한다

validate.pybioproc.ttl + align.ttl + instances.ttl을 파싱하고, OWL-RL 폐쇄를 적용하며, 역량 질문을 돌립니다 — 추론 후 2120개 트리플이 7137개로 닫히고(트리플은 주어-술어-목적어로 된 하나의 사실이며, 추론기가 함의된 전이적 간선을 명시적으로 만들기 때문에 수가 늘어나므로, 더 큰 수는 오류가 아니라 기대되는 결과입니다), 전이적 척추는 어떤 수작업 단언 없이도 자기 장거리 간선을 얻어 냅니다. CQ-06affectsQuality 간선을 직접 읽습니다:

# queries/CQ-06.rq — CQ-06: which process parameters affect monomer purity?
PREFIX bp: <https://example.org/bioproc#>
SELECT ?parameter ?attribute WHERE {
?parameter bp:affectsQuality ?attribute .
?attribute a bp:QualityAttribute .
}

이것은 데이터셋이 단언하는 두 CPP — 공급 속도와 배양 온도, 둘 다 MonomerPct-CQA에 영향 — 를 반환하여, 개발에서 가장 귀한 지식을 한 줄짜리 질의로 바꿉니다. CQ-13bp:contains+로 담음 위계를 걸어 바이알이 포장된 카톤, 케이스, 팔레트를 반환하고, CQ-14는 두 전이적 위계가 결코 닿지 않음을 올바르게 FalseASK로 증명합니다:

# queries/CQ-14.rq — CQ-14: containment is NOT genealogy. Correct when this ASK is FALSE.
PREFIX bp: <https://example.org/bioproc#>
ASK {
?container bp:contains+ bp:VIAL-DP-001-000042 .
bp:VIAL-DP-001-000042 bp:derivedFrom+ ?container .
}

모델은 정확히 답이 False이기 때문에 옳습니다: 바이알이 안에 포장된 그 어떤 것도 바이알이 그것으로 만들어진 것이 아닙니다. CQ-21은 작업-용기 occursIn 간선이 생산 작업에 대해 BR-101로 해결됨을 확인하고, CQ-17WCB-CHO-001이 네 특성 규명을 모두 지녀 세포 은행 게이트에 적합함을 확인하며, CQ-18은 계대 8이 검증된 한계 40 안에 있음을 확인합니다. 그리고 척추의 보상은 CQ-04, 영향 순회입니다: 규격 외 로트 DP-004가 실패할 때 — 그 단량체는 규격 안에 있는데도 고분자량 응집체가 2.41 %로 2.0 % 출하 한계를 넘을 때 — 로트는 모든 출하 한계를 충족해야 하므로, 단 하나의 속성(여기서는 응집체)에서라도 실패하면 통과한 다른 속성들과 무관하게 로트 전체가 규격 외로 처분됩니다 — 질의는 그 계보를 위로 걸어 공유 조상에 닿고 아래로 걸어 같은 운명을 공유하는 모든 형제를 찾습니다:

# queries/CQ-04.rq — when DP-004 fails, which drug products share its lineage?
PREFIX bp: <https://example.org/bioproc#>
SELECT DISTINCT ?affected WHERE {
bp:DP-004 (bp:derivedFrom)+ ?shared . # an ancestor of the failed lot
?affected (bp:derivedFrom)+ ?shared . # anything else derived from it
?affected a bp:DrugProduct .
FILTER(?affected != bp:DP-004)
} ORDER BY ?affected

DP-004와 골든 로트 DP-001/DP-002는 모두 WCB-CHO-001로 거슬러 가므로, 순회는 DP-001DP-002를 실패한 로트의 세포 은행 조상을 공유하는 것으로 드러냅니다 — 캠페인 전체를 격리하는 대신 질의로 범위가 정해진 리콜입니다. 순회가 닿는 공유 조상은 DS-001이 아닙니다: DP-004다른 원료 로트 DS-004에서, 그 자신의 규격 외 배치 BATCH-2026-004에서 유래합니다. 로트들은 더 높은 곳, 세포 은행 계층(WCB-CHO-001, 그리고 그것을 통해 마스터와 연구 은행)에서만 다시 합류하며, 바로 그렇기에 CQ-04의 (derivedFrom)+ ?shared모든 공통 조상에 걸쳐 범위를 잡아, 하류 사슬이 분리되어 있어도 조인이 DP-001/DP-002를 드러내게 합니다. DS-001 fillsInto DP-001 , DP-002(하나의 원료의약품이 형제 완제의약품 로트로 갈라짐)를 만드는 바로 그 전방 갈림이 같은 운명 분석을 스프레드시트 고고학 발굴이 아니라 순회로 만듭니다.

응집체 실패에는 계보가 조사 가능하게 만드는 하류 이야기도 있습니다. 응집체는 포획에서 제거되지 않습니다 — Protein A는 응집 상태와 무관하게 항체를 결합합니다 — 폴리싱에서 제거됩니다: 공정 중 흔적은 포획 풀 이후 HMW가 4.1 %이고, 폴리싱 이후 1.4 %로 떨어지며, 골든 원료의약품에서 1.287 %로 끝남을 보입니다. DP-004가 2.41 % HMW에 도달할 때, 계보 순회는 리콜 범위를 정하는 것 이상을 합니다. 조사자에게 근본 원인 가설 — 폴리싱 단계가 BATCH-2026-004 트레인에서 응집체를 덜 제거했다 — 을 건넵니다. 모든 공정 중 결과가 derivedFrom 순회가 지나가는 물질 노드에 매달려 있기 때문입니다. 추적 가능한 척추는 "로트가 응집체에서 실패했다"를 "그리고 여기 그것을 제거했어야 할 단위 작업이 있다"로 바꿉니다. 다섯 역량 질문, 모두 초록 — 그리고 DS-001에서의 대표 계보 순회는 그 11개 조상을 전적으로 전이성으로 반환합니다.

미해결 부분: 관계는 일관적일 뿐, 반드시 올바르지는 않다

추론기는 이 관계들이 일관적임을 증명할 수 있습니다 — 도메인과 레인지가 양 끝을 유형 짓고, 전이성이 계보를 닫으며, disjointness 가드가 containsderivedFrom인 척하는 것을, 그리고 세포 은행 계층이 하나로 무너지는 것을 막습니다. 그러나 그것들이 올바름은 증명할 수 없습니다. 방향이 뒤집힌 derivedFrom 간선은 완벽하게 추론되면서 조상에 대해 거짓말합니다 — 그리고 세포 은행 뿌리에서 그 거짓말은 완전한 확신을 가지고 모든 하류 로트로 전파됩니다. 더 나쁘게는, 척추는 순환(cycle)조차 금지할 수 없습니다. "아무것도 자기 자신에서 유래하지 않는다"를 선언하려고 OWL의 owl:IrreflexivePropertyowl:AsymmetricProperty에 손을 뻗을 수도 있지만 — OWL 2 DL은 그것을 금지합니다: 전이적 속성은 비단순(non-simple)이고, 프로파일은 비단순 속성이 그 공리들을 지니는 것을 막습니다. 그래서 계보 비순환성 — "조상까지 걸어 올라가기"가 종료되게 만드는 바로 그것 — 은 전이성 공리가 강제하는 것이 아니라 SHACL과 관례의 보장입니다. 전이성은 장거리 간선을 공짜로 사 주지만, 간선들이 루프가 아니라 트리를 이룬다는 보장은 사 주지 않습니다(형식화 장이 이 프로파일 제약을 직접 다룹니다). 모델은 또한 계보를 기록할 뿐 보존(conservation)은 기록하지 않습니다: derivedFrom은 포획 풀이 배치에서 나왔다고 말하지만 질량 균형을 강제하지는 않으므로, 수량까지 모델링되지 않는 한 순회 가능한 계보가 정량적으로 불가능할 수 있습니다(들어간 것보다 더 많은 항체가 나옴). 연속적이고 살아 있는 시드 트레인 확장이 어디서 이산 물질 노드로 잘리는가는 사실이 아니라 모델링 판단입니다 — 너무 거칠게 모델링하면 오염을 한 이송까지 추적할 수 없고, 너무 곱게 하면 그래프가 누구도 질의하지 않는 노드에 빠져 죽습니다. 그리고 affectsQuality는 한 파라미터가 중요하다고 단언하지만 그 효과의 형태는 표현할 수 없으므로(그것은 참조된 반응 표면에 삽니다), 조합으로만 중요한 파라미터들 — 공급 속도와 온도가 함께 — 은 한 번에 한 간선씩 모델링하기 쉬워, 프로세스가 실제보다 단순한 것처럼 조용히 암시하게 됩니다 [2]. 관계는 지식을 읽을 수 있고 질의할 수 있게 만들며, 이는 묻혀 있는 보고서에 비하면 실질적 진보입니다. 그러나 읽을 수 있다는 것이 완전하거나 올바르다는 것과 같지는 않습니다.

왜 중요한가

그래프의 품질은 클래스보다 관계에 의해 더 많이 결정됩니다. 단 하나의 derivedFrom 척추 위의 전이성이 계보를 세포 은행의 얼린 바이알 하나에서 환자의 바이알까지 어떤 깊이로든 걸을 수 있게 만들며 — 리콜이 걸렸을 때 규격 외 로트의 형제들을 질의로 찾을 수 있게 만듭니다. 객체/데이터타입 갈림이 (세포 은행으로 거슬러 가는) 걷는 간선을 (로트의 단량체 순도인) 읽는 값과 구별되게 유지합니다. occursIn이 배치와 그 생물반응기를 별개의 존재로 둘 수 있게 하여, 오염에 연루된 용기를 캠페인을 가로질러 교차 검토할 수 있게 합니다. 그리고 contains를 계보 척추에서 일부러 떼어 두는 것이 "이 항체는 무엇으로 만들어졌는가?"와 "이 바이알은 지금 어느 카톤에 포장되어 있는가?"를 하나의 뒤죽박죽된 질문이 아니라 두 개의 답할 수 있는 질문으로 유지합니다. 이 넷을 옳게 잡으면 디지털 스레드가 돌리는 모든 계보, 영향, QbD, 리콜 질의가 구성상 신뢰할 수 있게 됩니다.

실제 현장에서는

이 관계들 가운데 어느 것도 이 책이 새로 지어낸 말이 아닙니다. derivedFrom은 Relation Ontology의 derives from까지 정렬되며, 이는 한 사물이 다른 사물에서 나왔다고 말하는 생의학·제조 그래프의 표준 방식입니다. 세포 은행 계층과 그 특성 규명은 선택적인 모범 관행이 아니라 세포 기질에 대한 규제 기대이며 [4], 그래서 모든 상업적 포유류 세포 프로세스는 문서화된 계대 한계를 가진 RCB/MCB/WCB 계보를 유지합니다 — CHO가 상업적 항체의 지배적 숙주인 것은 바로 그 거동이 그토록 잘 특성 규명되어 있기 때문입니다. affectsQuality, CPP, CQA, NOR과 PAR은 규제 당국과 산업계가 이미 공유하는 ICH 품질 지침의 어휘이며, 그래서 그것들을 그래프로 모델링하는 것은 억지스럽기보다 자연스럽습니다 [2]. 그리고 제조 계보와 구별되는 GS1 아래의 집적은 추적·이력관리 규제가 의무화하며 모든 상업적 완제의약품의 살아 있는 일상 운영입니다 [3]. 같은 증거 보유 패턴이 바이러스 안전성 쪽에서도 되풀이됩니다: 저 pH 유지 단계와 바이러스 여과 단계가 각각 검증된 로그 감소 값(LRV — 그 단계가 달성하는 바이러스의 log10 감소; 4.5와 4.2 LRV, 두 독립적이고 직교하는 제거 기작 — 하나는 불활성화, 하나는 여과 — 에 걸쳐 합산하면 8.7이므로, 한쪽에서 살아남은 바이러스가 다른 쪽에서도 살아남기는 어렵다, CQ-12; 물리적 단계는 1권의 바이러스 불활성화 장에서 다룹니다)을 지니며, 제거 연구에 의해 establishedBy됩니다 — hasClearanceCapability는 바이러스 안전성에 대해 affectsQuality가 CQA에 대한 것과 같습니다. 개발, 제조, 공급망 팀이 확립하는 관계들은 그들의 보고서와 바코드 안에서 이미 그래프입니다. 이 장이 주장하는 움직임은 그것들을 기계가 순회할 수 있는 간선으로 적어 두는 것 — 그리고 두 전이적 위계, 계보와 담음이 결코 혼동되지 않게 하는 것입니다.

핵심 용어

  • 객체 속성 / 데이터타입 속성(Object property / datatype property) — 다른 사물로 가는 관계(세포 은행으로 거슬러 가는 derivedFrom처럼 걷는 간선) 대 리터럴 값으로 가는 관계(monomerPctpassageNumber처럼 읽는 측정값).
  • derivedFrom — 계보 척추인 단 하나의 전이적 객체 속성; 직속 부모 간선만 단언되고, 추론기가 계보를 어떤 깊이로든 추론하여, 모든 캠페인 물질을 워킹 세포 은행에, 그리고 그것을 통해 마스터와 연구 은행에 뿌리내리게 합니다.
  • 세포 은행 계층(RCB/MCB/WCB) — 척추 뿌리에 있는, disjoint하고 규제가 기대하는 위계; 워킹 은행은 동일성, 무균성, 바이러스 안전성, 유전적 안정성에 대해 특성 규명되는데, 오인식된 뿌리가 모든 로트로 전이적으로 전파되기 때문입니다.
  • affectsQuality — 공정 파라미터에서 품질 속성으로 가는 핵심 QbD 객체 속성(공급 속도 → 단량체 순도)으로, 그 NOR, PAR, 중요도, DoE 연구를 부착된 증거로 동반합니다.
  • NOR / PAR — 파라미터를 한정하는 더 좁은 정상 운전 범위와 더 넓은 입증된 허용 범위로, 산문이 아니라 유형 있는 범위로 모델링됩니다.
  • occursIn — 프로세스를 그것이 돌아간 지속적 장비에 묶는 객체 속성(배양 작업을 BR-101에), 배치 물질을 용기로 다시 유형 짓는 대신 사용됩니다(물질/장비 가드).
  • contains — 전이적 포장 위계(카톤 → 케이스 → 팔레트)로, 담음은 가변적이고 계보가 아니기 때문에 일부러 derivedFrom의 하위 속성이 아닙니다.
  • 배치 단위 / leave-one-batch-out 교차 검증 — 모델의 학습 행과 검정 행을 derivedFrom 계보로 분할하여 거의 중복인 형제 로트가 분할을 가로지르지 않게 하는 것; 리콜의 범위를 정하는 척추가 ML 검증 점수를 정직하게 만드는 그룹화 키이기도 합니다.
  • 그라운드 트루스(모델에 대한) — 학습 모델이 대조되는, 추론되고 SHACL로 검증된 그래프; 온톨로지는 식별되고 단위를 보유하며 계보로 그룹화된 사실을 공급하고, 모델은 그 위의 함수를 공급할 뿐, 그 반대가 아닙니다.

이것이 이어지는 곳

관계는 연결되었고 척추는 전이적입니다. 그러나 단지 선언만 된 관계는 여전히 오용될 수 있습니다 — hasHostOrganism 같은 함수 속성이 진술되지 않거나, 존재 제약이 강제되지 않거나, disjointness가 잊혀 "배치가 곧 작업"이라는 오류가 빠져나가거나, 열린 세계 추론기가 잡지 못할 세포 은행 특성 규명 게이트. 다음 장 형식화: 공리, 제약, 그리고 추론기가 잡을 수 있는 것과 없는 것은 이 클래스와 관계에 이빨을 주는 OWL 2 공리 — 함수 속성, 존재 및 카디널리티 제약, disjointness — 를 더하고, OWL-RL 폐쇄가 강제하는 것과 완전한 DL 추론기나 SHACL 게이트만이 잡을 것 사이의 경계를 정직하게 마주합니다.