유지보수: 발행, 조립된 실타래, 그리고 FAIR
📍 현재 위치: 제7부 · 유지보수, 발행, FAIR — 생애주기의 마지막 단계입니다. 명세(Specification)는 요구서를 썼고, 재사용(Reuse)은 등뼈를 빌렸으며, 개념화(Conceptualization)와 형식화(Formalization)와 구현(Implementation)이 모델을 짓고 인스턴스화했고, 검증(Validation)이 그것을 관문에서 통과시켰습니다. 이제 LOT(Linked Open Terms) 방법론이 후단부를 넘겨받습니다: 완성된 어휘를 하나의 재사용 가능한 산출물로 발행하고, 그것이 FAIR한지를 — 가정이 아니라 — 측정합니다.
하나의 CHO 단클론 항체 캠페인을 위해 우리는 모든 간선을 깔았습니다: 약국 선반의 콜드체인 바이알에서 직렬화된 단위, 의약품 완제품, 원료의약품, 폴리싱 및 포획 풀, 생물반응기 배치, 시드 트레인, 그리고 세포 은행 위계를 거쳐 WCB-CHO-001까지 거슬러 올라가는 derivedFrom; 피드 속도 파라미터에서 그것이 형성하는 단량체 순도 속성으로 향하는 affectsQuality; 관문에서의 출하 판정; 한 배치를 두고 의견이 갈렸던 두 소스 시스템을 조정하는 PROV 출처. 각각은 하나의 모델링 작업이었습니다. 조립되고 발행되면, 그것들은 하나의 항행 가능한 어휘가 되며, 그 안에서는 리콜의 범위를 추측이 아니라 질의로 정할 수 있습니다 — 그리고 발행 단계는 이 모든 노력을 정당화하는 질문을 던집니다: 그것이 정말로 세상에 유용한가? FAIR가 그 답을 재는 잣대이며, 이 장의 정직한 규율은 FAIR를 구호에서 측정으로 바꾸고, 측정 결과가 광고지보다 못하게 나오는 지점을 인정하는 것입니다.
도서관이 모든 책을 소장하고도, 목록이 없고 출입문이 아무 때나 잠기며 책 절반이 라벨 없는 언어로 쓰여 있다면 무용지물일 수 있습니다. "우리는 책을 가지고 있다"는 "당신이 그것을 찾고, 가져가고, 결합하고, 재사용할 수 있다"와 다릅니다. mAb 제조사에게 그 책들은 배치 기록, 세포 은행 인증서, 크로마토그램, 콜드체인 로그입니다: 그것들을 모두 소장한다는 것은, 실패한 로트를 그 세포 은행까지 거슬러 걷거나, 그 은행을 공유하는 정확히 그 로트들로 리콜 범위를 단 한 번의 질의로 좁힐 수 있다는 것과 같지 않습니다. FAIR는 목록이 실제로 작동한다는 약속이며 — 그것을 아는 유일한 길은 올바른 서가 배치가 그것을 가져다주었다고 가정하는 것이 아니라 시험하는 것입니다. 이 장은 완성된 CHO 캠페인 온톨로지를 하나의 어휘로 발행하고, 그것을 FAIR에 비추어 정직하게 시험하며, 가장 점수가 낮은 차원을 인정합니다.
질문에서 시작하라
명세의 두 역량 질문이 이 장을 차지하며, 둘 다 출처(provenance) 그룹에 속합니다. 발행이란 한 배치의 사실이 어디서 왔는가와 그 물질이 어떤 규제 동일성을 지니는가에 관한 모델의 주장이 마침내 발행된 그래프에 대해 시험되는 곳이기 때문입니다. CQ-15는 두 소스 시스템 기록 — BATCH-2026-001을 등록한 MES와 그 생물반응기를 명명한 계보 로더 — 이, 배치 물질을 용기에 융합시켜 버릴 owl:sameAs 과잉 병합 없이, 하나의 큐레이션된 결정으로 조정되는지를 묻습니다. CQ-16은 ISO IDMP 규제 물질 동일성이 출하 관문이 검증한 바로 그 DS-001 노드에 — 사본이 아니라 — 붙어서, 규제 당국이 보는 원료의약품과 제조사가 보는 원료의약품이 하나의 존재인지를 묻습니다. 둘 다 발행된 그래프에 대해 초록으로 통과하며, 둘 다 FAIR-실제(FAIR-in-fact)의 시험입니다: 출처는 수년 뒤 한 배치 기록을 조사하는 낯선 이에게 그것을 재사용 가능(Reusable)하게 만드는 것이고, 단일한 공유 동일성은 출하된 로트를 규제 제출과 상호운용 가능(Interoperable)하게 만드는 것입니다.
하나의 발행된 산출물로 조립된 어휘 전체
발행의 첫 행위는 한 걸음 물러나 이전 장들이 실제로 무엇을 지었는지 바라보는 것입니다. 각 장은 자신의 클래스와 관계를 하나의 네임스페이스 bp:에 더했습니다. 그 결과는 여러 어휘가 아니라 하나입니다 — 첫날의 표적에서 환자 머리맡의 콜드체인 바이알까지, 프로세스 전체를 아우르는, 완전하고 로드 가능한 온톨로지입니다. bioproc.ttl에 담긴 완성된 bp: 어휘는 206개 클래스, 88개 객체 속성, 46개 데이터 속성(여기에 폐기 패턴을 위한 주석 속성 하나)이며 — 모든 클래스가 BFO 상위 등뼈 위에 근거하고, align.ttl에서 BFO, IOF, OBO 생물학 온톨로지들, AFO, QUDT, RO, PROV로 위로 정렬됩니다. 각 장은 하중을 지는 용어들을 도입했고, 잎 수준의 전체 집합 — 모든 CQA, 모든 분석법, 모든 산물 변종 — 은 파일 안에 살아 있습니다. 일곱 개의 최상위 범주로 압축하면, 전체가 한 화면에 들어옵니다:
# bioproc.ttl — the assembled vocabulary, by BFO category (representative members)
bp:Material # cells, banks, cultures, batch, pools, substance, product, vials, packages
bp:Equipment # bioreactors, columns, resins, filters, instruments, loggers, sites
bp:Quality # purity, aggregate, charge variant, HCP, turbidity, integrity, criticality
bp:RealizableEntity # roles; dispositions (developability, resin binding, LRV); functions
bp:InformationArtifact # concept, sequence, recipe, spec, method, result, certificate, FAIR, IDMP
bp:ProcessParameter # the CPP types: feed rate, temperature, pH, dissolved oxygen
bp:Process # discovery, transfection, culture runs, unit operations, assays, EPCIS events
# and one transitive relation threads every material in the namespace together:
bp:derivedFrom a owl:TransitiveProperty . # WCB-CHO-001 -> ... -> DS-001 -> { DP-001 , DP-002 }
이것은 온톨로지에 관한 그림이 아닙니다 — 그것은 이 책이 하나의 CHO mAb를 위해 쓴 온톨로지 바로 그것입니다. 하나의 버전과 하나의 라이선스 아래 하나의 산출물로 발행된 단일 bp: 네임스페이스가 LOT 산출물입니다: 스무 개의 단절된 작은 모델이 아니라, 재사용 가능한 어휘입니다. 그 가치는 그것이 존재한다는 데 있지 않고, 그것을 발행함으로써 어려운 제조 질문들이 한 줄짜리 질의가 된다는 데 있습니다.
발행된 실타래가 답하는 것: 계보, 영향, 그리고 생애주기 가로지르기
발행이 중요한 까닭은 오직, 조립된 bp: 그래프가 품질 부서가 몇 주씩 상호 참조로 답하던 세 가지 질문을 단일 진술로 바꾸기 때문입니다. 첫째는 계보 걷기(lineage walk)입니다 — 이 로트는 어디서 왔는가? derivedFrom이 전이적이고 모든 간선이 실제 물질 변환의 흔적이므로, 한 홉 이상의 SPARQL 속성 경로가 임의의 깊이에서 원료의약품의 전체 조상을 재구성합니다. validate.py가 돌리는 바로 그 질의입니다:
# queries/CQ-01.rq — everything DS-001 derives from, to any depth, in one property path.
# (bp:derivedFrom)+ = one-or-more hops; works whether the lineage is 3 steps or 20.
PREFIX bp: <https://example.org/bioproc#>
SELECT ?ancestor ?type WHERE {
bp:DS-001 (bp:derivedFrom)+ ?ancestor .
?ancestor a ?type .
FILTER(STRSTARTS(STR(?type), STR(bp:)))
} ORDER BY ?ancestor
로드된 그래프에서 이 질의는 전체 열한 개 조상의 계보를 반환합니다 — 거친 CSV 사슬이라면 뭉개 버렸을 모든 실제 단위 작업 중간체를, 폴리싱 풀에서 세포 은행 위계까지:
[3] lineage walk from DS-001: 11 ancestors
BATCH-2026-001 CLAR-001 MCB-CHO-001 PApool-001 POLpool-001 RCB-CHO-001
SEED-001 SEEDFLASK-001 VFpool-001 VIpool-001 WCB-CHO-001
이것이 바로 세포 은행에 계보가 필요한 이유입니다: 원료의약품은 폴리싱 및 바이러스 제거 풀(POLpool-001, VFpool-001, VIpool-001), 포획 풀과 청징 하베스트(PApool-001, CLAR-001), 생물반응기 배치, 시드 트레인(SEED-001, SEEDFLASK-001), 그리고 세포 은행 위계(WCB-CHO-001, MCB-CHO-001, RCB-CHO-001)를 거쳐 거슬러 올라가며 — 이 장거리 도달 가능성은 손으로 단언된 것이 아니라 전이적 폐포(transitive closure)에 의해 추론됩니다.
둘째 질문은 그 역이며, 실타래가 돈과 환자 안전으로 제값을 하는 지점입니다: 한 로트가 실패하면, 무엇이 그 운명을 함께하는가? DP-004가 HMW 응집체에서 규격을 벗어나면, 조사는 그 계보를 거슬러 올라가 공유 조상에 닿고, 다시 내려와 그 조상으로 추적되는 모든 의약품 완제품에 이릅니다:
# queries/CQ-04.rq — when DP-004 fails, what shares its fate? Walk UP DP-004's
# lineage to common ancestors, then back DOWN to every drug product that shares
# one — i.e. every sibling lot tracing to the same cell bank. Scopes a recall by
# query instead of quarantining the whole campaign.
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
캠페인의 모든 배치가 같은 WCB-CHO-001로 추적되므로, 이 질의는 두 형제 로트를 모두 반환합니다 — 전방 분기 bp:DS-001 bp:fillsInto bp:DP-001 , bp:DP-002야말로, 운명을 함께하는 영향 집합을 운이 아니라 구성상 완전하게 만드는 것이며, 범위가 정해진 일탈과 눈먼 캠페인 전체 격리의 차이입니다:
impact of DP-004 (shared cell bank): ['DP-001', 'DP-002']
셋째 질문은 오직 이 책의 모델링만이 가능하게 하는 것입니다. 파편화된 공장이 세 가지 방언으로 유지하는 이음매를 가로지르기 때문입니다: 어떤 프로세스 파라미터가 이 로트의 단량체 순도를 좌우했는가? 그것은 개발기의 affectsQuality 단언(bp:FeedRate bp:affectsQuality bp:MonomerPct-CQA)에서 시작해, 그 파라미터를 설정점으로 실현한 생산 단계 운전을 찾고, 그 운전이 산출한 배치로 건너간 뒤, derivedFrom을 앞으로 걸어 그 결과를 지닌 출하된 원료의약품 로트에 이릅니다 — 개발 연구, 공장 센서, QC 판정을 하나의 진술로 결합해 피드 속도 CPP를 DS-001 위에 안착시킵니다. 어휘를 발행하는 핵심은 이 세 질의가 하나의 산출물 위에서 돌아간다는 데 있습니다: 간선을 충실히 깔면 계보, 리콜 범위, 생애주기 가로지르기 연결이 모두 고고학으로 재구성되는 것이 아니라 계산됩니다.
하나의 온톨로지, 하나의 어휘로 발행됨: 모든 장이 자신의 클래스를 단일
bp: 네임스페이스에 더하고, 전부 하나의 BFO 등뼈 위에 근거하며 전이적 derivedFrom 계보로 엮입니다 — 206개 클래스가, 이 책 전체가 써 내려가던 완전하고 로드 가능한 모델로 조립됩니다.
저자가 AI의 도움을 받아 직접 제작한 그림입니다.
측정으로 바뀐 FAIR
FAIR의 힘은 그것이 구체적인 점검들로 분해된다는 데 있으며, 바로 그 점이 그것을 단지 주장하는 대신 측정할 수 있게 합니다 [1][2]. 발행된 CHO 캠페인 그래프에서, 각 글자는 실제 산출물과 실제 제조 필요에 안착합니다:
- 찾을 수 있음(Findable) — 모든 존재가 전역적으로 고유하고 지속적인 IRI와 색인된 메타데이터를 지니므로, 조사자는 스프레드시트들을 뒤지는 대신 정확한 원료의약품 로트를 짚을 수 있습니다.
bp:DS-001은 하나의 전역 문자열https://example.org/bioproc#DS-001로 펼쳐지며, 계보 걷기에서든 출하 관문에서든 IDMP 기록에서든 어디서나 동일하게 — 라벨, 유형, 출하 상태를 지닌 채, 익명의 셀이 아니라 — 나타납니다. - 접근할 수 있음(Accessible) — 데이터는 그 식별자로, 명확한 접근 규칙과 함께 표준 프로토콜을 통해 회수 가능하며, 그것이 바로 감사관이 세포 은행 인증서를 요구 즉시 끌어올 수 있게 하는 것입니다. 문서화된 인가를 갖춘 SPARQL 엔드포인트는 통과합니다. FAIR-접근 가능은 공개를 뜻하지 않습니다 — GMP 배치 기록은 규제 대상이고 엄격히 접근 통제되지만, 접근 조건이 명확하고 회수 메커니즘이 표준이라면 온전히 FAIR합니다.
- 상호운용 가능(Interoperable) — 값들이 공유된 형식 어휘와 단위를 지닌 한정 참조를 쓰므로, 98.611이라는
monomerPct가 다른 시스템이나 규제 당국 도구에서 분수로 오독될 수 없습니다. QUDT 단위를 지닌 공유 클래스로 해소되는 값은 통과하고, 맨 문자열은 그렇지 못합니다 — 그리고 이것은 계보 자체가 의존하는 차원입니다.derivedFrom간선은 양쪽이 그 의미를 인식할 때에만 시스템 간 결합이 가능하기 때문입니다. - 재사용 가능(Reusable) — 데이터가 출처와 명확한 사용 라이선스로 풍부하게 기술되므로, 일탈을 조사하는 낯선 이는 그것을 다시 유도하지 않고도 배치 기록을 신뢰할 수 있습니다. 자신의 방법, 세포 은행까지 거슬러 가는 시료 계보, 그리고 사용 조건을 지닌 결과는 통과하고, 고아가 된 숫자는 그렇지 못합니다.
이것들은 슬라이드 항목이 아니라 로드 가능한 개체입니다. 그래프는 DS-001 기록에 대한 자체 FAIR 자가 평가를, bp:FAIRAssessment에 매달린 네 개의 bp:FAIRCheck 노드로, 그리고 재사용 가능 점검이 의존하는 라이선스와 함께 지니고 있습니다:
bp:FAIR-DS-001 a bp:FAIRAssessment ; rdfs:label "FAIR assessment of the DS-001 record" ;
bp:assesses bp:DS-001 ;
bp:hasCheck bp:FC-F , bp:FC-A , bp:FC-I , bp:FC-R .
bp:FC-F a bp:FAIRCheck ; rdfs:label "Findable (global IRI)" ; bp:fairVerdict "PASS" .
bp:FC-A a bp:FAIRCheck ; rdfs:label "Accessible (resolves, with access conditions)" ; bp:fairVerdict "PASS" .
bp:FC-I a bp:FAIRCheck ; rdfs:label "Interoperable (shared vocab + QUDT units)" ; bp:fairVerdict "PARTIAL" .
bp:FC-R a bp:FAIRCheck ; rdfs:label "Reusable (method, lineage, licence)" ; bp:fairVerdict "PASS" .
bp:LICENSE-CC-BY a bp:UsageLicense ; rdfs:label "CC BY 4.0" .
bp:DS-001 bp:hasLicense bp:LICENSE-CC-BY .
이 모델의 정직함은 "PASS"가 아닌 단 하나의 판정에 있습니다: 상호운용 가능은 "PARTIAL"로 기록되는데, QUDT 단위나 공유 클래스 간선이 빠져서가 아니라, 이토록 신중하게 정렬된 그래프조차 자신의 로컬 용어 가운데 일부만을 검증된 외부 IRI로 위로 매핑하기 때문이며 — 상호운용성은 실제 그래프가 가장 자주 실패하는 차원이기 때문입니다.
구호가 아니라 점수표로서의 FAIR: 각 글자가 구체적인 점검이 되고, 기계 작동 가능성이 목표이며, 상호운용성이 실제 그래프가 가장 자주 실패하는 차원으로 표시됩니다 — 대개 엔진이 아니라 손으로 작성된 메타데이터 때문입니다.
저자가 AI의 도움을 받아 직접 제작한 그림입니다.
재사용 가능은 곧 출처: CQ-15가 두 소스 시스템을 조정한다
재사용 가능이라는 글자는 출처로 얻어지며, 그래프는 실제 출처를 하나 지니고 있습니다. 두 소스 시스템이 한 노드를 두고 의견이 갈렸습니다: 배치 등록기(MES)는 BATCH-2026-001이 Batch 물질이라 주장했고, 계보 로더(ETL 작업)는 그 운전이 BR-101로 해소되는 생물반응기를 썼다고 주장했습니다. 순진한 통합이라면 둘을 owl:sameAs로 병합해 배치 물질과 용기를 뒤섞어 버렸을 것입니다. 대신, 데이터 스튜어드의 큐레이션이 두 주장을 모두 사용해 그것들을 분리했고, 각 주장은 W3C PROV-O를 통해 자신의 소스 행위자에게 귀속되었습니다 — instances.ttl이 bp:reconciliation-001 prov:wasAssociatedWith bp:DataSteward로 기록하는 바로 그 규율입니다:
# instances.ttl — the PROV reconciliation: two source claims, one curated decision, no over-merge.
bp:BatchRegister a prov:SoftwareAgent ; rdfs:label "batch register (MES)" .
bp:GenealogyLoad a prov:SoftwareAgent ; rdfs:label "genealogy loader (ETL)" .
bp:DataSteward a prov:Agent ; rdfs:label "ontology data steward" .
bp:claim-batch-001 a prov:Entity ; rdfs:label "source claim: BATCH-2026-001 is a Batch (material)" ;
prov:wasAttributedTo bp:BatchRegister .
bp:claim-vessel-001 a prov:Entity ; rdfs:label "source claim: BATCH-2026-001's run used a bioreactor -> resolved to BR-101" ;
prov:wasAttributedTo bp:GenealogyLoad .
bp:reconciliation-001 a prov:Activity ; rdfs:label "curation: separate the vessel (BR-101) from the batch material" ;
prov:used bp:claim-batch-001 , bp:claim-vessel-001 ;
prov:wasAssociatedWith bp:DataSteward .
CQ-15는 발행된 그래프에게 조정된 두 소스 주장을 각각 그 소스에 귀속시켜 반환하도록 요청합니다 — prov:used와 prov:wasAttributedTo에 대한 SELECT입니다:
# queries/CQ-15.rq — the two source claims the steward's reconciliation USED, each attributed.
PREFIX bp: <https://example.org/bioproc#>
PREFIX prov: <http://www.w3.org/ns/prov#>
SELECT ?claim ?source WHERE {
bp:reconciliation-001 prov:used ?claim .
?claim prov:wasAttributedTo ?source .
} ORDER BY ?claim
validate.py는 로드된 그래프에서 이를 돌려 두 주장을 모두 반환하며, 큐레이션된 결정은 파괴적 병합이 아니라 출처로 기록됩니다:
CQ-15 provenance PASS claim = ['claim-batch-001', 'claim-vessel-001']
바로 그 기록된 출처가 BATCH-2026-001의 기록을 낯선 이에게 재사용 가능하게 만드는 것입니다: 하류 소비자는 사실뿐 아니라 누가 그것을 단언했고 충돌이 어떻게 해결되었는지까지 볼 수 있습니다.
상호운용 가능은 곧 하나의 공유 동일성: CQ-16이 IDMP를 같은 노드에 둔다
상호운용 가능이라는 글자는 규제 당국의 동일성과 출하된 품질이 사본이 아니라 하나의 존재일 때 얻어집니다. 그래프는 ISO IDMP 물질 동일성 — 모델이 내부적으로 bp:DS-001로 추적하는 물질에 대한 규제 당국의 이름 — 을, 출하 관문이 검증한 바로 그 노드인 DS-001에 직접 붙입니다:
# instances.ttl — the IDMP regulatory identity attaches to the SAME node the gate validated.
bp:DS-001 bp:hasSubstanceIdentifier bp:IDMP-DS-001 .
bp:IDMP-DS-001 a bp:SubstanceIdentifier ; rdfs:label "IDMP substance identity for DS-001" ;
bp:isAbout bp:DS-001 ;
bp:uniiCode "ILLUSTRATIVE-UNII-0001" ; # an FDA UNII / GSRS code (value illustrative)
bp:mpid "ILLUSTRATIVE-MPID-mAb-A" . # an IDMP Medicinal Product Identifier (value illustrative)
CQ-16은 규제 동일성과 출하 CQA 패널이 하나의 IRI에 매달려 있음을 단일 ASK로 검증합니다:
# queries/CQ-16.rq — the IDMP identifier and the release CQA are carried by the SAME node.
PREFIX bp: <https://example.org/bioproc#>
ASK {
bp:DS-001 bp:hasSubstanceIdentifier ?id .
bp:DS-001 bp:monomerPct ?m .
}
validate.py는 참을 반환합니다: IDMP/UNII 식별자를 지닌 로트가 출하 단량체 값을 지닌 로트와 동일하므로, 그 물질에 대한 규제 당국의 시야와 제조사의 시야는 취약한 조인이 아니라 구성상 상호운용 가능합니다:
CQ-16 provenance PASS ASK = True
발행된 실타래가 끝나는 곳: 콜드체인과 공장 담장
발행된 그래프는 캠페인의 마지막 구간을 정직하게 모델링하며, 그 구간이 바로 FAIR의 연합 한계가 구체화되는 곳입니다. 유통은 모니터링되는 프로세스입니다: 온도에 민감한 바이알은 공장에서부터 검증된 2-8도 콜드체인 안에 머물러야 하고, 그 범위로부터의 이탈 — 이탈(excursion) — 은 산물의 품질과 유통 기한을 손상시킬 수 있는 결과적 사건으로, 출하 결정이 세운 보관 가정을 다시 들춰냅니다. 데이터셋은 이것을 실제 개체로 지니고 있습니다 — 출하된 DP-001을 prov:used한 bp:Shipment, 로거 트레이스를 지닌 bp:ColdChainProcess, bp:DataLogger, 이산적인 bp:TemperatureExcursion, 그리고 유통업체로의 인계를 명명하는 bp:CustodyRole — 빽빽한 로거 페이로드는 그래프 안으로 평평하게 펴 넣지 않고 참조됩니다(색인-대-페이로드):
# instances.ttl — the first distribution leg, modeled as the manufacturer's last authored edges.
bp:SHIP-001 a bp:Shipment ; rdfs:label "shipment of pallet P-001 to distributor" ;
prov:used bp:DP-001 ; # the released drug product (true individual)
bp:hasOutput bp:VIAL-DP-001-000042 . # the serialized vial that ships
bp:COLDCHAIN-001 a bp:ColdChainProcess ; rdfs:label "2-8 C cold-chain transport" ;
bp:hasParticipant bp:VIAL-DP-001-000042 ;
bp:storageTempLowC 2.0 ; bp:storageTempHighC 8.0 ;
bp:hasTrace bp:Trace-Logger-DP001 .
bp:LOGGER-01 a bp:DataLogger ; rdfs:label "cold-chain temperature logger" .
bp:EXCURSION-001 a bp:TemperatureExcursion ; rdfs:label "transient temperature excursion" ;
bp:isAbout bp:VIAL-DP-001-000042 ; bp:excursionTempC 11.4 .
bp:CUSTODY-distributor a bp:CustodyRole ; rdfs:label "distributor custody role" .
derivedFrom이 전이적이므로, 직렬화된 바이알 VIAL-DP-001-000042 — 하위 클래스가 아니라 skos:exactMatch로 교차 연결된 식별자 시스템으로서 자신의 GS1 SGTIN을 지닌 — 은 약국 선반에서 WCB-CHO-001까지의 걷기 전체를 닫으며, 그 동일한 열한 홉 계보가 이제 환자의 손에서 얼린 세포 바이알까지 뻗습니다. 그러나 그래프는 저작권이 유통업체로 넘어가는 곳에서 끝납니다: bp:excursionTempC 11.4로의 이탈은 제조사가 통제한 운송 중에 로그되었지만, 어느 트럭이 그 팰릿을 그 너머로 운반했는지, 어느 창고가 그것을 보관했는지, 그리고 어느 온도에서였는지는 — 기록된다면 — 다른 조직들의 시스템에 쓰여 있습니다. 그리고 이 실타래는 환자에 한 걸음 못 미쳐 의도적으로 멈춥니다 — 한 단위가 조제되었다는 사실에는 연결하되 누가 그것을 받았는지는 받아들이지 않는데, 환자는 제조 존재가 아니라 사생활 권리를 가진 사람이기 때문이며, 그 경계는 공학적 한계가 아니라 데이터 보호 법입니다. 이것이 발행된 산출물이 실제로 상호운용 가능한 것은 오직 공장 안에서뿐이고 연합 가능한 것은 오직 담장까지뿐인 구조적 이유입니다.
평가: 발행된 그래프는 여전히 통과한다
발행이 검증을 약화시킬 권리는 없습니다. validate.py는 발행된 산출물 — bioproc.ttl + align.ttl + instances.ttl — 을 로드해 2120개 트리플을 파싱하고, OWL-RL 폐포를 적용해 7137개 트리플로 만들며, 23개 역량 질문을 모두 돌리고, 그 결과를 SHACL 관문으로 통과시킵니다. 이 장이 기대는 출처 쌍은 초록 줄 가운데 둘이며, 출하 관문은 여전히 마땅히 실패해야 할 곳에서만 실패합니다 — DP-004/DS-004가 hmwPct에서, 그 밖의 모든 로트는 규격 내, DS-001 단량체는 98.611 %, 총 바이러스 LRV는 8.7:
[1] parsed 2120 triples (bioproc + align + instances)
[2] reasoned: 2120 -> 7137 triples after OWL-RL closure
...
CQ-15 provenance PASS claim = ['claim-batch-001', 'claim-vessel-001']
CQ-16 provenance PASS ASK = True
...
23/23 competency questions PASS
ALL CHECKS PASSED
자신의 ORSD를 더 이상 통과하지 못하는 발행된 어휘는 릴리스가 아니라 회귀일 것입니다. LOT 발행 단계는 검증 단계가 승인한 그 동일한 초록 산출물을 출하합니다.
미해결된 부분: 전선 위에서는 적합, 사실은 텅 빔, 담장 너머는 취약
이 시리즈가 맴돌아 온 빈틈이 여기 있습니다. 연구자들이 실제 데이터셋을 FAIR에 비추어 평가하면 일관된 패턴이 드러납니다: 거의 모든 것이 찾을 수 있음인 반면, 상호운용성은 가장 자주 점수가 낮은 차원이며, 네 글자 가운데 흔히 가장 낮습니다 [2][3]. 그 원인은 좀처럼 트리플스토어가 아닙니다 — 그것은 공장 현장에서 손으로 작성된 메타데이터입니다. 마감에 쫓기는 작업자가 고를 통제 어휘 없이 자유 텍스트 필드에 CQA 이름을 타이핑하므로, 한 배치 기록은 "monomer", 다음은 "% main peak", 그다음은 "purity (SEC)"라 적고, 단위는 맨 문자열로 도착합니다. 필드는 존재하지만 어떤 공유 온톨로지도 가리키지 않으며, 그런 두 시스템 사이의 계보 간선은 둘 다 유효한 RDF임에도 결합될 수 없습니다. 데이터는 찾을 수 있고 내려받을 수 있지만 결합 불가능합니다. 바로 그것이 모델 자신의 FC-I 판정이 정직하게 "PARTIAL"인 이유입니다: 일부 용어는 검증된 외부 IRI로 깔끔하게 매핑되고 — bp:Material은 BFO의 material entity로, bp:HostOrganism은 NCBI Taxonomy의 Cricetulus griseus로, bp:HCPAssay는 OBI ELISA 클래스로, bp:derivedFrom은 RO의 derives from으로 — 반면 QbD 관계 affectsQuality 같은 다른 것들은 표준 외부 잎이 없어, 그럴듯하지만 틀린 IRI로 매핑되느니 ILLUSTRATIVE로 표시된 채 남으며, IOF 용어들은 EBI Ontology Lookup Service가 아니라 발행된 IOF 릴리스에 대해 검증되었기에 — OLS는 IOF를 호스팅하지 않으므로 — OLS를 통해 IRI를 해소하는 하류 도구는 BFO/OBI 쪽은 인식하고 IOF 쪽은 조용히 놓칩니다. SHACL 관문은 빠진 필드나 틀린 데이터타입은 잡지만, SEC 단량체 필드에 그럴듯해 보이지만 틀린 용어를 확신을 가지고 잘못 라벨링하는 사람은 잡지 못합니다 — 그리고 출하 CQA에 대한 확신에 찬 오라벨링이야말로 상호운용성 보증을 무너뜨리는 바로 그 종류의 오류입니다. FAIR성은 RDF를 채택함으로써가 아니라 규율과 도구로 전달됩니다.
더 깊은 한계는 유통이 드러냈고 발행이 피할 수 없게 만드는 것입니다: 실타래는 공장 안에서는 철벽이지만 그 너머에서는 취약한 연합(federation)입니다. 제조사의 발행된 그래프는 첫 출하 구간을 정직하게 모델링합니다 — bp:Shipment prov:used bp:DP-001, 그것이 로그한 콜드체인 프로세스, 그것이 배정한 보관 역할 — 그러나 그것은 저작권이 유통업체로 넘어가는 곳에서 끝납니다. 그 인계 너머로, 출처는 독립적인 그래프들의 연합에 의존하는데, 그것들은 한 단위가 무엇인지에 동의하고 그것에 무슨 일이 일어났는지를 — 제조사가 결코 통제하지 못한 창고에서의 어떤 콜드체인 이탈을 포함해 — 공유하기로 선택해야 합니다. 인터페이스(GS1, EPCIS)는 표준화하고 각 당사자가 제 몫을 해 주기를 바랄 수는 있어도, 다른 회사의 데이터 품질을 강제할 수는 없습니다. 조직 간 디지털 스레드 연합은 어떤 발행된 온톨로지도 홀로 해결하지 못하는, 진정으로 열린 문제입니다. 그래서 발행된 산출물에 대한 정직한 FAIR 기준은 명확합니다: 진정으로 찾을 수 있고, 접근할 수 있고, 재사용 가능하며; 상호운용 가능한 것은 오직 정렬이 검증된 만큼만 실제로; 연합 가능한 것은 오직 공장 담장까지만.
왜 중요한가
FAIR는 모델링 노력 전체의 정당화 그 자체입니다 — mAb 제조사가 그저 숫자를 저장하는 대신 온톨로지, IRI, 단위의 비용을 치르는 이유입니다. 그 대가는 구체적입니다: 발행된 FAIR 그래프는 일탈을 WCB-CHO-001까지 거슬러 가는 계보 걷기로, 규격 외 로트를 질의로 정확히 DP-001과 DP-002로 범위가 좁혀진 리콜로, 출하 CQA를 규제 당국 도구가 모호함 없이 읽을 수 있는 값으로 바꿉니다. 그러나 그 정당화는 FAIR성이 실제일 때에만 성립하며, 실제 데이터가 찾을 수는 있지만 상호운용 불가능하다는 일관된 발견은 그 가치가 일상적으로 주장되기만 하고 전달되지는 않는다는 뜻입니다: monomerPct가 맨 문자열인 그래프는 약속한 리콜의 범위를 실제로는 좁힐 수 없습니다. 모델을 하나의 버전 매겨지고 라이선스된 bp: 어휘로 발행한 뒤 그 FAIR성을 측정하는 것 — 각 글자를 하나의 점검으로 바꾸고 정직하게 채점하며, 마땅한 곳에는 "PARTIAL"을 포함시키는 것 — 이야말로, 표준을 채택하는 것이 목표를 달성하는 것과 같다는 안락한 거짓말로부터 프로젝트를 지켜 냅니다. FAIR해 보이지만 그렇지 않은 그래프는 정직한 스프레드시트보다 어쩌면 더 나쁜데, 배치 기록이 얻지 못한 신뢰를 부르기 때문입니다.
실제 현장에서는
LOT는 명시적으로 산업 온톨로지 개발을 위해 지어졌고, 발행·버전 관리·FAIR 릴리스를 일급 단계로 삼아 재사용 가능한 어휘를 발행하기 위해 표준 기구와 대기업에서 쓰입니다. FAIR 평가는 다시, 원칙에서 실천으로 성숙해 왔습니다: 발행된 지표, 성숙도 표시자, 해석 프레임워크가 있어, 조직이 준수를 단언하는 대신 자신의 데이터를 채점할 수 있게 합니다 [2][3]. 여러 영역에 걸친 일관되고 냉정한 결과는, 상호운용성과 풍부한 재사용성이 찾을 수 있음에 한참 뒤처진다는 것입니다. 바이오제약에서, 상호운용성을 전달할 표준들 — IOF/BMIC, Allotrope, QUDT — 은 존재하고 수렴하고 있으므로, 병목은 빠진 기술이 아니라 현장에서 그것들에 맞추어 작성하는 규율과, 모든 조직 간 인계를 넘어 공급망이 여전히 구축해 가고 있는 연합 작업 — 공유 레지스트리, 검증 가능한 자격 증명 — 입니다.
핵심 용어
- LOT(Linked Open Terms) — 재사용 가능한 어휘의 요구사항 → 구현 → 발행 → 유지보수를 규율하는 산업 지향 방법론. 이 단계의 발행-및-릴리스 후단부의 출처입니다.
- 조립된 어휘(Assembled vocabulary) — 206개 클래스, 88개 객체 속성, 46개 데이터 속성의 단일
bp:네임스페이스. 여러 작은 모델이 아니라 하나의 버전 매겨지고 라이선스된 산출물로 발행됩니다. - 계보 걷기 / 영향 분석(Lineage walk / impact analysis) — 발행이 얻어 내는 질의들:
DS-001의 열한 개 조상 계보를WCB-CHO-001까지 반환하는(derivedFrom)+속성 경로와, 실패한 로트의 리콜을 그 세포 은행을 공유하는 형제(DP-001,DP-002)로 좁히는 그 역. - 콜드체인 / 이탈(Cold chain / excursion) — 출하된 바이알이 지켜야 하는 검증된 2-8도 범위. 모니터링되는
bp:ColdChainProcess로 모델링됩니다. 이탈(bp:excursionTempC 11.4)은 그 단위의 사용 적합성에 영향을 미치는 이산 사건입니다. - 환자 동일성 간선(Patient-identity edge) — 식별된 개인에 못 미쳐, 조제 시점에서 제조 실타래를 의도적으로 종료하는 것. 데이터 무결성이 데이터 보호 법에 길을 내주는 지점입니다.
- FAIR 원칙(FAIR principles) — 데이터가 찾을 수 있고, 접근할 수 있고, 상호운용 가능하고, 재사용 가능하며, 기계 작동 가능성이 명시적 목표라는 것. 준수 시험이 아니라 원칙입니다.
- FAIR는 공개가 아니다(FAIR is not open) — 접근 가능은 명확한 접근 조건과 표준 회수 메커니즘을 뜻하지, 누구나 모든 것을 읽을 수 있음을 뜻하지 않습니다. 제한된 규제 데이터도 온전히 FAIR할 수 있습니다.
- 상호운용성 빈틈(The interoperability gap) — 실제 데이터가 찾을 수는 있지만 상호운용성에서 가장 자주 실패한다는 일관된 발견. 메타데이터가 통제 어휘 없이 손으로 작성되기 때문이며, 모델 자신의
FC-I판정이 정직하게"PARTIAL"인 이유입니다. - PROV 조정(PROV reconciliation) — 큐레이션된 결정(CQ-15)을, 귀속된 두 소스 주장을
prov:used한prov:Activity로 기록하여,owl:sameAs과잉 병합 없이 용기를 배치 물질에서 분리하는 것. - 같은 노드 위의 IDMP(IDMP-on-the-same-node) — ISO IDMP 규제 물질 동일성(CQ-16)을, 출하 관문이 검증한 바로 그
DS-001노드에 붙여, 규제 동일성과 출하된 품질이 하나의 상호운용 가능한 존재가 되게 하는 것. - 담장 너머의 연합(Federation past the wall) — 발행된 실타래를, 제조사가 시스템·식별자·데이터 품질을 통제하지 못하는 유통업체와 약국을 거쳐 이어 가는 열린 문제.
다음 이야기
모델은 지어졌고, 검증되었으며, 하나의 FAIR-측정된 어휘로 발행되었고, 상호운용성과 연합이 어디서 얇아지는지에 대해 정직합니다. 러닝 예제는 완성되었습니다. 제8부는 이제 캠페인에서 한 걸음 나와, 생애주기가 답을 가정했던 경험적 질문을 던집니다: 실제 산업은 정말로 이 중 무엇이라도 하고 있으며, 얼마나 성숙해 있는가? 그것은 표준 기구: 누가 실제로 바이오제약의 공유 어휘를 짓는가로 시작하여, 모든 이전 장이 조용히 기대어 온 공유 어휘를 만들어 내는 경쟁 이전(pre-competitive) 컨소시엄들 — Allotrope, Pistoia Alliance, ISA-88/95, OPC UA와 MTP, ISPE Pharma 4.0, BioPhorum, GS1, 그리고 OAGi/NIIMBL 바이오제조 온톨로지 노력 — 을 둘러봅니다.