Semantic Definition Format (SDF) for Data and Interactions of Things
draft-ietf-asdf-sdf-06
The information below is for an old version of the document.
Document | Type |
This is an older version of an Internet-Draft whose latest revision state is "Active".
|
|
---|---|---|---|
Authors | Michael Koster , Carsten Bormann | ||
Last updated | 2021-06-01 | ||
Replaces | draft-onedm-t2trg-sdf | ||
RFC stream | Internet Engineering Task Force (IETF) | ||
Formats | |||
Additional resources | Mailing list discussion | ||
Stream | WG state | WG Document | |
Associated WG milestone |
|
||
Document shepherd | (None) | ||
IESG | IESG state | I-D Exists | |
Consensus boilerplate | Yes | ||
Telechat date | (None) | ||
Responsible AD | (None) | ||
Send notices to | (None) |
draft-ietf-asdf-sdf-06
gt; ; Action is a directive to invoke an application layer verb associated with an object ? sdfEvent: named<eventqualities> ; Event represents an occurence of something associated with an object ? sdfData: named<dataqualities> ; Data represents a piece of information that can be the state of a property or a parameter to an action or a signal in an event EXTENSION-POINT<"top-ext"> } sdfinfo = { title: text version: text copyright: text license: text EXTENSION-POINT<"info-ext"> } ; Shortcut for a map that gives names to instances of X (has text keys and values of type X) named<X> = { * text => X } Koster & Bormann Expires 3 December 2021 [Page 35] Internet-Draft OneDM SDF June 2021 EXTENSION-POINT<f> = ( * (text .feature f) => any ) ; only used in framework syntax sdf-pointer = text ; .regexp curie-regexp -- TO DO! pointer-list = [* sdf-pointer] ; ISSUE: no point in having an empty list, no? but used for sdfRequired in odmobject-multiple_axis_joystick.sdf.json commonqualities = ( ? description: text ; long text (no constraints) ? label: text ; short text (no constraints); default to key ? $comment: text ; source code comments only, no semantics ? sdfRef: sdf-pointer ? sdfRequired: pointer-list ; applies to qualities of properties, of data ) ; for building hierarchy thingqualities = { commonqualities, ? sdfObject: named<objectqualities> ? sdfThing: named<thingqualities> EXTENSION-POINT<"thing-ext"> } productqualities = thingqualities ; ISSUE: get rid of sdfProduct? ; for single objects, or for arrays of objects (1.2) objectqualities = { commonqualities, ? ("minItems" .feature "1.2") => number ? ("maxItems" .feature "1.2") => number ? sdfProperty: named<propertyqualities> ? sdfAction: named<actionqualities> ? sdfEvent: named<eventqualities> ? sdfData: named<dataqualities> EXTENSION-POINT<"object-ext"> } propertyqualities = dataqualities ; the definitions in sdfData are declarations in sdfProperty parameter-list = pointer-list .feature (["1.0", "pointerlist-as-parameter"]) / dataqualities .feature (["1.1", "dataqualities-as-parameter"]) actionqualities = { commonqualities, ? sdfInputData: parameter-list ; sdfRequiredInputData applies here (a bit redundant) ? ("sdfRequiredInputData" .feature "1.0") => pointer-list ? sdfOutputData: parameter-list ; sdfRequired applies here ? sdfData: named<dataqualities> ; zero or more named data type definitions that might be used in the above EXTENSION-POINT<"action-ext"> Koster & Bormann Expires 3 December 2021 [Page 36] Internet-Draft OneDM SDF June 2021 } eventqualities = { commonqualities ? sdfOutputData: parameter-list ; sdfRequired applies here ? sdfData: named<dataqualities> ; zero or more named data type definitions that might be used in the above EXTENSION-POINT<"event-ext"> } dataqualities = { ; also propertyqualities commonqualities, jsonschema, ? ("units" .feature "1.0") => text ? ("unit" .feature "1.1") => text ? ("scaleMinimum" .feature "1.0") => number ? ("scaleMaximum" .feature "1.0") => number ? observable: bool ? readable: bool ? writable: bool ? nullable: bool ? ("subtype" .feature "1.0") => "byte-string" / "unix-time" / (text .feature "subtype-ext") ; EXTENSION-POINT ? ("sdfType" .feature "1.1") => "byte-string" / "unix-time" / (text .feature "sdftype-ext") ; EXTENSION-POINT ? contentFormat: text EXTENSION-POINT<"data-ext"> } allowed-types = number / text / bool / null / [* number] / [* text] / [* bool] / {* text => any} / (any .feature "allowed-ext") ; EXTENSION-POINT compound-type = ( "type" => ("object" .feature "1.1"), ? required: [+text], ? properties: named<dataqualities>, ) choice-type = ( ("sdfChoice" .feature "1.1") => named<dataqualities> ) jsonschema = ( ? (("type" => "number" / "string" / "boolean" / "integer" / "array") // compound-type // choice-type // (type: text .feature "type-ext") ; EXTENSION-POINT Koster & Bormann Expires 3 December 2021 [Page 37] Internet-Draft OneDM SDF June 2021 ) ? "enum" => [+ text] ; limited to text strings in SDF 1.1 ? ("enum" .feature "1.0") => [+ allowed-types] ; should validate against type ? const: allowed-types ; should validate against type ? default: allowed-types ; should validate against type ; number/integer constraints ? minimum: number ? maximum: number ? exclusiveMinimum: bool / number ; jso draft 4/7 ? exclusiveMaximum: bool / number ; jso draft 4/7 ? multipleOf: number ; ISSUE: Do we need this? ; text string constraints ? minLength: number ? maxLength: number ? pattern: text ; regexp ? format: "date-time" / "date" / "time" / "uri" / "uri-reference" / "uuid" / (text .feature "format-ext") ; EXTENSION-POINT ; array constraints ? minItems: number ? maxItems: number ? uniqueItems: bool ? items: { ;;; ultimately, this will be mostly recursive, but, for now ;;; let's find out what we actually need ? sdfRef: sdf-pointer ; import limited to the subset that we allow here... ? description: text ; long text (no constraints) ? $comment: text ; source code comments only, no semantics ; commonqualities, ; -- ISSUE: should leave this out for non-complex data types, but need the above three ? ((type: "number" / "string" / "boolean" / "integer") ; no "array" // compound-type // choice-type ; do we really need arrays of choices? // (type: text .feature "itemtype-ext") ; EXTENSION-POINT ) ; jso subset ? minimum: number ? maximum: number ? "enum" => [+ text] ; limited to text strings in SDF 1.1 ? ("enum" .feature "1.0") => [+ any] ? format: text ? minLength: number ? maxLength: number EXTENSION-POINT<"items-ext"> } ) Koster & Bormann Expires 3 December 2021 [Page 38] Internet-Draft OneDM SDF June 2021 Appendix B. json-schema.org Rendition of SDF Syntax This appendix describes the syntax of SDF defined in Appendix A, but using a version of the description techniques advertised on json- schema.org [I-D.handrews-json-schema-validation]. The appendix shows both the validation and the framework syntax. Since most of the lines are the same between these two files, those lines are shown only once, with a leading space, in the form of a unified diff. Lines leading with a "-" are part of the validation syntax, and lines leading with a "+" are part of the framework syntax. { - "title": "sdf-validation.cddl", + "title": "sdf-framework.cddl", "$schema": "http://json-schema.org/draft-07/schema#", "$ref": "#/definitions/sdf-syntax", "definitions": { "sdf-syntax": { "type": "object", "properties": { "info": { "$ref": "#/definitions/sdfinfo" }, "namespace": { "type": "object", "additionalProperties": { "type": "string" } }, "defaultNamespace": { "type": "string" }, "sdfThing": { "type": "object", "additionalProperties": { "$ref": "#/definitions/thingqualities" } }, "sdfProduct": { "type": "object", "additionalProperties": { "$ref": "#/definitions/productqualities" } }, "sdfObject": { "type": "object", Koster & Bormann Expires 3 December 2021 [Page 39] Internet-Draft OneDM SDF June 2021 "additionalProperties": { "$ref": "#/definitions/objectqualities" } }, "sdfProperty": { "type": "object", "additionalProperties": { "$ref": "#/definitions/propertyqualities" } }, "sdfAction": { "type": "object", "additionalProperties": { "$ref": "#/definitions/actionqualities" } }, "sdfEvent": { "type": "object", "additionalProperties": { "$ref": "#/definitions/eventqualities" } }, "sdfData": { "type": "object", "additionalProperties": { "$ref": "#/definitions/dataqualities" } } }, - "additionalProperties": false + "additionalProperties": { + } }, "sdfinfo": { "type": "object", "required": [ "title", "version", "copyright", "license" ], "properties": { "title": { "type": "string" }, "version": { "type": "string" }, Koster & Bormann Expires 3 December 2021 [Page 40] Internet-Draft OneDM SDF June 2021 "copyright": { "type": "string" }, "license": { "type": "string" } }, - "additionalProperties": false + "additionalProperties": { + } }, "thingqualities": { "type": "object", "properties": { "description": { "type": "string" }, "label": { "type": "string" }, "$comment": { "type": "string" }, "sdfRef": { "$ref": "#/definitions/sdf-pointer" }, "sdfRequired": { "$ref": "#/definitions/pointer-list" }, "sdfObject": { "type": "object", "additionalProperties": { "$ref": "#/definitions/objectqualities" } }, "sdfThing": { "type": "object", "additionalProperties": { "$ref": "#/definitions/thingqualities" } } }, - "additionalProperties": false + "additionalProperties": { + } }, "sdf-pointer": { "type": "string" Koster & Bormann Expires 3 December 2021 [Page 41] Internet-Draft OneDM SDF June 2021 }, "pointer-list": { "type": "array", "items": { "$ref": "#/definitions/sdf-pointer" } }, "objectqualities": { "type": "object", "properties": { "description": { "type": "string" }, "label": { "type": "string" }, "$comment": { "type": "string" }, "sdfRef": { "$ref": "#/definitions/sdf-pointer" }, "sdfRequired": { "$ref": "#/definitions/pointer-list" }, "minItems": { "type": "number" }, "maxItems": { "type": "number" }, "sdfProperty": { "type": "object", "additionalProperties": { "$ref": "#/definitions/propertyqualities" } }, "sdfAction": { "type": "object", "additionalProperties": { "$ref": "#/definitions/actionqualities" } }, "sdfEvent": { "type": "object", "additionalProperties": { "$ref": "#/definitions/eventqualities" } Koster & Bormann Expires 3 December 2021 [Page 42] Internet-Draft OneDM SDF June 2021 }, "sdfData": { "type": "object", "additionalProperties": { "$ref": "#/definitions/dataqualities" } } }, - "additionalProperties": false + "additionalProperties": { + } }, "propertyqualities": { "$ref": "#/definitions/dataqualities" }, "dataqualities": { "anyOf": [ { "type": "object", "properties": { "type": { "type": "string", "enum": [ "number", "string", "boolean", "integer", "array" ] }, "enum": { "type": "array", "items": { - "type": "string" + "$ref": "#/definitions/allowed-types" }, "minItems": 1 }, "const": { "$ref": "#/definitions/allowed-types" }, "default": { "$ref": "#/definitions/allowed-types" }, "minimum": { "type": "number" }, "maximum": { Koster & Bormann Expires 3 December 2021 [Page 43] Internet-Draft OneDM SDF June 2021 "type": "number" }, "exclusiveMinimum": { "anyOf": [ { "type": "boolean" }, { "type": "number" } ] }, "exclusiveMaximum": { "anyOf": [ { "type": "boolean" }, { "type": "number" } ] }, "multipleOf": { "type": "number" }, "minLength": { "type": "number" }, "maxLength": { "type": "number" }, "pattern": { "type": "string" }, "format": { - "type": "string", - "enum": [ - "date-time", - "date", - "time", - "uri", - "uri-reference", - "uuid" + "anyOf": [ + { + "type": "string", + "const": "date-time" + }, Koster & Bormann Expires 3 December 2021 [Page 44] Internet-Draft OneDM SDF June 2021 + { + "type": "string", + "const": "date" + }, + { + "type": "string", + "const": "time" + }, + { + "type": "string", + "const": "uri" + }, + { + "type": "string", + "const": "uri-reference" + }, + { + "type": "string", + "const": "uuid" + }, + { + "type": "string" + } ] }, "minItems": { "type": "number" }, "maxItems": { "type": "number" }, "uniqueItems": { "type": "boolean" }, "items": { "anyOf": [ { "type": "object", "properties": { "type": { "type": "string", "enum": [ "number", "string", "boolean", "integer" ] }, Koster & Bormann Expires 3 December 2021 [Page 45] Internet-Draft OneDM SDF June 2021 "sdfRef": { "$ref": "#/definitions/sdf-pointer" }, "description": { "type": "string" }, "$comment": { "type": "string" }, "minimum": { "type": "number" }, "maximum": { "type": "number" }, "enum": { "type": "array", - "items": { - "type": "string" - }, "minItems": 1 }, "format": { "type": "string" }, "minLength": { "type": "number" }, "maxLength": { "type": "number" } }, - "additionalProperties": false + "additionalProperties": { + } }, { "type": "object", "properties": { "type": { "type": "string", "const": "object" }, "required": { "type": "array", "items": { "type": "string" }, Koster & Bormann Expires 3 December 2021 [Page 46] Internet-Draft OneDM SDF June 2021 "minItems": 1 }, "properties": { "type": "object", "additionalProperties": { "$ref": "#/definitions/dataqualities" } }, "sdfRef": { "$ref": "#/definitions/sdf-pointer" }, "description": { "type": "string" }, "$comment": { "type": "string" }, "minimum": { "type": "number" }, "maximum": { "type": "number" }, "enum": { "type": "array", - "items": { - "type": "string" - }, "minItems": 1 }, "format": { "type": "string" }, "minLength": { "type": "number" }, "maxLength": { "type": "number" } }, - "additionalProperties": false + "additionalProperties": { + } }, { "type": "object", "properties": { "sdfChoice": { Koster & Bormann Expires 3 December 2021 [Page 47] Internet-Draft OneDM SDF June 2021 "type": "object", "additionalProperties": { "$ref": "#/definitions/dataqualities" } }, "sdfRef": { "$ref": "#/definitions/sdf-pointer" }, "description": { "type": "string" }, "$comment": { "type": "string" }, "minimum": { "type": "number" }, "maximum": { "type": "number" }, "enum": { "type": "array", - "items": { - "type": "string" - }, "minItems": 1 }, "format": { "type": "string" }, "minLength": { "type": "number" }, "maxLength": { "type": "number" } }, - "additionalProperties": false + "additionalProperties": { + } + }, + { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "sdfRef": { Koster & Bormann Expires 3 December 2021 [Page 48] Internet-Draft OneDM SDF June 2021 + "$ref": "#/definitions/sdf-pointer" + }, + "description": { + "type": "string" + }, + "$comment": { + "type": "string" + }, + "minimum": { + "type": "number" + }, + "maximum": { + "type": "number" + }, + "enum": { + "type": "array", + "minItems": 1 + }, + "format": { + "type": "string" + }, + "minLength": { + "type": "number" + }, + "maxLength": { + "type": "number" + } + }, + "additionalProperties": { + } } ] }, "description": { "type": "string" }, "label": { "type": "string" }, "$comment": { "type": "string" }, "sdfRef": { "$ref": "#/definitions/sdf-pointer" }, "sdfRequired": { "$ref": "#/definitions/pointer-list" }, Koster & Bormann Expires 3 December 2021 [Page 49] Internet-Draft OneDM SDF June 2021 + "units": { + "type": "string" + }, "unit": { "type": "string" }, + "scaleMinimum": { + "type": "number" + }, + "scaleMaximum": { + "type": "number" + }, "observable": { "type": "boolean" }, "readable": { "type": "boolean" }, "writable": { "type": "boolean" }, "nullable": { "type": "boolean" }, + "subtype": { + "anyOf": [ + { + "type": "string", + "const": "byte-string" + }, + { + "type": "string", + "const": "unix-time" + }, + { + "type": "string" + } + ] + }, "sdfType": { - "type": "string", - "enum": [ - "byte-string", - "unix-time" + "anyOf": [ + { + "type": "string", + "const": "byte-string" Koster & Bormann Expires 3 December 2021 [Page 50] Internet-Draft OneDM SDF June 2021 + }, + { + "type": "string", + "const": "unix-time" + }, + { + "type": "string" + } ] }, "contentFormat": { "type": "string" } }, - "additionalProperties": false + "additionalProperties": { + } }, { "type": "object", "properties": { "type": { "type": "string", "const": "object" }, "required": { "type": "array", "items": { "type": "string" }, "minItems": 1 }, "properties": { "type": "object", "additionalProperties": { "$ref": "#/definitions/dataqualities" } }, "enum": { "type": "array", "items": { - "type": "string" + "$ref": "#/definitions/allowed-types" }, "minItems": 1 }, "const": { "$ref": "#/definitions/allowed-types" Koster & Bormann Expires 3 December 2021 [Page 51] Internet-Draft OneDM SDF June 2021 }, "default": { "$ref": "#/definitions/allowed-types" }, "minimum": { "type": "number" }, "maximum": { "type": "number" }, "exclusiveMinimum": { "anyOf": [ { "type": "boolean" }, { "type": "number" } ] }, "exclusiveMaximum": { "anyOf": [ { "type": "boolean" }, { "type": "number" } ] }, "multipleOf": { "type": "number" }, "minLength": { "type": "number" }, "maxLength": { "type": "number" }, "pattern": { "type": "string" }, "format": { - "type": "string", - "enum": [ - "date-time", - "date", - "time", Koster & Bormann Expires 3 December 2021 [Page 52] Internet-Draft OneDM SDF June 2021 - "uri", - "uri-reference", - "uuid" + "anyOf": [ + { + "type": "string", + "const": "date-time" + }, + { + "type": "string", + "const": "date" + }, + { + "type": "string", + "const": "time" + }, + { + "type": "string", + "const": "uri" + }, + { + "type": "string", + "const": "uri-reference" + }, + { + "type": "string", + "const": "uuid" + }, + { + "type": "string" + } ] }, "minItems": { "type": "number" }, "maxItems": { "type": "number" }, "uniqueItems": { "type": "boolean" }, "items": { "anyOf": [ { "type": "object", "properties": { "type": { Koster & Bormann Expires 3 December 2021 [Page 53] Internet-Draft OneDM SDF June 2021 "type": "string", "enum": [ "number", "string", "boolean", "integer" ] }, "sdfRef": { "$ref": "#/definitions/sdf-pointer" }, "description": { "type": "string" }, "$comment": { "type": "string" }, "minimum": { "type": "number" }, "maximum": { "type": "number" }, "enum": { "type": "array", - "items": { - "type": "string" - }, "minItems": 1 }, "format": { "type": "string" }, "minLength": { "type": "number" }, "maxLength": { "type": "number" } }, - "additionalProperties": false + "additionalProperties": { + } }, { "type": "object", "properties": { "type": { Koster & Bormann Expires 3 December 2021 [Page 54] Internet-Draft OneDM SDF June 2021 "type": "string", "const": "object" }, "required": { "type": "array", "items": { "type": "string" }, "minItems": 1 }, "properties": { "type": "object", "additionalProperties": { "$ref": "#/definitions/dataqualities" } }, "sdfRef": { "$ref": "#/definitions/sdf-pointer" }, "description": { "type": "string" }, "$comment": { "type": "string" }, "minimum": { "type": "number" }, "maximum": { "type": "number" }, "enum": { "type": "array", - "items": { - "type": "string" - }, "minItems": 1 }, "format": { "type": "string" }, "minLength": { "type": "number" }, "maxLength": { "type": "number" } }, Koster & Bormann Expires 3 December 2021 [Page 55] Internet-Draft OneDM SDF June 2021 - "additionalProperties": false + "additionalProperties": { + } }, { "type": "object", "properties": { "sdfChoice": { "type": "object", "additionalProperties": { "$ref": "#/definitions/dataqualities" } }, "sdfRef": { "$ref": "#/definitions/sdf-pointer" }, "description": { "type": "string" }, "$comment": { "type": "string" }, "minimum": { "type": "number" }, "maximum": { "type": "number" }, "enum": { "type": "array", - "items": { - "type": "string" - }, "minItems": 1 }, "format": { "type": "string" }, "minLength": { "type": "number" }, "maxLength": { "type": "number" } }, - "additionalProperties": false + "additionalProperties": { + } Koster & Bormann Expires 3 December 2021 [Page 56] Internet-Draft OneDM SDF June 2021 + }, + { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "sdfRef": { + "$ref": "#/definitions/sdf-pointer" + }, + "description": { + "type": "string" + }, + "$comment": { + "type": "string" + }, + "minimum": { + "type": "number" + }, + "maximum": { + "type": "number" + }, + "enum": { + "type": "array", + "minItems": 1 + }, + "format": { + "type": "string" + }, + "minLength": { + "type": "number" + }, + "maxLength": { + "type": "number" + } + }, + "additionalProperties": { + } } ] }, "description": { "type": "string" }, "label": { "type": "string" }, "$comment": { Koster & Bormann Expires 3 December 2021 [Page 57] Internet-Draft OneDM SDF June 2021 "type": "string" }, "sdfRef": { "$ref": "#/definitions/sdf-pointer" }, "sdfRequired": { "$ref": "#/definitions/pointer-list" }, + "units": { + "type": "string" + }, "unit": { "type": "string" }, + "scaleMinimum": { + "type": "number" + }, + "scaleMaximum": { + "type": "number" + }, "observable": { "type": "boolean" }, "readable": { "type": "boolean" }, "writable": { "type": "boolean" }, "nullable": { "type": "boolean" }, + "subtype": { + "anyOf": [ + { + "type": "string", + "const": "byte-string" + }, + { + "type": "string", + "const": "unix-time" + }, + { + "type": "string" + } + ] + }, "sdfType": { Koster & Bormann Expires 3 December 2021 [Page 58] Internet-Draft OneDM SDF June 2021 - "type": "string", - "enum": [ - "byte-string", - "unix-time" + "anyOf": [ + { + "type": "string", + "const": "byte-string" + }, + { + "type": "string", + "const": "unix-time" + }, + { + "type": "string" + } ] }, "contentFormat": { "type": "string" } }, - "additionalProperties": false + "additionalProperties": { + } }, { "type": "object", "properties": { "sdfChoice": { "type": "object", "additionalProperties": { "$ref": "#/definitions/dataqualities" } }, "enum": { "type": "array", "items": { - "type": "string" + "$ref": "#/definitions/allowed-types" }, "minItems": 1 }, "const": { "$ref": "#/definitions/allowed-types" }, "default": { "$ref": "#/definitions/allowed-types" Koster & Bormann Expires 3 December 2021 [Page 59] Internet-Draft OneDM SDF June 2021 }, "minimum": { "type": "number" }, "maximum": { "type": "number" }, "exclusiveMinimum": { "anyOf": [ { "type": "boolean" }, { "type": "number" } ] }, "exclusiveMaximum": { "anyOf": [ { "type": "boolean" }, { "type": "number" } ] }, "multipleOf": { "type": "number" }, "minLength": { "type": "number" }, "maxLength": { "type": "number" }, "pattern": { "type": "string" }, "format": { - "type": "string", - "enum": [ - "date-time", - "date", - "time", - "uri", - "uri-reference", - "uuid" Koster & Bormann Expires 3 December 2021 [Page 60] Internet-Draft OneDM SDF June 2021 + "anyOf": [ + { + "type": "string", + "const": "date-time" + }, + { + "type": "string", + "const": "date" + }, + { + "type": "string", + "const": "time" + }, + { + "type": "string", + "const": "uri" + }, + { + "type": "string", + "const": "uri-reference" + }, + { + "type": "string", + "const": "uuid" + }, + { + "type": "string" + } ] }, "minItems": { "type": "number" }, "maxItems": { "type": "number" }, "uniqueItems": { "type": "boolean" }, "items": { "anyOf": [ { "type": "object", "properties": { "type": { "type": "string", "enum": [ "number", Koster & Bormann Expires 3 December 2021 [Page 61] Internet-Draft OneDM SDF June 2021 "string", "boolean", "integer" ] }, "sdfRef": { "$ref": "#/definitions/sdf-pointer" }, "description": { "type": "string" }, "$comment": { "type": "string" }, "minimum": { "type": "number" }, "maximum": { "type": "number" }, "enum": { "type": "array", - "items": { - "type": "string" - }, "minItems": 1 }, "format": { "type": "string" }, "minLength": { "type": "number" }, "maxLength": { "type": "number" } }, - "additionalProperties": false + "additionalProperties": { + } }, { "type": "object", "properties": { "type": { "type": "string", "const": "object" }, Koster & Bormann Expires 3 December 2021 [Page 62] Internet-Draft OneDM SDF June 2021 "required": { "type": "array", "items": { "type": "string" }, "minItems": 1 }, "properties": { "type": "object", "additionalProperties": { "$ref": "#/definitions/dataqualities" } }, "sdfRef": { "$ref": "#/definitions/sdf-pointer" }, "description": { "type": "string" }, "$comment": { "type": "string" }, "minimum": { "type": "number" }, "maximum": { "type": "number" }, "enum": { "type": "array", - "items": { - "type": "string" - }, "minItems": 1 }, "format": { "type": "string" }, "minLength": { "type": "number" }, "maxLength": { "type": "number" } }, - "additionalProperties": false + "additionalProperties": { + } Koster & Bormann Expires 3 December 2021 [Page 63] Internet-Draft OneDM SDF June 2021 }, { "type": "object", "properties": { "sdfChoice": { "type": "object", "additionalProperties": { "$ref": "#/definitions/dataqualities" } }, "sdfRef": { "$ref": "#/definitions/sdf-pointer" }, "description": { "type": "string" }, "$comment": { "type": "string" }, "minimum": { "type": "number" }, "maximum": { "type": "number" }, "enum": { "type": "array", - "items": { - "type": "string" - }, "minItems": 1 }, "format": { "type": "string" }, "minLength": { "type": "number" }, "maxLength": { "type": "number" } }, - "additionalProperties": false + "additionalProperties": { + } + }, + { + "type": "object", Koster & Bormann Expires 3 December 2021 [Page 64] Internet-Draft OneDM SDF June 2021 + "properties": { + "type": { + "type": "string" + }, + "sdfRef": { + "$ref": "#/definitions/sdf-pointer" + }, + "description": { + "type": "string" + }, + "$comment": { + "type": "string" + }, + "minimum": { + "type": "number" + }, + "maximum": { + "type": "number" + }, + "enum": { + "type": "array", + "minItems": 1 + }, + "format": { + "type": "string" + }, + "minLength": { + "type": "number" + }, + "maxLength": { + "type": "number" + } + }, + "additionalProperties": { + } } ] }, "description": { "type": "string" }, "label": { "type": "string" }, "$comment": { "type": "string" }, "sdfRef": { Koster & Bormann Expires 3 December 2021 [Page 65] Internet-Draft OneDM SDF June 2021 "$ref": "#/definitions/sdf-pointer" }, "sdfRequired": { "$ref": "#/definitions/pointer-list" }, + "units": { + "type": "string" + }, "unit": { "type": "string" }, + "scaleMinimum": { + "type": "number" + }, + "scaleMaximum": { + "type": "number" + }, "observable": { "type": "boolean" }, "readable": { "type": "boolean" }, "writable": { "type": "boolean" }, "nullable": { "type": "boolean" }, - "sdfType": { - "type": "string", - "enum": [ - "byte-string", - "unix-time" - ] - }, + "subtype": { + "anyOf": [ + { + "type": "string", + "const": "byte-string" + }, + { + "type": "string", + "const": "unix-time" + }, + { + "type": "string" Koster & Bormann Expires 3 December 2021 [Page 66] Internet-Draft OneDM SDF June 2021 + } + ] + }, + "sdfType": { + "anyOf": [ + { + "type": "string", + "const": "byte-string" + }, + { + "type": "string", + "const": "unix-time" + }, + { + "type": "string" + } + ] + }, "contentFormat": { "type": "string" } }, - "additionalProperties": false + "additionalProperties": { + } + }, + { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "enum": { + "type": "array", + "items": { + "$ref": "#/definitions/allowed-types" + }, + "minItems": 1 + }, + "const": { + "$ref": "#/definitions/allowed-types" + }, + "default": { + "$ref": "#/definitions/allowed-types" + }, + "minimum": { + "type": "number" + }, Koster & Bormann Expires 3 December 2021 [Page 67] Internet-Draft OneDM SDF June 2021 + "maximum": { + "type": "number" + }, + "exclusiveMinimum": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "number" + } + ] + }, + "exclusiveMaximum": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "number" + } + ] + }, + "multipleOf": { + "type": "number" + }, + "minLength": { + "type": "number" + }, + "maxLength": { + "type": "number" + }, + "pattern": { + "type": "string" + }, + "format": { + "anyOf": [ + { + "type": "string", + "const": "date-time" + }, + { + "type": "string", + "const": "date" + }, + { + "type": "string", + "const": "time" Koster & Bormann Expires 3 December 2021 [Page 68] Internet-Draft OneDM SDF June 2021 + }, + { + "type": "string", + "const": "uri" + }, + { + "type": "string", + "const": "uri-reference" + }, + { + "type": "string", + "const": "uuid" + }, + { + "type": "string" + } + ] + }, + "minItems": { + "type": "number" + }, + "maxItems": { + "type": "number" + }, + "uniqueItems": { + "type": "boolean" + }, + "items": { + "anyOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "number", + "string", + "boolean", + "integer" + ] + }, + "sdfRef": { + "$ref": "#/definitions/sdf-pointer" + }, + "description": { + "type": "string" + }, + "$comment": { Koster & Bormann Expires 3 December 2021 [Page 69] Internet-Draft OneDM SDF June 2021 + "type": "string" + }, + "minimum": { + "type": "number" + }, + "maximum": { + "type": "number" + }, + "enum": { + "type": "array", + "minItems": 1 + }, + "format": { + "type": "string" + }, + "minLength": { + "type": "number" + }, + "maxLength": { + "type": "number" + } + }, + "additionalProperties": { + } + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "const": "object" + }, + "required": { + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1 + }, + "properties": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/dataqualities" + } + }, + "sdfRef": { + "$ref": "#/definitions/sdf-pointer" + }, Koster & Bormann Expires 3 December 2021 [Page 70] Internet-Draft OneDM SDF June 2021 + "description": { + "type": "string" + }, + "$comment": { + "type": "string" + }, + "minimum": { + "type": "number" + }, + "maximum": { + "type": "number" + }, + "enum": { + "type": "array", + "minItems": 1 + }, + "format": { + "type": "string" + }, + "minLength": { + "type": "number" + }, + "maxLength": { + "type": "number" + } + }, + "additionalProperties": { + } + }, + { + "type": "object", + "properties": { + "sdfChoice": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/dataqualities" + } + }, + "sdfRef": { + "$ref": "#/definitions/sdf-pointer" + }, + "description": { + "type": "string" + }, + "$comment": { + "type": "string" + }, + "minimum": { Koster & Bormann Expires 3 December 2021 [Page 71] Internet-Draft OneDM SDF June 2021 + "type": "number" + }, + "maximum": { + "type": "number" + }, + "enum": { + "type": "array", + "minItems": 1 + }, + "format": { + "type": "string" + }, + "minLength": { + "type": "number" + }, + "maxLength": { + "type": "number" + } + }, + "additionalProperties": { + } + }, + { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "sdfRef": { + "$ref": "#/definitions/sdf-pointer" + }, + "description": { + "type": "string" + }, + "$comment": { + "type": "string" + }, + "minimum": { + "type": "number" + }, + "maximum": { + "type": "number" + }, + "enum": { + "type": "array", + "minItems": 1 + }, + "format": { Koster & Bormann Expires 3 December 2021 [Page 72] Internet-Draft OneDM SDF June 2021 + "type": "string" + }, + "minLength": { + "type": "number" + }, + "maxLength": { + "type": "number" + } + }, + "additionalProperties": { + } + } + ] + }, + "description": { + "type": "string" + }, + "label": { + "type": "string" + }, + "$comment": { + "type": "string" + }, + "sdfRef": { + "$ref": "#/definitions/sdf-pointer" + }, + "sdfRequired": { + "$ref": "#/definitions/pointer-list" + }, + "units": { + "type": "string" + }, + "unit": { + "type": "string" + }, + "scaleMinimum": { + "type": "number" + }, + "scaleMaximum": { + "type": "number" + }, + "observable": { + "type": "boolean" + }, + "readable": { + "type": "boolean" + }, + "writable": { Koster & Bormann Expires 3 December 2021 [Page 73] Internet-Draft OneDM SDF June 2021 + "type": "boolean" + }, + "nullable": { + "type": "boolean" + }, + "subtype": { + "anyOf": [ + { + "type": "string", + "const": "byte-string" + }, + { + "type": "string", + "const": "unix-time" + }, + { + "type": "string" + } + ] + }, + "sdfType": { + "anyOf": [ + { + "type": "string", + "const": "byte-string" + }, + { + "type": "string", + "const": "unix-time" + }, + { + "type": "string" + } + ] + }, + "contentFormat": { + "type": "string" + } + }, + "additionalProperties": { + } } ] }, "allowed-types": { "anyOf": [ { "type": "number" Koster & Bormann Expires 3 December 2021 [Page 74] Internet-Draft OneDM SDF June 2021 }, { "type": "string" }, { "type": "boolean" }, { "type": "null" }, { "type": "array", "items": { "type": "number" } }, { "type": "array", "items": { "type": "string" } }, { "type": "array", "items": { "type": "boolean" } }, { "type": "object", "additionalProperties": { } + }, + { } ] }, "actionqualities": { "type": "object", "properties": { "description": { "type": "string" }, "label": { "type": "string" }, "$comment": { "type": "string" Koster & Bormann Expires 3 December 2021 [Page 75] Internet-Draft OneDM SDF June 2021 }, "sdfRef": { "$ref": "#/definitions/sdf-pointer" }, "sdfRequired": { "$ref": "#/definitions/pointer-list" }, "sdfInputData": { "$ref": "#/definitions/parameter-list" }, + "sdfRequiredInputData": { + "$ref": "#/definitions/pointer-list" + }, "sdfOutputData": { "$ref": "#/definitions/parameter-list" }, "sdfData": { "type": "object", "additionalProperties": { "$ref": "#/definitions/dataqualities" } } }, - "additionalProperties": false + "additionalProperties": { + } }, "parameter-list": { - "$ref": "#/definitions/dataqualities" + "anyOf": [ + { + "$ref": "#/definitions/pointer-list" + }, + { + "$ref": "#/definitions/dataqualities" + } + ] }, "eventqualities": { "type": "object", "properties": { "description": { "type": "string" }, "label": { "type": "string" }, "$comment": { Koster & Bormann Expires 3 December 2021 [Page 76] Internet-Draft OneDM SDF June 2021 "type": "string" }, "sdfRef": { "$ref": "#/definitions/sdf-pointer" }, "sdfRequired": { "$ref": "#/definitions/pointer-list" }, "sdfOutputData": { "$ref": "#/definitions/parameter-list" }, "sdfData": { "type": "object", "additionalProperties": { "$ref": "#/definitions/dataqualities" } } }, - "additionalProperties": false + "additionalProperties": { + } }, "productqualities": { "$ref": "#/definitions/thingqualities" } } } Acknowledgements This draft is based on "sdf.md" and "sdf-schema.json" in the old one- data-model "language" repository, as well as Ari Keränen's "alt- schema" from the Ericsson Research "ipso-odm" repository (which is now under subdirectory "sdflint" in the one-data model "tools" repository). Contributors Ari Keränen Ericsson FI-02420 Jorvas Finland Email: ari.keranen@ericsson.com Koster & Bormann Expires 3 December 2021 [Page 77] Internet-Draft OneDM SDF June 2021 Wouter van der Beek Cascoda Ltd. Threefield House Threefield Lane Southampton United Kingdom Email: w.vanderbeek@cascoda.com Authors' Addresses Michael Koster (editor) Dogtiger Labs 524 H Street Antioch, CA, 94509 United States of America Phone: +1-707-502-5136 Email: michaeljohnkoster@gmail.com Carsten Bormann (editor) Universität Bremen TZI Postfach 330440 D-28359 Bremen Germany Phone: +49-421-218-63921 Email: cabo@tzi.org Koster & Bormann Expires 3 December 2021 [Page 78]