| rfc9880v1.txt | rfc9880.txt | |||
|---|---|---|---|---|
| skipping to change at line 129 ¶ | skipping to change at line 129 ¶ | |||
| Appendix C. Data Qualities Inspired by json-schema.org | Appendix C. Data Qualities Inspired by json-schema.org | |||
| C.1. type "number", type "integer" | C.1. type "number", type "integer" | |||
| C.2. type "string" | C.2. type "string" | |||
| C.3. type "boolean" | C.3. type "boolean" | |||
| C.4. type "array" | C.4. type "array" | |||
| C.5. type "object" | C.5. type "object" | |||
| C.6. Implementation Notes | C.6. Implementation Notes | |||
| Appendix D. Composition Examples | Appendix D. Composition Examples | |||
| D.1. Outlet Strip Example | D.1. Outlet Strip Example | |||
| D.2. Refrigerator-Freezer Example | D.2. Refrigerator-Freezer Example | |||
| Appendix E. Some Changes From Earlier Drafts | Appendix E. Some Changes from Earlier Draft Versions of this | |||
| Specification | ||||
| List of Figures | List of Figures | |||
| List of Tables | List of Tables | |||
| Acknowledgements | Acknowledgements | |||
| Contributors | Contributors | |||
| Authors' Addresses | Authors' Addresses | |||
| 1. Introduction | 1. Introduction | |||
| The Semantic Definition Format (SDF) is concerned with Things, namely | The Semantic Definition Format (SDF) is concerned with Things, namely | |||
| physical objects that are available for interaction over a network. | physical objects that are available for interaction over a network. | |||
| skipping to change at line 273 ¶ | skipping to change at line 274 ¶ | |||
| interaction opportunities offered by one or more kinds of Things, | interaction opportunities offered by one or more kinds of Things, | |||
| represented by Groupings (sdfObjects and sdfThings). An SDF Model | represented by Groupings (sdfObjects and sdfThings). An SDF Model | |||
| can be fully contained in a single SDF Document, or it can be | can be fully contained in a single SDF Document, or it can be | |||
| built from an SDF Document that references definitions and | built from an SDF Document that references definitions and | |||
| declarations from additional SDF documents. | declarations from additional SDF documents. | |||
| Block: One or more entries in a JSON map that is part of an SDF | Block: One or more entries in a JSON map that is part of an SDF | |||
| specification. These entries can be described as a Block to | specification. These entries can be described as a Block to | |||
| emphasize that they serve a specific function together. | emphasize that they serve a specific function together. | |||
| Group: An entry in the main JSON map that represents the SDF | Group: An entry in the top-level JSON map that represents the SDF | |||
| document, and in certain nested definitions. A group has a Class | document. Groups also can be used in certain nested definitions. | |||
| Name Keyword as its key and a map of named definition entries | A group has a Class Name Keyword as its key and a map of named | |||
| (Definition Group) as a value. | definition entries (Definition Group) as a value. | |||
| Class Name Keyword: One of sdfThing, sdfObject, sdfProperty, | Class Name Keyword: One of sdfThing, sdfObject, sdfProperty, | |||
| sdfAction, sdfEvent, or sdfData. The Classes for these type | sdfAction, sdfEvent, or sdfData. The Classes for these type | |||
| keywords are capitalized and prefixed with sdf. | keywords are capitalized and prefixed with sdf. | |||
| Class: Abstract term for the information that is contained in groups | Class: Abstract term for the information that is contained in groups | |||
| identified by a Class Name Keyword. | identified by a Class Name Keyword. | |||
| Quality: A metadata item in a definition or declaration that says | Quality: A metadata item in a definition or declaration that says | |||
| something about that definition or declaration. A quality is | something about that definition or declaration. A quality is | |||
| skipping to change at line 550 ¶ | skipping to change at line 551 ¶ | |||
| interactions modeled by them. It also provides qualities that | interactions modeled by them. It also provides qualities that | |||
| associate semantics to this data, such as engineering units and unit | associate semantics to this data, such as engineering units and unit | |||
| scaling information. | scaling information. | |||
| For the data definition within sdfProperty or sdfData, SDF borrows | For the data definition within sdfProperty or sdfData, SDF borrows | |||
| some vocabulary proposed for drafts 4 [JSO4] [JSO4V] and 7 [JSO7] | some vocabulary proposed for drafts 4 [JSO4] [JSO4V] and 7 [JSO7] | |||
| [JSO7V] of the json-schema.org "JSON Schema" format (collectively | [JSO7V] of the json-schema.org "JSON Schema" format (collectively | |||
| called JSO here), enhanced by qualities that are specific to SDF. | called JSO here), enhanced by qualities that are specific to SDF. | |||
| Details about the JSO-inspired vocabulary are in Appendix C. For | Details about the JSO-inspired vocabulary are in Appendix C. For | |||
| base SDF, data are constrained to be of simple types (number, string, | base SDF, data are constrained to be of simple types (number, string, | |||
| Boolean), JSON maps composed of named data, and arrays of these | boolean), JSON maps composed of named data, and arrays of these | |||
| types. Syntax extension points are provided that can be used to | types. Syntax extension points are provided that can be used to | |||
| provide richer types in a future extension of this specification | provide richer types in a future extension of this specification | |||
| (possibly more of which can be borrowed from json-schema.org). | (possibly more of which can be borrowed from json-schema.org). | |||
| Note that sdfProperty definitions (and sdfData definitions in | Note that sdfProperty definitions (and sdfData definitions in | |||
| general) are not intended to constrain the formats of data used for | general) are not intended to constrain the formats of data used for | |||
| communication over network interfaces. Where needed, data | communication over network interfaces. Where needed, data | |||
| definitions for payloads of protocol messages are expected to be part | definitions for payloads of protocol messages are expected to be part | |||
| of the protocol binding. | of the protocol binding. | |||
| skipping to change at line 703 ¶ | skipping to change at line 704 ¶ | |||
| defined using the CDDL generic rule reference named<membervalues>, | defined using the CDDL generic rule reference named<membervalues>, | |||
| where membervalues is in turn the structure of the member values of | where membervalues is in turn the structure of the member values of | |||
| the JSON map, i.e., the value of the member named by the Given Name. | the JSON map, i.e., the value of the member named by the Given Name. | |||
| As quality-named maps and given-named maps roughly alternate in a | As quality-named maps and given-named maps roughly alternate in a | |||
| path down the tree, membervalues is usually a map built from Quality | path down the tree, membervalues is usually a map built from Quality | |||
| Names as keys. | Names as keys. | |||
| 2.3.2. Hierarchical Names | 2.3.2. Hierarchical Names | |||
| From the outside of a specification, Given Names are usually used as | From the outside of a specification, Given Names are usually used as | |||
| part of a hierarchical name that looks like a JSON pointer [RFC6901], | part of a hierarchical name that looks like a JSON Pointer [RFC6901]. | |||
| itself generally rooted in (used as the fragment identifier in) an | These hierarchical names are generally rooted in (used as the | |||
| outer namespace that looks like an https:// URL (see Section 4). | fragment identifier in) an outer namespace that looks like an | |||
| https:// URL (see Section 4). | ||||
| As Quality Names and Given Names roughly alternate in a path into the | As Quality Names and Given Names roughly alternate in a path into the | |||
| model, the JSON pointer part of the hierarchical name also alternates | model, the JSON Pointer part of the hierarchical name also alternates | |||
| between Quality Names and Given Names. | between Quality Names and Given Names. | |||
| Note that the actual Given Names may need to be encoded when | Note that the actual Given Names may need to be encoded when | |||
| specified via the JSON pointer fragment identifier syntax. There are | specified via the JSON Pointer fragment identifier syntax. There are | |||
| two layers of such encoding: tilde encoding of ~ and / as per | two layers of such encoding: tilde encoding of ~ and / as per | |||
| Section 3 of [RFC6901], as well as percent encoding of the tilde- | Section 3 of [RFC6901], as well as percent encoding of the tilde- | |||
| encoded name into a valid URI fragment as per Section 6 of [RFC6901]. | encoded name into a valid URI fragment as per Section 6 of [RFC6901]. | |||
| For example, when a model is using the Given Name | For example, when a model is using the Given Name | |||
| warning/danger alarm | warning/danger alarm | |||
| (with an embedded slash and a space) for an sdfObject, that sdfObject | (with an embedded slash and a space) for an sdfObject, that sdfObject | |||
| may need to be referenced as | may need to be referenced as | |||
| skipping to change at line 808 ¶ | skipping to change at line 810 ¶ | |||
| The information block contains generic metadata for the SDF document | The information block contains generic metadata for the SDF document | |||
| itself and all included definitions. To enable tool integration, the | itself and all included definitions. To enable tool integration, the | |||
| information block is optional in the grammar of SDF; most processes | information block is optional in the grammar of SDF; most processes | |||
| for working with SDF documents will have policies that only SDF | for working with SDF documents will have policies that only SDF | |||
| documents with an info block can be processed. It is therefore | documents with an info block can be processed. It is therefore | |||
| RECOMMENDED that SDF validator tools emit a warning when no | RECOMMENDED that SDF validator tools emit a warning when no | |||
| information block is found. | information block is found. | |||
| The keyword (map key) that defines an information block is "info". | The keyword (map key) that defines an information block is "info". | |||
| Its value is a JSON map in turn, with a set of entries that represent | The keyword's value is a nested JSON map with a set of entries that | |||
| qualities that apply to the included definition. | represent qualities that apply to the included definitions. | |||
| Qualities of this map are shown in Table 1. None of these qualities | Qualities of this map are shown in Table 1. None of these qualities | |||
| are required or have default values that are assumed if the quality | are required or have default values that are assumed if the quality | |||
| is absent. | is absent. | |||
| +=============+==========+=================================+ | +=============+==========+=================================+ | |||
| | Quality | Type | Description | | | Quality | Type | Description | | |||
| +=============+==========+=================================+ | +=============+==========+=================================+ | |||
| | title | string | A short summary to be displayed | | | title | string | A short summary to be displayed | | |||
| | | | in search results, etc. | | | | | in search results, etc. | | |||
| skipping to change at line 854 ¶ | skipping to change at line 856 ¶ | |||
| The version quality is used to indicate version information about the | The version quality is used to indicate version information about the | |||
| set of definitions in the SDF document. The version is RECOMMENDED | set of definitions in the SDF document. The version is RECOMMENDED | |||
| to be lexicographically increasing over the life of a model; a newer | to be lexicographically increasing over the life of a model; a newer | |||
| model always has a version string that string-compares higher than | model always has a version string that string-compares higher than | |||
| all previous versions. This is easily achieved by following the | all previous versions. This is easily achieved by following the | |||
| convention to start the version with a date-time as defined in | convention to start the version with a date-time as defined in | |||
| [RFC3339] or, if new versions are generated less frequently than once | [RFC3339] or, if new versions are generated less frequently than once | |||
| a day, just the full-date (i.e., YYYY-MM-DD); in many cases, that | a day, just the full-date (i.e., YYYY-MM-DD); in many cases, that | |||
| will be all that is needed (see Figure 1 for an example). This | will be all that is needed (see Figure 1 for an example). This | |||
| specification does not give a strict definition for the format of the | specification does not give a strict definition for the format of the | |||
| version string but each using system or organization should define | version string, but each system or organization using the version | |||
| internal structure and semantics to the level needed for their use. | string should define internal structure and semantics to the level | |||
| If no further details are provided, a date-time or full-date in this | needed for their use. If no further details are provided, a date- | |||
| field can be assumed to indicate the latest update time of the | time or full-date in this field can be assumed to indicate the latest | |||
| definitions in the SDF document. | update time of the definitions in the SDF document. | |||
| The modified quality can be used with a value using date-time as | The modified quality can be used with a value using date-time as | |||
| defined in [RFC3339] (with Z for time-zone) or full-date format to | defined in [RFC3339] (with Z for time-zone) or full-date format to | |||
| express time of the latest revision of the definitions. | express time of the latest revision of the definitions. | |||
| The license string is preferably either a URI that points to a web | The license string is preferably either a URI that points to a web | |||
| page with an unambiguous definition of the license or an [SPDX] | page with an unambiguous definition of the license or an [SPDX] | |||
| license identifier. (As an example, for models to be handled by the | license identifier. (As an example, for models to be handled by the | |||
| One Data Model liaison group, this license identifier will typically | One Data Model liaison group, this license identifier will typically | |||
| be "BSD-3-Clause".) | be "BSD-3-Clause".) | |||
| skipping to change at line 1026 ¶ | skipping to change at line 1028 ¶ | |||
| The absolute-URI of a global name should be a URI as per Section 3 of | The absolute-URI of a global name should be a URI as per Section 3 of | |||
| RFC 3986 [STD66] with a scheme of "https" and a path (hier-part in | RFC 3986 [STD66] with a scheme of "https" and a path (hier-part in | |||
| [STD66]). For base SDF, the query part should not be used (it might | [STD66]). For base SDF, the query part should not be used (it might | |||
| be used in extensions). | be used in extensions). | |||
| The fragment identifier is constructed as per Section 6 of [RFC6901]. | The fragment identifier is constructed as per Section 6 of [RFC6901]. | |||
| 4.2. Contributing Global Names | 4.2. Contributing Global Names | |||
| The fragment identifier part of a global name defined in an SDF | The fragment identifier part of a global name defined in an SDF | |||
| document is constructed from a JSON pointer that selects the element | document is constructed from a JSON Pointer that selects the element | |||
| defined for this name in the SDF document. The absolute-URI part is | defined for this name in the SDF document. The absolute-URI part is | |||
| a copy of the default namespace. | a copy of the default namespace. | |||
| As a result, the default namespace is always the target namespace for | As a result, the default namespace is always the target namespace for | |||
| a name for which a definition is contributed. In order to emphasize | a name for which a definition is contributed. In order to emphasize | |||
| that name definitions are contributed to the default namespace, this | that name definitions are contributed to the default namespace, this | |||
| namespace is also termed the "target namespace" of the SDF document. | namespace is also termed the "target namespace" of the SDF document. | |||
| For instance, in Figure 1, definitions for the following global names | For instance, in Figure 1, definitions for the following global names | |||
| are contributed: | are contributed: | |||
| skipping to change at line 1062 ¶ | skipping to change at line 1064 ¶ | |||
| A name reference takes the form of the production curie in Section 3 | A name reference takes the form of the production curie in Section 3 | |||
| of [W3C.NOTE-curie-20101216], but limiting the IRIs involved in that | of [W3C.NOTE-curie-20101216], but limiting the IRIs involved in that | |||
| grammar to URIs as per [STD66] and the prefixes to ASCII characters | grammar to URIs as per [STD66] and the prefixes to ASCII characters | |||
| [STD80]. (Note that this definition does not make use of the | [STD80]. (Note that this definition does not make use of the | |||
| production safe-curie in [W3C.NOTE-curie-20101216].) | production safe-curie in [W3C.NOTE-curie-20101216].) | |||
| A name that is contributed by the current SDF document can be | A name that is contributed by the current SDF document can be | |||
| referenced by a Same-Document Reference as per Section 4.4 of RFC | referenced by a Same-Document Reference as per Section 4.4 of RFC | |||
| 3986 [STD66]. As there is little point in referencing the entire SDF | 3986 [STD66]. As there is little point in referencing the entire SDF | |||
| document, this will be a # followed by a JSON pointer. This is the | document, this will be a # followed by a JSON Pointer. This is the | |||
| only kind of name reference to itself that is possible in an SDF | only kind of name reference to itself that is possible in an SDF | |||
| document that does not set a default namespace. | document that does not set a default namespace. | |||
| Name references that point outside the current SDF document need to | Name references that point outside the current SDF document need to | |||
| contain curie prefixes. These then reference namespace declarations | contain CURIE prefixes. These then reference namespace declarations | |||
| in the namespaces block. | in the namespaces block. | |||
| For example, if a namespace prefix is defined: | For example, if a namespace prefix is defined: | |||
| "namespace": { | "namespace": { | |||
| "foo": "https://example.com/" | "foo": "https://example.com/" | |||
| } | } | |||
| then this reference to that namespace: | then this reference to that namespace: | |||
| "sdfRef": "foo:#/sdfData/temperatureData" | "sdfRef": "foo:#/sdfData/temperatureData" | |||
| references the global name: | references the global name: | |||
| "https://example.com/#/sdfData/temperatureData" | "https://example.com/#/sdfData/temperatureData" | |||
| Note that there is no way to provide a URI scheme name in a curie, so | Note that there is no way to provide a URI scheme name in a CURIE, so | |||
| all references to outside of the document need to go through the | all references to outside of the document need to go through the | |||
| namespace map. | namespace map. | |||
| Name references occur only in specific elements of the syntax of SDF: | Name references occur only in specific elements of the syntax of SDF: | |||
| * copying elements via sdfRef values | * copying elements via sdfRef values | |||
| * pointing to elements via sdfRequired value elements | * pointing to elements via sdfRequired value elements | |||
| 4.4. sdfRef | 4.4. sdfRef | |||
| skipping to change at line 1131 ¶ | skipping to change at line 1133 ¶ | |||
| well. | well. | |||
| More formally, for a JSON map that contains an sdfRef member, the | More formally, for a JSON map that contains an sdfRef member, the | |||
| semantics are defined to be as if the following steps were performed: | semantics are defined to be as if the following steps were performed: | |||
| 1. The JSON map that contains the sdfRef member is copied into a | 1. The JSON map that contains the sdfRef member is copied into a | |||
| variable named "patch". | variable named "patch". | |||
| 2. The sdfRef member of the copy in "patch" is removed. | 2. The sdfRef member of the copy in "patch" is removed. | |||
| 3. The JSON pointer that is the value of the sdfRef member is | 3. The JSON Pointer that is the value of the sdfRef member is | |||
| dereferenced and the result is copied into a variable named | dereferenced and the result is copied into a variable named | |||
| "original". | "original". | |||
| 4. The JSON Merge Patch algorithm [RFC7396] is applied to patch the | 4. The JSON Merge Patch algorithm [RFC7396] is applied to patch the | |||
| contents of "original" with the contents of "patch". | contents of "original" with the contents of "patch". | |||
| 5. The result of the Merge Patch is used in place of the value of | 5. The result of the Merge Patch is used in place of the value of | |||
| the original JSON map. | the original JSON map. | |||
| Note that the formal syntaxes given in Appendices A and B generally | Note that the formal syntaxes given in Appendices A and B generally | |||
| skipping to change at line 1275 ¶ | skipping to change at line 1277 ¶ | |||
| declarations, one per affordance type. | declarations, one per affordance type. | |||
| - The same applies to groupings made mandatory within groupings | - The same applies to groupings made mandatory within groupings | |||
| containing them. | containing them. | |||
| * The Boolean value true. The affordance or grouping itself that | * The Boolean value true. The affordance or grouping itself that | |||
| carries the sdfRequired keyword is declared to be mandatory to be | carries the sdfRequired keyword is declared to be mandatory to be | |||
| represented. | represented. | |||
| Note that referenceable-names are not subject to the encoding JSON | Note that referenceable-names are not subject to the encoding JSON | |||
| pointers require as discussed in Section 2.3.2. To ensure that | Pointers require as discussed in Section 2.3.2. To ensure that | |||
| referenceable-names are reliably distinguished from JSON pointers, | referenceable-names are reliably distinguished from JSON Pointers, | |||
| they are defined such that they cannot contain ":" or "#" characters | they are defined such that they cannot contain ":" or "#" characters | |||
| (see rule referenceable-name in Appendix A). (If these characters | (see rule referenceable-name in Appendix A). (If these characters | |||
| are indeed contained in a Given Name, a JSON pointer needs to be | are indeed contained in a Given Name, a JSON pointer needs to be | |||
| formed instead in order to reference it in "sdfRequired", potentially | formed instead in order to reference it in "sdfRequired", potentially | |||
| requiring further path elements as well as JSON pointer encoding. | requiring further path elements as well as JSON Pointer encoding. | |||
| The need for this is best avoided by choosing Given Names without | The need for this is best avoided by choosing Given Names without | |||
| these characters.) | these characters.) | |||
| The example in Figure 4 shows two required elements in the sdfObject | The example in Figure 4 shows two required elements in the sdfObject | |||
| definition for "temperatureWithAlarm", the sdfProperty | definition for "temperatureWithAlarm", the sdfProperty | |||
| "currentTemperature", and the sdfEvent "overTemperatureEvent". The | "currentTemperature", and the sdfEvent "overTemperatureEvent". The | |||
| example also shows the use of JSON pointer with "sdfRef" to use a | example also shows the use of JSON Pointers with "sdfRef" to use a | |||
| pre-existing definition for the sdfProperty "currentTemperature" and | pre-existing definition for the sdfProperty "currentTemperature" and | |||
| for the sdfOutputData produced by the sdfEvent | for the sdfOutputData produced by the sdfEvent | |||
| "overTemperatureEvent". | "overTemperatureEvent". | |||
| "sdfObject": { | "sdfObject": { | |||
| "temperatureWithAlarm": { | "temperatureWithAlarm": { | |||
| "sdfRequired": [ | "sdfRequired": [ | |||
| "#/sdfObject/temperatureWithAlarm/sdfProperty/currentTemperature", | "#/sdfObject/temperatureWithAlarm/sdfProperty/currentTemperature", | |||
| "#/sdfObject/temperatureWithAlarm/sdfEvent/overTemperatureEvent" | "#/sdfObject/temperatureWithAlarm/sdfEvent/overTemperatureEvent" | |||
| ], | ], | |||
| skipping to change at line 1342 ¶ | skipping to change at line 1344 ¶ | |||
| } | } | |||
| 4.6. Common Qualities | 4.6. Common Qualities | |||
| Definitions in SDF share a number of qualities that provide metadata | Definitions in SDF share a number of qualities that provide metadata | |||
| for them. These are listed in Table 3. None of these qualities are | for them. These are listed in Table 3. None of these qualities are | |||
| required or have default values that are assumed if the quality is | required or have default values that are assumed if the quality is | |||
| absent. If a short textual description is required for an | absent. If a short textual description is required for an | |||
| application and no label is given in the SDF model, applications | application and no label is given in the SDF model, applications | |||
| could use the last part (the last reference-token, Section 3 of | could use the last part (the last reference-token, Section 3 of | |||
| [RFC6901]) of the JSON pointer to the definition in its place. | [RFC6901]) of the JSON Pointer to the definition in its place. | |||
| +=============+==============+=============================+ | +=============+==============+=============================+ | |||
| | Quality | Type | Description | | | Quality | Type | Description | | |||
| +=============+==============+=============================+ | +=============+==============+=============================+ | |||
| | description | string | long text (no constraints) | | | description | string | long text (no constraints) | | |||
| +-------------+--------------+-----------------------------+ | +-------------+--------------+-----------------------------+ | |||
| | label | string | short text (no constraints) | | | label | string | short text (no constraints) | | |||
| +-------------+--------------+-----------------------------+ | +-------------+--------------+-----------------------------+ | |||
| | $comment | string | source code comments only, | | | $comment | string | source code comments only, | | |||
| | | | no semantics | | | | | no semantics | | |||
| skipping to change at line 1410 ¶ | skipping to change at line 1412 ¶ | |||
| | | (Section | | | | | | (Section | | | | |||
| | | 4.7.2) | | | | | | 4.7.2) | | | | |||
| +---------------+----------------+--------------------+---------+ | +---------------+----------------+--------------------+---------+ | |||
| | enum | array of | abbreviation for | N/A | | | enum | array of | abbreviation for | N/A | | |||
| | | strings | string-valued | | | | | strings | string-valued | | | |||
| | | | named alternatives | | | | | | named alternatives | | | |||
| +---------------+----------------+--------------------+---------+ | +---------------+----------------+--------------------+---------+ | |||
| Table 4: SDF-Defined Qualities of sdfData and sdfProperty | Table 4: SDF-Defined Qualities of sdfData and sdfProperty | |||
| 1. The unit name SHOULD be as per the SenML Units registry or the | 1. The unit name SHOULD be as per the "SenML Units" registry or the | |||
| Secondary Units registry in [IANA.senml] as specified by Sections | "Secondary Units" registry in [IANA.senml] as specified by | |||
| 4.5.2 and 12.1 of [RFC8428] and Section 3 of [RFC8798], | Sections 4.5.1 and 12.1 of [RFC8428] and Section 3 of [RFC8798], | |||
| respectively. | respectively. | |||
| Exceptionally, if a registration in these registries cannot be | Exceptionally, if a registration in these registries cannot be | |||
| obtained or would be inappropriate, the unit name can also be a | obtained or would be inappropriate, the unit name can also be a | |||
| URI that is pointing to a definition of the unit. Note that SDF | URI that is pointing to a definition of the unit. Note that SDF | |||
| processors are not expected to, and normally SHOULD NOT, | processors are not expected to, and normally SHOULD NOT, | |||
| dereference these URIs; the definition pointed to may be useful | dereference these URIs; the definition pointed to may be useful | |||
| to humans, though. (See [DEREF-ID-PATTERN] for a more extensive | to humans, though. (See [DEREF-ID-PATTERN] for a more extensive | |||
| discussion of dereferenceable identifiers). | discussion of dereferenceable identifiers). | |||
| skipping to change at line 1986 ¶ | skipping to change at line 1988 ¶ | |||
| Repository: Combining the symbol values from the "SenML Units" | Repository: Combining the symbol values from the "SenML Units" | |||
| registry and the "Secondary Units" registry in the "Sensor | registry and the "Secondary Units" registry in the "Sensor | |||
| Measurement Lists (SenML)" registry group [IANA.senml] as | Measurement Lists (SenML)" registry group [IANA.senml] as | |||
| specified by Sections 4.5.2 and 12.1 of [RFC8428] and Section 3 of | specified by Sections 4.5.2 and 12.1 of [RFC8428] and Section 3 of | |||
| [RFC8798], respectively (which, by the registration policy, are | [RFC8798], respectively (which, by the registration policy, are | |||
| guaranteed to be non-overlapping). | guaranteed to be non-overlapping). | |||
| Index value: Percent-encoding (Section 2.1 of RFC 3986 [STD66]) is | Index value: Percent-encoding (Section 2.1 of RFC 3986 [STD66]) is | |||
| required of any characters in unit names except for the set | required of any characters in unit names except for the set | |||
| "unreserved" (Section 2.3 of RFC 3986 [STD66]), the set "sub- | "unreserved" (Section 2.3 of RFC 3986 [STD66]), the set "sub- | |||
| delims" (Section 2.3 of RFC 3986 [STD66]), and ":" or "@" (i.e., | delims" (Section 2.2 of RFC 3986 [STD66]), and ":" or "@" (i.e., | |||
| the result must match the ABNF rule "pchar" in Section 3.3 of RFC | the result must match the ABNF rule "pchar" in Section 3.3 of RFC | |||
| 3986 [STD66]). | 3986 [STD66]). | |||
| 7.4. SenML Registry Group | 7.4. SenML Registry Group | |||
| IANA has added the following note to the "Sensor Measurement Lists | IANA has added the following note to the "Sensor Measurement Lists | |||
| (SenML)" registry group [IANA.senml]: | (SenML)" registry group [IANA.senml]: | |||
| | In SDF [RFC9880], a URI unit name is distinguished from a | | In SDF [RFC9880], a URI unit name is distinguished from a | |||
| | registered unit name by the presence of a colon; any registered | | registered unit name by the presence of a colon; any registered | |||
| skipping to change at line 2290 ¶ | skipping to change at line 2292 ¶ | |||
| an attack) cause. More generally speaking, implementations should | an attack) cause. More generally speaking, implementations should | |||
| strive to be robust against expected and unexpected limitations of | strive to be robust against expected and unexpected limitations of | |||
| the model-based input validation mechanisms and their | the model-based input validation mechanisms and their | |||
| implementations. | implementations. | |||
| Similarly, implementations that rely on model-based augmentation may | Similarly, implementations that rely on model-based augmentation may | |||
| generate false data from their inputs; this is an integrity violation | generate false data from their inputs; this is an integrity violation | |||
| in any case, but also can possibly be exploited for further attacks. | in any case, but also can possibly be exploited for further attacks. | |||
| In applications that dynamically acquire models and obtain modules | In applications that dynamically acquire models and obtain modules | |||
| from module references in these, the security considerations of | from module references in these models, the security considerations | |||
| dereferenceable identifiers apply (see [DEREF-ID-PATTERN] for a more | of dereferenceable identifiers apply (see [DEREF-ID-PATTERN] for a | |||
| extensive discussion of dereferenceable identifiers). | more extensive discussion of dereferenceable identifiers). | |||
| There may be confidentiality requirements on SDF models, both on | There may be confidentiality requirements on SDF models, both on | |||
| their content and on the fact that a specific model is used in a | their content and on the fact that a specific model is used in a | |||
| particular Thing or environment. The present specification does not | particular Thing or environment. The present specification does not | |||
| discuss model discovery or define an access control model for SDF | discuss model discovery or define an access control model for SDF | |||
| models, nor does it define a way to obtain selective disclosure where | models, nor does it define a way to obtain selective disclosure where | |||
| that may be required. It is likely that these definitions require | that may be required. It is likely that these definitions require | |||
| additional context from underlying ecosystems and the characteristics | additional context from underlying ecosystems and the characteristics | |||
| of the protocols employed there; therefore, this is left as future | of the protocols employed there; therefore, this is left as future | |||
| work (e.g., for documents such as [SDF-MAPPING]). | work (e.g., for documents such as [SDF-MAPPING]). | |||
| skipping to change at line 2465 ¶ | skipping to change at line 2467 ¶ | |||
| "Camel Case", December 2014, | "Camel Case", December 2014, | |||
| <http://wiki.c2.com/?CamelCase>. | <http://wiki.c2.com/?CamelCase>. | |||
| [DEREF-ID-PATTERN] | [DEREF-ID-PATTERN] | |||
| Bormann, C. and C. Amsüss, "The "dereferenceable | Bormann, C. and C. Amsüss, "The "dereferenceable | |||
| identifier" pattern", Work in Progress, Internet-Draft, | identifier" pattern", Work in Progress, Internet-Draft, | |||
| draft-bormann-t2trg-deref-id-06, 30 August 2025, | draft-bormann-t2trg-deref-id-06, 30 August 2025, | |||
| <https://datatracker.ietf.org/doc/html/draft-bormann- | <https://datatracker.ietf.org/doc/html/draft-bormann- | |||
| t2trg-deref-id-06>. | t2trg-deref-id-06>. | |||
| [ECMA-262] Ecma International, "ECMAScript 2024 Language | [ECMA-262] Ecma International, "ECMAScript 2025 Language | |||
| Specification", 15th Edition, ECMA Standard ECMA-262, June | Specification", 16th Edition, ECMA Standard ECMA-262, June | |||
| 2024, <https://www.ecma-international.org/wp- | 2025, <https://ecma-international.org/wp-content/uploads/ | |||
| content/uploads/ECMA-262.pdf>. | ECMA-262_16th_edition_june_2025.pdf>. | |||
| [JSO4] Galiegue, F., Ed., Zyp, K., Ed., and G. Court, "JSON | [JSO4] Galiegue, F., Ed., Zyp, K., Ed., and G. Court, "JSON | |||
| Schema: core definitions and terminology", Work in | Schema: core definitions and terminology", Work in | |||
| Progress, Internet-Draft, draft-zyp-json-schema-04, 31 | Progress, Internet-Draft, draft-zyp-json-schema-04, 31 | |||
| January 2013, <https://datatracker.ietf.org/doc/html/ | January 2013, <https://datatracker.ietf.org/doc/html/ | |||
| draft-zyp-json-schema-04>. | draft-zyp-json-schema-04>. | |||
| [JSO4V] Zyp, K. and G. Court, "JSON Schema: interactive and non | [JSO4V] Zyp, K. and G. Court, "JSON Schema: interactive and non | |||
| interactive validation", Work in Progress, Internet-Draft, | interactive validation", Work in Progress, Internet-Draft, | |||
| draft-fge-json-schema-validation-00, 31 January 2013, | draft-fge-json-schema-validation-00, 31 January 2013, | |||
| skipping to change at line 2505 ¶ | skipping to change at line 2507 ¶ | |||
| [KebabCase] | [KebabCase] | |||
| "Kebab Case", August 2014, | "Kebab Case", August 2014, | |||
| <http://wiki.c2.com/?KebabCase>. | <http://wiki.c2.com/?KebabCase>. | |||
| [OCF] Open Connectivity Foundation, "OCF Resource Type | [OCF] Open Connectivity Foundation, "OCF Resource Type | |||
| Specification", Version 2.2.7, November 2023, | Specification", Version 2.2.7, November 2023, | |||
| <https://openconnectivity.org/specs/ | <https://openconnectivity.org/specs/ | |||
| OCF_Resource_Type_Specification.pdf>. | OCF_Resource_Type_Specification.pdf>. | |||
| [OMA] Open Mobile Alliance, "OMA LightweightM2M (LwM2M) Object | [OMA] Open Mobile Alliance, "LwM2M OBJECTS", | |||
| and Resource Registry", | <https://www.openmobilealliance.org/specifications/ | |||
| <http://www.openmobilealliance.org/wp/omna/lwm2m/ | registries/objects>. | |||
| lwm2mregistry.html>. | ||||
| [REST-IOT] Keränen, A., Kovatsch, M., and K. Hartke, "Guidance on | [REST-IOT] Keränen, A., Kovatsch, M., and K. Hartke, "Guidance on | |||
| RESTful Design for Internet of Things Systems", Work in | RESTful Design for Internet of Things Systems", Work in | |||
| Progress, Internet-Draft, draft-irtf-t2trg-rest-iot-17, 20 | Progress, Internet-Draft, draft-irtf-t2trg-rest-iot-17, 20 | |||
| October 2025, <https://datatracker.ietf.org/doc/html/ | October 2025, <https://datatracker.ietf.org/doc/html/ | |||
| draft-irtf-t2trg-rest-iot-17>. | draft-irtf-t2trg-rest-iot-17>. | |||
| [RFC8576] Garcia-Morchon, O., Kumar, S., and M. Sethi, "Internet of | [RFC8576] Garcia-Morchon, O., Kumar, S., and M. Sethi, "Internet of | |||
| Things (IoT) Security: State of the Art and Challenges", | Things (IoT) Security: State of the Art and Challenges", | |||
| RFC 8576, DOI 10.17487/RFC8576, April 2019, | RFC 8576, DOI 10.17487/RFC8576, April 2019, | |||
| skipping to change at line 2723 ¶ | skipping to change at line 2724 ¶ | |||
| / (sdftype-name .feature "sdftype-ext") ; EXTENSION-POINT | / (sdftype-name .feature "sdftype-ext") ; EXTENSION-POINT | |||
| ? contentFormat: text | ? contentFormat: text | |||
| * $$SDF-EXTENSION-DATA | * $$SDF-EXTENSION-DATA | |||
| EXTENSION-POINT<"data-ext"> | EXTENSION-POINT<"data-ext"> | |||
| } | } | |||
| propertyqualities = { | propertyqualities = { | |||
| ? observable: bool | ? observable: bool | |||
| ? readable: bool | ? readable: bool | |||
| ? writable: bool | ? writable: bool | |||
| * $$SDF-EXTENSION-PROPERTY | ||||
| ~dataqualities | ~dataqualities | |||
| } | } | |||
| allowed-types = number / text / bool / null | allowed-types = number / text / bool / null | |||
| / [* number] / [* text] / [* bool] | / [* number] / [* text] / [* bool] | |||
| / {* text => any} | / {* text => any} | |||
| / $SDF-EXTENSION-ALLOWED | / $SDF-EXTENSION-ALLOWED | |||
| / (any .feature "allowed-ext") ; EXTENSION-POINT | / (any .feature "allowed-ext") ; EXTENSION-POINT | |||
| compound-type = ( | compound-type = ( | |||
| skipping to change at line 2835 ¶ | skipping to change at line 2837 ¶ | |||
| Appendix A, but uses a version of the description techniques | Appendix A, but uses a version of the description techniques | |||
| advertised on json-schema.org [JSO7] [JSO7V]. | advertised on json-schema.org [JSO7] [JSO7V]. | |||
| The appendix shows both the validation and the framework syntax. | The appendix shows both the validation and the framework syntax. | |||
| Since most of the lines are the same between these two files, those | 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 | 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 | unified diff. Lines leading with a - are part of the validation | |||
| syntax and lines leading with a + are part of the framework syntax. | syntax and lines leading with a + are part of the framework syntax. | |||
| { | { | |||
| - "title": "sdf-validation.cddl -- Generated: 2024-02-29T07:42:35Z", | - "title": "sdf-validation.cddl -- Generated: 2025-10-13T08:43:18Z", | |||
| + "title": "sdf-framework.cddl -- Generated: 2024-02-29T07:42:52Z", | + "title": "sdf-framework.cddl -- Generated: 2025-10-13T08:43:29Z", | |||
| "$schema": "http://json-schema.org/draft-07/schema#", | "$schema": "http://json-schema.org/draft-07/schema#", | |||
| "$ref": "#/definitions/sdf-syntax", | "$ref": "#/definitions/sdf-syntax", | |||
| "definitions": { | "definitions": { | |||
| "sdf-syntax": { | "sdf-syntax": { | |||
| "type": "object", | "type": "object", | |||
| "properties": { | "properties": { | |||
| "info": { | "info": { | |||
| "$ref": "#/definitions/sdfinfo" | "$ref": "#/definitions/sdfinfo" | |||
| }, | }, | |||
| "namespace": { | "namespace": { | |||
| skipping to change at line 2881 ¶ | skipping to change at line 2883 ¶ | |||
| "$ref": "#/definitions/sdfAction-" | "$ref": "#/definitions/sdfAction-" | |||
| }, | }, | |||
| "sdfEvent": { | "sdfEvent": { | |||
| "$ref": "#/definitions/sdfEvent-" | "$ref": "#/definitions/sdfEvent-" | |||
| }, | }, | |||
| "sdfData": { | "sdfData": { | |||
| "$ref": "#/definitions/sdfData-sdfChoice-properties-" | "$ref": "#/definitions/sdfData-sdfChoice-properties-" | |||
| } | } | |||
| }, | }, | |||
| + "patternProperties": { | + "patternProperties": { | |||
| + "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": { | + "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {} | |||
| + } | ||||
| + }, | + }, | |||
| "additionalProperties": false | "additionalProperties": false | |||
| }, | }, | |||
| "sdfinfo": { | "sdfinfo": { | |||
| "type": "object", | "type": "object", | |||
| "properties": { | "properties": { | |||
| "title": { | "title": { | |||
| "type": "string" | "type": "string" | |||
| }, | }, | |||
| "description": { | "description": { | |||
| skipping to change at line 2917 ¶ | skipping to change at line 2918 ¶ | |||
| "features": { | "features": { | |||
| - "type": "array", | - "type": "array", | |||
| - "maxItems": 0 | - "maxItems": 0 | |||
| + "type": "array" | + "type": "array" | |||
| }, | }, | |||
| "$comment": { | "$comment": { | |||
| "type": "string" | "type": "string" | |||
| } | } | |||
| }, | }, | |||
| + "patternProperties": { | + "patternProperties": { | |||
| + "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": { | + "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {} | |||
| + } | ||||
| + }, | + }, | |||
| "additionalProperties": false | "additionalProperties": false | |||
| }, | }, | |||
| "modified-date-time": { | "modified-date-time": { | |||
| "type": "string" | "type": "string" | |||
| }, | }, | |||
| "thingqualities": { | "thingqualities": { | |||
| "type": "object", | "type": "object", | |||
| "properties": { | "properties": { | |||
| "description": { | "description": { | |||
| skipping to change at line 2975 ¶ | skipping to change at line 2975 ¶ | |||
| "$ref": "#/definitions/sdfData-sdfChoice-properties-" | "$ref": "#/definitions/sdfData-sdfChoice-properties-" | |||
| }, | }, | |||
| "minItems": { | "minItems": { | |||
| "$ref": "#/definitions/uint" | "$ref": "#/definitions/uint" | |||
| }, | }, | |||
| "maxItems": { | "maxItems": { | |||
| "$ref": "#/definitions/uint" | "$ref": "#/definitions/uint" | |||
| } | } | |||
| }, | }, | |||
| + "patternProperties": { | + "patternProperties": { | |||
| + "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": { | + "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {} | |||
| + } | ||||
| + }, | + }, | |||
| "additionalProperties": false | "additionalProperties": false | |||
| }, | }, | |||
| "sdf-pointer": { | "sdf-pointer": { | |||
| "anyOf": [ | "anyOf": [ | |||
| { | { | |||
| "$ref": "#/definitions/global" | "$ref": "#/definitions/global" | |||
| }, | }, | |||
| { | { | |||
| "$ref": "#/definitions/same-object" | "$ref": "#/definitions/same-object" | |||
| skipping to change at line 3052 ¶ | skipping to change at line 3051 ¶ | |||
| "$ref": "#/definitions/sdfData-sdfChoice-properties-" | "$ref": "#/definitions/sdfData-sdfChoice-properties-" | |||
| }, | }, | |||
| "minItems": { | "minItems": { | |||
| "$ref": "#/definitions/uint" | "$ref": "#/definitions/uint" | |||
| }, | }, | |||
| "maxItems": { | "maxItems": { | |||
| "$ref": "#/definitions/uint" | "$ref": "#/definitions/uint" | |||
| } | } | |||
| }, | }, | |||
| + "patternProperties": { | + "patternProperties": { | |||
| + "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": { | + "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {} | |||
| + } | ||||
| + }, | + }, | |||
| "additionalProperties": false | "additionalProperties": false | |||
| }, | }, | |||
| "propertyqualities": { | "propertyqualities": { | |||
| "anyOf": [ | "anyOf": [ | |||
| { | { | |||
| "type": "object", | "type": "object", | |||
| + "patternProperties": { | + "patternProperties": { | |||
| + "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": { | + "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {} | |||
| + } | ||||
| + }, | + }, | |||
| "properties": { | "properties": { | |||
| "type": { | "type": { | |||
| "$ref": "#/definitions/type-" | "$ref": "#/definitions/type-" | |||
| }, | }, | |||
| "sdfChoice": { | "sdfChoice": { | |||
| "$ref": "#/definitions/sdfData-sdfChoice-properties-" | "$ref": "#/definitions/sdfData-sdfChoice-properties-" | |||
| }, | }, | |||
| "observable": { | "observable": { | |||
| "type": "boolean" | "type": "boolean" | |||
| skipping to change at line 3159 ¶ | skipping to change at line 3156 ¶ | |||
| }, | }, | |||
| "contentFormat": { | "contentFormat": { | |||
| "type": "string" | "type": "string" | |||
| } | } | |||
| }, | }, | |||
| "additionalProperties": false | "additionalProperties": false | |||
| }, | }, | |||
| { | { | |||
| "type": "object", | "type": "object", | |||
| + "patternProperties": { | + "patternProperties": { | |||
| + "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": { | + "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {} | |||
| + } | ||||
| + }, | ||||
| + "properties": { | ||||
| + "type": { | ||||
| + "type": "string", | ||||
| + "const": "object" | ||||
| + }, | ||||
| + "required": { | ||||
| + "type": "array", | ||||
| + "items": { | ||||
| + "type": "string" | ||||
| + }, | ||||
| + "minItems": 1 | ||||
| + }, | ||||
| + "properties": { | ||||
| + "$ref": "#/definitions/sdfData-sdfChoice-properties-" | ||||
| + }, | ||||
| + "sdfChoice": { | ||||
| + "$ref": "#/definitions/sdfData-sdfChoice-properties-" | ||||
| + }, | ||||
| + "observable": { | ||||
| + "type": "boolean" | ||||
| + }, | ||||
| + "readable": { | ||||
| + "type": "boolean" | ||||
| + }, | ||||
| + "writable": { | ||||
| + "type": "boolean" | ||||
| + }, | ||||
| + "description": { | ||||
| + "type": "string" | ||||
| + }, | ||||
| + "label": { | ||||
| + "type": "string" | ||||
| + }, | ||||
| + "$comment": { | ||||
| + "type": "string" | ||||
| + }, | ||||
| + "sdfRef": { | ||||
| + "$ref": "#/definitions/sdf-pointer" | ||||
| + }, | ||||
| + "sdfRequired": { | ||||
| + "$ref": "#/definitions/pointer-list" | ||||
| + }, | ||||
| + "const": { | ||||
| + "$ref": "#/definitions/allowed-types" | ||||
| + }, | ||||
| + "default": { | ||||
| + "$ref": "#/definitions/allowed-types" | ||||
| + }, | ||||
| + "minimum": { | ||||
| + "type": "number" | ||||
| + }, | ||||
| + "maximum": { | ||||
| + "type": "number" | ||||
| + }, | ||||
| + "exclusiveMinimum": { | ||||
| + "type": "number" | ||||
| + }, | ||||
| + "exclusiveMaximum": { | ||||
| + "type": "number" | ||||
| + }, | ||||
| + "multipleOf": { | ||||
| + "type": "number" | ||||
| + }, | ||||
| + "minLength": { | ||||
| + "$ref": "#/definitions/uint" | ||||
| + }, | ||||
| + "maxLength": { | ||||
| + "$ref": "#/definitions/uint" | ||||
| + }, | ||||
| + "pattern": { | ||||
| + "type": "string" | ||||
| + }, | ||||
| + "format": { | ||||
| + "$ref": "#/definitions/format-" | ||||
| + }, | ||||
| + "minItems": { | ||||
| + "$ref": "#/definitions/uint" | ||||
| + }, | ||||
| + "maxItems": { | ||||
| + "$ref": "#/definitions/uint" | ||||
| + }, | ||||
| + "uniqueItems": { | ||||
| + "type": "boolean" | ||||
| + }, | ||||
| + "items": { | ||||
| + "$ref": "#/definitions/jso-items" | ||||
| + }, | ||||
| + "unit": { | ||||
| + "type": "string" | ||||
| + }, | ||||
| + "nullable": { | ||||
| + "type": "boolean" | ||||
| + }, | ||||
| + "sdfType": { | ||||
| + "$ref": "#/definitions/sdfType-" | ||||
| + }, | ||||
| + "contentFormat": { | ||||
| + "type": "string" | ||||
| + } | ||||
| + }, | + }, | |||
| + "additionalProperties": false | "properties": { | |||
| + }, | "type": { | |||
| + { | "type": "string", | |||
| + "type": "object", | "const": "object" | |||
| }, | ||||
| "required": { | ||||
| "type": "array", | ||||
| "items": { | ||||
| "type": "string" | ||||
| }, | ||||
| "minItems": 1 | ||||
| }, | ||||
| "properties": { | ||||
| "$ref": "#/definitions/sdfData-sdfChoice-properties-" | ||||
| }, | ||||
| "sdfChoice": { | ||||
| "$ref": "#/definitions/sdfData-sdfChoice-properties-" | ||||
| }, | ||||
| "observable": { | ||||
| "type": "boolean" | ||||
| }, | ||||
| "readable": { | ||||
| "type": "boolean" | ||||
| }, | ||||
| "writable": { | ||||
| "type": "boolean" | ||||
| }, | ||||
| "description": { | ||||
| "type": "string" | ||||
| }, | ||||
| "label": { | ||||
| "type": "string" | ||||
| }, | ||||
| "$comment": { | ||||
| "type": "string" | ||||
| }, | ||||
| "sdfRef": { | ||||
| "$ref": "#/definitions/sdf-pointer" | ||||
| }, | ||||
| "sdfRequired": { | ||||
| "$ref": "#/definitions/pointer-list" | ||||
| }, | ||||
| "const": { | ||||
| "$ref": "#/definitions/allowed-types" | ||||
| }, | ||||
| "default": { | ||||
| "$ref": "#/definitions/allowed-types" | ||||
| }, | ||||
| "minimum": { | ||||
| "type": "number" | ||||
| }, | ||||
| "maximum": { | ||||
| "type": "number" | ||||
| }, | ||||
| "exclusiveMinimum": { | ||||
| "type": "number" | ||||
| }, | ||||
| "exclusiveMaximum": { | ||||
| "type": "number" | ||||
| }, | ||||
| "multipleOf": { | ||||
| "type": "number" | ||||
| }, | ||||
| "minLength": { | ||||
| "$ref": "#/definitions/uint" | ||||
| }, | ||||
| "maxLength": { | ||||
| "$ref": "#/definitions/uint" | ||||
| }, | ||||
| "pattern": { | ||||
| "type": "string" | ||||
| }, | ||||
| "format": { | ||||
| "$ref": "#/definitions/format-" | ||||
| }, | ||||
| "minItems": { | ||||
| "$ref": "#/definitions/uint" | ||||
| }, | ||||
| "maxItems": { | ||||
| "$ref": "#/definitions/uint" | ||||
| }, | ||||
| "uniqueItems": { | ||||
| "type": "boolean" | ||||
| }, | ||||
| "items": { | ||||
| "$ref": "#/definitions/jso-items" | ||||
| }, | ||||
| "unit": { | ||||
| "type": "string" | ||||
| }, | ||||
| "nullable": { | ||||
| "type": "boolean" | ||||
| }, | ||||
| "sdfType": { | ||||
| "$ref": "#/definitions/sdfType-" | ||||
| }, | ||||
| "contentFormat": { | ||||
| "type": "string" | ||||
| } | ||||
| }, | ||||
| "additionalProperties": false | ||||
| }, | ||||
| { | ||||
| "type": "object", | ||||
| + "patternProperties": { | + "patternProperties": { | |||
| + "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": { | + "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {} | |||
| + } | ||||
| + }, | + }, | |||
| + "properties": { | + "properties": { | |||
| + "type": { | + "type": { | |||
| + "type": "string" | + "type": "string" | |||
| + }, | + }, | |||
| + "sdfChoice": { | + "sdfChoice": { | |||
| + "$ref": "#/definitions/sdfData-sdfChoice-properties-" | + "$ref": "#/definitions/sdfData-sdfChoice-properties-" | |||
| + }, | + }, | |||
| + "observable": { | + "observable": { | |||
| + "type": "boolean" | + "type": "boolean" | |||
| skipping to change at line 3364 ¶ | skipping to change at line 3359 ¶ | |||
| + }, | + }, | |||
| + "contentFormat": { | + "contentFormat": { | |||
| + "type": "string" | + "type": "string" | |||
| + } | + } | |||
| + }, | + }, | |||
| + "additionalProperties": false | + "additionalProperties": false | |||
| + }, | + }, | |||
| + { | + { | |||
| + "type": "object", | + "type": "object", | |||
| + "patternProperties": { | + "patternProperties": { | |||
| + "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": { | + "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {} | |||
| + } | ||||
| + }, | ||||
| + "properties": { | ||||
| + "type": { | ||||
| + "$ref": "#/definitions/type-" | ||||
| + }, | ||||
| + "enum": { | ||||
| + "type": "array", | ||||
| + "items": { | ||||
| + "type": "string" | ||||
| + }, | ||||
| + "minItems": 1 | ||||
| + }, | ||||
| + "observable": { | ||||
| + "type": "boolean" | ||||
| + }, | ||||
| + "readable": { | ||||
| + "type": "boolean" | ||||
| + }, | ||||
| + "writable": { | ||||
| + "type": "boolean" | ||||
| + }, | ||||
| + "description": { | ||||
| + "type": "string" | ||||
| + }, | ||||
| + "label": { | ||||
| + "type": "string" | ||||
| + }, | ||||
| + "$comment": { | ||||
| + "type": "string" | ||||
| + }, | ||||
| + "sdfRef": { | ||||
| + "$ref": "#/definitions/sdf-pointer" | ||||
| + }, | ||||
| + "sdfRequired": { | ||||
| + "$ref": "#/definitions/pointer-list" | ||||
| + }, | ||||
| + "const": { | ||||
| + "$ref": "#/definitions/allowed-types" | ||||
| + }, | ||||
| + "default": { | ||||
| + "$ref": "#/definitions/allowed-types" | ||||
| + }, | ||||
| + "minimum": { | ||||
| + "type": "number" | ||||
| + }, | ||||
| + "maximum": { | ||||
| + "type": "number" | ||||
| + }, | ||||
| + "exclusiveMinimum": { | ||||
| + "type": "number" | ||||
| + }, | ||||
| + "exclusiveMaximum": { | ||||
| + "type": "number" | ||||
| + }, | ||||
| + "multipleOf": { | ||||
| + "type": "number" | ||||
| + }, | ||||
| + "minLength": { | ||||
| + "$ref": "#/definitions/uint" | ||||
| + }, | ||||
| + "maxLength": { | ||||
| + "$ref": "#/definitions/uint" | ||||
| + }, | ||||
| + "pattern": { | ||||
| + "type": "string" | ||||
| + }, | ||||
| + "format": { | ||||
| + "$ref": "#/definitions/format-" | ||||
| + }, | ||||
| + "minItems": { | ||||
| + "$ref": "#/definitions/uint" | ||||
| + }, | ||||
| + "maxItems": { | ||||
| + "$ref": "#/definitions/uint" | ||||
| + }, | ||||
| + "uniqueItems": { | ||||
| + "type": "boolean" | ||||
| + }, | ||||
| + "items": { | ||||
| + "$ref": "#/definitions/jso-items" | ||||
| + }, | ||||
| + "unit": { | ||||
| + "type": "string" | ||||
| + }, | ||||
| + "nullable": { | ||||
| + "type": "boolean" | ||||
| + }, | ||||
| + "sdfType": { | ||||
| + "$ref": "#/definitions/sdfType-" | ||||
| + }, | ||||
| + "contentFormat": { | ||||
| + "type": "string" | ||||
| + } | ||||
| + }, | ||||
| + "additionalProperties": false | ||||
| + }, | ||||
| + { | ||||
| + "type": "object", | ||||
| + "patternProperties": { | ||||
| + "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": { | ||||
| + } | ||||
| + }, | ||||
| + "properties": { | ||||
| + "type": { | ||||
| + "type": "string", | ||||
| + "const": "object" | ||||
| + }, | ||||
| + "required": { | ||||
| + "type": "array", | ||||
| + "items": { | ||||
| + "type": "string" | ||||
| + }, | ||||
| + "minItems": 1 | ||||
| + }, | ||||
| + "properties": { | ||||
| + "$ref": "#/definitions/sdfData-sdfChoice-properties-" | ||||
| + }, | ||||
| + "enum": { | ||||
| + "type": "array", | ||||
| + "items": { | ||||
| + "type": "string" | ||||
| + }, | ||||
| + "minItems": 1 | ||||
| + }, | ||||
| + "observable": { | ||||
| + "type": "boolean" | ||||
| + }, | ||||
| + "readable": { | ||||
| + "type": "boolean" | ||||
| + }, | ||||
| + "writable": { | ||||
| + "type": "boolean" | ||||
| + }, | ||||
| + "description": { | ||||
| + "type": "string" | ||||
| + }, | ||||
| + "label": { | ||||
| + "type": "string" | ||||
| + }, | ||||
| + "$comment": { | ||||
| + "type": "string" | ||||
| + }, | ||||
| + "sdfRef": { | ||||
| + "$ref": "#/definitions/sdf-pointer" | ||||
| + }, | ||||
| + "sdfRequired": { | ||||
| + "$ref": "#/definitions/pointer-list" | ||||
| + }, | ||||
| + "const": { | ||||
| + "$ref": "#/definitions/allowed-types" | ||||
| + }, | ||||
| + "default": { | ||||
| + "$ref": "#/definitions/allowed-types" | ||||
| + }, | ||||
| + "minimum": { | ||||
| + "type": "number" | ||||
| + }, | ||||
| + "maximum": { | ||||
| + "type": "number" | ||||
| + }, | ||||
| + "exclusiveMinimum": { | ||||
| + "type": "number" | ||||
| + }, | ||||
| + "exclusiveMaximum": { | ||||
| + "type": "number" | ||||
| + }, | ||||
| + "multipleOf": { | ||||
| + "type": "number" | ||||
| + }, | ||||
| + "minLength": { | ||||
| + "$ref": "#/definitions/uint" | ||||
| + }, | ||||
| + "maxLength": { | ||||
| + "$ref": "#/definitions/uint" | ||||
| + }, | ||||
| + "pattern": { | ||||
| + "type": "string" | ||||
| + }, | ||||
| + "format": { | ||||
| + "$ref": "#/definitions/format-" | ||||
| + }, | ||||
| + "minItems": { | ||||
| + "$ref": "#/definitions/uint" | ||||
| + }, | ||||
| + "maxItems": { | ||||
| + "$ref": "#/definitions/uint" | ||||
| + }, | ||||
| + "uniqueItems": { | ||||
| + "type": "boolean" | ||||
| + }, | ||||
| + "items": { | ||||
| + "$ref": "#/definitions/jso-items" | ||||
| + }, | ||||
| + "unit": { | ||||
| + "type": "string" | ||||
| + }, | ||||
| + "nullable": { | ||||
| + "type": "boolean" | ||||
| + }, | ||||
| + "sdfType": { | ||||
| + "$ref": "#/definitions/sdfType-" | ||||
| + }, | ||||
| + "contentFormat": { | ||||
| + "type": "string" | ||||
| + } | ||||
| + }, | ||||
| + "additionalProperties": false | ||||
| + }, | ||||
| + { | ||||
| + "type": "object", | ||||
| + "patternProperties": { | ||||
| + "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": { | ||||
| + } | ||||
| + }, | + }, | |||
| "properties": { | "properties": { | |||
| "type": { | "type": { | |||
| - "type": "string", | "$ref": "#/definitions/type-" | |||
| - "const": "object" | ||||
| + "type": "string" | ||||
| }, | }, | |||
| - "required": { | "enum": { | |||
| + "enum": { | ||||
| "type": "array", | "type": "array", | |||
| "items": { | "items": { | |||
| "type": "string" | "type": "string" | |||
| }, | }, | |||
| "minItems": 1 | "minItems": 1 | |||
| }, | }, | |||
| - "properties": { | ||||
| - "$ref": "#/definitions/sdfData-sdfChoice-properties-" | ||||
| - }, | ||||
| - "sdfChoice": { | ||||
| - "$ref": "#/definitions/sdfData-sdfChoice-properties-" | ||||
| - }, | ||||
| "observable": { | "observable": { | |||
| "type": "boolean" | "type": "boolean" | |||
| }, | }, | |||
| "readable": { | "readable": { | |||
| "type": "boolean" | "type": "boolean" | |||
| }, | }, | |||
| "writable": { | "writable": { | |||
| "type": "boolean" | "type": "boolean" | |||
| }, | }, | |||
| "description": { | "description": { | |||
| skipping to change at line 3683 ¶ | skipping to change at line 3455 ¶ | |||
| "type": "boolean" | "type": "boolean" | |||
| }, | }, | |||
| "sdfType": { | "sdfType": { | |||
| "$ref": "#/definitions/sdfType-" | "$ref": "#/definitions/sdfType-" | |||
| }, | }, | |||
| "contentFormat": { | "contentFormat": { | |||
| "type": "string" | "type": "string" | |||
| } | } | |||
| }, | }, | |||
| "additionalProperties": false | "additionalProperties": false | |||
| - }, | ||||
| + } | ||||
| + ] | ||||
| + }, | ||||
| + "dataqualities": { | ||||
| + "anyOf": [ | ||||
| { | ||||
| "type": "object", | ||||
| + "patternProperties": { | ||||
| + "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": { | ||||
| + } | ||||
| + }, | ||||
| "properties": { | ||||
| "type": { | ||||
| "$ref": "#/definitions/type-" | ||||
| }, | ||||
| - "enum": { | ||||
| - "type": "array", | ||||
| - "items": { | ||||
| - "type": "string" | ||||
| - }, | ||||
| - "minItems": 1 | ||||
| - }, | ||||
| - "observable": { | ||||
| - "type": "boolean" | ||||
| - }, | ||||
| - "readable": { | ||||
| - "type": "boolean" | ||||
| - }, | ||||
| - "writable": { | ||||
| - "type": "boolean" | ||||
| + "sdfChoice": { | ||||
| + "$ref": "#/definitions/sdfData-sdfChoice-properties-" | ||||
| }, | ||||
| "description": { | ||||
| "type": "string" | ||||
| }, | ||||
| "label": { | ||||
| "type": "string" | ||||
| }, | ||||
| "$comment": { | ||||
| "type": "string" | ||||
| }, | ||||
| "sdfRef": { | ||||
| "$ref": "#/definitions/sdf-pointer" | ||||
| }, | ||||
| "sdfRequired": { | ||||
| "$ref": "#/definitions/pointer-list" | ||||
| }, | ||||
| "const": { | ||||
| "$ref": "#/definitions/allowed-types" | ||||
| }, | ||||
| "default": { | ||||
| "$ref": "#/definitions/allowed-types" | ||||
| }, | ||||
| "minimum": { | ||||
| "type": "number" | ||||
| }, | ||||
| "maximum": { | ||||
| "type": "number" | ||||
| }, | ||||
| "exclusiveMinimum": { | ||||
| "type": "number" | ||||
| }, | ||||
| "exclusiveMaximum": { | ||||
| "type": "number" | ||||
| }, | ||||
| "multipleOf": { | ||||
| "type": "number" | ||||
| }, | ||||
| "minLength": { | ||||
| "$ref": "#/definitions/uint" | ||||
| }, | ||||
| "maxLength": { | ||||
| "$ref": "#/definitions/uint" | ||||
| }, | ||||
| "pattern": { | ||||
| "type": "string" | ||||
| }, | ||||
| "format": { | ||||
| "$ref": "#/definitions/format-" | ||||
| }, | ||||
| "minItems": { | ||||
| "$ref": "#/definitions/uint" | ||||
| }, | ||||
| "maxItems": { | ||||
| "$ref": "#/definitions/uint" | ||||
| }, | ||||
| "uniqueItems": { | ||||
| "type": "boolean" | ||||
| }, | ||||
| "items": { | ||||
| "$ref": "#/definitions/jso-items" | ||||
| }, | ||||
| "unit": { | ||||
| "type": "string" | ||||
| }, | ||||
| "nullable": { | ||||
| "type": "boolean" | ||||
| }, | ||||
| "sdfType": { | ||||
| "$ref": "#/definitions/sdfType-" | ||||
| }, | ||||
| "contentFormat": { | ||||
| "type": "string" | ||||
| } | ||||
| }, | ||||
| "additionalProperties": false | ||||
| }, | }, | |||
| { | { | |||
| "type": "object", | "type": "object", | |||
| + "patternProperties": { | + "patternProperties": { | |||
| + "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": { | + "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {} | |||
| + } | ||||
| + }, | + }, | |||
| "properties": { | "properties": { | |||
| "type": { | "type": { | |||
| "type": "string", | "type": "string", | |||
| "const": "object" | "const": "object" | |||
| }, | }, | |||
| "required": { | "required": { | |||
| "type": "array", | "type": "array", | |||
| "items": { | "items": { | |||
| "type": "string" | "type": "string" | |||
| }, | }, | |||
| "minItems": 1 | "minItems": 1 | |||
| }, | }, | |||
| "properties": { | "properties": { | |||
| "$ref": "#/definitions/sdfData-sdfChoice-properties-" | "$ref": "#/definitions/sdfData-sdfChoice-properties-" | |||
| }, | }, | |||
| - "enum": { | "enum": { | |||
| - "type": "array", | "type": "array", | |||
| - "items": { | "items": { | |||
| - "type": "string" | "type": "string" | |||
| - }, | }, | |||
| - "minItems": 1 | "minItems": 1 | |||
| - }, | }, | |||
| - "observable": { | "observable": { | |||
| - "type": "boolean" | "type": "boolean" | |||
| - }, | }, | |||
| - "readable": { | "readable": { | |||
| - "type": "boolean" | "type": "boolean" | |||
| - }, | }, | |||
| - "writable": { | "writable": { | |||
| - "type": "boolean" | "type": "boolean" | |||
| + "sdfChoice": { | ||||
| + "$ref": "#/definitions/sdfData-sdfChoice-properties-" | ||||
| }, | }, | |||
| "description": { | "description": { | |||
| "type": "string" | "type": "string" | |||
| }, | }, | |||
| "label": { | "label": { | |||
| "type": "string" | "type": "string" | |||
| }, | }, | |||
| "$comment": { | "$comment": { | |||
| "type": "string" | "type": "string" | |||
| }, | }, | |||
| skipping to change at line 3905 ¶ | skipping to change at line 3566 ¶ | |||
| "type": "boolean" | "type": "boolean" | |||
| }, | }, | |||
| "sdfType": { | "sdfType": { | |||
| "$ref": "#/definitions/sdfType-" | "$ref": "#/definitions/sdfType-" | |||
| }, | }, | |||
| "contentFormat": { | "contentFormat": { | |||
| "type": "string" | "type": "string" | |||
| } | } | |||
| }, | }, | |||
| "additionalProperties": false | "additionalProperties": false | |||
| - } | ||||
| - ] | ||||
| - }, | ||||
| - "dataqualities": { | ||||
| - "anyOf": [ | ||||
| + }, | + }, | |||
| + { | ||||
| + "type": "object", | ||||
| + "patternProperties": { | ||||
| + "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {} | ||||
| + }, | ||||
| + "properties": { | ||||
| + "type": { | ||||
| + "type": "string" | ||||
| + }, | ||||
| + "enum": { | ||||
| + "type": "array", | ||||
| + "items": { | ||||
| + "type": "string" | ||||
| + }, | ||||
| + "minItems": 1 | ||||
| + }, | ||||
| + "observable": { | ||||
| + "type": "boolean" | ||||
| + }, | ||||
| + "readable": { | ||||
| + "type": "boolean" | ||||
| + }, | ||||
| + "writable": { | ||||
| + "type": "boolean" | ||||
| + }, | ||||
| + "description": { | ||||
| + "type": "string" | ||||
| + }, | ||||
| + "label": { | ||||
| + "type": "string" | ||||
| + }, | ||||
| + "$comment": { | ||||
| + "type": "string" | ||||
| + }, | ||||
| + "sdfRef": { | ||||
| + "$ref": "#/definitions/sdf-pointer" | ||||
| + }, | ||||
| + "sdfRequired": { | ||||
| + "$ref": "#/definitions/pointer-list" | ||||
| + }, | ||||
| + "const": { | ||||
| + "$ref": "#/definitions/allowed-types" | ||||
| + }, | ||||
| + "default": { | ||||
| + "$ref": "#/definitions/allowed-types" | ||||
| + }, | ||||
| + "minimum": { | ||||
| + "type": "number" | ||||
| + }, | ||||
| + "maximum": { | ||||
| + "type": "number" | ||||
| + }, | ||||
| + "exclusiveMinimum": { | ||||
| + "type": "number" | ||||
| + }, | ||||
| + "exclusiveMaximum": { | ||||
| + "type": "number" | ||||
| + }, | ||||
| + "multipleOf": { | ||||
| + "type": "number" | ||||
| + }, | ||||
| + "minLength": { | ||||
| + "$ref": "#/definitions/uint" | ||||
| + }, | ||||
| + "maxLength": { | ||||
| + "$ref": "#/definitions/uint" | ||||
| + }, | ||||
| + "pattern": { | ||||
| + "type": "string" | ||||
| + }, | ||||
| + "format": { | ||||
| + "$ref": "#/definitions/format-" | ||||
| + }, | ||||
| + "minItems": { | ||||
| + "$ref": "#/definitions/uint" | ||||
| + }, | ||||
| + "maxItems": { | ||||
| + "$ref": "#/definitions/uint" | ||||
| + }, | ||||
| + "uniqueItems": { | ||||
| + "type": "boolean" | ||||
| + }, | ||||
| + "items": { | ||||
| + "$ref": "#/definitions/jso-items" | ||||
| + }, | ||||
| + "unit": { | ||||
| + "type": "string" | ||||
| + }, | ||||
| + "nullable": { | ||||
| + "type": "boolean" | ||||
| + }, | ||||
| + "sdfType": { | ||||
| + "$ref": "#/definitions/sdfType-" | ||||
| + }, | ||||
| + "contentFormat": { | ||||
| + "type": "string" | ||||
| + } | ||||
| + }, | ||||
| + "additionalProperties": false | ||||
| } | ||||
| ] | ||||
| }, | ||||
| "dataqualities": { | ||||
| "anyOf": [ | ||||
| { | { | |||
| "type": "object", | "type": "object", | |||
| + "patternProperties": { | + "patternProperties": { | |||
| + "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": { | + "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {} | |||
| + } | ||||
| + }, | + }, | |||
| "properties": { | "properties": { | |||
| "type": { | "type": { | |||
| - "$ref": "#/definitions/type-" | "$ref": "#/definitions/type-" | |||
| + "type": "string" | ||||
| }, | }, | |||
| "sdfChoice": { | "sdfChoice": { | |||
| "$ref": "#/definitions/sdfData-sdfChoice-properties-" | "$ref": "#/definitions/sdfData-sdfChoice-properties-" | |||
| }, | }, | |||
| "description": { | "description": { | |||
| "type": "string" | "type": "string" | |||
| }, | }, | |||
| "label": { | "label": { | |||
| "type": "string" | "type": "string" | |||
| }, | }, | |||
| skipping to change at line 4003 ¶ | skipping to change at line 3761 ¶ | |||
| }, | }, | |||
| "contentFormat": { | "contentFormat": { | |||
| "type": "string" | "type": "string" | |||
| } | } | |||
| }, | }, | |||
| "additionalProperties": false | "additionalProperties": false | |||
| }, | }, | |||
| { | { | |||
| "type": "object", | "type": "object", | |||
| + "patternProperties": { | + "patternProperties": { | |||
| + "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": { | + "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {} | |||
| + } | ||||
| + }, | + }, | |||
| "properties": { | "properties": { | |||
| "type": { | "type": { | |||
| - "type": "string", | "type": "string", | |||
| - "const": "object" | "const": "object" | |||
| + "$ref": "#/definitions/type-" | ||||
| }, | }, | |||
| - "required": { | "required": { | |||
| + "enum": { | ||||
| "type": "array", | "type": "array", | |||
| "items": { | "items": { | |||
| "type": "string" | "type": "string" | |||
| }, | }, | |||
| "minItems": 1 | "minItems": 1 | |||
| }, | }, | |||
| - "properties": { | "properties": { | |||
| - "$ref": "#/definitions/sdfData-sdfChoice-properties-" | "$ref": "#/definitions/sdfData-sdfChoice-properties-" | |||
| - }, | }, | |||
| - "sdfChoice": { | "sdfChoice": { | |||
| - "$ref": "#/definitions/sdfData-sdfChoice-properties-" | "$ref": "#/definitions/sdfData-sdfChoice-properties-" | |||
| - }, | }, | |||
| "description": { | "description": { | |||
| "type": "string" | "type": "string" | |||
| }, | }, | |||
| "label": { | "label": { | |||
| "type": "string" | "type": "string" | |||
| }, | }, | |||
| "$comment": { | "$comment": { | |||
| "type": "string" | "type": "string" | |||
| }, | }, | |||
| "sdfRef": { | "sdfRef": { | |||
| skipping to change at line 4104 ¶ | skipping to change at line 3859 ¶ | |||
| }, | }, | |||
| "contentFormat": { | "contentFormat": { | |||
| "type": "string" | "type": "string" | |||
| } | } | |||
| }, | }, | |||
| "additionalProperties": false | "additionalProperties": false | |||
| }, | }, | |||
| { | { | |||
| "type": "object", | "type": "object", | |||
| + "patternProperties": { | + "patternProperties": { | |||
| + "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": { | + "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {} | |||
| + }, | ||||
| + "properties": { | ||||
| + "type": { | ||||
| + "type": "string" | ||||
| + }, | ||||
| + "sdfChoice": { | ||||
| + "$ref": "#/definitions/sdfData-sdfChoice-properties-" | ||||
| + }, | ||||
| + "description": { | ||||
| + "type": "string" | ||||
| + }, | ||||
| + "label": { | ||||
| + "type": "string" | ||||
| + }, | ||||
| + "$comment": { | ||||
| + "type": "string" | ||||
| + }, | ||||
| + "sdfRef": { | ||||
| + "$ref": "#/definitions/sdf-pointer" | ||||
| + }, | ||||
| + "sdfRequired": { | ||||
| + "$ref": "#/definitions/pointer-list" | ||||
| + }, | ||||
| + "const": { | ||||
| + "$ref": "#/definitions/allowed-types" | ||||
| + }, | ||||
| + "default": { | ||||
| + "$ref": "#/definitions/allowed-types" | ||||
| + }, | ||||
| + "minimum": { | ||||
| + "type": "number" | ||||
| + }, | ||||
| + "maximum": { | ||||
| + "type": "number" | ||||
| + }, | ||||
| + "exclusiveMinimum": { | ||||
| + "type": "number" | ||||
| + }, | ||||
| + "exclusiveMaximum": { | ||||
| + "type": "number" | ||||
| + }, | ||||
| + "multipleOf": { | ||||
| + "type": "number" | ||||
| + }, | ||||
| + "minLength": { | ||||
| + "$ref": "#/definitions/uint" | ||||
| + }, | ||||
| + "maxLength": { | ||||
| + "$ref": "#/definitions/uint" | ||||
| + }, | ||||
| + "pattern": { | ||||
| + "type": "string" | ||||
| + }, | ||||
| + "format": { | ||||
| + "$ref": "#/definitions/format-" | ||||
| + }, | ||||
| + "minItems": { | ||||
| + "$ref": "#/definitions/uint" | ||||
| + }, | ||||
| + "maxItems": { | ||||
| + "$ref": "#/definitions/uint" | ||||
| + }, | ||||
| + "uniqueItems": { | ||||
| + "type": "boolean" | ||||
| + }, | ||||
| + "items": { | ||||
| + "$ref": "#/definitions/jso-items" | ||||
| + }, | ||||
| + "unit": { | ||||
| + "type": "string" | ||||
| + }, | ||||
| + "nullable": { | ||||
| + "type": "boolean" | ||||
| + }, | ||||
| + "sdfType": { | ||||
| + "$ref": "#/definitions/sdfType-" | ||||
| + }, | ||||
| + "contentFormat": { | ||||
| + "type": "string" | ||||
| + } | + } | |||
| + }, | + }, | |||
| + "additionalProperties": false | ||||
| + }, | ||||
| + { | ||||
| + "type": "object", | ||||
| + "patternProperties": { | ||||
| + "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {} | ||||
| + }, | ||||
| "properties": { | "properties": { | |||
| "type": { | "type": { | |||
| - "$ref": "#/definitions/type-" | "$ref": "#/definitions/type-" | |||
| + "type": "string", | ||||
| + "const": "object" | ||||
| + }, | ||||
| + "required": { | ||||
| + "type": "array", | ||||
| + "items": { | ||||
| + "type": "string" | ||||
| + }, | ||||
| + "minItems": 1 | ||||
| + }, | ||||
| + "properties": { | ||||
| + "$ref": "#/definitions/sdfData-sdfChoice-properties-" | ||||
| }, | }, | |||
| "enum": { | "enum": { | |||
| "type": "array", | "type": "array", | |||
| "items": { | "items": { | |||
| "type": "string" | "type": "string" | |||
| }, | }, | |||
| "minItems": 1 | "minItems": 1 | |||
| }, | }, | |||
| "description": { | "description": { | |||
| "type": "string" | "type": "string" | |||
| skipping to change at line 4208 ¶ | skipping to change at line 4037 ¶ | |||
| }, | }, | |||
| "contentFormat": { | "contentFormat": { | |||
| "type": "string" | "type": "string" | |||
| } | } | |||
| }, | }, | |||
| "additionalProperties": false | "additionalProperties": false | |||
| }, | }, | |||
| { | { | |||
| "type": "object", | "type": "object", | |||
| + "patternProperties": { | + "patternProperties": { | |||
| + "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": { | + "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {} | |||
| + } | ||||
| + }, | + }, | |||
| "properties": { | "properties": { | |||
| "type": { | "type": { | |||
| - "type": "string", | "type": "string", | |||
| - "const": "object" | "const": "object" | |||
| - }, | }, | |||
| - "required": { | "required": { | |||
| - "type": "array", | "type": "array", | |||
| - "items": { | "items": { | |||
| - "type": "string" | "type": "string" | |||
| - }, | }, | |||
| - "minItems": 1 | "minItems": 1 | |||
| - }, | }, | |||
| - "properties": { | "properties": { | |||
| - "$ref": "#/definitions/sdfData-sdfChoice-properties-" | "$ref": "#/definitions/sdfData-sdfChoice-properties-" | |||
| + "type": "string" | ||||
| }, | }, | |||
| "enum": { | "enum": { | |||
| "type": "array", | "type": "array", | |||
| "items": { | "items": { | |||
| "type": "string" | "type": "string" | |||
| }, | }, | |||
| "minItems": 1 | "minItems": 1 | |||
| }, | }, | |||
| "description": { | "description": { | |||
| "type": "string" | "type": "string" | |||
| skipping to change at line 4308 ¶ | skipping to change at line 4135 ¶ | |||
| "type": "boolean" | "type": "boolean" | |||
| }, | }, | |||
| "sdfType": { | "sdfType": { | |||
| "$ref": "#/definitions/sdfType-" | "$ref": "#/definitions/sdfType-" | |||
| }, | }, | |||
| "contentFormat": { | "contentFormat": { | |||
| "type": "string" | "type": "string" | |||
| } | } | |||
| }, | }, | |||
| "additionalProperties": false | "additionalProperties": false | |||
| + }, | ||||
| + { | ||||
| + "type": "object", | ||||
| + "patternProperties": { | ||||
| + "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {} | ||||
| + }, | ||||
| + "properties": { | ||||
| + "type": { | ||||
| + "type": "string" | ||||
| + }, | ||||
| + "enum": { | ||||
| + "type": "array", | ||||
| + "items": { | ||||
| + "type": "string" | ||||
| + }, | ||||
| + "minItems": 1 | ||||
| + }, | ||||
| + "description": { | ||||
| + "type": "string" | ||||
| + }, | ||||
| + "label": { | ||||
| + "type": "string" | ||||
| + }, | ||||
| + "$comment": { | ||||
| + "type": "string" | ||||
| + }, | ||||
| + "sdfRef": { | ||||
| + "$ref": "#/definitions/sdf-pointer" | ||||
| + }, | ||||
| + "sdfRequired": { | ||||
| + "$ref": "#/definitions/pointer-list" | ||||
| + }, | ||||
| + "const": { | ||||
| + "$ref": "#/definitions/allowed-types" | ||||
| + }, | ||||
| + "default": { | ||||
| + "$ref": "#/definitions/allowed-types" | ||||
| + }, | ||||
| + "minimum": { | ||||
| + "type": "number" | ||||
| + }, | ||||
| + "maximum": { | ||||
| + "type": "number" | ||||
| + }, | ||||
| + "exclusiveMinimum": { | ||||
| + "type": "number" | ||||
| + }, | ||||
| + "exclusiveMaximum": { | ||||
| + "type": "number" | ||||
| + }, | ||||
| + "multipleOf": { | ||||
| + "type": "number" | ||||
| + }, | ||||
| + "minLength": { | ||||
| + "$ref": "#/definitions/uint" | ||||
| + }, | ||||
| + "maxLength": { | ||||
| + "$ref": "#/definitions/uint" | ||||
| + }, | ||||
| + "pattern": { | ||||
| + "type": "string" | ||||
| + }, | ||||
| + "format": { | ||||
| + "$ref": "#/definitions/format-" | ||||
| + }, | ||||
| + "minItems": { | ||||
| + "$ref": "#/definitions/uint" | ||||
| + }, | ||||
| + "maxItems": { | ||||
| + "$ref": "#/definitions/uint" | ||||
| + }, | ||||
| + "uniqueItems": { | ||||
| + "type": "boolean" | ||||
| + }, | ||||
| + "items": { | ||||
| + "$ref": "#/definitions/jso-items" | ||||
| + }, | ||||
| + "unit": { | ||||
| + "type": "string" | ||||
| + }, | ||||
| + "nullable": { | ||||
| + "type": "boolean" | ||||
| + }, | ||||
| + "sdfType": { | ||||
| + "$ref": "#/definitions/sdfType-" | ||||
| + }, | ||||
| + "contentFormat": { | ||||
| + "type": "string" | ||||
| + } | ||||
| + }, | ||||
| + "additionalProperties": false | ||||
| } | } | |||
| ] | ] | |||
| }, | }, | |||
| "allowed-types": { | "allowed-types": { | |||
| "anyOf": [ | "anyOf": [ | |||
| { | { | |||
| "type": "number" | "type": "number" | |||
| }, | }, | |||
| { | { | |||
| "type": "string" | "type": "string" | |||
| skipping to change at line 4345 ¶ | skipping to change at line 4263 ¶ | |||
| } | } | |||
| }, | }, | |||
| { | { | |||
| "type": "array", | "type": "array", | |||
| "items": { | "items": { | |||
| "type": "boolean" | "type": "boolean" | |||
| } | } | |||
| }, | }, | |||
| { | { | |||
| "type": "object", | "type": "object", | |||
| "additionalProperties": { | "additionalProperties": {} | |||
| } | - } | |||
| + }, | + }, | |||
| + { | + {} | |||
| } | ||||
| ] | ] | |||
| }, | }, | |||
| "uint": { | "uint": { | |||
| "type": "integer", | "type": "integer", | |||
| "minimum": 0 | "minimum": 0 | |||
| }, | }, | |||
| "jso-items": { | "jso-items": { | |||
| "anyOf": [ | "anyOf": [ | |||
| { | { | |||
| "type": "object", | "type": "object", | |||
| + "patternProperties": { | + "patternProperties": { | |||
| + "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": { | + "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {} | |||
| + } | ||||
| + }, | + }, | |||
| "properties": { | "properties": { | |||
| "type": { | "type": { | |||
| "type": "string", | "type": "string", | |||
| "enum": [ | "enum": [ | |||
| "number", | "number", | |||
| "string", | "string", | |||
| "boolean", | "boolean", | |||
| "integer" | "integer" | |||
| ] | ] | |||
| skipping to change at line 4407 ¶ | skipping to change at line 4323 ¶ | |||
| }, | }, | |||
| "maxLength": { | "maxLength": { | |||
| "$ref": "#/definitions/uint" | "$ref": "#/definitions/uint" | |||
| } | } | |||
| }, | }, | |||
| "additionalProperties": false | "additionalProperties": false | |||
| }, | }, | |||
| { | { | |||
| "type": "object", | "type": "object", | |||
| + "patternProperties": { | + "patternProperties": { | |||
| + "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": { | + "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {} | |||
| + } | ||||
| + }, | + }, | |||
| "properties": { | "properties": { | |||
| "type": { | "type": { | |||
| "type": "string", | "type": "string", | |||
| "const": "object" | "const": "object" | |||
| }, | }, | |||
| "required": { | "required": { | |||
| "type": "array", | "type": "array", | |||
| "items": { | "items": { | |||
| "type": "string" | "type": "string" | |||
| skipping to change at line 4458 ¶ | skipping to change at line 4373 ¶ | |||
| }, | }, | |||
| "maxLength": { | "maxLength": { | |||
| "$ref": "#/definitions/uint" | "$ref": "#/definitions/uint" | |||
| } | } | |||
| }, | }, | |||
| "additionalProperties": false | "additionalProperties": false | |||
| }, | }, | |||
| { | { | |||
| "type": "object", | "type": "object", | |||
| + "patternProperties": { | + "patternProperties": { | |||
| + "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": { | + "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {} | |||
| + } | ||||
| + }, | + }, | |||
| + "properties": { | + "properties": { | |||
| + "type": { | + "type": { | |||
| + "type": "string" | + "type": "string" | |||
| + }, | + }, | |||
| + "sdfChoice": { | + "sdfChoice": { | |||
| + "$ref": "#/definitions/sdfData-sdfChoice-properties-" | + "$ref": "#/definitions/sdfData-sdfChoice-properties-" | |||
| + }, | + }, | |||
| + "sdfRef": { | + "sdfRef": { | |||
| + "$ref": "#/definitions/sdf-pointer" | + "$ref": "#/definitions/sdf-pointer" | |||
| skipping to change at line 4498 ¶ | skipping to change at line 4412 ¶ | |||
| + }, | + }, | |||
| + "maxLength": { | + "maxLength": { | |||
| + "$ref": "#/definitions/uint" | + "$ref": "#/definitions/uint" | |||
| + } | + } | |||
| + }, | + }, | |||
| + "additionalProperties": false | + "additionalProperties": false | |||
| + }, | + }, | |||
| + { | + { | |||
| + "type": "object", | + "type": "object", | |||
| + "patternProperties": { | + "patternProperties": { | |||
| + "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": { | + "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {} | |||
| + } | ||||
| + }, | + }, | |||
| "properties": { | "properties": { | |||
| "type": { | "type": { | |||
| "type": "string", | "type": "string", | |||
| "enum": [ | "enum": [ | |||
| "number", | "number", | |||
| "string", | "string", | |||
| "boolean", | "boolean", | |||
| "integer" | "integer" | |||
| ] | ] | |||
| skipping to change at line 4548 ¶ | skipping to change at line 4461 ¶ | |||
| }, | }, | |||
| "maxLength": { | "maxLength": { | |||
| "$ref": "#/definitions/uint" | "$ref": "#/definitions/uint" | |||
| } | } | |||
| }, | }, | |||
| "additionalProperties": false | "additionalProperties": false | |||
| }, | }, | |||
| { | { | |||
| "type": "object", | "type": "object", | |||
| + "patternProperties": { | + "patternProperties": { | |||
| + "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": { | + "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {} | |||
| + } | ||||
| + }, | + }, | |||
| "properties": { | "properties": { | |||
| "type": { | "type": { | |||
| "type": "string", | "type": "string", | |||
| "const": "object" | "const": "object" | |||
| }, | }, | |||
| "required": { | "required": { | |||
| "type": "array", | "type": "array", | |||
| "items": { | "items": { | |||
| "type": "string" | "type": "string" | |||
| skipping to change at line 4603 ¶ | skipping to change at line 4515 ¶ | |||
| }, | }, | |||
| "maxLength": { | "maxLength": { | |||
| "$ref": "#/definitions/uint" | "$ref": "#/definitions/uint" | |||
| } | } | |||
| }, | }, | |||
| "additionalProperties": false | "additionalProperties": false | |||
| + }, | + }, | |||
| + { | + { | |||
| + "type": "object", | + "type": "object", | |||
| + "patternProperties": { | + "patternProperties": { | |||
| + "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": { | + "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {} | |||
| + } | ||||
| + }, | + }, | |||
| + "properties": { | + "properties": { | |||
| + "type": { | + "type": { | |||
| + "type": "string" | + "type": "string" | |||
| + }, | + }, | |||
| + "enum": { | + "enum": { | |||
| + "type": "array", | + "type": "array", | |||
| + "items": { | + "items": { | |||
| + "type": "string" | + "type": "string" | |||
| + }, | + }, | |||
| skipping to change at line 4679 ¶ | skipping to change at line 4590 ¶ | |||
| "$ref": "#/definitions/parameter-list" | "$ref": "#/definitions/parameter-list" | |||
| }, | }, | |||
| "sdfOutputData": { | "sdfOutputData": { | |||
| "$ref": "#/definitions/parameter-list" | "$ref": "#/definitions/parameter-list" | |||
| }, | }, | |||
| "sdfData": { | "sdfData": { | |||
| "$ref": "#/definitions/sdfData-sdfChoice-properties-" | "$ref": "#/definitions/sdfData-sdfChoice-properties-" | |||
| } | } | |||
| }, | }, | |||
| + "patternProperties": { | + "patternProperties": { | |||
| + "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": { | + "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {} | |||
| + } | ||||
| + }, | + }, | |||
| "additionalProperties": false | "additionalProperties": false | |||
| }, | }, | |||
| "parameter-list": { | "parameter-list": { | |||
| "$ref": "#/definitions/dataqualities" | "$ref": "#/definitions/dataqualities" | |||
| }, | }, | |||
| "eventqualities": { | "eventqualities": { | |||
| "type": "object", | "type": "object", | |||
| "properties": { | "properties": { | |||
| "description": { | "description": { | |||
| skipping to change at line 4713 ¶ | skipping to change at line 4623 ¶ | |||
| "$ref": "#/definitions/pointer-list" | "$ref": "#/definitions/pointer-list" | |||
| }, | }, | |||
| "sdfOutputData": { | "sdfOutputData": { | |||
| "$ref": "#/definitions/parameter-list" | "$ref": "#/definitions/parameter-list" | |||
| }, | }, | |||
| "sdfData": { | "sdfData": { | |||
| "$ref": "#/definitions/sdfData-sdfChoice-properties-" | "$ref": "#/definitions/sdfData-sdfChoice-properties-" | |||
| } | } | |||
| }, | }, | |||
| + "patternProperties": { | + "patternProperties": { | |||
| + "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": { | + "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {} | |||
| + } | ||||
| + }, | + }, | |||
| "additionalProperties": false | "additionalProperties": false | |||
| }, | }, | |||
| "format-": { | "format-": { | |||
| - "type": "string", | - "type": "string", | |||
| - "enum": [ | - "enum": [ | |||
| - "date-time", | - "date-time", | |||
| - "date", | - "date", | |||
| - "time", | - "time", | |||
| - "uri", | - "uri", | |||
| skipping to change at line 4788 ¶ | skipping to change at line 4697 ¶ | |||
| "type-": { | "type-": { | |||
| "type": "string", | "type": "string", | |||
| "enum": [ | "enum": [ | |||
| "number", | "number", | |||
| "string", | "string", | |||
| "boolean", | "boolean", | |||
| "integer", | "integer", | |||
| "array" | "array" | |||
| ] | ] | |||
| }, | }, | |||
| - "sdfAction-": { | - "sdfEvent-": { | |||
| + "sdfEvent-": { | + "sdfProperty-": { | |||
| "type": "object", | "type": "object", | |||
| "additionalProperties": { | "additionalProperties": { | |||
| - "$ref": "#/definitions/actionqualities" | - "$ref": "#/definitions/eventqualities" | |||
| + "$ref": "#/definitions/eventqualities" | + "$ref": "#/definitions/propertyqualities" | |||
| } | } | |||
| }, | }, | |||
| - "sdfProperty-": { | "sdfAction-": { | |||
| + "sdfAction-": { | ||||
| "type": "object", | "type": "object", | |||
| "additionalProperties": { | "additionalProperties": { | |||
| - "$ref": "#/definitions/propertyqualities" | "$ref": "#/definitions/actionqualities" | |||
| + "$ref": "#/definitions/actionqualities" | ||||
| } | } | |||
| }, | }, | |||
| - "sdfEvent-": { | - "sdfProperty-": { | |||
| + "sdfProperty-": { | + "sdfEvent-": { | |||
| "type": "object", | "type": "object", | |||
| "additionalProperties": { | "additionalProperties": { | |||
| - "$ref": "#/definitions/eventqualities" | - "$ref": "#/definitions/propertyqualities" | |||
| + "$ref": "#/definitions/propertyqualities" | + "$ref": "#/definitions/eventqualities" | |||
| } | } | |||
| - }, | - }, | |||
| - "sdfType-": { | - "sdfType-": { | |||
| - "type": "string", | - "type": "string", | |||
| - "enum": [ | - "enum": [ | |||
| - "byte-string", | - "byte-string", | |||
| - "unix-time" | - "unix-time" | |||
| - ] | - ] | |||
| } | } | |||
| } | } | |||
| skipping to change at line 4844 ¶ | skipping to change at line 4751 ¶ | |||
| The main data quality imported is the "type". In SDF, this can take | The main data quality imported is the "type". In SDF, this can take | |||
| one of six (text string) values, which are discussed in the following | one of six (text string) values, which are discussed in the following | |||
| subsections (note that the JSO type "null" is not supported as a | subsections (note that the JSO type "null" is not supported as a | |||
| value of this data quality in SDF). | value of this data quality in SDF). | |||
| The additional quality "const" restricts the data to one specific | The additional quality "const" restricts the data to one specific | |||
| value (given as the value of the const quality). | value (given as the value of the const quality). | |||
| Similarly, the additional quality "default" provides data that can be | Similarly, the additional quality "default" provides data that can be | |||
| used in the absence of the data (given as the value of the const | used in the absence of the data (given as the value of the default | |||
| quality); this is mainly documentary and not very well-defined for | quality); this is mainly documentary and not very well-defined for | |||
| SDF as no process is defined that would add default values to an | SDF as no process is defined that would add default values to an | |||
| instance of some interaction data. | instance of some interaction data. | |||
| Other qualities that are inspired by JSO are "$comment" and | Other qualities that are inspired by JSO are "$comment" and | |||
| "description", both of which are also available in the information | "description", both of which are also available in the information | |||
| block. | block. | |||
| C.1. type "number", type "integer" | C.1. type "number", type "integer" | |||
| skipping to change at line 5033 ¶ | skipping to change at line 4940 ¶ | |||
| "type": "boolean", | "type": "boolean", | |||
| "description": | "description": | |||
| "Indicates if the refrigerator-freezer is powered" | "Indicates if the refrigerator-freezer is powered" | |||
| } | } | |||
| }, | }, | |||
| "sdfObject": { | "sdfObject": { | |||
| "refrigerator": { | "refrigerator": { | |||
| "description": "A refrigerator compartment", | "description": "A refrigerator compartment", | |||
| "sdfProperty": { | "sdfProperty": { | |||
| "temperature": { | "temperature": { | |||
| "sdfRef": "#/sdfProproperty/temperature", | "sdfRef": "#/sdfProperty/temperature", | |||
| "maximum": 8 | "maximum": 8 | |||
| } | } | |||
| } | } | |||
| }, | }, | |||
| "freezer": { | "freezer": { | |||
| "label": "A freezer compartment", | "label": "A freezer compartment", | |||
| "sdfProperty": { | "sdfProperty": { | |||
| "temperature": { | "temperature": { | |||
| "sdfRef": "#/sdfProproperty/temperature", | "sdfRef": "#/sdfProperty/temperature", | |||
| "maximum": -6 | "maximum": -6 | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| }, | }, | |||
| "sdfProperty": { | "sdfProperty": { | |||
| "temperature": { | "temperature": { | |||
| "description": "The temperature for this compartment", | "description": "The temperature for this compartment", | |||
| "type": "number", | "type": "number", | |||
| "unit": "Cel" | "unit": "Cel" | |||
| } | } | |||
| } | } | |||
| } | } | |||
| Figure 8: Refrigerator-Freezer Example | Figure 8: Refrigerator-Freezer Example | |||
| Appendix E. Some Changes From Earlier Drafts | Appendix E. Some Changes from Earlier Draft Versions of this | |||
| Specification | ||||
| This appendix is informative. | This appendix is informative. | |||
| The present document provides the SDF base definition. Previous | The present document provides the SDF base definition. Previous | |||
| revisions of SDF have been in use for several years, and both | revisions of SDF have been in use for several years, and both | |||
| significant collections of older SDF models and older SDF conversion | significant collections of older SDF models and older SDF conversion | |||
| tools are available today. This appendix provides a brief checklist | tools are available today. This appendix provides a brief checklist | |||
| that can aid in upgrading these to the standard. | that can aid in upgrading these to the standard. | |||
| * The quality unit was previously called units. | * The quality unit was previously called units. | |||
| End of changes. 73 change blocks. | ||||
| 603 lines changed or deleted | 511 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. | ||||