diff --git a/latest/index.bs b/latest/index.bs index df53c7fe..bb42932e 100644 --- a/latest/index.bs +++ b/latest/index.bs @@ -326,7 +326,7 @@ Each "multiscales" dictionary MAY contain the field "coordinateTransformations", The transformations MUST follow the same rules about allowed types, order, etc. as in "datasets:coordinateTransformations" and are applied after them. They can for example be used to specify the `scale` for a dimension that is the same for all resolutions. -Each "multiscales" dictionary SHOULD contain the field "name". It SHOULD contain the field "version", which indicates the version of the multiscale metadata of this image (current version is [NGFFVERSION]). +Each "multiscales" dictionary SHOULD contain the field "name". It MUST contain the field "version", which indicates the version of the multiscale metadata of this image (current version is [NGFFVERSION]). Each "multiscales" dictionary SHOULD contain the field "type", which gives the type of downscaling method used to generate the multiscale image pyramid. It SHOULD contain the field "metadata", which contains a dictionary with additional information about the downscaling method. @@ -492,7 +492,7 @@ contain only alphanumeric characters, MUST be case-sensitive, and MUST NOT be a other `name` in the `rows` list. Care SHOULD be taken to avoid collisions on case-insensitive filesystems (e.g. avoid using both `Aa` and `aA`). -The `plate` dictionary SHOULD contain a `version` key whose value MUST be a string specifying the +The `plate` dictionary MUST contain a `version` key whose value MUST be a string specifying the version of the plate specification. The `plate` dictionary MUST contain a `wells` key whose value MUST be a list of JSON objects diff --git a/latest/schemas/image.schema b/latest/schemas/image.schema index 055b058a..0c4f9de9 100644 --- a/latest/schemas/image.schema +++ b/latest/schemas/image.schema @@ -44,7 +44,7 @@ } }, "required": [ - "datasets", "axes" + "datasets", "axes", "version" ] }, "minItems": 1, diff --git a/latest/schemas/plate.schema b/latest/schemas/plate.schema index 099f5bb4..1b7ed532 100644 --- a/latest/schemas/plate.schema +++ b/latest/schemas/plate.schema @@ -133,7 +133,7 @@ } }, "required": [ - "columns", "rows", "wells" + "columns", "rows", "wells", "version" ] } } diff --git a/latest/tests/image_suite.json b/latest/tests/image_suite.json index 7c3300b5..bec52214 100644 --- a/latest/tests/image_suite.json +++ b/latest/tests/image_suite.json @@ -90,7 +90,7 @@ "valid": true }, { - "formerly": "valid/missing_version.json", + "formerly": "invalid/missing_version.json", "description": "TBD", "data": { "@type": "ngff:Image", @@ -126,7 +126,7 @@ } ] }, - "valid": true + "valid": false }, { "formerly": "valid/invalid_axis_units.json", @@ -857,6 +857,43 @@ }, "valid": false }, + { + "formerly": "invalid/missing_version.json", + "description": "TBD", + "data": { + "multiscales": [ + { + "axes": [ + { + "name": "y", + "type": "space", + "unit": "micrometer" + }, + { + "name": "x", + "type": "space", + "unit": "micrometer" + } + ], + "datasets": [ + { + "path": "0", + "coordinateTransformations": [ + { + "scale": [ + 1, + 1 + ], + "type": "scale" + } + ] + } + ] + } + ] + }, + "valid": false + }, { "formerly": "invalid/invalid_axis_type.json", "description": "TBD", diff --git a/latest/tests/plate_suite.json b/latest/tests/plate_suite.json index c19ad60e..876d7c45 100644 --- a/latest/tests/plate_suite.json +++ b/latest/tests/plate_suite.json @@ -8,6 +8,7 @@ "formerly": "plate/minimal_no_acquisitions", "data": { "plate": { + "version": "0.5-dev", "columns": [ { "name": "A" @@ -33,6 +34,7 @@ "formerly": "plate/minimal_acquisitions", "data": { "plate": { + "version": "0.5-dev", "acquisitions": [ { "id": 0 @@ -63,6 +65,7 @@ "formerly": "plate/missing_rows", "data": { "plate": { + "version": "0.5-dev", "columns": [ { "name": "A" @@ -83,6 +86,7 @@ "formerly": "plate/empty_rows", "data": { "plate": { + "version": "0.5-dev", "columns": [ { "name": "A" @@ -104,6 +108,7 @@ "formerly": "plate/duplicate_rows", "data": { "plate": { + "version": "0.5-dev", "columns": [ { "name": "A" @@ -131,6 +136,7 @@ { "formerly": "plate/missing_columns", "data": { + "version": "0.5-dev", "plate": { "rows": [ { @@ -152,6 +158,7 @@ "formerly": "plate/empty_columns", "data": { "plate": { + "version": "0.5-dev", "columns": [], "rows": [ { @@ -173,6 +180,7 @@ "formerly": "plate/duplicate_columns", "data": { "plate": { + "version": "0.5-dev", "columns": [ { "name": "A" @@ -201,6 +209,7 @@ "formerly": "plate/missing_wells", "data": { "plate": { + "version": "0.5-dev", "columns": [ { "name": "A" @@ -219,6 +228,7 @@ "formerly": "plate/empty_wells", "data": { "plate": { + "version": "0.5-dev", "columns": [ { "name": "A" @@ -238,6 +248,7 @@ "formerly": "plate/duplicate_rows", "data": { "plate": { + "version": "0.5-dev", "columns": [ { "name": "A" @@ -271,6 +282,7 @@ "formerly": "plate/missing_column_name", "data": { "plate": { + "version": "0.5-dev", "columns": [ { "concentration": 10 @@ -296,6 +308,7 @@ "formerly": "plate/missing_row_name", "data": { "plate": { + "version": "0.5-dev", "columns": [ { "name": "A" @@ -321,6 +334,7 @@ "formerly": "plate/missing_well_path", "data": { "plate": { + "version": "0.5-dev", "columns": [ { "name": "A" @@ -345,6 +359,7 @@ "formerly": "plate/missing_well_rowIndex", "data": { "plate": { + "version": "0.5-dev", "columns": [ { "name": "A" @@ -369,6 +384,7 @@ "formerly": "plate/missing_well_columnIndex", "data": { "plate": { + "version": "0.5-dev", "columns": [ { "name": "A" @@ -393,6 +409,7 @@ "formerly": "plate/well_1group", "data": { "plate": { + "version": "0.5-dev", "columns": [ { "name": "A" @@ -417,6 +434,7 @@ "formerly": "plate/well_3groups", "data": { "plate": { + "version": "0.5-dev", "columns": [ { "name": "A" @@ -441,6 +459,7 @@ "formerly": "plate/invalid_version", "data": { "plate": { + "version": "foo", "columns": [ { "name": "A" @@ -457,8 +476,32 @@ "rowIndex": 0, "columnIndex": 0 } + ] + } + }, + "valid": false + }, + { + "formerly": "plate/missing_version", + "data": { + "plate": { + "columns": [ + { + "name": "A" + } ], - "version": "foo" + "rows": [ + { + "name": "1" + } + ], + "wells": [ + { + "path": "A/1", + "rowIndex": 0, + "columnIndex": 0 + } + ] } }, "valid": false @@ -467,6 +510,7 @@ "formerly": "plate/non_alphanumeric_column", "data": { "plate": { + "version": "0.5-dev", "columns": [ { "name": "A-1" @@ -492,6 +536,7 @@ "formerly": "plate/non_alphanumeric_row", "data": { "plate": { + "version": "0.5-dev", "columns": [ { "name": "A" @@ -517,6 +562,7 @@ "formerly": "plate/missing_acquisition_id", "data": { "plate": { + "version": "0.5-dev", "acquisitions": [ { "maximumfieldcount": 1 @@ -547,6 +593,7 @@ "formerly": "plate/non_integer_acquisition_id", "data": { "plate": { + "version": "0.5-dev", "acquisitions": [ { "id": "0" @@ -577,6 +624,7 @@ "formerly": "plate/negative_acquisition_id", "data": { "plate": { + "version": "0.5-dev", "acquisitions": [ { "id": -1 @@ -607,6 +655,7 @@ "formerly": "plate/non_integer_acquisition_maximumfieldcount", "data": { "plate": { + "version": "0.5-dev", "acquisitions": [ { "id": 0, @@ -638,6 +687,7 @@ "formerly": "plate/acquisition_zero_maximumfieldcount", "data": { "plate": { + "version": "0.5-dev", "acquisitions": [ { "id": 0, @@ -669,6 +719,7 @@ "formerly": "plate/acquisition_noninteger_starttime", "data": { "plate": { + "version": "0.5-dev", "acquisitions": [ { "id": 0, @@ -700,6 +751,7 @@ "formerly": "plate/acquisition_negative_starttime", "data": { "plate": { + "version": "0.5-dev", "acquisitions": [ { "id": 0, @@ -731,6 +783,7 @@ "formerly": "plate/acquisition_noninteger_endtime", "data": { "plate": { + "version": "0.5-dev", "acquisitions": [ { "id": 0, @@ -762,6 +815,7 @@ "formerly": "plate/negative_endtime", "data": { "plate": { + "version": "0.5-dev", "acquisitions": [ { "id": 0, @@ -793,6 +847,7 @@ "formerly": "plate/zero_field_count", "data": { "plate": { + "version": "0.5-dev", "columns": [ { "name": "A"