← /teach Study Portal (maiml) に戻る /teach lesson

Lesson 0003: 大規模データ・外部バイナリの連携とデータ完全性

XMLに収まらない巨大生データを <insertion> とハッシュ値でスマートに管理する

分析機器の測定データには、高速度カメラの画像、質量分析(MS)の高分解能データ、長時間の時系列サンプリングなど、数十メガバイト〜数ギガバイトに達する大規模バイナリが存在します。

これらを XML 内部にすべて Base64 エンコードして埋め込むと、ファイルサイズが約 1.33 倍に膨らみ、テキストパーサーのメモリを枯渇させます。MaiML はこの現実的な運用課題を解決するため、外部リソース参照(<insertion>)機構を備えています。

1. <insertion> 要素の構造

MaiML のあらゆるグローバルオブジェクト(Material, Result, Condition 等)の content には、<insertion> 要素を持たせることができます。

<result id="result1" ref="rt1">
  <uuid>cc19fb59-17d5-42a4-9800-a9e6d5eb357a</uuid>
  <insertion>
    <uri>file:///path/to/raw_dataset.csv</uri>
    <hash method="SHA-256">I3lkEmVCmodT7CjSn/+zBFwKt9ttnOA9WV7lBL9v2zQ=</hash>
    <uuid>280868d2-ff4e-47ef-8791-dc5d22a7db94</uuid>
    <format>text/csv</format>
  </insertion>
  <name>External_Raw_Result</name>
</result>

<insertion> を構成する主要属性

2. 完全性(Integrity)検証と改ざん・破損検知

外部参照方式を採用する場合の最大のリスクは、「リンク切れ(URIが無効になる)」や「参照先ファイルが誤って書き換えられる(サイレント・コラプション / 改ざん)」です。

MaiML では、<hash method="SHA-256"> を義務付けることで、「MaiML 自体は数 KB の軽量メタデータとしてアーカイブしつつ、参照先生データが 1 ビットでも改ざん・破損したら即座に検知できる」というハイブリッドな運用を実現しています。

3. Python (pymaiml) での外部リソース検索

pymaiml.query モジュールには、MaiML ファイル内に存在する外部依存リソースの URI 一覧を即座に収集するヘルパー関数 get_insertion_uris() が提供されています。

from pymaiml import query

xml_text = open("data.maiml", encoding="utf-8").read()
uris = query.get_insertion_uris(xml_text)
# 例: ['file:///home/tk/projects/study/topics/maiml/sensor_raw_data.csv']

4. 理解度チェック (Retrieval Practice)

Q: MaiML の <insertion> 要素で、外部ファイルが事後的に書き換えられていないことを保証するために記録される必須情報はどれですか?

A: 外部ファイルを保存したディスクのシリアル番号
B: 外部ファイルの最終更新日時とファイル容量
C: 外部ファイル内容から計算された暗号学的ハッシュ
D: 外部ファイルを生成した機器ベンダーの公開鍵
← Lesson 0002 Next: Lesson 0004 (プロトコルテンプレートの再利用とバッチ自動生成)