본문으로 건너뛰기

식별자와 단위: IRI, QUDT, 그리고 타입 지정 값

📍 현재 위치: 제4부 · 형식화 — 모델이 힘을 갖게 만드는 단계입니다. 우리는 이제 클래스, 관계, 공리를 저작할 수 있습니다. 이번 장은 그 모든 것이 조용히 전제하고 있던 두 가지를 살펴봅니다. 하나의 이름이 어디서나 같은 것을 뜻한다는 전제, 그리고 하나의 숫자는 결코 단위 없이 떠다니지 않는다는 전제입니다.

지난 두 장은 어휘를 세우고 거기에 논리를 부여했습니다. 그러나 우리가 적은 모든 트리플(주어 — 술어 — 목적어 형태의 RDF 진술, 예컨대 PApool-001 derivedFrom CLAR-001)은 입 밖에 내지 않은 두 가지 약속에 기대고 있었습니다. PApool-001 derivedFrom CLAR-001이라고 — 그리고 그 사슬을 따라 포획 풀이 BATCH-2026-001까지 거슬러 올라간다고 — 말했을 때, 우리는 각 이름이 하나의 대상을 — 그것을 읽는 모든 시스템에게 동일한 그 대상을 — 가리킨다고 전제했습니다. 그리고 monomerPct 98.611이라고 말했을 때, 우리는 98.611이 모호하지 않을 만큼 충분한 정보를 스스로 지니고 다닌다고 전제했습니다. 두 약속 중 어느 것도 공짜로 성립하지 않으며 — 그 약속과 현실 사이의 간극이 바로 의미적 상호운용성 장이 이름 붙인 그 데이터 "늪"입니다. 같은 사실이 여러 시스템에 충돌하는 이름과 맨숫자로 깃들어, 무엇도 믿을 만하게 결합될 수 없는 상태이죠. 이번 장은 그 두 간극을 모두 메웁니다. 이름을 전역적으로 만드는 식별자(identifier), 그리고 값을 스스로 기술하게 만드는 단위와 데이터타입(unit-and-datatype)의 규율입니다.

쉽게 말하면

신뢰할 수 있는 숫자와 그렇지 못한 숫자를 가르는 작은 습관 두 가지가 있습니다. 첫째는 여권(passport)입니다. 어떤 대상을 "BR-101" — 당신의 공장에서는 한 가지를 뜻하지만 내 공장에서는 다른 것을 뜻하는 이름 — 이라고 부르는 대신, 세계 어디서도 다른 누구의 것과 혼동될 수 없는 전역적으로 유일한 식별자를 부여하는 것입니다. 둘째는 언제나 화폐 단위를 함께 적는 것입니다. "5"는 쓸모가 없지만 "5 USD"는 은행에 넣을 수 있습니다. 98.611이라는 값은 소문에 불과하지만, 숫자로 타입이 지정되고 퍼센트(percent)라는 단위가 붙은 98.611은 사실입니다. 이번 장은 모든 이름에 여권을 주고 모든 숫자에 그 화폐 단위를 주는 일에 관한 이야기입니다.

이 장에서 다루는 내용

우리는 IRI를 풀어 봅니다 — 왜 전역 식별자가 지역 기본 키를 이기는지, 그리고 그것을 발행(minting)하고 화해(reconcile)시키는 규율은 무엇인지를요. 여기에는 owl:sameAs가 어떻게 네 가지 다른 이름으로 불리는 하나의 실제 배치를 잇는지, 그리고 왜 그 연결이 보이는 것보다 더 위험한지도 포함됩니다. 그다음 우리는 값에 정체성을 부여합니다. 98.611을 텍스트가 아니라 숫자로 만드는 데이터타입(datatype), 그리고 그 숫자가 무엇을 측정하는지를 고정하는 QUDT 단위입니다. 우리는 완전히 식별된 값 하나를 해부하고, 이것이 어떻게 데이터를 찾을 수 있고(Findable) 상호운용 가능하게(Interoperable) 만드는지를 정확히 보여 준 뒤, 레거시 시스템 전반에 걸친 정체성 화해라는 진정으로 미해결된 문제로 마무리합니다.

이 책 전체에서 이름 앞의 prefix:는 그것이 어느 어휘에서 왔는지를 표시합니다. bp:는 우리 자신의 캠페인이고, owl:, skos:, prov:, xsd:, qudt:는 공유 표준 어휘로, 각각은 이 장 끝의 핵심 용어 절에 정의되어 있습니다.

IRI: 지역 키가 아니라 전역 이름

관계형 데이터베이스에서 BATCH-2026-001은 기본 키입니다. 그 테이블 안에서는 유일하지만 그 바깥에서는 무의미하죠. 실험실 시스템, ERP(공장의 비즈니스·재고 시스템), 히스토리언(센서 판독값을 기록하는 시계열 데이터베이스)이 각자 자기만의 "BATCH-2026-001"을 가지는 순간, 당신에게는 똑같아 보이지만 같은 배치를 뜻하지 않을 수도 있는 키가 셋 생기거나 — 혹은 네 개의 서로 다른 키를 지닌 하나의 배치가 생깁니다. RDF의 답은 IRI, 곧 국제화 자원 식별자(Internationalized Resource Identifier)입니다. 네임스페이스 접두어(콜론 앞부분으로, 누가 그 이름을 소유하는지를 표시)와 지역 식별자(콜론 뒷부분)로 만들어져 단 하나의 대상으로만 해석되는, 전역적으로 유일한 웹 이름이죠 [2]. 우리의 bp:BATCH-2026-001은 — 네임스페이스 접두어 bp:, 지역 식별자 BATCH-2026-001https://example.org/bioproc#BATCH-2026-001로 확장되며, 네임스페이스가 그것을 전역적으로 만들어 주기 때문에 같은 지역 이름을 지닌 다른 조직의 배치와 충돌할 수 없습니다. 모든 트리플의 주어, 술어, 그리고 자원 값을 지닌 목적어는 IRI입니다 — 그래서 정체성은 데이터 모델에 나중에 덧붙여진 것이 아니라 처음부터 내장되어 있습니다.

