{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://gitlab.dlr.de/resilienz-ki/safetynet/schema/safetynet.schema.json", "title": "SafetyNet Schema", "description": "Definition of the SafetyNet schema.", "type": "object", "properties": { "version": { "type": "string", "description": "Version of the manifest.", "const": "1.0.0" }, "description": { "type": "string", "description": "Description of the function of the safety network." }, "datatype": { "type": "string", "description": "Datatype used for inference", "oneOf": [ { "enum": [ "int8", "i8" ], "title": "8-bit (signed) integer" }, { "enum": [ "int16", "i16" ], "title": "16-bit (signed) integer" }, { "enum": [ "int32", "i32" ], "title": "32-bit (signed) integer" }, { "enum": [ "int64", "i64" ], "title": "64-bit (signed) integer" }, { "enum": [ "uint8", "u8" ], "title": "8-bit unsigned integer" }, { "enum": [ "uint16", "u16" ], "title": "16-bit unsigned integer" }, { "enum": [ "uint32", "u32" ], "title": "32-bit unsigned integer" }, { "enum": [ "uint64", "u64" ], "title": "64-bit unsigned integer" }, { "enum": [ "float16", "f16" ], "title": "16-bit floating point number" }, { "enum": [ "float32", "f32" ], "title": "32-bit floating point number" }, { "enum": [ "float64", "f64" ], "title": "64-bit floating point number" } ] }, "inputs": { "type": "array", "description": "Inputs of the safety network.", "items": { "$ref": "#/templates/input" }, "minItems": 1, "uniqueItems": true, "additionalProperties": false }, "numberOutputs": { "type": "integer", "description": "Number of outputs", "minimum": 1 }, "data": { "type": "array", "description": "Data inside the lookup table", "items": { "$ref": "#/templates/dataRange" }, "minItems": 1, "uniqueItems": true, "additionalProperties": false } }, "required": [ "version", "description", "datatype", "inputs", "numberOutputs", "data" ], "additionalProperties": false, "templates": { "input": { "type": "object", "properties": { "index": { "type": "integer", "description": "Index of the input", "minimum": 0 }, "id": { "type": "string", "description": "ID of the input" }, "name": { "type": "string", "description": "Name of the input" }, "description": { "type": "string", "description": "Description of the input" }, "minimum": { "type": "number", "description": "Minimum value (set either minimum or exclusiveMinimum)." }, "exclusiveMinimum": { "type": "number", "description": "Exclusive minimum value (set either minimum or exclusiveMinimum)." }, "maximum": { "type": "number", "description": "Maximum value (set either maximum or exclusiveMaximum)." }, "exclusiveMaximum": { "type": "number", "description": "Exclusive maximum value (set either maximum or exclusiveMaximum)." }, "unit": { "type": "string", "description": "Unit of the input." }, "ranges": { "type": "array", "description": "Ranges of the input.", "items": { "$ref": "#/templates/stridedRange" }, "minItems": 1, "uniqueItems": true } }, "oneOf": [ { "required": [ "minimum", "maximum" ] }, { "required": [ "exclusiveMinimum", "maximum" ] }, { "required": [ "minimum", "exclusiveMaximum" ] }, { "required": [ "exclusiveMinimum", "exclusiveMaximum" ] } ], "required": [ "index", "id", "name", "description", "unit", "ranges" ], "additionalProperties": false }, "stridedRange": { "type": "object", "properties": { "minimum": { "type": "number", "description": "Minimum value (set either minimum or exclusiveMinimum)." }, "exclusiveMinimum": { "type": "number", "description": "Exclusive minimum value (set either minimum or exclusiveMinimum)." }, "maximum": { "type": "number", "description": "Maximum value (set either maximum or exclusiveMaximum)." }, "exclusiveMaximum": { "type": "number", "description": "Exclusive maximum value (set either maximum or exclusiveMaximum)." }, "stride": { "type": "number", "minimum": 0, "description": "Stride of the range. E.g. min = 3, max = 9, stride = 3 -> [3, 6, 9]; min = 3, max = 10, stride = 3 -> [3, 6, 9]" } }, "oneOf": [ { "required": [ "minimum", "maximum" ] }, { "required": [ "exclusiveMinimum", "maximum" ] }, { "required": [ "minimum", "exclusiveMaximum" ] }, { "required": [ "exclusiveMinimum", "exclusiveMaximum" ] } ], "required": [ "stride" ], "additionalProperties": false }, "dataRange": { "type": "object", "properties": { "inputs": { "type": "object", "description": "Valid input ranges for the lookup table.", "patternProperties": { "^.*$": { "anyOf": [ { "type": "number" }, { "$ref": "#/templates/range" } ] } } }, "outputs": { "type": "array", "description": "Output values of the lookup table.", "items": { "type": "number" }, "minItems": 1 } }, "required": [ "inputs", "outputs" ], "additionalProperties": false }, "range": { "type": "object", "properties": { "minimum": { "type": "number", "description": "Minimum value (set either minimum or exclusiveMinimum)." }, "exclusiveMinimum": { "type": "number", "description": "Exclusive minimum value (set either minimum or exclusiveMinimum)." }, "maximum": { "type": "number", "description": "Maximum value (set either maximum or exclusiveMaximum)." }, "exclusiveMaximum": { "type": "number", "description": "Exclusive maximum value (set either maximum or exclusiveMaximum)." } }, "oneOf": [ { "required": [ "minimum", "maximum" ] }, { "required": [ "exclusiveMinimum", "maximum" ] }, { "required": [ "minimum", "exclusiveMaximum" ] }, { "required": [ "exclusiveMinimum", "exclusiveMaximum" ] } ], "additionalProperties": false } } }