SmartTableInvoiceモードとは
目的
テーブルファイル(Excel/CSV/TSV)からメタデータを読み取り、自動的にinvoice.jsonファイルを生成するモードです。
特徴
- 多形式対応: Excel (.xlsx)、CSV、TSVファイルの読み込み
- 2行ヘッダー形式: 1行目に表示名、2行目にマッピングキーを配置
- 自動メタデータマッピング:
basic/、custom/、sample/プレフィックスによる構造化データ生成 - zipファイル統合: データファイルを含むzipとテーブルファイルの自動関連付け
使用場面
- 複数のファイルを関連づけて複数データ登録したい場合
設定方法
設定ファイルの変更は不要です。ただし、入力データに、smarttable_という接頭辞がついたExcel/CSV/TSVファイルを配置する必要があります。
smarttable_tabledata.xlsxsmarttable_imagedata.csvsmarttable_20250101.tsv
テーブルデータのフォーマット
全体像
1 2 3 4 5 6 7 8 9 | |

1行目: 表示名(ユーザー向けの説明)
ここはデータ登録には関係ないですが、このテーブルデータを管理するときにどのようなデータかをわかりやすくするために、表示名を記載します。
1 | |
2行目: マッピングキー
メタデータのマッピングと展開
この行を読み取って、invocie.jsonやメタデータ等に自動でマッピングされます。マッピングされるルールは以下のとおりです。
basic/<invoice.jsonのキー名>: invoice.jsonのbasicセクションにマッピングされます。custom/<invoice.jsonのキー名>: invoice.jsonのcustomセクションにマッピングされます。sample/<invoice.jsonのキー名>: invoice.jsonのsampleセクションにマッピングされます。sample/generalAttributes.<termId>:generalAttributes配列内の該当するtermIdのvalueにマッピングsample/specificAttributes.<classId>.<termId>:specificAttributes配列内の該当するclassIdとtermIdのvalueにマッピングmeta/<metadata-defのキー>:metadata-def.jsonの定義に従ってmetadata.jsonのconstantセクションへ書き込み(schema.typeで型変換し、unitがあれば付与)。variable定義は現時点では対応しません。metadata-def.jsonが存在しない場合は従来どおり書き込みをスキップします。inputdataX: zipファイル内のファイルパスを指定(X=1,2,3...)
現在自動でテーブルデータの情報が展開される先は、invoice.json と metadata.json(
meta/列)です。それ以外のデータは、構造化処理で使用できるように展開されます。
入力ファイルの取り扱いについて
inputdata[数値]というキーは、1データタイルに含めたいファイルパスを入力します。zipファイル内のパスを指定します。
- 例えば、
inputdata1にdata1/file1.txtと記載した場合、zipファイル内にfile1.txtが存在する必要があります。 inputdata1とinputdata2にdata1/file1.txtをdata1/file2.txtと記載した場合、構造化処理内で、2つのファイルを読み取ることができるようにグルーピングされます。
3行目以降
実際に登録するデータを記載します。1行1データタイルとして登録されます。
1 2 | |
拡張子
テーブルデータファイルの拡張子は、.csv、.xlsx、.tsvのいずれかである必要があります。
入力ファイルについて
SmartTableInvoiceモードでは、特定の形式の入力ファイルが必要です。これらのファイルは、テーブルデータを含むExcel/CSV/TSVファイルと、関連するデータファイルを含むzipファイルです。
smarttable_imagedata.csvinputdata.zip
ディレクトリ構造
inputdataディレクトリに、Excelファイルとzipファイルを配置します。
1 2 3 4 5 6 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | |
テーブルデータの1行分のデータを構造化処理で取得する
構造化処理を以下のように定義した場合、RdeOutputResourcePath.rawfilesからcsvのパスを取得できます。上記のディレクトリ構造の例では、temp/fsmarttable_experiment_0001.csv等になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
テーブルデータファイルをRDEに登録する場合
デフォルトでは、SmartTableInvoiceモードで使用したテーブルデータは、RDEに登録されません。設定ファイルrdeconfig.ymlに、以下のように設定することで、テーブルデータをRDEに登録することができます。
1 2 | |
試料フィールドの自動クリアルール(新規試料登録)
SmartTableInvoiceモードの invoice.json 生成は、元の invoice.json をベースに各行の値を部分上書きする方式です。そのため、sample 系の列を何も指定しないと、元の invoice.json に入っている試料情報がそのまま残ります。
この挙動を踏まえ、SmartTableモードでは sample/names 列が指定され、かつ sample/sampleId 列に有効な値がない場合、その行は 新規試料として登録する意図 として扱われます。このとき、元の invoice.json から継承されたダミー試料の各フィールドが自動的にクリアされます。
判定ルール
| SmartTableの指定 | 解釈 | 動作 |
|---|---|---|
sample/names のみ |
新規試料登録 | ダミーの sampleId などをクリア |
sample/names + 空の sample/sampleId |
新規試料登録 | sample/sampleId 未指定と同様にクリア |
sample/names + 値あり sample/sampleId |
既存試料参照 | クリアしない |
sample/names なし |
試料登録意図なし | 元の invoice.json の試料情報を維持 |
sample/sampleIdが空文字だけでなく空白のみの場合も、値なしとして扱われます。
クリアされるフィールド
| フィールド | クリア後の値 | 備考 |
|---|---|---|
sample.sampleId |
"" (空文字) |
新規試料を示す |
sample.description |
null |
ダミー試料の説明をリセット |
sample.composition |
null |
ダミー試料の組成をリセット |
sample.referenceUrl |
null |
ダミー試料の参照URLをリセット |
sample.generalAttributes[*].value |
null |
構造(termId)は維持、値のみクリア |
sample.specificAttributes[*].value |
null |
構造(classId+termId)は維持、値のみクリア |
sample.ownerId |
basic.dataOwnerId を自動設定 |
既存ルール(Issue #389)が引き続き適用 |
空欄セルとの関係
SmartTable では固定ヘッダー運用のため、sample/sampleId や sample/description、sample/generalAttributes.<termId> などの列が常に存在し、セルだけが空欄になるケースがあります。
新規試料登録と判定された行では、これらの空欄列があっても次の正規化済みの構造を保持します。
sample.sampleIdはキーごと削除せず、""を保持sample.description/sample.composition/sample.referenceUrlはキーごと削除せず、nullを保持sample.generalAttributes[*]/sample.specificAttributes[*]は配列要素を削除せず、value: nullを保持
一方で、sample/sampleId に有効値が入っている既存試料参照の行では、従来どおり空欄セルはその項目のクリアとして扱われます。
動作の例
1 2 3 | |
上記の場合、元の invoice.json に sampleId や description などが設定されていても、すべてクリアされた上で新規試料として登録されます。
1 2 3 | |
上記の場合、sample.sampleId は削除されず "" が残り、sample.description は null、一般属性の該当要素も {"termId": "...", "value": null} の形で保持されます。
1 2 3 | |
上記の場合は sampleId が保持され、既存試料の参照登録として扱われます。さらに、同じ行に sample/description などの空欄列がある場合は、その項目は通常どおりクリアされます。