이것은 FAIR 원칙 — 데이터가 Findable(찾을 수 있고), Accessible(접근할 수 있고), Interoperable(상호운용 가능하고), Reusable(재사용 가능)해야 한다는 널리 채택된 표준 — 의 맨 첫 글자의 구조적 형태입니다. 바로 F1, "데이터와 메타데이터에는 전역적으로 유일하고 영속적인 식별자가 부여된다"입니다 [1]. 지역 키는 시스템 전반에서 찾을 수 없지만 영속적인 IRI는 찾을 수 있습니다. 그것을 잘 발행하는 일은 그 자체로 작은 규율입니다 — 의미가 바뀌면 썩어 버리는 의미 있는 식별자보다 불투명하고 안정적인 식별자를 선호하고, 폐기된 식별자는 결코 재사용하지 않으며, 네임스페이스가 계속 해석 가능하도록 누가 보장하는지를 미리 정해 두어야 합니다. 규제 환경에서는 그 정체성이 기록을 보존해야 하는 수십 년 동안 계속 해석되어야 할 수도 있기 때문입니다.

네 가지 이름으로 불리는 하나의 배치: 화해와 그 위험

어려운 경우는 새로운 대상에 이름을 붙이는 일이 아닙니다. 네 시스템이 이미 같은 대상에 서로 다른 이름을 붙여 두었다는 사실을 발견하는 일이죠. 생물반응기 DCS(분산 제어 시스템 — 공장의 공정 제어 컴퓨터)는 BR101.Temp.PV를 기록하고, LIMS(실험실 정보 관리 시스템 — 실험실의 샘플·결과 관리자)는 그 로트를 DS-2026-001이라 부르며, ERP(전사적 자원 관리 시스템)는 그 자재를 1000457이라 부르고, 분석성적서(CofA) PDF에는 "Lot 26-001"이라고 적혀 있습니다. 각각은 내부적으로 일관되지만 서로는 알아들을 수 없습니다 — 오픈소스 지식 그래프 장이 자신의 그래프를 만들어 풀고자 한 바로 그 문제입니다. 그래프란 이들을 화해시키는 모델이 마침내 깃들 수 있는 곳입니다. (이 공장 시스템들이 각각 무엇인지 — DCS와 히스토리언, LIMS, ERP, MES — 는 실행 예제가 네 개의 소스 시스템에서 소개하고, 데이터 책의 공장 정보 시스템 장이 온전히 정의합니다.)

투박한 도구는 owl:sameAs로, 두 IRI가 동일한 개체를 가리킨다고 주장합니다. 그래서 한쪽에 참인 모든 것이 다른 쪽에도 참이 됩니다. lims:DS-2026-001 owl:sameAs bp:DS-001이라고 적으면 추론기(당신이 진술한 사실로부터 새로운 사실을 자동으로 도출하는 추론 소프트웨어)가 둘의 사실을 융합합니다. 이것은 강력하면서도 장전된 총입니다. owl:sameAs는 양방향으로 모든 속성을 전파하므로, 지나치게 성급한 정체성 연결 하나가 그래프를 거짓 추론으로 오염시킬 수 있습니다 — 잘 기록된 "sameAs 문제"로, 링크드 데이터(Linked Data) 실무자들은 이 관계가 참된 정체성이 아니라 "비슷하다"거나 "관련 있다"는 뜻으로 일상적으로 오용된다는 사실을 발견했습니다 [5]. 그것은 두 IRI를 모든 것이 동일한 하나의 개체로 무너뜨립니다. 이는 살아 있는 대상의 정체성, 각자 자신의 출처를 유지해야 하는 시스템 간 기록, 그리고 버전 정체성에는 정확히 잘못된 처리입니다 — 그래서 그것은 주로 언제 손대지 말아야 하는지를 알기 위해 이해해야 하는 원시 도구입니다. 더 느슨한 연결을 위한 더 안전한 도구들은 일부러 더 약하게 만들어졌습니다. skos:exactMatchskos:closeMatch는 두 용어가 같은 개체라고 주장하지 않으면서 둘이 들어맞는다는 사실만 기록하므로, 잘못된 매칭이 그래프 전체를 망가뜨리는 대신 하나의 매핑을 저하시키는 데 그칩니다.

그리고 이 책이 실제로 내린 결정은 이렇습니다. 컴패니언 그래프는 owl:sameAs를 전혀 주장하지 않습니다grep -rn 'sameAs' *.ttl은 하나도 찾지 못합니다. 두 시스템이 BATCH-2026-001을 서로 다르게 기술했을 때 — 배치 등록기(MES — 제조 실행 시스템)는 그것이 배치이다라고 말했고, 계보 로더(배치 계보 기록을 가져오는 ETL 작업)는 그 실행이 "어느 생물반응기"를 사용했다고 기록했으며, 순진한 합집합(두 시스템의 트리플을 큐레이션 없이 그저 한데 모으는 것)이 한때 이를 한 노드 위의 두 번째 rdf:type(RDF의 "is-a" 소속 진술)로 바꿔 — 그래서 하나의 IRI가 배치이면서 동시에 생물반응기라고 단언되어 그 원료와 용기를 하나로 융합시켰습니다 — 해법은 IRI를 병합하는 것이 아니라 각 소스의 주장을 PROV 클레임(claim)으로 유지하고 큐레이션 단계로 그것들을 해소하는 것이었습니다.

# instances.ttl — reconciling two source systems WITHOUT an owl:sameAs over-merge.
bp:claim-batch-001 a prov:Entity ; prov:wasAttributedTo bp:BatchRegister . # MES: it is a Batch (material)
bp:claim-vessel-001 a prov:Entity ; prov:wasAttributedTo bp:GenealogyLoad . # ETL: the run used a bioreactor -> BR-101
bp:reconciliation-001 a prov:Activity ; # the steward's curation decision
prov:used bp:claim-batch-001 , bp:claim-vessel-001 ;
prov:wasAssociatedWith bp:DataSteward . # separates vessel BR-101 from the batch

(위의 Turtle에서 ardf:type — "is a" — 의 약식이며, ;는 다음 술어를 위해 같은 주어를 재사용합니다.) 각 클레임은 그것을 만든 시스템에 귀속된 채로 남고, 스튜어드의 prov:Activity누가 무슨 증거로 결정했는지를 기록하며, 배치 원료와 용기 BR-101은 두 개의 노드로 남습니다 — 이것이야말로 owl:sameAs였다면 파괴했을 바로 그것입니다. CQ-15 — 이 책이 모델에 부과하는 실행 가능한 인수 시험인 23개의 번호 매겨진 competency question(역량 질문) 중 하나 — 가 이 규율의 인수 시험입니다. "두 소스 시스템 기록이 owl:sameAs 과잉 병합 없이 하나의 큐레이션된 결정(PROV)으로 화해되는가?" 진정으로 안전한 시스템 간 매칭 — 두 용어가 들어맞는다는 사실을 기록하되 두 기록을 모두 유지하고 싶을 때 — 에는 owl:sameAs가 아니라 skos:exactMatch나 큐레이션된 클레임을 사용하십시오. 연결의 적절한 강도를 고르는 일은 실제 바이오공정 그래프를 구축할 때 가장 중대하면서도 — 가장 과소평가되는 — 결정 중 하나이며, 어느 쪽이든 그것은 트리플 하나입니다(여기서 소스 접두어는 예시일 뿐입니다).

