Open4

null field/optional field の挙動に関する調査

Tomoya TanjoTomoya Tanjo

省略できたり null 突っ込んでも動いたり、かと思えば Expression 中では null 持ちのフィールドとして参照できなかったりわからんちん

Tomoya TanjoTomoya Tanjo

入力オブジェクト

  • ユーザーは null 値を持つフィールドを省略可能
  • ユーザーが指定するつもりのないフィールドに null 値を明示的に入れても許容される
  • Expression 中では null 値を持つフィールドとして参照できなければならない
  • cwltool の場合、入力パラメーターにないフィールドも許容される
    • non-null でもエラーにならず、警告も出ない
    • 仕様としては未定義のはず
  • Note: 内部的には SaladMapSchema で定義される

FileDirectory などの CWLType の各種フィールド

  • ユーザーはフィールドを省略可能 (e.g., nameroot)
  • ユーザーが null 値を明示的に入れても許容される
    • 処理系としては指定されなかったものとして扱われる
  • Expression 中では指定されなかったフィールドは参照できてはならない?
    • 対応する仕様がなさそう
    • conformance test: listing_requirement_none (v1.1 以降)
  • cwltool の場合、extension field 以外の未定義のフィールドも許容される
    • 警告は表示される
    • 仕様的には未定義?
  • extension field の場合、null を入れても許容される
    • Expression 中では null 値を持つフィールドとして参照できなければならない?
  • Note: 内部的には SaladRecordSchema で定義される

SchemaDefRequirement などで定義したユーザー定義型

  • ユーザーはフィールドを省略可能
  • ユーザーが null 値を明示的に入れても許容される
    • 処理系としては指定されなかったものとして扱われる
  • Expression 中では指定されなかったフィールドも参照できなければならない
    • 対応する仕様がない?
    • conformance test: param_evaluation_noexpr
  • cwltool の場合、extension field 以外の未定義のフィールドも許容される
    • 警告も出ない
    • 逆にフィールドが足りない場合、実行時にエラーになる
    • Expression からも参照できる。いいのか?
    • 仕様的には未定義?
  • extension field の場合、null を入れても許容される
    • Expression 中では null 値を持つフィールドとして参照できなければならない?
    • $namespaces がない場合は警告が表示される (値が null でも同様)
  • Note: 内部的には SaladMapSchema で定義される

CommandLineTool など、CWLType 以外のデータ型

  • ユーザーはフィールドを省略可能
  • ユーザーが null 値を明示的に入れても許容される
    • 処理系としては指定されなかったものとして扱われる
  • 文法的に Expression 中で指定されることはない
  • cwltool の場合、extension field 以外の未定義のフィールドがあるとエラー
    • 値が null でもエラーになる
    • 仕様的には未定義?
  • extension field の場合、null を入れても許容される
  • Note: 内部的には SaladRecordSchema で定義される
Tomoya TanjoTomoya Tanjo

フィールドの値が null/フィールド自体が存在しないを区別するケースは今のところ Expression 内以外にはなさそう。
Extension fields (RDF) ではどうなる?