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

Lesson 0004: プロトコルテンプレートの再利用と自動バッチデータ注入

実務運用のベストプラクティス: ProtocolFileRootType と IdFactory による自動アーカイブパイプライン

MaiML の4大セクション(Document, Protocol, Data, EventLog)を毎回ゼロから構築するのは、コード記述量が多く現実的ではありません。

実務における最も洗練されたワークフローは、「装置構成や実験手順をあらかじめ『プロトコル単体ファイル(テンプレート)』として定義しておき、日々の測定スクリプトはデータとログのみを注入して完全な MaiML をバッチ出力する」 という運用パターンです。

1. プロトコル単体形式: ProtocolFileRootType

MaiML 規格(JIS K 0200)では、測定データ(<data>)や実行ログ(<eventLog>)を含まない、装置構成と測定プロトコルのみを記述した単体仕様 ProtocolFileRootType が正式にサポートされています。

<!-- xsi:type に protocolFileRootType を指定 -->
<maiml xmlns="http://www.maiml.org/schemas"
       xsi:type="protocolFileRootType"
       version="1.0">
  <document>...</document>
  <protocol>...</protocol>
</maiml>

2. テンプレート再利用の実務フロー

  1. テンプレートの読み込み: serialization.load("standard_protocol.maiml") により既存のプロトコルツリーを取得。
  2. ID衝突の防止: IdFactory.from_existing_ids(loaded.ids) を使用して、テンプレート内で既に使われている xs:ID と衝突しない安全なID採番環境を即座に作成。
  3. データとログの生成: テンプレートで定義されている materialTemplate や resultTemplate の ID を参照(ref)した DataType と EventLogType を構築。
  4. 結合とシリアライズ: MaimlRootType(document, protocol, data, event_log) を組み立てて保存。

3. Python SDK による実装例

# 1. テンプレート読み込み
loaded = serialization.load("standard_protocol.maiml")

# 2. 既存IDと衝突しないIDファクトリ
ids = IdFactory.from_existing_ids(loaded.ids)

# 3. テンプレートを参照するデータを作成
material = m.MaterialType(
    id=ids.new_id("material"),
    ref=loaded.root.protocol.material_templates[0].id,
    content=m.GlobalObjectContent(uuid=ids.new_uuid(), name="Sample_01")
)

# 4. 完全な MaiML として保存
full_root = m.MaimlRootType(
    document=loaded.root.document,
    protocol=loaded.root.protocol,
    data=data,
    event_log=event_log
)
serialization.dump(full_root, "output.maiml", extra_namespaces=loaded.namespaces)

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

Q: 既存のプロトコルテンプレートを読み込んで新しい測定データを作成する際、IDの重複(衝突)を防ぐために PyMaiML が提供している機能はどれですか?

A: 新規IDの接頭辞に必ず日付と時刻を付与する自動設定
B: 全ての要素IDを強制的にUUID形式に書き換える変換器
C: loaded.ids を渡して初期化する IdFactory.from_existing_ids
D: XML保存時に重複したIDを末尾番号で自動置換する機能
← Lesson 0003 チートシートを見る