# A safe cross-system MATCH — terms line up, both records survive, no identity over-merge.
erp:material-1000457 skos:exactMatch bp:DS-001 . # SAFE — terms line up, no identity claim

시스템 간 정체성 화해를 보여 주는 히어로 다이어그램: 왼쪽에 네 개의 소스 이름표 — DCS/MES 배치 키 BATCH-2026-001, LIMS 로트 DS-2026-001, ERP 자재 번호 1000457, CofA 문자열 Lot 26-001 — 가 각각 시스템별 색의 상자에 담겨, 매핑 화살표를 통해 하나의 전역 IRI 노드 bp, 즉 원료의약품 로트로 수렴합니다. 작은 범례가 실선 owl 연결(강함, 모든 사실을 전파)과 점선 skos 연결(더 안전한 비정체성 매칭)을 구분합니다. 캡션은 지나치게 성급한 sameAs가 그래프를 오염시킨다고 경고하고, 부가 설명은 컴패니언 그래프가 sameAs를 전혀 단언하지 않으며 CQ-15에 따라 PROV로 매칭을 큐레이션한다고 기록합니다. 네 시스템의 이름이 단일 전역 IRI인 bp:DS-001로 화해됩니다 — owl:sameAs는 모든 사실을 융합하는 강한 연결로, skos:exactMatch는 그렇지 않은 더 안전한 매칭으로 그려졌습니다. 연결의 강도 그 자체가 하나의 모델링 결정이기 때문입니다. 저자가 AI의 도움을 받아 직접 제작한 그림입니다.

타입 지정 값: 숫자는 그렇다고 말하기 전까지는 텍스트다

정체성은 주어와 술어를 다룹니다. 목적어는 — 그것이 간선이 아니라 값일 때 — 자신만의 규율을 필요로 합니다. 맨숫자 98.611은 기계에게 아직 숫자가 아니기 때문입니다. 그것은 숫자처럼 보이는 문자들의 나열일 뿐입니다. RDF는 이를 타입 지정 리터럴(typed literal)로 해결합니다. 어휘 형식(값을 글자로 적어 낸 텍스트, 98.611)을 데이터타입(datatype) IRI(xsd:float, 여기서 "float"은 부동소수점 — 즉 소수 — 숫자)와 짝지어, 그것을 읽는 누구에게나 그 값을 텍스트나 날짜, 코드가 아니라 숫자로 파싱하라고 알려 주는 것이죠 [2]. 데이터타입을 잘못 지정하면 산술이 조용히 깨집니다 — "98.611"을 문자열로 두면 텍스트처럼 정렬되고 비교되므로, "98.611""9"보다 "작습니다". 데이터타입은 계산할 수 있는 값과 표시밖에 할 수 없는 값을 가르는 차이입니다.

하지만 타입이 지정된 숫자도 무엇을 측정하는지에 대해서는 여전히 모호합니다. 98.611이 무엇이라는 걸까요? 데이터 책의 트리플 해부가 이 점을 짚었습니다. 히스토리언은 퍼센트가 이름표에 묻힌 Monomer% = 98.6을 기록했고, 어떤 CSV는 "frac"이 분수를 뜻할 수도 있는 %Mono,98.611,frac을 적었습니다. 같은 숫자, 양립 불가능한 세 가지 의미입니다. 그 치료법은 QUDT — 수량·단위·차원·타입(Quantities, Units, Dimensions and Types) 어휘 — 로, 값이 단위를 문자열 접미어가 아니라 기계가 읽을 수 있는 IRI로 지니게 합니다 [3]. QUDT는 사람들이 혼동하는 두 가지를 분리합니다. 수량 종류(quantity kind)(이것이 어떤 종류의 수량인지 — 무차원 비율인지, 온도인지, 질량 농도인지)와 단위(unit)(unit:PERCENT, unit:DEG_C, unit:GM-PER-L)입니다. 둘 다를 고정하면 98.611은 무차원 비율의 98.611 %를 모호함 없이 가리키고, 캠페인의 배양 온도 설정값 36.5는 수량 종류가 온도인 unit:DEG_C가 되어 — 결코 화씨나 켈빈으로 잘못 읽힐 수 없습니다. 임상 및 실험실 시스템과의 교환에서는 같은 역할을 UCUM, 곧 통합 측정 단위 코드(Unified Code for Units of Measure)가 맡으며, 그 대소문자 구분 코드(%, Cel, g/L)는 소프트웨어 전반에서 모호하지 않도록 설계되었습니다 [4]. 데이터셋은 그 설정값을 자신만의 한정된 값 bp:RPS-temp-CCP001-qv로 지니며, QUDT 단위와 나란히 UCUM 코드 Cel을 기록합니다. 히스토리언과 OPC UA 서버(센서 데이터를 공장 현장에서 스트리밍하는 산업용 통신 프로토콜)가 둘 다 선로(wire) 위에서 — 즉 그들이 주고받는 메시지 안에서 — UCUM을 말하기 때문입니다.

# instances.ttl — the 36.5 degC setpoint, qualified once and readable by both worlds.
bp:RPS-temp-CCP001-qv a qudt:QuantityValue ;
qudt:numericValue "36.5"^^xsd:float ; qudt:hasUnit unit:DEG_C ;
qudt:hasQuantityKind qkind:Temperature ; qudt:ucumCode "Cel" . # 'Cel' is the wire string the historian logs

단위를 데이터로 지니고 다니는 값은 결코 일어나지 않을 미래의 일탈입니다. 다음은 실행 예제의 단량체 값을, 적재 가능한 데이터셋이 그것을 지니고 다니는 모습 그대로, 완전히 한정한 것입니다.

# instances.ttl — 98.611 made self-describing: a number, a unit IRI, and a quantity kind.
bp:DS-001-monomer a qudt:QuantityValue ; rdfs:label "DS-001 SEC %monomer" ;
qudt:numericValue "98.611"^^xsd:float ; # the number, typed as a float
qudt:hasUnit unit:PERCENT ; # the unit as an IRI, not a string suffix
qudt:hasQuantityKind qkind:DimensionlessRatio . # what *sort* of quantity it is

(QUDT의 현재 속성은 qudt:hasUnit이며, 더 오래된 qudt:unit은 더 이상 사용되지 않습니다.) 이제 98.611은 어떤 시스템이든 추측 없이 읽고, 비교하고, 변환할 수 있습니다 — 맨숫자 소문이 사실이 된 것입니다.

