Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion schemas/V_delta/stable/app.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
"type": "char",
"blank_value": "",
"default_value": "ndi.app",
"mustBeNonEmpty": true,
"mustBeNonEmpty": false,
"mustBeScalar": true,
"mustNotHaveNaN": false,
"queryable": true,
Expand Down
86 changes: 71 additions & 15 deletions schemas/V_delta/stable/control_stimulus_ids.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,45 +5,101 @@
"superclasses": [
{
"class_name": "base"
},
{
"class_name": "app"
}
],
"maturity_level": "stable"
},
"depends_on": [
{
"name": "stimulus_presentation_id",
"mustBeNonEmpty": true,
"documentation": "The document ID of the stimulus presentation these control IDs describe.",
"mustBeNonEmpty": false,
"documentation": "Optional pointer to the stimulus_presentation document these control IDs annotate.",
"must_refer_to_document_class": ""
}
],
"file": [],
"fields": [
{
"name": "control_ids",
"type": "char",
"blank_value": "",
"default_value": "",
"name": "control_stimulus_ids",
"type": "matrix",
"blank_value": [],
"default_value": [],
"mustBeNonEmpty": false,
"mustBeScalar": true,
"mustBeScalar": false,
"mustNotHaveNaN": false,
"queryable": false,
"ontology": null,
"documentation": "Comma-separated list of control stimulus identifiers (e.g., 'blank,gray_screen'). These identify which stimulus conditions serve as controls.",
"documentation": "Integer identifier(s) of the stimulus condition(s) that serve as the control reference for the linked stimulus_presentation. v1 sometimes ships NaN when no control was recorded; sometimes a scalar; sometimes an array.",
"constraints": {}
},
{
"name": "num_control_ids",
"type": "integer",
"blank_value": 0,
"default_value": 0,
"name": "control_stimulus_id_method",
"type": "structure",
"blank_value": {
"method": "",
"controlid": "",
"controlid_value": 0
},
"default_value": {
"method": "",
"controlid": "",
"controlid_value": 0
},
"mustBeNonEmpty": false,
"mustBeScalar": true,
"mustNotHaveNaN": true,
"mustNotHaveNaN": false,
"queryable": true,
"ontology": null,
"documentation": "The number of unique control stimulus identifiers.",
"constraints": {}
"documentation": "How the control_stimulus_ids were derived. v1 uniformly ships a 3-field struct: method (e.g., 'pseudorandom'), controlid (e.g., 'isblank'), and controlid_value (numeric tag, e.g., 1).",
"constraints": {},
"fields": [
{
"name": "method",
"type": "char",
"blank_value": "",
"default_value": "",
"mustBeNonEmpty": false,
"mustBeScalar": true,
"mustNotHaveNaN": false,
"queryable": true,
"ontology": null,
"documentation": "Name of the algorithm used to identify which stimuli are controls (e.g., 'pseudorandom', 'explicit_list').",
"constraints": {
"maxLength": 64
}
},
{
"name": "controlid",
"type": "char",
"blank_value": "",
"default_value": "",
"mustBeNonEmpty": false,
"mustBeScalar": true,
"mustNotHaveNaN": false,
"queryable": true,
"ontology": null,
"documentation": "Name of the per-stimulus key that flags control trials (e.g., 'isblank').",
"constraints": {
"maxLength": 64
}
},
{
"name": "controlid_value",
"type": "double",
"blank_value": 0,
"default_value": 0,
"mustBeNonEmpty": false,
"mustBeScalar": true,
"mustNotHaveNaN": false,
"queryable": true,
"ontology": null,
"documentation": "Value of `controlid` that marks a trial as a control (e.g., 1).",
"constraints": {}
}
]
}
]
}
27 changes: 4 additions & 23 deletions schemas/V_delta/stable/daqmetadatareader_epochdata_ingested.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@
"superclasses": [
{
"class_name": "base"
},
{
"class_name": "epochid"
}
],
"maturity_level": "stable"
Expand All @@ -15,30 +18,8 @@
"mustBeNonEmpty": true,
"documentation": "The document ID of the DAQ metadata reader whose epoch data has been ingested.",
"must_refer_to_document_class": ""
},
{
"name": "epochid",
"mustBeNonEmpty": true,
"documentation": "The document ID of the epoch whose data was ingested.",
"must_refer_to_document_class": ""
}
],
"file": [],
"fields": [
{
"name": "ingestion_status",
"type": "char",
"blank_value": "",
"default_value": "complete",
"mustBeNonEmpty": true,
"mustBeScalar": true,
"mustNotHaveNaN": false,
"queryable": true,
"ontology": null,
"documentation": "The status of the ingestion ('complete', 'partial', 'failed').",
"constraints": {
"maxLength": 32
}
}
]
"fields": []
}
52 changes: 42 additions & 10 deletions schemas/V_delta/stable/daqreader_epochdata_ingested.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,19 +26,51 @@
"file": [],
"fields": [
{
"name": "ingestion_status",
"type": "char",
"blank_value": "",
"default_value": "complete",
"mustBeNonEmpty": true,
"name": "epochtable",
"type": "structure",
"blank_value": {
"epochclock": [],
"t0_t1": []
},
"default_value": {
"epochclock": [],
"t0_t1": []
},
"mustBeNonEmpty": false,
"mustBeScalar": true,
"mustNotHaveNaN": false,
"queryable": true,
"queryable": false,
"ontology": null,
"documentation": "The status of the ingestion ('complete', 'partial', 'failed').",
"constraints": {
"maxLength": 32
}
"documentation": "Captured epoch-table snapshot for the ingested epoch. v1 ships {epochclock: [<clock_name>], t0_t1: [t0, t1]} — clock identifier(s) and the corresponding start/stop time pair, both in the units of that clock.",
"constraints": {},
"fields": [
{
"name": "epochclock",
"type": "string",
"blank_value": [],
"default_value": [],
"mustBeNonEmpty": false,
"mustBeScalar": false,
"mustNotHaveNaN": false,
"queryable": true,
"ontology": null,
"documentation": "Cell array of clock identifier strings (e.g., {'dev_local_time'}) that index the t0_t1 row(s).",
"constraints": {}
},
{
"name": "t0_t1",
"type": "matrix",
"blank_value": [],
"default_value": [],
"mustBeNonEmpty": false,
"mustBeScalar": false,
"mustNotHaveNaN": false,
"queryable": false,
"ontology": null,
"documentation": "Two-element [t0, t1] start/stop time pair in the units of the matching epochclock entry.",
"constraints": {}
}
]
}
]
}
71 changes: 48 additions & 23 deletions schemas/V_delta/stable/daqreader_mfdaq_epochdata_ingested.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,40 +5,65 @@
"superclasses": [
{
"class_name": "base"
},
{
"class_name": "daqreader_epochdata_ingested"
},
{
"class_name": "epochid"
}
],
"maturity_level": "stable"
},
"depends_on": [
{
"name": "daqreader_id",
"mustBeNonEmpty": true,
"documentation": "The document ID of the MFDAQ reader whose epoch data has been ingested.",
"must_refer_to_document_class": ""
},
{
"name": "epochid",
"mustBeNonEmpty": true,
"documentation": "The document ID of the epoch whose data was ingested.",
"must_refer_to_document_class": ""
}
],
"depends_on": [],
"file": [],
"fields": [
{
"name": "ingestion_status",
"type": "char",
"blank_value": "",
"default_value": "complete",
"mustBeNonEmpty": true,
"name": "parameters",
"type": "structure",
"blank_value": {
"sample_analog_segment": 0.0,
"sample_digital_segment": 0.0
},
"default_value": {
"sample_analog_segment": 0.0,
"sample_digital_segment": 0.0
},
"mustBeNonEmpty": false,
"mustBeScalar": true,
"mustNotHaveNaN": false,
"queryable": true,
"ontology": null,
"documentation": "The status of the ingestion ('complete', 'partial', 'failed').",
"constraints": {
"maxLength": 32
}
"documentation": "Reader-specific parameters captured at the time the epoch was ingested. The two sub-fields seen in the v1 corpora are sample-count cutoffs the MFDAQ reader used to slice the source recording.",
"constraints": {},
"fields": [
{
"name": "sample_analog_segment",
"type": "double",
"blank_value": 0.0,
"default_value": 0.0,
"mustBeNonEmpty": false,
"mustBeScalar": true,
"mustNotHaveNaN": false,
"queryable": true,
"ontology": null,
"documentation": "Maximum sample count per analog segment used during ingestion.",
"constraints": {}
},
{
"name": "sample_digital_segment",
"type": "double",
"blank_value": 0.0,
"default_value": 0.0,
"mustBeNonEmpty": false,
"mustBeScalar": true,
"mustNotHaveNaN": false,
"queryable": true,
"ontology": null,
"documentation": "Maximum sample count per digital segment used during ingestion.",
"constraints": {}
}
]
}
]
}
18 changes: 9 additions & 9 deletions schemas/V_delta/stable/dataset_remote.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,22 +13,22 @@
"file": [],
"fields": [
{
"name": "remote_url",
"name": "remote_type",
"type": "char",
"blank_value": "",
"default_value": "",
"mustBeNonEmpty": true,
"mustBeNonEmpty": false,
"mustBeScalar": true,
"mustNotHaveNaN": false,
"queryable": true,
"ontology": null,
"documentation": "The URL of the remote dataset location.",
"documentation": "The type of remote storage (e.g., 's3', 'http', 'globus', 'git').",
"constraints": {
"maxLength": 1024
"maxLength": 64
}
},
{
"name": "remote_type",
"name": "dataset_id",
"type": "char",
"blank_value": "",
"default_value": "",
Expand All @@ -37,13 +37,13 @@
"mustNotHaveNaN": false,
"queryable": true,
"ontology": null,
"documentation": "The type of remote storage (e.g., 's3', 'http', 'globus', 'git').",
"documentation": "The dataset identifier at the remote location.",
"constraints": {
"maxLength": 64
"maxLength": 256
}
},
{
"name": "dataset_id",
"name": "organization_id",
"type": "char",
"blank_value": "",
"default_value": "",
Expand All @@ -52,7 +52,7 @@
"mustNotHaveNaN": false,
"queryable": true,
"ontology": null,
"documentation": "The dataset identifier at the remote location.",
"documentation": "Organization identifier at the remote service (e.g., the lab or owning group whose namespace the dataset lives under).",
"constraints": {
"maxLength": 256
}
Expand Down
5 changes: 3 additions & 2 deletions schemas/V_delta/stable/did_schema_meta.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "https://did-schema.example.org/V_delta/did_schema_meta.json",
"title": "DID/NDI Schema Meta-Schema (V_delta)",
"description": "Validates the structure of DID/NDI schema files for V_delta. V_delta introduces named composite types 'duration', 'ontology_term', 'volume', 'mass', 'length', 'voltage', 'current', and 'frequency', and a redesigned field-level 'ontology' annotation shape with keys 'node' (CURIE) and 'name' (label); the CURIE prefix is resolved against CURIE_lookups_meta.json. The six SI-dimensioned types share the same sub-field layout as 'duration' (a canonical-unit double, 'approximate' boolean, 'source_unit' char, 'source_value' double); only the canonical sub-field name and the allowed source units differ. NAMING CONVENTION: V_delta drops the V_beta underscore prefix on NDI-extension keys. Every reserved key \u2014 JSON Schema vocabulary or NDI extension \u2014 is used without an underscore prefix; the authoritative enumeration of NDI-reserved names lives in ndi_reserved_keys.json and is enforced by this meta-schema. Schema authors must not reuse a reserved name as their own data field name.",
"description": "Validates the structure of DID/NDI schema files for V_delta. V_delta introduces named composite types 'duration', 'ontology_term', 'volume', 'mass', 'length', 'voltage', 'current', 'frequency', and 'concentration', and a redesigned field-level 'ontology' annotation shape with keys 'node' (CURIE) and 'name' (label); the CURIE prefix is resolved against CURIE_lookups_meta.json. The six SI-dimensioned types ('duration', 'volume', 'mass', 'length', 'voltage', 'current', 'frequency') share the same sub-field layout (a canonical-unit double, 'approximate' boolean, 'source_unit' char, 'source_value' double); only the canonical sub-field name and the allowed source units differ. 'concentration' breaks the single-canonical pattern because concentration units do not collapse to a single canonical (mass/volume cannot be converted to molar without molecular weight, and vice versa); instead it offers multiple OPTIONAL canonical sub-fields ('molar', 'grams_per_liter', 'mass_fraction', 'volume_fraction') and the migrator populates whichever the source unit is computable into, alongside the same 'approximate' / 'source_unit' / 'source_value' triple. NAMING CONVENTION: V_delta drops the V_beta underscore prefix on NDI-extension keys. Every reserved key \u2014 JSON Schema vocabulary or NDI extension \u2014 is used without an underscore prefix; the authoritative enumeration of NDI-reserved names lives in ndi_reserved_keys.json and is enforced by this meta-schema. Schema authors must not reuse a reserved name as their own data field name.",
"type": "object",
"required": [
"document_class",
Expand Down Expand Up @@ -227,7 +227,8 @@
"length",
"voltage",
"current",
"frequency"
"frequency",
"concentration"
],
"description": "Data type of the field. Uses the standard JSON Schema keyword 'type'; values are NDI-specific."
},
Expand Down
Loading
Loading