개념화: 관계, derivedFrom, 그리고 계보의 척추
📍 현재 위치: 제3부 · 개념화 — 지난 장의 클래스들을 관계로 서로 연결하는 라이프사이클 단계입니다. 방법론: NeOn의 개념화 활동을 SAMOD의 테스트 우선 루프 위에서 돌립니다 — 각 관계는 실제 CHO 단클론 항체 캠페인에 관한 역량 질문에 답함으로써 자기 자리를 얻습니다.
클래스의 분류 체계는 라벨이 붙은 상자들의 집합입니다. 그것을 그래프 — 걸어 다니고, 질의하고, 추론할 수 있는 무언가 — 로 만드는 것은 상자들 사이의 관계(relations)입니다. 이 장은 하중을 지는 관계들을 개념화하며, 그 무게의 대부분을 단 하나의 관계 bp:derivedFrom에 씁니다. 그 한 간선이 단클론 항체 로트의 디지털 스레드 전체가 매달리는 척추이기 때문입니다. 환자가 받는 모든 바이알은 한 홉 한 홉, 워킹 세포 은행의 얼린 바이알 하나로 거슬러 올라갑니다. 이 장이 세우는 나머지 세 관계 — affectsQuality, occursIn, contains — 는 각각 서로 다른 제조 질문에 답하며, 그중 하나인 contains는 리콜 범위를 정해야 할 때 계보와 혼동되지 않기 위해 바로 그 목적으로 존재합니다.
가계도에는 두 종류의 선이 있습니다. 하나는 "~의 후손"이라고 말합니다 — 무슨 일이 있어도 조부모는 영원히 당신의 조상입니다. 다른 하나는 "지금 같은 집에 산다"고 말합니다 — 누군가 이사를 나가면 바뀌는 선입니다. 둘을 혼동하면 헛소리가 됩니다("내 룸메이트는 내 조상이다"). 바이오프로세스 그래프에도 똑같은 두 선이 있습니다. derivedFrom은 모든 항체 바이알을 하나의 얼린 세포 은행에 뿌리내리게 하는 영구적인 "~로 만들어졌다"는 혈통이고, contains는 운송 케이스를 열 때마다 바뀌는, 가변적인 "지금 안에 담겨 있다"입니다. 이 장은 둘 다 그리되 일부러 따로 떼어 놓고, 어떤 공정 손잡이가 약의 어떤 품질에 영향을 주는지 말해 주는 품질 설계(Quality by Design) 간선을 더합니다.
질문에서 출발하라
명세의 네 가지 역량 질문이 이 장을 빚어내며, 그것들은 네 관계에 깔끔하게 나뉘어 걸립니다. CQ-06("어떤 공정 파라미터가 단량체 순도에 영향을 주는가?")은 affectsQuality가 직접 답하며 — 단량체 순도는 항체의 대표 출하 속성으로, 응집체가 아니라 온전하고 올바르게 접힌 단량체인 분율입니다. CQ-21("세포 배양 작업은 어느 용기에서 일어났는가?")은 occursIn이 답하는데, 이 간선은 배치 물질과 그 생물반응기를 별개의 존재로 유지하게 해 줍니다. CQ-13("주어진 팔레트 안에 전이적으로 담긴 직렬화 바이알은 무엇인가?")은 contains 순회이고, CQ-14("봉쇄(containment)는 계보와 구별되어 유지되는가?")은 contains와 derivedFrom이 결코 서로 무너져 합쳐지지 않음을 증명하는 가드입니다 — 계보로 리콜 범위를 정하는 것과 실수로 운송 카톤을 리콜하는 것 사이의 차이입니다. 이 넷을 시야에 두고, 아래의 모든 관계는 자신의 제조 질문에 답을 줄 수 있게 만드는지로 판정됩니다.
모든 것을 결정하는 갈림: 객체 속성 대 데이터타입 속성
OWL은 어떤 관계를 작성하기 전에 못 박아 둘 가치가 있는 구별 하나를 긋습니다. 객체 속성(object property)은 한 사물을 다른 사물에 잇고, 데이터타입 속성(datatype property)은 한 사물을 리터럴 값에 잇습니다 [1]. bp:derivedFrom은 한 로트를 부모 로트에 관계 짓습니다 — 세포 은행까지 거슬러 걸어 갈 수 있는 간선입니다. bp:monomerPct는 원료의약품 로트를 숫자 98.611에 관계 짓습니다 — 그 SEC %단량체 출하 측정값으로, 읽을 수 있는 값입니다. 이것이 관계와 측정의 차이이며, 둘 중 어느 것을 작성할지를 결정합니다. 계보 척추는 끝까지 객체 속성이고, 항체 로트가 맞춰야 할 출하 수치 — 단량체 순도, 고분자량 응집체, 전하 변이체 분포, 단백질 농도 — 는 로트에 매달린 데이터타입 속성입니다. 여기 그 솔기가 있으며, 두 종류 모두 어휘에서 그대로 선언됩니다:
# 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:domain과 rdfs:range는 문서가 아닙니다 — 규칙입니다. 양 끝이 모두 bp:Material에 고정되어 있기 때문에, X derivedFrom Y를 단언하면 X와 Y가 모두 물질로 유형이 정해지고, 만약 Y가 bp:Material과 disjoint한 무언가 — 배치 기록에 서명한 사람, 장비 한 점, 프로세스 — 로 선언되어 있었다면 그래프는 비일관(inconsistent)으로 표시됩니다. 느슨한 간선이 유형 있는 간선이 됩니다. 이것이 중요한 이유는 계보 간선이 여러 출처 시스템(ELN, MES, LIMS)에서 적재되기 때문이며, 한 로트의 부모를 그것을 돌린 작업자나 그것이 자란 생물반응기로 가리키는 부주의한 적재는 계보 순회를 조용히 오염시키는 바로 그런 종류의 오류입니다. 도메인과 레인지는 그 오류를 조용한 거짓 대신 표시된 모순으로 바꿔 놓습니다.
단 하나의 전이적 척추: 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이 누구도 단 하나의 장거리 링크를 단언하지 않았는데도 연구 세포 은행까지 죽 거슬러 올라가 유래함을 압니다. 단언되는 것은 직속 부모 간선뿐입니다. 실행 예제의 계보는 물질 열한 단계 깊이이며, 시드 트레인은 특정 캠페인의 구체적 간선이 처음 놓이는 곳입니다: 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 바이알 하나에서 접종되어, 드물고 대체 불가능한 마스터가 천천히 소모됩니다. 이것은 선택적인 정리정돈이 아닙니다. 계층 구조는 세포 기질에 대한 규제 기대이며, 미래의 모든 로트의 동일성, 무균성, 바이러스 안전성 전체가 특성 규명된 얼린 기원 위에 놓이기 때문입니다. 모델은 이 계층을 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 인스턴스 — 그래서 "어떤 생물이 이 산물을 만드는가?"는 열두 곳에 다시 입력된 단어 "CHO"가 아니라 하나의 공유된, NCBI Taxonomy에 정렬된 개체로 해결됩니다. 사슬 맨 위에 있는 은행의 존재 자체가 occurrent의 산출물입니다: 그 세포주는 createdBy bp:TF-001, 즉 유전 구성체를 입력으로 받아 세포주를 출력으로 산출하는 형질주입에 의해 만들어졌습니다. 그 단계를 (각주가 아니라) 프로세스로 모델링하는 것이 "이 세포주는 어디서 왔는가?"를 개발 보고서의 한 단락이 아니라 한 홉짜리 답으로 만들어 줍니다.
계대 수는 같은 사슬을 타고 흐른다
계대 수(passage count) — 배양이 몇 번 분할되고 다시 자랐는가 — 는 계보를 타고 흐릅니다. 워킹 세포 은행은 passageNumber 8을, 진탕 플라스크 배양은 12를, 시드 생물반응기 배양은 16을 지니며, 각 확장은 세대를 더합니다 [1]. 계대 수는 장부 기록이 아닙니다: 생산성이 표류하고 산물 품질이 바뀌기 전까지 살아 있는 세포를 얼마나 오래 키울 수 있는지를 한정하므로, 검증된 계대 한계(validated passage limit)(여기서는 bp:PassageLimit-mAb-A bp:validatedPassageLimit 40)는 배치가 반드시 지켜야 할 거버넌스 제약입니다. 그 수가 각 물질에 붙은 데이터타입 속성이고 계보가 그것들 사이의 전이적 객체 속성이기 때문에, 그래프는 GMP 질문 이 배치는 검증된 계대 한계 안의 세포에서 접종되었는가?를 실험 노트에서 수작업으로 재구성하는 대신 조인으로 답합니다 — 뿌리에서 확립된 사실이 트레인을 따라 누적된 수와 만나는 것입니다. derivedFrom은 두 개의 rdfs:subPropertyOf 정련 — bp:fromBatch와 bp:includedFraction — 을 지니므로, 더 구체적인 하류 간선(Protein A 포획 풀에 포함된 정화된 분율, 배치에서 나온 물질)도 여전히 추론기가 걷는 일반 계보 간선을 함의합니다.
작동 중인 전이적 척추: 각 확장은 한 세포 물질을 다음 것으로 바꾸는 프로세스이고, 직속
derivedFrom 간선만 단언되며, 점선 호는 추론기가 추론하는 것입니다 — 배치는 누구도 진술하지 않은 홉들을 거쳐 워킹 세포 은행으로 거슬러 올라갑니다.
저자가 AI의 도움을 받아 직접 제작한 그림입니다.
은행이 특성 규명되어야 하는 이유 — 그리고 추론기만으로는 그것을 강제하지 못하는 이유
뿌리에서 계보가 중요한 이유는, 오인식된 세포 은행이 이 산업 전체에서 가능한 한 최악의 오류이기 때문입니다. 교차오염되고 오인식된 세포주가 생명과학 작업 수십 년을 조용히 망쳐 왔으며, 제조 뿌리 노드에서 그 실패는 유독 위험합니다: 세포 은행에서의 잘못된 동일성은 전이적으로, 완전한 확신을 가지고 모든 배치, 모든 원료의약품 로트, 그리고 거기서 유래하는 모든 바이알로 전파되며 — 어떤 하류 무결성 검사도 그것을 잡아내지 못합니다. 모든 하류 기록이 내부적으로 일관되기 때문입니다. 그래서 워킹 세포 은행은 특성 규명 증거를 지니도록 요구됩니다 — 동일성(identity)(우리가 생각하는 그 세포주인가?), 무균성/마이코플라스마(sterility/mycoplasma)(미생물 오염이 없는가?), 외래 인자/바이러스 안전성(adventitious-agent / viral safety), 그리고 유전적 안정성(genetic stability) — 각각 하나의 bp:CharacterizationResult입니다. 모델은 그 요구를 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은 열린 세계입니다 — 빠진 특성 규명은 없음이 아니라 미지로 읽힙니다 — 그래서 제약은 필요 조건을 진술하되 누락을 잡지는 못합니다. 실행 가능한 포착은 은행이 적합 판정을 받기 전에 실제로 증거를 지니고(CQ-17) 정확히 하나의 계대 수를 지닐 것을 요구하는 닫힌 세계 SHACL 게이트입니다:
# 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)가 실은 비밀스레 하나의 온톨로지라고 약속했고, 여기서 그것이 문자 그대로 사실이 됩니다. 개발 팀이 확립하려고 가장 애쓰는 링크 — 이 핵심 공정 파라미터가 저 핵심 품질 속성에 영향을 준다 — 는 선언되기를 기다리는 하나의 객체 속성입니다 [2]. 항체에서 "공급 속도가 단량체 순도에 영향을 준다"는 구호가 아닙니다. 로트가 생물반응기에서 응집할지 온전한 단량체로 나올지를 결정하는 종류의 발견입니다. 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: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은 여전히 허용 가능한 항체를 산출함이 입증된 더 넓은 영역입니다. 둘 다 보고서의 한 문장이 아니라 유형 있는 범위로 모델링하는 것이 "공급 속도가 중요하다"를 "공급 속도는 연구 DOE-07에 따라 단량체 순도에 영향을 주며, PAR 0.30–0.50 안의 NOR 0.35–0.45로 제어된다"로 바꾸어, 저단량체 배치에서 일탈을 추적하는 조사자나 감사자가 딛고 설 수 있는 사실로 만듭니다. 주어진 공급 속도가 정확히 단량체를 얼마나 사 주는지 말해 주는 반응 표면은 트리플로 평탄화되지 않습니다 — 그렇게 하면 그래프가 의미 없는 수백만 행으로 부풀고도 표면의 형태를 잃을 것입니다. 그것은 bp:DESIGNSPACE-mAb-A bp:referencesModel을 통해 IRI로 참조되어, 그래프를 설계 공간의 창고가 아니라 항해 가능한 색인으로 유지합니다. 그래프는 공급 속도와 온도가 단량체에 함께 영향을 준다고 말하고, 적합된 모델은 얼마나인지를 말합니다.
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가 어느 용기에서 일어났는지 물으면, 작업-용기 사실이 바로 거기 자기 간선 위에 있고, 용기는 ProductionBioreactor인 BR-101로 해결됩니다. 이 구별은 한 용기가 오염에 연루될 때 그 값을 합니다: 생물반응기는 캠페인을 가로질러 지속되는 반면 각 배치 물질은 소모되므로, "이 같은 용기에서 어떤 다른 작업이 일어났는가?"는 용기가 한 배치에 융합된 라벨이 아니라 자기 자신의 개체일 때만 답할 수 있습니다. 정련된 속성 bp:performedOn(occursIn의 하위 속성)은 단위 작업을 그것이 돌아간 특정 크로마토그래피 컬럼이나 레진 로트에 못 박으므로, "어떤 배치들이 이 레진을 공유했는가?" — Protein A 레진은 여러 주기 동안 재사용되므로 실제 이월 조사 질문입니다 — 도 답할 수 있습니다.
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 .
contains와 derivedFrom은 둘 다 전이적이며, 바로 그렇기에 둘은 반드시 분리되어 있어야 합니다: bp:contains+ 순회는 "이것은 지금 무엇 안에 포장되어 있는가?"에 답하고(가변적 — 케이스가 유통업체에서 열리고 다시 포장될 때 바뀝니다), bp:derivedFrom+ 순회는 "이것은 무엇으로 만들어졌는가?"에 답합니다(영구적 — 바이알이 세포 은행으로 거슬러 가는 경로는 결코 바뀌지 않습니다). 둘을 합쳐 버리면 리콜 질의가 운송 카톤을 그 내용물의 조상으로 취급하게 됩니다 — 가계도-대-룸메이트 혼동이며, 규제상의 결과를 동반합니다: 뒤죽박죽된 관계로 범위를 정한 리콜은 오염된 단위를 놓치거나 하역장을 격리합니다. (직렬화 바이알 자체의 GS1 품목 키 대 그 온톨로지 IRI — 한 객체에 대한 두 정당한 동일성 체계 — 는 직렬화 모델이 다루는 로트-대-품목 개체화 긴장이며, contains가 그 미래를 계보 척추에서 깔끔하게 떼어 두도록 지금 설계된 이유입니다.)
평가: 관계가 자기 질문에 답한다
validate.py는 bioproc.ttl + align.ttl + instances.ttl을 파싱하고, OWL-RL 폐쇄를 적용하며, 역량 질문을 돌립니다 — 추론 후 2120개 트리플이 7137개로 닫히고, 전이적 척추는 어떤 수작업 단언 없이도 자기 장거리 간선을 얻어 냅니다. CQ-06은 affectsQuality 간선을 직접 읽습니다:
# 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-13은 bp:contains+로 봉쇄 위계를 걸어 바이알이 포장된 카톤, 케이스, 팔레트를 반환하고, CQ-14는 두 전이적 위계가 결코 닿지 않음을 올바르게 False인 ASK로 증명합니다:
# 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-17은 WCB-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-001과 DP-002를 실패한 로트의 세포 은행 조상을 공유하는 것으로 드러냅니다 — 캠페인 전체를 격리하는 대신 질의로 범위가 정해진 리콜입니다. DS-001 fillsInto DP-001 , DP-002(하나의 원료의약품이 형제 완제의약품 로트로 갈라짐)를 만드는 바로 그 전방 갈림이 같은 운명 분석을 스프레드시트 고고학 발굴이 아니라 순회로 만듭니다. 다섯 역량 질문, 모두 초록 — 그리고 DS-001에서의 대표 계보 순회는 그 11개 조상을 전적으로 전이성으로 반환합니다.
미해결 부분: 관계는 일관적일 뿐, 반드시 올바르지는 않다
추론기는 이 관계들이 일관적임을 증명할 수 있습니다 — 도메인과 레인지가 양 끝을 유형 짓고, 전이성이 계보를 닫으며, disjointness 가드가 contains가 derivedFrom인 척하는 것을, 그리고 세포 은행 계층이 하나로 무너지는 것을 막습니다. 그러나 그것들이 올바름은 증명할 수 없습니다. 방향이 뒤집힌 derivedFrom 간선은 완벽하게 추론되면서 조상에 대해 거짓말합니다 — 그리고 세포 은행 뿌리에서 그 거짓말은 완전한 확신을 가지고 모든 하류 로트로 전파됩니다. 모델은 또한 계보를 기록할 뿐 보존(conservation)은 기록하지 않습니다: derivedFrom은 포획 풀이 배치에서 나왔다고 말하지만 질량 균형을 강제하지는 않으므로, 수량까지 모델링되지 않는 한 순회 가능한 계보가 정량적으로 불가능할 수 있습니다(들어간 것보다 더 많은 항체가 나옴). 연속적이고 살아 있는 시드 트레인 확장이 어디서 이산 물질 노드로 잘리는가는 사실이 아니라 모델링 판단입니다 — 너무 거칠게 모델링하면 오염을 한 이송까지 추적할 수 없고, 너무 곱게 하면 그래프가 누구도 질의하지 않는 노드에 빠져 죽습니다. 그리고 affectsQuality는 한 파라미터가 중요하다고 단언하지만 그 효과의 형태는 표현할 수 없으므로(그것은 참조된 반응 표면에 삽니다), 조합으로만 중요한 파라미터들 — 공급 속도와 온도가 함께 — 은 한 번에 한 간선씩 모델링하기 쉬워, 프로세스가 실제보다 단순한 것처럼 조용히 암시하게 됩니다 [2]. 관계는 지식을 읽을 수 있고 질의할 수 있게 만들며, 이는 묻혀 있는 보고서에 비하면 실질적 진보입니다. 그러나 읽을 수 있다는 것이 완전하거나 올바르다는 것과 같지는 않습니다.
왜 중요한가
그래프의 품질은 클래스보다 관계에 의해 더 많이 결정됩니다. 단 하나의 derivedFrom 척추 위의 전이성이 계보를 세포 은행의 얼린 바이알 하나에서 환자의 바이알까지 어떤 깊이로든 걸을 수 있게 만들며 — 리콜이 걸렸을 때 규격 외 로트의 형제들을 질의로 찾을 수 있게 만듭니다. 객체/데이터타입 갈림이 (세포 은행으로 거슬러 가는) 걷는 간선을 (로트의 단량체 순도인) 읽는 값과 구별되게 유지합니다. occursIn이 배치와 그 생물반응기를 별개의 존재로 둘 수 있게 하여, 오염에 연루된 용기를 캠페인을 가로질러 교차 검토할 수 있게 합니다. 그리고 contains를 계보 척추에서 일부러 떼어 두는 것이 "이 항체는 무엇으로 만들어졌는가?"와 "이 바이알은 지금 어느 카톤에 포장되어 있는가?"를 하나의 뒤죽박죽된 질문이 아니라 두 개의 답할 수 있는 질문으로 유지합니다. 이 넷을 옳게 잡으면 디지털 스레드가 돌리는 모든 계보, 영향, QbD, 리콜 질의가 구성상 신뢰할 수 있게 됩니다.
실제 현장에서는
이 관계들 가운데 어느 것도 이 책이 새로 지어낸 말이 아닙니다. derivedFrom은 Relation Ontology의 derives from까지 정렬되며, 이는 한 사물이 다른 사물에서 나왔다고 말하는 생의학·제조 그래프의 표준 방식입니다. 세포 은행 계층과 그 특성 규명은 선택적인 모범 관행이 아니라 세포 기질에 대한 규제 기대이며, 그래서 모든 상업적 포유류 세포 프로세스는 문서화된 계대 한계를 가진 RCB/MCB/WCB 계보를 유지합니다 — CHO가 상업적 항체의 지배적 숙주인 것은 바로 그 거동이 그토록 잘 특성 규명되어 있기 때문입니다. affectsQuality, CPP, CQA, NOR과 PAR은 규제 당국과 산업계가 이미 공유하는 ICH 품질 지침의 어휘이며, 그래서 그것들을 그래프로 모델링하는 것은 억지스럽기보다 자연스럽습니다 [2]. 그리고 제조 계보와 구별되는 GS1 아래의 집적은 추적·이력관리 규제가 의무화하며 모든 상업적 완제의약품의 살아 있는 일상 운영입니다 [3]. 개발, 제조, 공급망 팀이 확립하는 관계들은 그들의 보고서와 바코드 안에서 이미 그래프입니다. 이 장이 주장하는 움직임은 그것들을 기계가 순회할 수 있는 간선으로 적어 두는 것 — 그리고 두 전이적 위계, 계보와 봉쇄가 결코 혼동되지 않게 하는 것입니다.
핵심 용어
- 객체 속성 / 데이터타입 속성(Object property / datatype property) — 다른 사물로 가는 관계(세포 은행으로 거슬러 가는
derivedFrom처럼 걷는 간선) 대 리터럴 값으로 가는 관계(monomerPct나passageNumber처럼 읽는 측정값). derivedFrom— 계보 척추인 단 하나의 전이적 객체 속성; 직속 부모 간선만 단언되고, 추론기가 계보를 어떤 깊이로든 추론하여, 모든 캠페인 물질을 워킹 세포 은행에, 그리고 그것을 통해 마스터와 연구 은행에 뿌리내리게 합니다.- 세포 은행 계층(RCB/MCB/WCB) — 척추 뿌리에 있는, disjoint하고 규제가 기대하는 위계; 워킹 은행은 동일성, 무균성, 바이러스 안전성, 유전적 안정성에 대해 특성 규명되는데, 오인식된 뿌리가 모든 로트로 전이적으로 전파되기 때문입니다.
affectsQuality— 공정 파라미터에서 품질 속성으로 가는 핵심 QbD 객체 속성(공급 속도 → 단량체 순도)으로, 그 NOR, PAR, 중요도, DoE 연구를 부착된 증거로 동반합니다.- NOR / PAR — 파라미터를 한정하는 더 좁은 정상 운전 범위와 더 넓은 입증된 허용 범위로, 산문이 아니라 유형 있는 범위로 모델링됩니다.
occursIn— 프로세스를 그것이 돌아간 지속적 장비에 묶는 객체 속성(배양 작업을BR-101에), 배치 물질을 용기로 다시 유형 짓는 대신 사용됩니다(물질/장비 가드).contains— 전이적 포장 위계(카톤 → 케이스 → 팔레트)로, 봉쇄는 가변적이고 계보가 아니기 때문에 일부러derivedFrom의 하위 속성이 아닙니다.
이것이 이어지는 곳
관계는 연결되었고 척추는 전이적입니다. 그러나 단지 선언만 된 관계는 여전히 오용될 수 있습니다 — hasHostOrganism 같은 함수 속성이 진술되지 않거나, 존재 제약이 강제되지 않거나, disjointness가 잊혀 "배치가 곧 작업"이라는 오류가 빠져나가거나, 열린 세계 추론기가 잡지 못할 세포 은행 특성 규명 게이트. 다음 장 형식화: 공리, 제약, 그리고 추론기가 잡을 수 있는 것과 없는 것은 이 클래스와 관계에 이빨을 주는 OWL 2 공리 — 함수 속성, 존재 및 카디널리티 제약, disjointness — 를 더하고, OWL-RL 폐쇄가 강제하는 것과 완전한 DL 추론기나 SHACL 게이트만이 잡을 것 사이의 경계를 정직하게 마주합니다.