식별자와 단위는 실제로 어떻게 부여되는가. 이번 장의 두 규율은 감으로 적용하는 민담이 아닙니다. 위의 각 값은 동일한 짧고 재현 가능한 절차로 발행되었습니다. 책 전체가 기대는, 출하된 로트의 SEC 단량체 측정값인 bp:DS-001-monomer에 처음부터 끝까지 적용해 보면 이렇게 진행됩니다.

  1. 그 대상이 재사용된 것인지 지역의 것인지를 먼저 정하십시오. 그것이 네임스페이스를 결정하기 때문입니다. 숙주 생물은 우리가 이름 붙일 대상이 아닙니다 — 그것은 NCBI 분류체계(Taxonomy — 생물의 공개 목록)가 이미 식별하고 있는 중국 햄스터이므로, 모델은 그 용어를 OBO PURL(공개 생의학 온톨로지 용어를 위한, 영속적이고 리디렉션하는 웹 식별자) 아래 obo:NCBITaxon_10029로 재사용합니다(재사용 부가 고집하는 조회 방식인 OLS4, 곧 EBI 온톨로지 조회 서비스를 통해 해석됨이 검증되었습니다). 반면 원료의약품 로트는 오직 이 캠페인에만 존재하므로 bp: 아래에서 지역적으로 발행됩니다 — bp:DS-001입니다. 규칙은 이렇습니다. 세계가 이미 이름 붙인 것에는 전역적이고 영속적인 IRI를 재사용하고, 진정으로 당신의 것인 대상에만 지역 bp: IRI를 발행하십시오.
  2. 지역 식별자는 의미 있게가 아니라 안정적으로 발행하십시오. DS-001은 그 날짜, 공장, 상태 — 바뀌고 의미를 담은 키를 썩게 만들 사실들 — 를 부호화하지 않고도 로트를 식별하며, 한 번 폐기되면 결코 재사용되지 않습니다(CQ-15의 규율).
  3. 숫자가 맨몸으로 내려앉게 두지 마십시오 — QUDT를 통해 단위를 붙이십시오. 측정값은 98.611이므로 그것은 qudt:QuantityValue가 됩니다. 크기는 타입이 지정되고("98.611"^^xsd:float), 단위는 IRI로 고정되며(qudt:hasUnit unit:PERCENT), 수량 종류는 따로 고정되어(qudt:hasQuantityKind qkind:DimensionlessRatio) 읽는 이가 퍼센트는 그 자체로 하나의 차원이 아니라 척도화된 비율임을 알게 합니다.
  4. 그 방식을 영속성과 왕복성에 비추어 정당화하십시오. 재사용된 용어는 호스트 이동을 견디는 PURL 뒤에 자리합니다. 지역 식별자도 실제 배포에서라면 PURL 뒤에 자리할 것입니다(우리의 example.org/bioproc#은 마지막 절이 이름 붙이는 호스트 결합형 교육용 안티패턴입니다). 그리고 GxP 감사(GxP는 GMP를 비롯한 우수 실천 규정의 총칭으로, 그 아래에서 제약 기록이 보관됩니다)를 변형 없이 통과해야 하는 값에는 xsd:floatxsd:decimal이 될 것입니다. 각 선택은 전제되지 않고 기록됩니다.

단량체 값이 이 워크드 예제를 짊어지는 것은 그것이 출하 게이트를 짊어지는 것과 같은 이유에서입니다. 그것은 캠페인의 골든 로트(이 책이 처음부터 끝까지 따라가는 단 하나의 워크드 제조 실행)가 그것을 근거로 출하 처분되는 — 로트를 합격 또는 불합격시키는 출하 결정 — 단 하나의 숫자입니다 — Spec-DS-mAb-A 단량체 한계에 비추어 98.611 %로 규격 안에(규격 한계 안에) 있고, SEC-단량체 기준(크기 배제 크로마토그래피로 측정한 단량체 순도)은 최소 95.0 %입니다. 그래서 그 정체성과 단위를 정확히 맞추는 일은 규율이 가장 큰 보상을 주는 경우이자, 조용한 오독이 가장 큰 피해를 입힐 경우입니다.

그 블록 안의 한 쌍을 다시 들여다볼 가치가 있습니다. 단위는 unit:PERCENT이지만, 수량 종류는 'Percent' 종류가 아니라 qkind:DimensionlessRatio입니다. 이는 의도적입니다 — 퍼센트는 백분의 일로 척도화된 무차원 비율이므로, 종류는 "이것이 어떤 종류의 수량인가?"(순수한 비율)에 답하고 단위는 "어떤 척도로 적혔는가?"(백분율)에 답합니다. 같은 단량체 분율을 0.98611로 표현하면 동일한 수량 종류와 다른 단위를 지닙니다. 단위뿐 아니라 종류를 고정하는 일이 바로 추론기로 하여금 둘이 다른 옷을 입은 같은 수량임을 알게 합니다.

두 가지 면을 더 다시 들여다볼 가치가 있습니다. 첫째, 그 크기는 간결함을 위해 xsd:float로 타입이 지정되었지만, xsd:float은 이진 IEEE-754이고 98.611을 정확히 저장할 수 없습니다. GxP 기록을 통해 변형 없이 왕복해야 하는 숫자에는 xsd:decimal이 무결성을 보존하는 데이터타입입니다 — 데이터타입 선택은 그 자체로 서식 결정이 아니라 데이터 무결성 결정입니다. 둘째, 존재론적으로 qudt:QuantityValue는 그 품질이 아닙니다. 단량체 순도 품질은 원료의약품에 내재합니다 — 그것은 오직 그 한 로트의 원료에만 존재하며 다른 어디에도 없습니다(BFO와 IOF의 상위 온톨로지 어휘로는 특정 의존 연속체(specifically dependent continuant)). 반면 QuantityValue그 품질의 크기를 기록하는 정보 산출물(information artifact) — 순도 자체를 옮기지 않고도 복사하거나 인쇄하거나 이메일로 보낼 수 있는 사실(IOF/IAO 의미에서 일반 의존 연속체(generically dependent continuant)) — 입니다. 이들을 구분해 두는 것이, 같은 98.611을 편의 스칼라(bp:monomerPct)로도 완전히 한정된 bp:DS-001-monomer로도 지니면서 그 숫자가 순도이다라고 모델이 주장하지 않을 수 있는 이유입니다.

그 단정한 unit:PERCENT 안에는 미묘함이 하나 숨어 있습니다. 퍼센트는 무엇의 퍼센트인지 말하지 않습니다. 실행 예제의 98.611면적(area) 퍼센트입니다 — SEC 크로마토그램에서 전체 적분 면적에 대한 분율로서 단량체 피크의 적분된 UV (A280) 면적 — 이지 질량, 몰, 부피 분율이 아닙니다. (크기 배제 크로마토그래피와 그 피크 면적이 어떻게 순도 숫자가 되는지는 제조 책의 분석과 제제 장에서 다룹니다.) 어떤 완충액의 에탄올 함량은 % v/v일 수 있고, 계면활성제는 % w/v, 단량체처럼 전하 변이체 주 피크는 면적 %입니다. 이 모두가 같은 unit:PERCENT IRI로 렌더링되므로, 단위를 고정하는 일은 필요하지만 충분하지 않습니다. 비율의 기준(basis)은 수량 종류나 이름표에도 속합니다. 이것은 이번 장이 죽이려 나선 바로 그 모호함이 한 단계 아래에서 살아남은 것입니다 — 그래서 세심한 그래프는 맨 "%monomer"가 아니라 rdfs:label "SEC %monomer (area, A280)"을 기록합니다.

데이터셋은 이 측정값의 형식을 로트에 모두 유지합니다. 숫자만 필요한 빠른 계보 및 출하 질의를 위한 맨 편의 스칼라 bp:monomerPct "98.611"(instances.ttl:372), 그리고 변환하거나 단위 간 비교하거나 다른 단위 방언을 말하는 시스템으로 내보내야 하는 무엇이든을 위한 위의 완전히 한정된 bp:DS-001-monomer QuantityValue(bp:monomerValue로 연결됨)입니다. 둘 다 지니는 것은 모순이 아니라 실용적 타협입니다 — 스칼라는 쓰고 질의하기에 빠르고, QuantityValue는 내보내기에 안전합니다.

퍼센트는 그리기 쉬운 단위이지만, 공장 현장에서 실제로 충돌하는 값은 차원을 공유하면서 접두어나 기준만 다른 값들입니다. 정제된 수확물의 역가(titer)4.8 g/L로 도착하고, 원료의약품의 단백질 농도45-55 mg/mL로 규정됩니다 — 같은 차원(부피당 질량)이면서 접두어가 천 배 차이이고, 변환 하나를 빠뜨리면 어떤 데이터타입도 잡지 못하는 조용한 1000x 오류입니다. HCP12 ppm(동등하게, 제품 mg당 숙주세포단백질 ng)으로 보고됩니다 — 기준(총단백질당)이 함께 따라가야 하는 무차원 비율입니다. 탁도(turbidity)3.2 NTU로, 깨끗한 QUDT IRI가 아예 없는 단위입니다(데이터셋의 ucumCode "[NTU]"는 솔직히 자리표시자입니다). 이 각각이야말로 단위가 열 머리글이 아니라 데이터여야 하는 이유이며 — 로더(각 소스 시스템을 읽어 들이는 수집 작업)가 값이 그래프에 들어가기 전에 OPC UA EngineeringUnits 코드나 히스토리언 단위 문자열을 하나의 QUDT/UCUM 대상으로 정규화하는 이유입니다. (이 물리량들이 각각 무엇인지 — 역가, 정제된 수확물, 숙주세포단백질, 탁도 — 는 제조 책의 수확과 청징 장에서 다룹니다.)

하나의 타입 지정 값에 대한 식별 카드를 위아래로 대비: 위에는 그저 98.611만 적힌 맨 칸이 있고, 기계는 종류와 단위를 알 수 없는 텍스트만 본다는 빨간 주석이 붙어 있습니다. 그 아래에는 같은 값이 이름표 붙은 계층으로 쌓여 올라갑니다 — 어휘 형식 98.611, 그것을 숫자로 파싱할 수 있음을 표시하는 xsd 데이터타입 태그, QUDT 단위 IRI unit, 그리고 QUDT 수량 종류 IRI DimensionlessRatio — 가 하나의 스스로를 기술하는 리터럴로 조립됩니다. 초록색 결과 막대는 같은 규율을 온도 36.5에 적용해 xsd, unit, 그리고 수량 종류 온도를 보여 주며, 캡션은 값은 결코 맨몸으로 떠돌지 않는다고 적혀 있습니다. 같은 숫자, 전과 후: 맨숫자 98.611은 종류와 단위를 알 수 없는 텍스트이지만, 데이터타입과 QUDT 단위와 수량 종류를 입히면 기계가 계산할 수 있고 결코 잘못 읽지 않는 스스로를 기술하는 사실이 됩니다. 저자가 AI의 도움을 받아 직접 제작한 그림입니다.

왜 이것이 정확히 데이터를 FAIR하게 만드는가

이번 장의 두 규율은 FAIR의 네 글자 중 두 글자에 곧바로 대응되며, 그래서 이들은 마무리 손질이 아니라 토대입니다 [1]. 전역적이고 영속적인 IRI는 데이터를 시스템 전반에서 찾을 수 있고(Findable)(F1) 주소 지정 가능하게 만드는 것입니다 — 안정된 이름이 없는 것은 찾을 수 없습니다. 공유 어휘에 더해 한정되고(qualified) 단위를 지니며 데이터타입이 부여된 값은 데이터를 상호운용 가능하게(Interoperable)(I1–I3) 만드는 것입니다 — 데이터 책이 보여 주었듯이, 실제 데이터셋이 가장 자주 실패하는 그 "I"는, 그 메타데이터가 맨 문자열과 지역 키를 썼기 때문입니다. 데이터 책이 밑그림을 그린 화해·정규화 파이프라인 — 모든 이름을 하나의 공유 술어에 매핑하고, 모든 값의 단위와 데이터타입을 고정한 뒤, 적재하는 — 은, 한 단계 한 단계가 이번 장의 정체성과 단위 규율을 규모에 맞게 적용한 것입니다.

이것은 책이 검증 없이 두는 구호가 아닙니다. 컴패니언은 "값은 결코 맨몸으로 떠돌지 않는다"를 실행 가능한 인수 시험 CQ-19로 만듭니다. "저장된 모든 수량 값이 단위(QUDT 단위 IRI 또는 UCUM 코드)를 지니는가 — 맨숫자는 없는가?" 그 SPARQL 질의(SPARQL은 RDF 그래프를 위한 질의 언어이며, SELECT ?qv는 아래 패턴에 들어맞는 모든 값 ?qv를 요청합니다)는 위반자를 묻고, 모델은 위반자가 하나도 없을 때만 올바릅니다 —

# CQ-19 — returns every quantity value missing BOTH a unit IRI and a UCUM code. PASS = zero rows.
SELECT ?qv WHERE {
?qv a qudt:QuantityValue ; qudt:numericValue ?n .
FILTER NOT EXISTS { ?qv qudt:hasUnit ?u . }
FILTER NOT EXISTS { ?qv qudt:ucumCode ?c . }
}

OR는 의도적입니다. 값은 단위 IRI 또는 UCUM 코드 중 하나를 지니면 허용되므로, 질의는 둘 다 없는 값만을 표시해야 합니다 — 그래서 두 개의 FILTER NOT EXISTS 절(각각이 둘 중 하나를 배제)을 쓰며, 둘이 합쳐 정확히 "단위 IRI도 없고 UCUM 코드도 없음"을 뜻합니다. 탁도가 그 점을 보여 줍니다. 탁도는 QUDT에 깨끗한 IRI가 없는 단위라 [NTU]로 기록되므로, 그 값은 qudt:hasUnit 대신 UCUM 코드를 지닙니다 — 그래도 UCUM 코드를 지닌 크기는 맨몸이 아니므로 시험은 여전히 통과합니다. 시험으로 실행할 수 있는 상호운용성이 FAIR 주장과 FAIR 데이터를 가르는 차이입니다.

왜 하류의 모델이 이 두 보장을 물려받는가

두 규율은 데이터 위생처럼 보이지만, 추론 엔진이나 학습된 모델이 나중에 하는 모든 일의 상류 안전장치이기도 합니다 — 그리고 이를 건너뛴 비용은 지역에 머물지 않고, 증폭되어, 시스템이 사람에게 주는 답에 내려앉습니다. 머신러닝 컴패니언 권은 그 의존성을 반대 방향에서 명시합니다. 모델은 언제나 그것이 닻을 내린 구조화되고 관장된 지식만큼만 신뢰할 수 있으며, 그 지식이 바로 이번 장이 구축하는 식별되고 단위를 지닌 그래프입니다. 짚어 둘 만한 구체적 연결이 셋 있습니다.

첫째, 단위 혼동은 데이터 누수(data leakage) 경로입니다. 위의 mg/mL 대 g/L 천 배 함정은 단위 오류일 뿐 아니라, 학습 데이터에 들어가면 행마다 다른 것을 뜻하는 피처가 되고, 학습기는 두 개의 진짜 모집단과 두 가지 단위 방언으로 기록된 하나의 모집단을 구분할 수 없습니다. 기준(basis)(면적 대 질량 대 회수율)이 소스마다 조용히 바뀌는 퍼센트도 마찬가지입니다. 크기와 단위 IRI, 그리고 수량 종류를 함께 고정하는 qudt:QuantityValue야말로, 모델이 보기 전에 로더가 모든 소스를 하나의 비교 가능한 피처로 정규화하게 해 주는 것입니다 — 데이터 책이 기술하는 화해 후 정규화 파이프라인을, 여기서는 피처 엔지니어링의 가장 조용한 전제 조건으로 읽는 셈입니다. ML 책의 모델과 검증 장은 이를 직접 이름 붙입니다. 소프트 센서의 가장 흔한 조용한 실패는 배치마다 같은 수량이 아닌 피처입니다.

둘째, 정체성이야말로 leave-one-batch-out 검증을 애초에 가능하게 만드는 것입니다. 인스턴스에 대한 정직한 교차검증은 모든 행을 그것이 나온 물리적 배치로 그룹화하고 배치 전체를 떼어 두기를 요구합니다 — 학습에도 쓴 배치의 행으로 채점된 모델은 공장에서는 결코 재현하지 못할 좋아 보이는 숫자를 보고합니다. 그 그룹화는 bp:BATCH-2026-001의 정체성이 히스토리언, LIMS, 출하 기록 전반에서 전역적이고 안정적이지 않으면 불가능합니다 — 이번 장이 설치하는 바로 그 규율이죠. 하나의 배치가 네 가지 이름으로 불리거나, 지나치게 성급한 owl:sameAs로 두 배치가 조용히 융합된 그래프는 그룹 경계를 깨뜨려 떼어 둔 집합을 학습으로 흘려보냅니다. 정체성 규율과 그룹화된 교차검증은 양쪽 끝에서 본 같은 보장입니다.

셋째, 그래프는 모델이 학습하는 사실이 아니라 모델이 대조되는 기준 진실(ground truth)입니다. 검색 증강 언어 모델이 "이 로트는 무엇에서 유도되었는가?"에 답할 때, 그것은 타입 지정된 bp:derivedFrom 간선을 순회하고 인용해야 하며 — 이 책 자신의 프런티어 장이 구축하는 GraphRAG 패턴 — 학습 기억에서 그럴듯한 계보를 지어내서는 안 됩니다. 그것은 간선이 실재하고 노드가 전역적으로 식별될 때만 작동합니다. 유창한 모델은 옳은 답만큼이나 매끄럽게 확신에 찬 틀린 답을 지어내며, 그 둘을 가려낼 수 있는 것은 오직 식별되고 검증된 그래프뿐입니다. 출하 게이트의 SHACL 셰이프는 여기서 두 번째 생을 얻습니다. 단위 없는 출하를 거부하는 바로 그 제약이 단위 없거나 불완전하게 타입 지정된 검색을 거부하여, 모델에 건네지기 전에 부분그래프가 잘 형성되었음을 인증합니다 — ML 책이 추론된 그래프가 추측하는 모델을 제약하는 것으로 틀 짓는 그 검증 비대칭입니다.

이질적 입력을 FAIR한 사실로 바꾸는 3단계 흐름: 1단계는 서로 다른 이름의 네 소스 값 — DCS 태그 BR101.Temp.PV, LIMS 필드 DS-2026-001, ERP 번호 1000457, CofA 문자열 Lot 26-001 — 을 사실을 융합하는 owl 대신 exactMatch 또는 큐레이션된 PROV 주장으로 하나의 전역 IRI로 화해시킵니다. 2단계는 값을 정규화합니다 — 분수 0.98611 또는 반올림된 98.6을 퍼센트로 변환하고, xsd와 QUDT 단위 PERCENT를 고정하여 — 하나의 타입 지정 리터럴을 만들어 냅니다. 3단계는 그 결과를 스스로를 기술하는 트리플로 적재하며, 그것이 충족하는 FAIR 글자들(F1 전역 식별자, I1–I3 공유 어휘와 한정된 단위)을 함께 표시합니다. 사이드바는 맨 문자열과 지역 키가 데이터를 찾을 수는 있지만 상호운용 불가능하게 남겨 두는 실패 양상을 표시합니다. 정체성 다음에 단위, 단번에: 모든 이름을 하나의 전역 IRI로 화해시키고, 모든 값을 그 QUDT 단위와 함께 정규화하고 타입을 부여하면, 적재된 트리플은 설계상 찾을 수 있고 상호운용 가능합니다 — 대부분의 실제 데이터셋이 놓치는 그 FAIR의 "I"입니다. 저자가 AI의 도움을 받아 직접 제작한 그림입니다.

미해결 과제: 정체성 화해는 여전히 부분적으로 수작업이다

단위는 이번 장에서 대체로 풀린 절반입니다 — 솔직한 별표 하나를 달고서요. QUDT와 UCUM은 차원 모호성을 완전히 제거합니다. unit:DEG_C는 결코 켈빈으로 잘못 읽힐 수 없고, unit:GM-PER-L은 둘 다 부피당 질량임에도 결코 unit:MilliGM-PER-MilliL로 잘못 읽힐 수 없습니다. 그 별표는 퍼센트와 기준입니다. unit:PERCENT와 UCUM %는 크기는 고정하지만 그 비율이 w/w인지, v/v인지, mol %인지, 면적 %인지, % 회수율인지, % CV인지는 고정하지 않습니다 — 그리고 mAb 공장에서 이것들은 정말로 다릅니다. SEC 단량체와 CEX 주 피크는 면적 %이고, 부형제는 % w/v, 수율은 % 회수율입니다. 치료법은 더 나은 단위 IRI가 아니라 수량 종류와 이름표에서의 규율입니다.

두 번째 잔여 사례는 로그 감소 값(log-reduction value)(LRV — 정제 단계가 바이러스 수준을 얼마나 낮추는지를 나타내는 척도로, LRV 4.5는 바이러스 수가 10⁴·⁵배만큼 줄어듦을 뜻함)입니다. 컴패니언이 지니는 바이러스 제거 LRV(저-pH 유지에 4.5, 나노여과에 4.2)는 깨끗한 QUDT 단위가 없는 역가 비율의 상용로그라, 단위 대신 속성(bp:lrvValue)이 의미를 지닌 채 맨 타입 지정 부동소수점으로 떠다닙니다. 그것들이 로그이기 때문에, 두 개의 독립적인(직교하는) 단계의 값은 더해집니다4.5 더하기 4.2는 총 제거 8.7 — 이는 단위만으로는 결코 전달할 수 없는 바로 그 산술입니다. (이 바이러스 제거 단계들은 제조 책의 바이러스 불활성화바이러스 여과 장에서 다룹니다.) 그래서 단위조차 한결같이 풀려 있지는 않습니다 — 고정할 차원이 존재하는 곳에서는 풀려 있고, 수량이 기준 의존적 비율이거나 로그인 곳에서는 단지 규율될 뿐입니다.

정체성 화해는 풀리지 않은 절반입니다. DCS의 BR101.Temp.PV, LIMS의 DS-2026-001, ERP의 1000457, 그리고 PDF의 "Lot 26-001"이 모두 같은 배치를 가리킨다고 판단하는 일은 개체 해소(entity resolution) 문제이며, 공유 키가 없는 수십 년 묵은 레거시 시스템 전반에서 이것은 여전히 끈질기게 수작업이거나 반자동이고, 오류가 잦으며, 비용이 큽니다. 매칭 하나를 틀리면 owl:sameAs는 조용히 실패하지 않습니다 — 그것은 서로 다른 두 배치를 하나로 융합하고 양방향으로 모든 거짓 사실을 전파합니다. sameAs 문헌이 경고한 바로 그 오염이죠 [5]. 올바르게 타입이 지정된 두 IRI가 같은 물리적 대상을 가리키는지 알려 줄 수 있는 추론기는 없습니다. 그 판단은 사람이 공급하는 공정 지식에서 나옵니다.

두 번째 열린 문제는 더 조용하고 더 장기적입니다. 바로 영속성(persistence)입니다. FAIR는 계속 해석 가능한 상태로 남는 식별자를 요구하지만, bp: IRI는 그 뒤에 있는 조직과 네임스페이스만큼만 지속됩니다. https://example.org/bioproc#BATCH-2026-001이 GxP 기록이 살아남아야 할 수도 있는 지평인 십오 년 뒤에도 여전히 해석된다고 누가 보장할까요? PID 거버넌스 — 핸들, PURL, 레지스트리, 그리고 그것들을 살아 있게 유지하는 기관들 — 는 실재하지만 자금이 부족한 분야이며, 죽어 버린 식별자는 그것이 대체한 지역 키보다 나을 것이 없습니다. 그래서 이번 장이 세우는 기준은 냉정합니다. 단위는 오늘 모호하지 않게 만들 수 있지만, 정체성과 그 영속성은 능동적으로 관장(govern)해야 하며, 이 분야는 당신에게 자동적인 답을 건네주지 않았습니다.

이 분야가 수렴한 해법은 식별자를 그 호스트에서 분리하는 것입니다. 운영용 온톨로지는 자신이 소유한 서버 아래에서 IRI를 발행하지 않습니다. 그것을 산출물이 현재 어디에 있든 그곳으로 해석해 주는 리디렉션 서비스 — PURL(OBO 용어를 위한 purl.obolibrary.org/obo/…), w3id.org 영구 URL, 또는 핸들/DOI — 아래에서 발행합니다. 호스트는 옮겨갈 수 있고, 회사는 인수될 수 있으며, URL 체계는 바뀔 수 있지만, 식별자는 그렇지 않습니다. 거버넌스 대상이 웹 서버가 아니라 리디렉트이기 때문입니다. 우리의 https://example.org/bioproc# 네임스페이스는 솔직히 안티패턴입니다 — 호스트에 결합되어 해석되지 않는 예시 IRI — 이고, 실제 배포라면 bioproc가 교육용 저장소를 떠나는 순간 그것을 PURL 뒤에 둘 것입니다. 그래프가 어떻게 발행되는지 — 어떤 영속 식별자 아래에서, 어떤 레지스트리에서, 계속 해석하겠다는 어떤 약속과 함께 — 는 그 자체로 한 장입니다. 발행과 FAIR이 온톨로지와 그 인스턴스 데이터를 위한 내구성 있고 관장되는 식별자라는 바로 이 질문을 다룹니다.

왜 중요한가

이 책의 나머지가 그리는 모든 간선과 거기에 매다는 모든 값은 여기서 한 두 가지 보장에 달려 있습니다. 정체성이 흔들리면, 계보 추적이 조용히 서로 다른 두 배치 사이를 넘나들 수 있고, 어떤 조사가 완전한 확신을 품은 채 잘못된 결론에 이를 수 있습니다. 단위가 맨몸이면, 숫자가 시스템마다 다른 것을 뜻하고, 잘못 읽힌 값을 근거로 어떤 제어 결정이 내려집니다. 클래스, 관계, 공리로 이루어진 그 모든 구조물은 전역적인 이름과 스스로를 기술하는 값 위에 얹혀 있습니다. 이것이 그 모든 것의 밑바탕이며, 그래서 우리가 공정 자체를 모델링하기 시작하기 전에 이 장이 기초를 닫는 것입니다.

이 보장들은 약속에 머물 필요가 없습니다. 두 장 뒤, 출하 게이트는 "값은 결코 맨몸으로 떠돌지 않는다"를 강제된 규칙으로 바꿉니다. SHACL 셰이프가 단위 없이 도착하는 어떤 수량 값이든 거부하므로, 이번 장이 주장하는 규율은 비순응 트리플이 통과할 수 없는 게이트가 됩니다. 정체성에는 그런 기계적 보호 장치가 없습니다 — 이것이 바로 화해가 풀리지 않은 절반인 이유입니다.

실제 현장에서는

이것들은 맞춤 제작된 발상이 아닙니다. QUDT는 발행되어 널리 쓰이는 단위 온톨로지이고, UCUM은 전 세계 임상 및 실험실 데이터 교환에 내장된 단위 표준입니다 [3][4]. 영속 식별자 시스템 — 출판물을 위한 DOI, 데이터를 위한 핸들과 PURL, 거래되는 상품을 위한 GS1 키 — 은 이미 전역 규모로 운영되고 있으며, 직렬화 장은 GS1 식별자가 완제 바이알에서 정확히 이 일을 하는 모습을 보여 줍니다. 화해 쪽에서는, 공장이 사들이는 상용 "데이터 패브릭(data fabric)"과 "마스터 데이터 관리(master data management)" 제품이, 브랜드명 아래에서는 이번 장이 미해결이라고 말하는 바로 그 정체성 문제와 씨름하는 개체 해소 엔진입니다 — 그것들이 여전히 비싸고, 사람의 감독을 받으며, 결코 완전히 끝나지 않는 이유가 바로 이것입니다.

핵심 용어

  • IRI(국제화 자원 식별자, Internationalized Resource Identifier) — RDF가 모든 주어, 술어, 자원 목적어에 부여하는 전역적으로 유일한 웹 이름. 지역 기본 키와 달리 시스템과 사이트 전반에서 같은 것을 뜻함.
  • 네임스페이스 / 발행(namespace / minting) — 지역 식별자를 전역적으로 만드는 접두어, 그리고 안정적이고 재사용되지 않는 식별자를 만드는 규율.
  • owl:sameAs — 두 IRI가 동일한 개체를 가리킨다는 강한 주장으로, 그들의 모든 사실을 융합함. 강력하지만 쉽게 오용됨("sameAs 문제").
  • skos:exactMatch / closeMatch — 두 용어가 개체로서 동일하다고 주장하지 않으면서 들어맞음을 기록하는 더 부드러운 연결. 그래서 잘못된 매칭이 그래프를 망가뜨리는 대신 매핑을 저하시키는 데 그침.
  • PROV 기반 화해(PROV-based reconciliation) — IRI를 owl:sameAs로 융합하는 대신, 각 시스템의 주장을 그 소스 에이전트에 귀속된 prov:Entity로 기록하고 스튜어드 prov:Activity로 충돌을 해소하는 것. 감사 추적을 유지하고 과잉 병합을 피함(CQ-15가 시험하는 패턴).
  • 타입 지정 리터럴 / 데이터타입(typed literal / datatype) — 값을 데이터타입 IRI(xsd:float)와 짝지어 기계가 그것을 텍스트가 아니라 숫자, 날짜, 코드로 파싱하게 하는 것.
  • QUDT — 수량·단위·차원·타입(Quantities, Units, Dimensions and Types) 어휘. 값이 단위(unit)수량 종류(quantity kind)를 문자열 접미어가 아니라 기계가 읽을 수 있는 IRI로 지니게 함.
  • UCUM — 통합 측정 단위 코드(Unified Code for Units of Measure). 소프트웨어 전반에서 모호하지 않도록 설계된 대소문자 구분 단위 코드로, 실험실과 임상 교환에 널리 쓰임.
  • 수량 종류 대 단위(quantity kind vs unit) — 값이 어떤 종류의 수량인지(온도, 질량 농도, 무차원 비율)와, 그것이 표현되는 구체적인 단위.
  • 개체 해소 / 화해(entity resolution / reconciliation) — 서로 다른 이름의 기록들이 같은 실제 대상을 가리킨다고 판단하는 일. 레거시 시스템 전반에서는 여전히 대체로 수작업이며, 정체성의 풀리지 않은 절반.
  • FAIR F1 / I — 데이터가 전역적으로 유일하고 영속적인 식별자를 지니고(찾을 수 있음), 한정되고 단위를 지닌 값과 함께 공유 어휘를 사용한다(상호운용 가능)는 원칙들.
  • Leave-one-batch-out / 그룹화된 교차검증 — 학습에서 떼어 둔 물리적 배치 전체에 대해서만 모델을 채점하는 것. 배치 정체성이 전역적이고 안정적이지 않으면 불가능하므로, 정체성 규율은 하류 모델에 대한 누수 방지 보장이기도 함.
  • 기준 진실 / 그래프 제약(ground truth / graph constraint) — 추론 엔진이나 검색 증강 모델이 학습하는 것이 아니라 대조되는, 식별되고 단위를 지니며 검증된 그래프. SHACL 셰이프가 모델에 건네지기 전에 부분그래프가 잘 타입 지정되었음을 인증함.

다음 이야기

식별자와 단위가 자리를 잡으면서, 모델의 형식화가 완성되었습니다. 재사용에서 빌린 상위 척추, 개념화의 클래스와 관계, 그리고 이제 공리와, 이름을 전역적으로 값을 스스로 기술하게 유지하는 정체성·단위 규율입니다. 이제 그 도구 일체를 공정으로 겨누어 그것을 채울 준비가 되었습니다. 다음 장 구현: 인스턴스 그래프 구축하기는 제5부를 엽니다. 그것은 단 하나의 항체 캠페인 — 조작된 CHO 세포가 든 얼린 바이알 하나를 확장하고, 수확하고, 포획하고, 폴리싱하고, 충전한 — 을 로드 가능한 파일 속 실제 개별자로 인스턴스화한 뒤, 제조사가 실제로 던지는 계보와 출하 질문을 묻습니다.