| rfc9880.original | rfc9880.txt | |||
|---|---|---|---|---|
| ASDF M. Koster, Ed. | Internet Engineering Task Force (IETF) M. Koster, Ed. | |||
| Internet-Draft KTC Control AB | Request for Comments: 9880 KTC Control AB | |||
| Intended status: Standards Track C. Bormann, Ed. | Category: Standards Track C. Bormann, Ed. | |||
| Expires: 28 January 2026 Universität Bremen TZI | ISSN: 2070-1721 Universität Bremen TZI | |||
| A. Keränen | A. Keränen | |||
| Ericsson | Ericsson | |||
| 27 July 2025 | October 2025 | |||
| Semantic Definition Format (SDF) for Data and Interactions of Things | Semantic Definition Format (SDF) for Data and Interactions of Things | |||
| draft-ietf-asdf-sdf-24 | ||||
| Abstract | Abstract | |||
| 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. | |||
| SDF is a format for domain experts to use in the creation and | SDF is a format for domain experts to use in the creation and | |||
| maintenance of data and interaction models that describe Things. An | maintenance of data and interaction models that describe Things. An | |||
| SDF specification describes definitions of SDF Objects/SDF Things and | SDF specification describes definitions of SDF Objects/SDF Things and | |||
| their associated interactions (Events, Actions, Properties), as well | their associated interactions (Events, Actions, and Properties), as | |||
| as the Data types for the information exchanged in those | well as the Data types for the information exchanged in those | |||
| interactions. Tools convert this format to database formats and | interactions. Tools convert this format to database formats and | |||
| other serializations as needed. | other serializations as needed. | |||
| About This Document | ||||
| This note is to be removed before publishing as an RFC. | ||||
| Status information for this document may be found at | ||||
| https://datatracker.ietf.org/doc/draft-ietf-asdf-sdf/. | ||||
| Discussion of this document takes place on the A Semantic Definition | ||||
| Format for Data and Interactions of Things (ASDF) Working Group | ||||
| mailing list (mailto:asdf@ietf.org), which is archived at | ||||
| https://mailarchive.ietf.org/arch/browse/asdf/. Subscribe at | ||||
| https://www.ietf.org/mailman/listinfo/asdf/. | ||||
| Source for this draft and an issue tracker can be found at | ||||
| https://github.com/ietf-wg-asdf/SDF. | ||||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
| provisions of BCP 78 and BCP 79. | ||||
| Internet-Drafts are working documents of the Internet Engineering | ||||
| Task Force (IETF). Note that other groups may also distribute | ||||
| working documents as Internet-Drafts. The list of current Internet- | ||||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
| Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
| and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
| time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
| material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
| Internet Standards is available in Section 2 of RFC 7841. | ||||
| This Internet-Draft will expire on 28 January 2026. | Information about the current status of this document, any errata, | |||
| and how to provide feedback on it may be obtained at | ||||
| https://www.rfc-editor.org/info/rfc9880. | ||||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2025 IETF Trust and the persons identified as the | Copyright (c) 2025 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
| license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
| Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
| and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
| extracted from this document must include Revised BSD License text as | to this document. Code Components extracted from this document must | |||
| described in Section 4.e of the Trust Legal Provisions and are | include Revised BSD License text as described in Section 4.e of the | |||
| provided without warranty as described in the Revised BSD License. | Trust Legal Provisions and are provided without warranty as described | |||
| in the Revised BSD License. | ||||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4 | 1. Introduction | |||
| 1.1. Structure of This Document . . . . . . . . . . . . . . . 4 | 1.1. Structure of This Document | |||
| 1.2. Terminology and Conventions . . . . . . . . . . . . . . . 5 | 1.2. Terminology and Conventions | |||
| Programming Platform Terms . . . . . . . . . . . . . . . . . 5 | Programming Platform Terms | |||
| Conceptual Terms . . . . . . . . . . . . . . . . . . . . . . 6 | Conceptual Terms | |||
| Specification Language Terms . . . . . . . . . . . . . . . . 6 | Specification Language Terms | |||
| Conventions . . . . . . . . . . . . . . . . . . . . . . . . . 8 | Conventions | |||
| 2. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . 9 | 2. Overview | |||
| 2.1. Example Definition . . . . . . . . . . . . . . . . . . . 9 | 2.1. Example Definition | |||
| 2.2. Elements of an SDF model . . . . . . . . . . . . . . . . 11 | 2.2. Elements of an SDF Model | |||
| 2.2.1. sdfObject . . . . . . . . . . . . . . . . . . . . . . 12 | 2.2.1. sdfObject | |||
| 2.2.2. sdfProperty . . . . . . . . . . . . . . . . . . . . . 13 | 2.2.2. sdfProperty | |||
| 2.2.3. sdfAction . . . . . . . . . . . . . . . . . . . . . . 14 | 2.2.3. sdfAction | |||
| 2.2.4. sdfEvent . . . . . . . . . . . . . . . . . . . . . . 15 | 2.2.4. sdfEvent | |||
| 2.2.5. sdfData . . . . . . . . . . . . . . . . . . . . . . . 15 | 2.2.5. sdfData | |||
| 2.2.6. sdfThing . . . . . . . . . . . . . . . . . . . . . . 16 | 2.2.6. sdfThing | |||
| 2.3. Member names: Given Names and Quality Names . . . . . . . 16 | 2.3. Member Names: Given Names and Quality Names | |||
| 2.3.1. Given Names and Quality Names . . . . . . . . . . . . 16 | 2.3.1. Given Names and Quality Names | |||
| 2.3.2. Hierarchical Names . . . . . . . . . . . . . . . . . 17 | 2.3.2. Hierarchical Names | |||
| 2.3.3. Extensibility of Given Names and Quality Names . . . 18 | 2.3.3. Extensibility of Given Names and Quality Names | |||
| 3. SDF Structure | ||||
| 3. SDF structure . . . . . . . . . . . . . . . . . . . . . . . . 19 | 3.1. Information Block | |||
| 3.1. Information block . . . . . . . . . . . . . . . . . . . . 19 | 3.2. Namespaces Block | |||
| 3.2. Namespaces block . . . . . . . . . . . . . . . . . . . . 21 | 3.3. Definitions Block | |||
| 3.3. Definitions block . . . . . . . . . . . . . . . . . . . . 22 | 3.4. Top-Level Affordances and sdfData | |||
| 3.4. Top-level Affordances and sdfData . . . . . . . . . . . . 23 | 4. Names and Namespaces | |||
| 4. Names and namespaces . . . . . . . . . . . . . . . . . . . . 23 | 4.1. Structure | |||
| 4.1. Structure . . . . . . . . . . . . . . . . . . . . . . . . 23 | 4.2. Contributing Global Names | |||
| 4.2. Contributing global names . . . . . . . . . . . . . . . . 24 | 4.3. Referencing Global Names | |||
| 4.3. Referencing global names . . . . . . . . . . . . . . . . 25 | 4.4. sdfRef | |||
| 4.4. sdfRef . . . . . . . . . . . . . . . . . . . . . . . . . 26 | 4.4.1. Resolved Models | |||
| 4.4.1. Resolved models . . . . . . . . . . . . . . . . . . . 28 | 4.5. sdfRequired | |||
| 4.5. sdfRequired . . . . . . . . . . . . . . . . . . . . . . . 29 | 4.6. Common Qualities | |||
| 4.6. Common Qualities . . . . . . . . . . . . . . . . . . . . 32 | 4.7. Data Qualities | |||
| 4.7. Data Qualities . . . . . . . . . . . . . . . . . . . . . 32 | 4.7.1. sdfType | |||
| 4.7.1. sdfType . . . . . . . . . . . . . . . . . . . . . . . 34 | 4.7.2. sdfChoice | |||
| 4.7.2. sdfChoice . . . . . . . . . . . . . . . . . . . . . . 35 | 5. Keywords for Definition Groups | |||
| 5. Keywords for definition groups . . . . . . . . . . . . . . . 37 | 5.1. sdfObject | |||
| 5.1. sdfObject . . . . . . . . . . . . . . . . . . . . . . . . 37 | 5.2. sdfProperty | |||
| 5.2. sdfProperty . . . . . . . . . . . . . . . . . . . . . . . 38 | 5.3. sdfAction | |||
| 5.3. sdfAction . . . . . . . . . . . . . . . . . . . . . . . . 39 | 5.4. sdfEvent | |||
| 5.4. sdfEvent . . . . . . . . . . . . . . . . . . . . . . . . 39 | 5.5. sdfData | |||
| 5.5. sdfData . . . . . . . . . . . . . . . . . . . . . . . . . 40 | 6. High-Level Composition | |||
| 6. High Level Composition . . . . . . . . . . . . . . . . . . . 40 | 6.1. Paths in the Model Namespaces | |||
| 6.1. Paths in the model namespaces . . . . . . . . . . . . . . 41 | 6.2. Modular Composition | |||
| 6.2. Modular Composition . . . . . . . . . . . . . . . . . . . 41 | 6.2.1. Use of the "sdfRef" Keyword to Reuse a Definition | |||
| 6.2.1. Use of the "sdfRef" keyword to re-use a definition . 41 | 6.3. sdfThing | |||
| 6.3. sdfThing . . . . . . . . . . . . . . . . . . . . . . . . 42 | 7. IANA Considerations | |||
| 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 43 | 7.1. Media Type | |||
| 7.1. Media Type . . . . . . . . . . . . . . . . . . . . . . . 43 | 7.2. Content-Format | |||
| 7.2. Content-Format . . . . . . . . . . . . . . . . . . . . . 44 | 7.3. IETF URN Sub-Namespace for Unit Names | |||
| 7.3. IETF URN Sub-namespace for Unit Names | (urn:ietf:params:unit) | |||
| (urn:ietf:params:unit) . . . . . . . . . . . . . . . . . 45 | 7.4. SenML Registry Group | |||
| 7.4. SenML registry group . . . . . . . . . . . . . . . . . . 45 | 7.5. Registries | |||
| 7.5. Registries . . . . . . . . . . . . . . . . . . . . . . . 46 | 7.5.1. SDF Quality Names | |||
| 7.5.1. Quality Names . . . . . . . . . . . . . . . . . . . . 46 | 7.5.2. SDF Quality Name Prefixes | |||
| 7.5.2. Quality Name Prefixes . . . . . . . . . . . . . . . . 48 | 7.5.3. sdfType Values | |||
| 7.5.3. sdfType Values . . . . . . . . . . . . . . . . . . . 49 | 7.5.4. SDF Feature Names | |||
| 7.5.4. Feature Names . . . . . . . . . . . . . . . . . . . . 49 | 8. Security Considerations | |||
| 8. Security Considerations . . . . . . . . . . . . . . . . . . . 50 | 9. References | |||
| 9. References . . . . . . . . . . . . . . . . . . . . . . . . . 51 | 9.1. Normative References | |||
| 9.1. Normative References . . . . . . . . . . . . . . . . . . 51 | 9.2. Informative References | |||
| 9.2. Informative References . . . . . . . . . . . . . . . . . 54 | Appendix A. Formal Syntax of SDF | |||
| Appendix A. Formal Syntax of SDF . . . . . . . . . . . . . . . . 57 | Appendix B. json-schema.org Rendition of SDF Syntax | |||
| Appendix B. json-schema.org Rendition of SDF Syntax . . . . . . 62 | Appendix C. Data Qualities Inspired by json-schema.org | |||
| Appendix C. Data Qualities inspired by json-schema.org . . . . . 104 | C.1. type "number", type "integer" | |||
| C.1. type "number", type "integer" . . . . . . . . . . . . . . 105 | C.2. type "string" | |||
| C.2. type "string" . . . . . . . . . . . . . . . . . . . . . . 105 | C.3. type "boolean" | |||
| C.3. type "boolean" . . . . . . . . . . . . . . . . . . . . . 106 | C.4. type "array" | |||
| C.4. type "array" . . . . . . . . . . . . . . . . . . . . . . 106 | C.5. type "object" | |||
| C.5. type "object" . . . . . . . . . . . . . . . . . . . . . . 106 | C.6. Implementation Notes | |||
| C.6. Implementation notes . . . . . . . . . . . . . . . . . . 107 | Appendix D. Composition Examples | |||
| Appendix D. Composition Examples . . . . . . . . . . . . . . . . 108 | D.1. Outlet Strip Example | |||
| D.1. Outlet Strip Example . . . . . . . . . . . . . . . . . . 108 | D.2. Refrigerator-Freezer Example | |||
| D.2. Refrigerator-Freezer Example . . . . . . . . . . . . . . 108 | Appendix E. Some Changes From Earlier Drafts | |||
| Appendix E. Some Changes From Earlier Drafts . . . . . . . . . . 109 | List of Figures | |||
| List of Figures . . . . . . . . . . . . . . . . . . . . . . . . . 110 | List of Tables | |||
| List of Tables . . . . . . . . . . . . . . . . . . . . . . . . . 110 | Acknowledgements | |||
| Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . 111 | Contributors | |||
| Contributors . . . . . . . . . . . . . . . . . . . . . . . . . . 111 | Authors' Addresses | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 111 | ||||
| 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. | |||
| SDF is a format for domain experts to use in the creation and | SDF is a format for domain experts to use in the creation and | |||
| maintenance of data and interaction models that describe Things. An | maintenance of data and interaction models that describe Things. An | |||
| SDF specification describes definitions of SDF Objects/SDF Things and | SDF specification describes definitions of SDF Objects/SDF Things and | |||
| their associated interactions (Events, Actions, Properties), as well | their associated interactions (Events, Actions, and Properties), as | |||
| as the Data types for the information exchanged in those | well as the Data types for the information exchanged in those | |||
| interactions. Tools convert this format to database formats and | interactions. Tools convert this format to database formats and | |||
| other serializations as needed. | other serializations as needed. | |||
| SDF is designed to be an extensible format. The present document | SDF is designed to be an extensible format. The present document | |||
| constitutes the base specification for SDF: "base SDF" for short. In | constitutes the base specification for SDF, "base SDF" for short. In | |||
| addition, SDF extensions can be defined, some of which may make use | addition, SDF extensions can be defined, some of which may make use | |||
| of extension points specifically defined for this in base SDF. One | of extension points specifically defined for this in base SDF. One | |||
| area for such extensions would be refinements of SDF's abstract | area for such extensions would be refinements of SDF's abstract | |||
| interaction models into protocol bindings for specific ecosystems | interaction models into protocol bindings for specific ecosystems | |||
| (e.g., [I-D.bormann-asdf-sdf-mapping]). For the use of certain other | (e.g., [SDF-MAPPING]). For the use of certain other extensions, it | |||
| extensions, it may be necessary to indicate in the SDF document using | may be necessary to indicate in the SDF document using them that a | |||
| them that a specific extension is in effect; see Section 3.1 for | specific extension is in effect; see Section 3.1 for details of the | |||
| details of the features quality that can be used for such | features quality that can be used for such indications. With | |||
| indications. With extension points and feature indications | extension points and feature indications available, base SDF does not | |||
| available, base SDF does not define a "version" concept for the SDF | define a "version" concept for the SDF format itself (as opposed to | |||
| format itself (as opposed to version indications within SDF documents | version indications within SDF documents indicating their own | |||
| indicating their own evolution, see Section 3.1). | evolution; see Section 3.1). | |||
| 1.1. Structure of This Document | 1.1. Structure of This Document | |||
| After introductory material and an overview (Section 2) over the | After introductory material and an overview (Section 2) over the | |||
| elements of the model and over the different kinds of names used, | elements of the model and the different kinds of names used, | |||
| Section 3 introduces the main components of an SDF model. Section 4 | Section 3 introduces the main components of an SDF model. Section 4 | |||
| revisits names and structures them into namespaces. Section 5 | revisits names and structures them into namespaces. Section 5 | |||
| discusses the inner structure of the Objects defined by SDF, the | discusses the inner structure of the Objects defined by SDF, the | |||
| sdfObjects, in further detail. Section 6 discusses how SDF supports | sdfObjects, in further detail. Section 6 discusses how SDF supports | |||
| composition. Conventional Sections (IANA Considerations, Security | composition. Conventional Sections (IANA Considerations, Security | |||
| Considerations, Normative References, and Informative References) | Considerations, Normative References, and Informative References) | |||
| follow. The normative Appendix A defines the syntax of SDF in terms | follow. The normative Appendix A defines the syntax of SDF in terms | |||
| of its JSON structures, employing the Concise Data Definition | of its JSON structures, employing the Concise Data Definition | |||
| Language (CDDL) [RFC8610]. This is followed by the informative | Language (CDDL) [RFC8610]. This is followed by the informative | |||
| Appendix B, a rendition of the SDF syntax in a "JSON Schema" format | Appendix B, a rendition of the SDF syntax in a "JSON Schema" format | |||
| skipping to change at page 5, line 21 ¶ | skipping to change at line 188 ¶ | |||
| The normative Appendix C defines certain terms ("data qualities") | The normative Appendix C defines certain terms ("data qualities") | |||
| used at the SDF data model level that were inspired by JSO. The | used at the SDF data model level that were inspired by JSO. The | |||
| informative Appendix D provides a few examples for the use of | informative Appendix D provides a few examples for the use of | |||
| composition in SDF. Finally, Appendix E provides some historical | composition in SDF. Finally, Appendix E provides some historical | |||
| information that can be useful in upgrading earlier, pre-standard SDF | information that can be useful in upgrading earlier, pre-standard SDF | |||
| models and implementations to SDF base. | models and implementations to SDF base. | |||
| 1.2. Terminology and Conventions | 1.2. Terminology and Conventions | |||
| Terms introduced in this section are capitalized when used in this | Terms introduced in this section are capitalized when used in this | |||
| section; to maintain readability, capitalization is only done when | section. To maintain readability, capitalization is only used when | |||
| needed where they are used in the body of this document. | needed where they are used in the body of this document. | |||
| Programming Platform Terms | Programming Platform Terms | |||
| The following definitions mention terms that are used with specific | The following definitions mention terms that are used with specific | |||
| meanings in various programming platforms, but often have an | meanings in various programming platforms, but often have an | |||
| independent definition for this document, which can be found further | independent definition for this document, which can be found further | |||
| below in this section. | below in this section. | |||
| Element: A generic term used here in its English sense. | Element: A generic term used here in its English sense. | |||
| Exceptionally, in Appendix C, used explicitly in accordance with | Exceptionally, in Appendix C, the term is used explicitly in | |||
| its meaning in the JSON ecosystem, i.e., the elements of JSON | accordance with its meaning in the JSON ecosystem, i.e., the | |||
| arrays. | elements of JSON arrays. | |||
| Entry: A key-value pair in a map. (In JSON maps, sometimes also | Entry: A key-value pair in a map. (In JSON maps, sometimes also | |||
| called "member".) | called "member".) | |||
| Map: A collection of entries (key-value pairs), where there are no | Map: A collection of entries (key-value pairs) where there are no | |||
| two entries with equivalent keys. (Also known as associative | two entries with equivalent keys. (Also known as associative | |||
| array, dictionary, or symbol table.) | array, dictionary, or symbol table.) | |||
| Object: An otherwise very generic term that JavaScript (and thus | Object: An otherwise very generic term that JavaScript (and thus | |||
| JSON) uses for the kind of maps that were part of the original | JSON) uses for the kind of maps that were part of the original | |||
| languages from the outset. In this document, Object is used | languages from the outset. In this document, Object is used | |||
| exclusively in its general English meaning or as the colloquial | exclusively in its general English meaning or as the colloquial | |||
| shorthand for sdfObject, even if the type name "object" is | shorthand for sdfObject, even if the type name "object" is | |||
| imported with JSON-related semantics from a data definition | imported with JSON-related semantics from a data definition | |||
| language. | language. | |||
| skipping to change at page 7, line 11 ¶ | skipping to change at line 270 ¶ | |||
| nested maps. | nested maps. | |||
| SDF Model: Definitions and declarations that model the digital | SDF Model: Definitions and declarations that model the digital | |||
| 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 together serve a specific function. | 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 main JSON map that represents the SDF | |||
| document, and in certain nested definitions. A group has a Class | document, and in certain nested definitions. A group has a Class | |||
| Name Keyword as its key and a map of named definition entries | Name Keyword as its key and a map of named definition entries | |||
| (Definition Group) as a value. | (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 which 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 | |||
| represented in SDF as an entry in a JSON map (JSON object) that | represented in SDF as an entry in a JSON map (JSON object) that | |||
| serves as a definition or declaration. (The term "Quality" is | serves as a definition or declaration. (The term "Quality" is | |||
| used because another popular term, "Property", already has a | used because another popular term, "Property", already has a | |||
| different meaning.) | different meaning.) | |||
| Definition: An entry in a Definition Group. The entry creates a new | Definition: An entry in a Definition Group. The entry creates a new | |||
| semantic term for use in SDF models and associates it with a set | semantic term for use in SDF models and associates it with a set | |||
| of qualities. Unless the Class Name Keyword of the Group also | of qualities. Unless the Class Name Keyword of the Group also | |||
| makes it a Declaration (see Section 3.3), a definition just | makes it a Declaration (see Section 3.3), a definition just | |||
| defines a term, it does not create a component item within the | defines a term and it does not create a component item within the | |||
| enclosing definition. | enclosing definition. | |||
| Declaration: A definition within an enclosing definition that is | Declaration: A definition within an enclosing definition that is | |||
| intended to create a component item within that enclosing | intended to create a component item within that enclosing | |||
| definition. Every declaration can also be used as a definition | definition. Every declaration can also be used as a definition | |||
| for reference elsewhere. | for reference elsewhere. | |||
| Grouping: An sdfThing or sdfObject, i.e., (directly or indirectly) a | Grouping: An sdfThing or sdfObject, i.e., (directly or indirectly) a | |||
| description for a combination of Affordances. | description for a combination of Affordances. | |||
| Object, sdfObject: A Grouping that contains Affordance declarations | Object, sdfObject: A Grouping that contains Affordance declarations | |||
| (Property, Action, and Event declarations) only. It serves as the | (Property, Action, and Event declarations) only. It serves as the | |||
| main "atom" of reusable semantics for model construction, | main "atom" of reusable semantics for model construction, | |||
| representing the interaction model for a Thing that is simple | representing the interaction model for a Thing that is simple | |||
| enough to not require nested structure. sdfObjects are therefore | enough to not require a nested structure. Therefore, sdfObjects | |||
| similar to sdfThings but do not allow nesting, i.e., they cannot | are similar to sdfThings, but do not allow nesting, i.e., they | |||
| contain other Groupings (sdfObjects or sdfThings). | cannot contain other Groupings (sdfObjects or sdfThings). | |||
| sdfThing: A Grouping that can contain nested Groupings (sdfThings | sdfThing: A Grouping that can contain nested Groupings (sdfThings | |||
| and sdfObjects). Like sdfObject, it can also contain Affordance | and sdfObjects). Like sdfObject, it can also contain Affordance | |||
| declarations (Property, Action, and Event declarations). (Note | declarations (Property, Action, and Event declarations). (Note | |||
| that "Thing" has a different meaning from sdfThing and therefore | that "Thing" has a different meaning from sdfThing and is | |||
| is not available as a colloquial shorthand of sdfThing.) | therefore not available as a colloquial shorthand of sdfThing.) | |||
| Augmentation Mechanism: A companion document to a base SDF Model | Augmentation Mechanism: A companion document to a base SDF Model | |||
| that provides additional information ("augments" the base | that provides additional information ("augments" the base | |||
| specification). The information may be for use in a specific | specification). The information may be for use in a specific | |||
| ecosystem or with a specific protocol ("Protocol Binding"). No | ecosystem or with a specific protocol ("Protocol Binding"). No | |||
| specific Augmentation Mechanisms are defined in base SDF. A | specific Augmentation Mechanisms are defined in base SDF. A | |||
| simple mechanism for such augmentations has been discussed as a | simple mechanism for such augmentations has been discussed as a | |||
| "mapping file" [I-D.bormann-asdf-sdf-mapping]. | "mapping file" [SDF-MAPPING]. | |||
| Protocol Binding: A companion document to an SDF Model that defines | Protocol Binding: A companion document to an SDF Model that defines | |||
| how to map the abstract concepts in the model into the protocols | how to map the abstract concepts in the model into the protocols | |||
| in use in a specific ecosystem. The Protocol Binding might supply | that are in use in a specific ecosystem. The Protocol Binding | |||
| URL components, numeric IDs, and similar details. Protocol | might supply URL components, numeric IDs, and similar details. | |||
| Bindings are one case of an Augmentation Mechanism. | Protocol Bindings are one case of an Augmentation Mechanism. | |||
| Conventions | Conventions | |||
| Regular expressions that are used in the text as a "pattern" for some | Regular expressions that are used in the text as a "pattern" for some | |||
| string are interpreted as per [RFC9485]. (Note that a form of | string are interpreted as per [RFC9485]. (Note that a form of | |||
| regular expressions is also used as values of the quality pattern; | regular expressions is also used as values of the quality pattern; | |||
| see Appendix C.2.) | see Appendix C.2.) | |||
| The term "URI" in this document always refers to "full" URIs ("URI" | The term "URI" in this document always refers to "full" URIs ("URI" | |||
| in Section 3 of RFC 3986 [STD66]), never to relative URI references | in Section 3 of RFC 3986 [STD66]), never to relative URI references | |||
| ("relative-ref" in Section 4.1 of RFC 3986 [STD66]), so the term | ("relative-ref" in Section 4.1 of RFC 3986 [STD66]), so the term | |||
| "URI" does _NOT_ serve as the colloquial abbreviation of "URI- | "URI" does _NOT_ serve as the colloquial abbreviation of "URI- | |||
| Reference" it is often used for. Therefore, the "reference | Reference" it is often used for. Therefore, the "reference | |||
| resolution" process defined in Section 5 of RFC 3986 [STD66] is _NOT_ | resolution" process defined in Section 5 of RFC 3986 [STD66] is _NOT_ | |||
| used in this specification. Where necessary, full URIs are assembled | used in this specification. Where necessary, full URIs are assembled | |||
| out of substrings by simple concatenation, e.g. when CURIEs are | out of substrings by simple concatenation, e.g., when CURIEs are | |||
| expanded (Section 4.3), or when a global name is formed out of a | expanded (Section 4.3) or when a global name is formed out of a | |||
| namespace absolute-URI (Section 5 of RFC 3986 [STD66]) and a fragment | namespace absolute-URI (Section 5 of RFC 3986 [STD66]) and a fragment | |||
| identifier part (Section 4.1). Note also that URIs are not only used | identifier part (Section 4.1). Also note that URIs are not only used | |||
| to construct the SDF models, they are also the _subject_ of SDF | to construct the SDF models, they are also the _subject_ of SDF | |||
| models where they are used as data in actual interactions (and could | models where they are used as data in actual interactions (and could | |||
| even be represented as relative references there); these two usages | even be represented as relative references there); these two usages | |||
| are entirely separate. | are entirely separate. | |||
| The singular form is chosen as the preferred one for the keywords | The singular form is chosen as the preferred one for the keywords | |||
| defined in this specification. | defined in this specification. | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
| "OPTIONAL" in this document are to be interpreted as described in | "OPTIONAL" in this document are to be interpreted as described in | |||
| [BCP14] (RFC2119) (RFC8174) when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
| capitals, as shown here. | capitals, as shown here. | |||
| 2. Overview | 2. Overview | |||
| 2.1. Example Definition | 2.1. Example Definition | |||
| The overview starts with an example for the SDF definition of a | The overview starts with an example for the SDF definition of a | |||
| simple sdfObject called "Switch" (Figure 1). | simple sdfObject called "Switch" (Figure 1). | |||
| { | { | |||
| skipping to change at page 10, line 43 ¶ | skipping to change at line 412 ¶ | |||
| }, | }, | |||
| "toggle": { | "toggle": { | |||
| "description": | "description": | |||
| "Toggle the switch; equivalent to setting value to its complement." | "Toggle the switch; equivalent to setting value to its complement." | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| Figure 1: A simple example of an SDF document | Figure 1: A Simple Example of an SDF Document | |||
| This is a model of a switch. The state value declared in the | This is a model of a switch. The state value declared in the | |||
| sdfProperty group, represented by a Boolean, will be true for "on" | sdfProperty group, represented by a Boolean, will be true for "on" | |||
| and will be false for "off". The actions on or off declared in the | and will be false for "off". The Actions on or off declared in the | |||
| sdfAction group are redundant with setting the value and are in the | sdfAction group are redundant with setting the value and are in the | |||
| example to illustrate that there are often different ways of | example to illustrate that there are often different ways of | |||
| achieving the same effect. The action toggle will invert the value | achieving the same effect. The action toggle will invert the value | |||
| of the sdfProperty value, so that 2-way switches can be created; | of the sdfProperty value so that 2-way switches can be created; | |||
| having such action will avoid the need for first retrieving the | having such action will avoid the need for retrieving the current | |||
| current value and then applying/setting the inverted value. | value first and then applying/setting the inverted value. | |||
| The sdfObject group lists the affordances of Things modeled by this | The sdfObject group lists the affordances of Things modeled by this | |||
| sdfObject. The sdfProperty group lists the property affordances | sdfObject. The sdfProperty group lists the property affordances | |||
| described by the model; these represent various perspectives on the | described by the model; these represent various perspectives on the | |||
| state of the sdfObject. Properties can have additional qualities to | state of the sdfObject. Properties can have additional qualities to | |||
| describe the state more precisely. Properties can be annotated to be | describe the state more precisely. Properties can be annotated to be | |||
| read, write or read/write; how this is actually done by the | read, write, or read/write; how this is actually done by the | |||
| underlying transfer protocols is not described in the SDF model but | underlying transfer protocols is not described in the SDF model but | |||
| left to companion protocol bindings. Properties are often used with | left to companion protocol bindings. Properties are often used with | |||
| RESTful paradigms [I-D.irtf-t2trg-rest-iot], describing state. The | RESTful paradigms [REST-IOT] describing state. The sdfAction group | |||
| sdfAction group is the mechanism to describe other interactions in | is the mechanism to describe other interactions in terms of their | |||
| terms of their names, input, and output data (no data are used in the | names, input, and output data (no data are used in the example), as | |||
| example), as in a POST method in REST or in a remote procedure call. | in a POST method in REST or in a remote procedure call. The example | |||
| The example toggle is an Action that changes the state based on the | toggle is an Action that changes the state based on the current state | |||
| current state of the Property named value. (The third type of | of the Property named value. (The third type of affordance is | |||
| affordance is Events, which are not described in this example.) | Events, which are not described in this example.) | |||
| In the JSON representation, the info group is an exception in that | In the JSON representation, the info group is an exception in that | |||
| this group's map has keys taken from the SDF vocabulary. All other | this group's map has keys taken from the SDF vocabulary. All other | |||
| groups (such as namespace, sdfObject) have maps with keys that are | groups (such as namespace and sdfObject) have maps with keys that are | |||
| freely defined by the model writer (Switch, value, on, etc.); these | freely defined by the model writer (Switch, value, on, etc.). These | |||
| map keys are therefore called _given names_. The groups made up of | map keys are therefore called _given names_. The groups made up of | |||
| entries with given names as keys usually use the named<> production | entries with given names as keys usually use the named<> production | |||
| in the formal syntax of SDF (Appendix A). Where the values of these | in the formal syntax of SDF Appendix A. Where the values of these | |||
| entries are maps, these again use SDF vocabulary keys, and so on, | entries are maps, these again use SDF vocabulary keys, and so on, | |||
| generally alternating in further nesting. The SDF-defined vocabulary | generally alternating in further nesting. The SDF-defined vocabulary | |||
| items used in the hierarchy of such groups are often, but not always, | items used in the hierarchy of such groups are often, but not always, | |||
| called _quality names_ or _qualities_. See Section 2.3 for more | called _quality names_ or _qualities_. See Section 2.3 for more | |||
| information about naming in SDF. | information about naming in SDF. | |||
| 2.2. Elements of an SDF model | 2.2. Elements of an SDF Model | |||
| The SDF language uses six predefined Class Name Keywords for modeling | The SDF language uses six predefined Class Name Keywords for modeling | |||
| connected Things which are illustrated in Figure 2 (limited rendition | connected Things, which are illustrated in Figure 2 (limited | |||
| in the plaintext form of this document, please use typographic forms | rendition in the plaintext form of this document, please use | |||
| for full information). | typographic forms for full information). | |||
| ,--------. | ,--------. | |||
| |sdfThing|------. | |sdfThing|------. | |||
| ,--------------|--------| | hasThing | ,--------------|--------| | hasThing | |||
| | |--------|<-----' | | |--------|<-----' | |||
| | `--------' | | `--------' | |||
| | | | | | | | | | | |||
| | hasObject | | \ | | hasObject | | \ | |||
| | v | \ | | v | \ | |||
| | ,---------. | \ | | ,---------. | \ | |||
| skipping to change at page 12, line 34 ¶ | skipping to change at line 489 ¶ | |||
| `-----------' `---------' `--------' | `-----------' `---------' `--------' | |||
| | hasInput| |hasOutput | | | hasInput| |hasOutput | | |||
| | Data| |Data | | | Data| |Data | | |||
| | v v | | | v v | | |||
| | ,-------. | | | ,-------. | | |||
| | isInst |sdfData| hasOutp | | | isInst |sdfData| hasOutp | | |||
| `----------->|-------|<----------' | `----------->|-------|<----------' | |||
| anceOf |-------| utData | anceOf |-------| utData | |||
| `-------' | `-------' | |||
| Figure 2: Main classes used in SDF models | Figure 2: Main Classes Used in SDF Models | |||
| The six main Class Name Keywords are discussed below. | The six main Class Name Keywords are discussed below. | |||
| 2.2.1. sdfObject | 2.2.1. sdfObject | |||
| sdfObjects, the items listed in an sdfObject definition group, are | sdfObjects, the items listed in an sdfObject definition group, are | |||
| the main "atom" of reusable semantics for model construction. The | the main "atom" of reusable semantics for model construction. The | |||
| concept aligns in scope with common definition items from many IoT | concept aligns in scope with common definition items from many IoT | |||
| modeling systems, for example ZigBee Clusters [ZCL], OMA SpecWorks | modeling systems, e.g., ZigBee Clusters [ZCL], OMA SpecWorks LwM2M | |||
| LwM2M Objects [OMA], OCF Resource Types [OCF], and W3C Web of Things | Objects [OMA], OCF Resource Types [OCF], and W3C Web of Things [WoT]. | |||
| [WoT]. | ||||
| An sdfObject definition contains a set of sdfProperty, sdfAction, and | An sdfObject definition contains a set of sdfProperty, sdfAction, and | |||
| sdfEvent definitions that describe the interaction affordances | sdfEvent definitions that describe the interaction affordances | |||
| associated with some scope of functionality. | associated with some scope of functionality. | |||
| For the granularity of definition, sdfObject definitions are meant to | For the granularity of definition, sdfObject definitions are meant to | |||
| be kept narrow enough in scope to enable broad reuse and | be kept narrow enough in scope to enable broad reuse and | |||
| interoperability. For example, defining a light bulb using separate | interoperability. For example, defining a light bulb using separate | |||
| sdfObject definitions for on/off control, dimming, and color control | sdfObject definitions for on/off control, dimming, and color control | |||
| affordances will enable interoperable functionality to be configured | affordances will enable interoperable functionality to be configured | |||
| skipping to change at page 13, line 34 ¶ | skipping to change at line 534 ¶ | |||
| by the enclosing grouping. | by the enclosing grouping. | |||
| A named definition entry in an sdfProperty may be associated with | A named definition entry in an sdfProperty may be associated with | |||
| some protocol affordance to enable the application to obtain the | some protocol affordance to enable the application to obtain the | |||
| state variable and, optionally, modify the state variable. | state variable and, optionally, modify the state variable. | |||
| Additionally, some protocols provide for in-time reporting of state | Additionally, some protocols provide for in-time reporting of state | |||
| changes. (These three aspects are described by the qualities | changes. (These three aspects are described by the qualities | |||
| readable, writable, and observable defined for an sdfProperty.) | readable, writable, and observable defined for an sdfProperty.) | |||
| Definitions in sdfProperty groups look like the definitions in | Definitions in sdfProperty groups look like the definitions in | |||
| sdfData groups. However, they actually also declare that a Property | sdfData groups. However, they actually declare that a Property with | |||
| with the given qualities potentially is present in the containing | the given qualities potentially is present in the containing | |||
| sdfObject. | sdfObject. | |||
| For definitions in sdfProperty and sdfData, SDF provides qualities | For definitions in sdfProperty and sdfData, SDF provides qualities | |||
| that can constrain the structure and values of data allowed in the | that can constrain the structure and values of data allowed in the | |||
| interactions modeled by them. It also provides qualities that | interactions modeled by them. It also provides qualities that | |||
| associate semantics to these 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 the 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 | |||
| skipping to change at page 14, line 31 ¶ | skipping to change at line 570 ¶ | |||
| 2.2.3. sdfAction | 2.2.3. sdfAction | |||
| The sdfAction group contains declarations of Actions, which model | The sdfAction group contains declarations of Actions, which model | |||
| affordances that, when triggered, have an effect that can go beyond | affordances that, when triggered, have an effect that can go beyond | |||
| just reading, updating, or observing Thing state. Actions often | just reading, updating, or observing Thing state. Actions often | |||
| result in some outward physical effect (which, itself, cannot be | result in some outward physical effect (which, itself, cannot be | |||
| modeled in SDF). From a programmer's perspective, they might be | modeled in SDF). From a programmer's perspective, they might be | |||
| considered to be roughly analogous to method calls. | considered to be roughly analogous to method calls. | |||
| Actions may have data parameters: these are modeled as a single item | Actions may have data parameters; these are each modeled as a single | |||
| of input data and output data, each. Where multiple parameters need | item of input data and output data. Where multiple parameters need | |||
| to be modeled, an "object" type can be used to combine these | to be modeled, an "object" type can be used to combine these | |||
| parameters into one; for an example see Figure 6 in Appendix C.5. | parameters into one; for an example, see Figure 6 in Appendix C.5. | |||
| Actions may be long-running, that is to say that the effects may not | Actions may be long-running, that is to say that the effects may not | |||
| take place immediately as would be expected for an update to an | take place immediately as would be expected for an update to an | |||
| sdfProperty; the effects may play out over time and emit action | sdfProperty; the effects may play out over time and emit action | |||
| results. Actions may also not always complete and may result in | results. Actions may also not always complete and may result in | |||
| application errors, such as an item blocking the closing of an | application errors, such as an item blocking the closing of an | |||
| automatic door. | automatic door. | |||
| One idiom for giving an action initiator status and control about the | One idiom for giving an action initiator status and control about the | |||
| ongoing action is to provide a URI for an ephemeral "action resource" | ongoing action is to provide a URI for an ephemeral "action resource" | |||
| in the sdfAction output data, allowing the action to deliver | in the sdfAction output data, allowing the action to deliver | |||
| immediate feedback (including errors that prevent the action from | immediate feedback (including errors that prevent the action from | |||
| starting) and the action initiator to use the action resource for | starting) and the action initiator to use the action resource for | |||
| further observation or modification of the ongoing action (including | further observation or modification of the ongoing action (including | |||
| canceling it). Base SDF does not provide any tailored support for | canceling it). Base SDF does not provide any tailored support for | |||
| describing such action resources; an extension for modeling links in | describing such action resources; an extension for modeling links in | |||
| more detail (for instance, [I-D.bormann-asdf-sdftype-link]) may be | more detail (for instance, [SDFTYPE-LINK]) may be all that is needed | |||
| all that is needed to fully enable modeling them. | to fully enable modeling them. | |||
| Actions may have (or lack) the characteristics of idempotence and | Actions may have (or lack) the characteristics of idempotence and | |||
| side-effect safety (see Section 9.2 of RFC 9110 [STD97] for more on | side-effect safety (see Section 9.2 of RFC 9110 [STD97] for more on | |||
| these terms). | these terms). | |||
| Base SDF only provides data constraint modeling and semantics for the | Base SDF only provides data constraint modeling and semantics for the | |||
| input and output data of definitions in sdfAction groups. Again, | input and output data of definitions in sdfAction groups. Again, | |||
| data definitions for payloads of protocol messages, and detailed | data definitions for payloads of protocol messages, and detailed | |||
| protocol settings for invoking the action, are expected to be part of | protocol settings for invoking the action, are expected to be part of | |||
| the protocol binding. | the protocol binding. | |||
| 2.2.4. sdfEvent | 2.2.4. sdfEvent | |||
| The sdfEvent group contains declarations of Events, which model | The sdfEvent group contains declarations of Events, which model | |||
| affordances that inform about "happenings" associated with a Thing | affordances that inform about "happenings" associated with a Thing | |||
| modeled by the enclosing sdfObject; these may result in a signal | modeled by the enclosing sdfObject; these may result in a signal | |||
| being stored or emitted as a result. | being stored or emitted as a result. | |||
| Note that there is a trivial overlap with sdfProperty state changes, | Note that there is a trivial overlap with sdfProperty state changes, | |||
| which may also be defined as events but are not generally required to | which may also be defined as Events but are not generally required to | |||
| be defined as such. However, Events may exhibit certain ordering, | be defined as such. However, Events may exhibit certain ordering, | |||
| consistency, and reliability requirements that are expected to be | consistency, and reliability requirements that are expected to be | |||
| supported in various implementations of sdfEvent that do distinguish | supported in various implementations of sdfEvent that do distinguish | |||
| sdfEvent from sdfProperty. For instance, while a state change may | sdfEvent from sdfProperty. For instance, while a state change may | |||
| simply be superseded by another state change, some events are | simply be superseded by another state change, some Events are | |||
| "precious" and need to be preserved even if further events follow. | "precious" and need to be preserved even if further Events follow. | |||
| Base SDF only provides data constraint modeling and semantics for the | Base SDF only provides data constraint modeling and semantics for the | |||
| output data of Event affordances. Again, data definitions for | output data of Event affordances. Again, data definitions for | |||
| payloads of protocol messages, and detailed protocol settings for | payloads of protocol messages, and detailed protocol settings for | |||
| soliciting the event, are expected to be part of the protocol | soliciting the event, are expected to be part of the protocol | |||
| binding. | binding. | |||
| 2.2.5. sdfData | 2.2.5. sdfData | |||
| Definitions in sdfData groups do not themselves specify affordances. | Definitions in sdfData groups do not themselves specify affordances. | |||
| skipping to change at page 16, line 8 ¶ | skipping to change at line 639 ¶ | |||
| groups to enable common modeling patterns, data constraints, and | groups to enable common modeling patterns, data constraints, and | |||
| semantic anchor concepts to be factored out for data items that make | semantic anchor concepts to be factored out for data items that make | |||
| up sdfProperty items and serve as input and output data for sdfAction | up sdfProperty items and serve as input and output data for sdfAction | |||
| and sdfEvent items. The data types defined in sdfData definitions | and sdfEvent items. The data types defined in sdfData definitions | |||
| only spring to life by being referenced in one of these contexts | only spring to life by being referenced in one of these contexts | |||
| (directly or indirectly via some other sdfData definitions). | (directly or indirectly via some other sdfData definitions). | |||
| It is a common use case for such a data definition to be shared | It is a common use case for such a data definition to be shared | |||
| between an sdfProperty item and input or output parameters of an | between an sdfProperty item and input or output parameters of an | |||
| sdfAction or output data provided by an sdfEvent. sdfData definitions | sdfAction or output data provided by an sdfEvent. sdfData definitions | |||
| also enable factoring out extended application data types such as | also enable factoring out extended application data types, such as | |||
| mode and machine state enumerations to be reused across multiple | mode and machine state enumerations to be reused across multiple | |||
| definitions that have similar basic characteristics and requirements. | definitions that have similar basic characteristics and requirements. | |||
| 2.2.6. sdfThing | 2.2.6. sdfThing | |||
| Back at the top level, the sdfThing group enables definition of | Back at the top level, the sdfThing group enables definition of | |||
| models for complex devices that will use one or more sdfObject | models for complex devices that will use one or more sdfObject | |||
| definitions. Like sdfObject, sdfThing groups allow for the inclusion | definitions. Like sdfObject, sdfThing groups allow for the inclusion | |||
| of interaction affordances, sdfData, as well as "minItems" and | of interaction affordances, sdfData, as well as "minItems" and | |||
| "maxItems" qualities. Therefore, they can be seen as a superset of | "maxItems" qualities. Therefore, they can be seen as a superset of | |||
| sdfObject groups, additionally allowing for composition. | sdfObject groups, additionally allowing for composition. | |||
| As a result, an sdfThing directly or indirectly contains a set of | As a result, an sdfThing directly or indirectly contains a set of | |||
| sdfProperty, sdfAction, and sdfEvent definitions that describe the | sdfProperty, sdfAction, and sdfEvent definitions that describe the | |||
| interaction affordances associated with some scope of functionality. | interaction affordances associated with some scope of functionality. | |||
| A definition in an sdfThing group can refine the metadata of the | A definition in an sdfThing group can refine the metadata of the | |||
| definitions it is composed of: other definitions in sdfThing groups | definitions it is composed of: other definitions in sdfThing groups | |||
| or definitions in sdfObject groups. | or definitions in sdfObject groups. | |||
| 2.3. Member names: Given Names and Quality Names | 2.3. Member Names: Given Names and Quality Names | |||
| SDF documents are JSON maps that mostly employ JSON maps as member | SDF documents are JSON maps that mostly employ JSON maps as member | |||
| values, which in turn mostly employ JSON maps as their member values, | values, which in turn mostly employ JSON maps as their member values, | |||
| and so on. This nested structure of JSON maps creates a tree, where | and so on. This nested structure of JSON maps creates a tree, where | |||
| the edges are the member names (map keys) used in these JSON maps. | the edges are the member names (map keys) used in these JSON maps. | |||
| (In certain cases, where member names are not needed, JSON arrays may | (In certain cases, where member names are not needed, JSON arrays may | |||
| be interspersed in this tree.) | be interspersed in this tree.) | |||
| 2.3.1. Given Names and Quality Names | 2.3.1. Given Names and Quality Names | |||
| For any particular JSON map in an SDF document, the set of member | For any particular JSON map in an SDF document, the set of member | |||
| names that are used is either of: | names that are used is either: | |||
| * A set of "_Quality Names_", where the entries in the map are | * A set of "_Quality Names_", where the entries in the map are | |||
| Qualities. Quality Names are defined by the present specification | Qualities. Quality Names are defined by the present specification | |||
| and its extensions, together with specific semantics to be | and its extensions, together with specific semantics to be | |||
| associated with the member value given with a certain Quality | associated with the member value given with a certain Quality | |||
| Name. | Name. | |||
| * A set of "_Given Names_", where the entries in the map are | * A set of "_Given Names_", where the entries in the map are | |||
| separate entities (definitions, declarations, etc.) that each have | separate entities (definitions, declarations, etc.) that each have | |||
| names that are chosen by the SDF document author in order that | names that are chosen by the SDF document author in order that | |||
| skipping to change at page 17, line 32 ¶ | skipping to change at line 712 ¶ | |||
| 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 | itself generally rooted in (used as the fragment identifier in) an | |||
| outer namespace that looks like an https:// URL (see Section 4). | 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, and that | specified via the JSON pointer fragment identifier syntax. There are | |||
| there are two layers of such encoding: tilde encoding of ~ and / as | two layers of such encoding: tilde encoding of ~ and / as per | |||
| per Section 3 of [RFC6901], and then 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 | |||
| #/sdfObject/warning~1danger%20alarm | #/sdfObject/warning~1danger%20alarm | |||
| To sidestep potential interoperability problems, it is probably wise | To sidestep potential interoperability problems, it is probably wise | |||
| to avoid characters in Given Names that need such encoding (Quality | to avoid characters in Given Names that need such encoding (Quality | |||
| Names are already defined in such a way that they never do). | Names are already defined in such a way that they never do). | |||
| 2.3.3. Extensibility of Given Names and Quality Names | 2.3.3. Extensibility of Given Names and Quality Names | |||
| In SDF, both Quality Names and Given Names are _extension points_. | In SDF, both Quality Names and Given Names are _extension points_. | |||
| This is more obvious for Quality Names: Extending SDF is mostly done | This is more obvious for Quality Names. Extending SDF is mostly done | |||
| by defining additional qualities. To enable non-conflicting third | by defining additional qualities. To enable non-conflicting third | |||
| party extensions to SDF, qualified names (names with an embedded | party extensions to SDF, qualified names (names with an embedded | |||
| colon) can be used as Quality Names. | colon) can be used as Quality Names. | |||
| A nonqualified Quality Name is composed of ASCII letters, digits, and | A nonqualified Quality Name is composed of ASCII letters, digits, and | |||
| $ signs, starting with a lower case letter or a $ sign (i.e., using a | $ signs, starting with a lower case letter or a $ sign (i.e., using a | |||
| pattern of "[a-z$][A-Za-z$0-9]*"). Names with $ signs are intended | pattern of "_[a-z$][A-Za-z$0-9]*"). Names with $ signs are intended | |||
| to be used for functions separate from most other names; for | to be used for functions separate from most other names; for | |||
| instance, in this specification $comment is used for the comment | instance, $comment is used for the comment quality in this | |||
| quality (the presence or absence of a $comment quality does not | specification (the presence or absence of a $comment quality does not | |||
| change the meaning of the SDF model). Names that are composed of | change the meaning of the SDF model). Names that are composed of | |||
| multiple English words can use the "lowerCamelCase" convention | multiple English words can use the "lowerCamelCase" convention | |||
| [CamelCase] for indicating the word boundaries; no other use is | [CamelCase] for indicating the word boundaries; no other use is | |||
| intended for upper case letters in quality names. | intended for upper case letters in quality names. | |||
| A qualified Quality Name is composed of a Quality Name Prefix, a : | A qualified Quality Name is composed of a Quality Name Prefix, a : | |||
| (colon) character, and a nonqualified Quality Name. Quality Name | (colon) character, and a nonqualified Quality Name. Quality Name | |||
| Prefixes are registered in the "Quality Name Prefixes" registry in | Prefixes are registered in the "Quality Name Prefixes" registry in | |||
| the "Semantic Definition Format (SDF)" registry group | the "Semantic Definition Format (SDF)" registry group | |||
| (Section 7.5.2). They are composed of lower case ASCII letters and | (Section 7.5.2). They are composed of lower case ASCII letters and | |||
| digits, starting with a lower case ASCII letter (i.e., using a | digits, starting with a lowercase ASCII letter (i.e., using a pattern | |||
| pattern of "[a-z][a-z0-9]*"). | of "_[a-z][a-z0-9]*"). | |||
| Given Names are not restricted by the formal SDF syntax. To enable | Given Names are not restricted by the formal SDF syntax. To enable | |||
| non-surprising name translations in tools, combinations of ASCII | non-surprising name translations in tools, combinations of ASCII | |||
| alphanumeric characters and - (ASCII hyphen/minus) are preferred, | alphanumeric characters and - (ASCII hyphen/minus) are preferred, | |||
| typically employing kebab-case for names constructed out of multiple | typically employing kebab-case for names constructed out of multiple | |||
| words [KebabCase]. ASCII hyphen/minus can then unambiguously be | words [KebabCase]. ASCII hyphen/minus can then unambiguously be | |||
| translated to an ASCII _ underscore character and back depending on | translated to an ASCII _ underscore character and back depending on | |||
| the programming environment. Some styles also allow a dot (".") in | the programming environment. Some styles also allow a dot (".") in | |||
| given names. Given Names are often sufficiently self-explanatory | given names. Given Names are often sufficiently self-explanatory | |||
| that they can be used in place of the label quality if that is not | that they can be used in place of the label quality if that is not | |||
| skipping to change at page 19, line 7 ¶ | skipping to change at line 780 ¶ | |||
| extension point are label and description). | extension point are label and description). | |||
| Further, to enable Given Names to have a more powerful role in | Further, to enable Given Names to have a more powerful role in | |||
| building global hierarchical names, an extension is planned that | building global hierarchical names, an extension is planned that | |||
| makes use of qualified names for Given Names. So, until that | makes use of qualified names for Given Names. So, until that | |||
| extension is defined, Given Names with one or more embedded colons | extension is defined, Given Names with one or more embedded colons | |||
| are reserved and MUST NOT be used in an SDF document. | are reserved and MUST NOT be used in an SDF document. | |||
| All names in SDF are case-sensitive. | All names in SDF are case-sensitive. | |||
| 3. SDF structure | 3. SDF Structure | |||
| SDF definitions are contained in SDF documents, together with data | SDF definitions are contained in SDF documents together with data | |||
| about the SDF document itself (information block). Definitions and | about the SDF document itself (information block). Definitions and | |||
| declarations from additional SDF documents can be referenced; | declarations from additional SDF documents can be referenced; | |||
| together with the definitions and declarations in the referencing SDF | together with the definitions and declarations in the referencing SDF | |||
| document they build the SDF model expressed by that SDF document. | document, they build the SDF model expressed by that SDF document. | |||
| Each SDF document is represented as a single JSON map. This map can | Each SDF document is represented as a single JSON map. This map can | |||
| be thought of as having three blocks: the information block, the | be thought of as having three blocks: the information block, the | |||
| namespaces block, and the definitions block. These blocks contain | namespaces block, and the definitions block. These blocks contain | |||
| zero or more JSON name/value pairs, the names of which are quality | zero or more JSON name/value pairs, the names of which are quality | |||
| names and the values of which mostly are (nested) maps (the exception | names and the values of which mostly are (nested) maps (the exception | |||
| defined in SDF base is the defaultNamespace quality, the value of | defined in SDF base is the defaultNamespace quality, the value of | |||
| which is a text string). An empty nested map of this kind is | which is a text string). An empty nested map of this kind is | |||
| equivalent to not having the quality included at all. | equivalent to not having the quality included at all. | |||
| 3.1. Information block | 3.1. Information Block | |||
| 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 | Its value is a JSON map in turn, with a set of entries that represent | |||
| qualities that apply to the included definition. | qualities that apply to the included definition. | |||
| 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. | | |||
| +-------------+----------+---------------------------------+ | ||||
| | description | string | Long-form text description (no | | | description | string | Long-form text description (no | | |||
| | | | constraints) | | | | | constraints) | | |||
| +-------------+----------+---------------------------------+ | ||||
| | version | string | The incremental version of the | | | version | string | The incremental version of the | | |||
| | | | definition | | | | | definition | | |||
| +-------------+----------+---------------------------------+ | ||||
| | modified | string | Time of the latest modification | | | modified | string | Time of the latest modification | | |||
| +-------------+----------+---------------------------------+ | ||||
| | copyright | string | Link to text or embedded text | | | copyright | string | Link to text or embedded text | | |||
| | | | containing a copyright notice | | | | | containing a copyright notice | | |||
| +-------------+----------+---------------------------------+ | ||||
| | license | string | Link to text or embedded text | | | license | string | Link to text or embedded text | | |||
| | | | containing license terms | | | | | containing license terms | | |||
| +-------------+----------+---------------------------------+ | ||||
| | features | array of | List of extension features used | | | features | array of | List of extension features used | | |||
| | | strings | | | | | strings | | | |||
| +-------------+----------+---------------------------------+ | ||||
| | $comment | string | Source code comments only, no | | | $comment | string | Source code comments only, no | | |||
| | | | semantics | | | | | semantics | | |||
| +-------------+----------+---------------------------------+ | +-------------+----------+---------------------------------+ | |||
| Table 1: Qualities of the Information Block | Table 1: Qualities of the Information Block | |||
| 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 an [RFC3339] date-time or, if | convention to start the version with a date-time as defined in | |||
| new versions are generated less frequently than once a day, just the | [RFC3339] or, if new versions are generated less frequently than once | |||
| full-date (i.e., YYYY-MM-DD); in many cases, that will be all that is | a day, just the full-date (i.e., YYYY-MM-DD); in many cases, that | |||
| needed (see Figure 1 for an example). This specification does not | will be all that is needed (see Figure 1 for an example). This | |||
| give a strict definition for the format of the version string but | specification does not give a strict definition for the format of the | |||
| each using system or organization should define internal structure | version string but each using system or organization should define | |||
| and semantics to the level needed for their use. If no further | internal structure and semantics to the level needed for their use. | |||
| details are provided, a date-time or full-date in this field can be | If no further details are provided, a date-time or full-date in this | |||
| assumed to indicate the latest update time of the definitions in the | field can be assumed to indicate the latest update time of the | |||
| SDF document. | definitions in the SDF document. | |||
| The modified quality can be used with a value using [RFC3339] date- | The modified quality can be used with a value using date-time as | |||
| time (with Z for time-zone) or full-date format to express time of | defined in [RFC3339] (with Z for time-zone) or full-date format to | |||
| 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".) | |||
| The features quality can be used to list names of critical (i.e., | The features quality can be used to list names of critical (i.e., | |||
| cannot be safely ignored) SDF extension features that need to be | cannot be safely ignored) SDF extension features that need to be | |||
| understood for the definitions to be properly processed. Extension | understood for the definitions to be properly processed. Extension | |||
| feature names will be specified in extension documents. They can | feature names will be specified in extension documents. They can | |||
| either be registered (see Section 7.5.4 for specifics, which make | either be registered (see Section 7.5.4 for specifics, which make | |||
| sure that a registered feature name does not contain a colon) or be a | sure that a registered feature name does not contain a colon) or be a | |||
| URI (which always contain a colon). Note that SDF processors are not | URI (which always contain a colon). Note that SDF processors are not | |||
| expected to, and normally SHOULD NOT, dereference URIs used as | expected to, and normally SHOULD NOT, dereference URIs used as | |||
| feature names; any representation retrievable under such a URI could | feature names; any representation retrievable under such a URI could | |||
| be useful to humans, though. (See [I-D.bormann-t2trg-deref-id] for a | be useful to humans, though. (See [DEREF-ID-PATTERN] for a more | |||
| more extensive discussion of dereferenceable identifiers). | extensive discussion of dereferenceable identifiers). | |||
| 3.2. Namespaces block | 3.2. Namespaces Block | |||
| The namespaces block contains the namespace map and the | The namespaces block contains the namespace map and the | |||
| defaultNamespace setting; none of these qualities are required or | defaultNamespace setting; none of these qualities are required or | |||
| have default values that are assumed if the quality is absent. | have default values that are assumed if the quality is absent. | |||
| The namespace map is a map from short names for URIs to the namespace | The namespace map is a map from short names for URIs to the namespace | |||
| URIs themselves. | URIs themselves. | |||
| The defaultNamespace setting selects one of the entries in the | The defaultNamespace setting selects one of the entries in the | |||
| namespace map by giving its short name. The associated URI (value of | namespace map by giving its short name. The associated URI (value of | |||
| this entry) becomes the default namespace for the SDF document. | this entry) becomes the default namespace for the SDF document. | |||
| +------------------+--------+-----------------------------------+ | +==================+========+===================================+ | |||
| | Quality | Type | Description | | | Quality | Type | Description | | |||
| +------------------+--------+-----------------------------------+ | +==================+========+===================================+ | |||
| | namespace | map | Defines short names mapped to | | | namespace | map | Defines short names mapped to | | |||
| | | | namespace URIs, to be used as | | | | | namespace URIs, to be used as | | |||
| | | | identifier prefixes | | | | | identifier prefixes | | |||
| +------------------+--------+-----------------------------------+ | ||||
| | defaultNamespace | string | Identifies one of the prefixes in | | | defaultNamespace | string | Identifies one of the prefixes in | | |||
| | | | the namespace map to be used as a | | | | | the namespace map to be used as a | | |||
| | | | default in resolving identifiers | | | | | default in resolving identifiers | | |||
| +------------------+--------+-----------------------------------+ | +------------------+--------+-----------------------------------+ | |||
| Table 2: Namespaces Block | Table 2: Namespaces Block | |||
| The following example declares a set of namespaces and defines cap as | The following example declares a set of namespaces and defines cap as | |||
| the default namespace. By convention, the values in the namespace | the default namespace. By convention, the values in the namespace | |||
| map contain full URIs without a fragment identifier, and the fragment | map contain full URIs without a fragment identifier and the fragment | |||
| identifier is then added, if needed, where the namespace entry is | identifier is then added, if needed, where the namespace entry is | |||
| used. | used. | |||
| "namespace": { | "namespace": { | |||
| "cap": "https://example.com/capability/cap", | "cap": "https://example.com/capability/cap", | |||
| "zcl": "https://zcl.example.com/sdf" | "zcl": "https://zcl.example.com/sdf" | |||
| }, | }, | |||
| "defaultNamespace": "cap" | "defaultNamespace": "cap" | |||
| Multiple SDF documents can contribute to the same namespace by using | Multiple SDF documents can contribute to the same namespace by using | |||
| skipping to change at page 22, line 23 ¶ | skipping to change at line 933 ¶ | |||
| documents. | documents. | |||
| If no defaultNamespace setting is given, the SDF document does not | If no defaultNamespace setting is given, the SDF document does not | |||
| contribute to a global namespace (all definitions remain local to the | contribute to a global namespace (all definitions remain local to the | |||
| model and are not accessible for re-use by other models). As the | model and are not accessible for re-use by other models). As the | |||
| defaultNamespace is set by supplying a namespace short name, its | defaultNamespace is set by supplying a namespace short name, its | |||
| presence requires a namespace map that contains a mapping for that | presence requires a namespace map that contains a mapping for that | |||
| namespace short name. | namespace short name. | |||
| If no namespace map is given, no short names for namespace URIs are | If no namespace map is given, no short names for namespace URIs are | |||
| set up, and no defaultNamespace can be given. | set up and no defaultNamespace can be given. | |||
| 3.3. Definitions block | 3.3. Definitions Block | |||
| The Definitions block contains one or more groups, each identified by | The Definitions block contains one or more groups, each identified by | |||
| a Class Name Keyword such as sdfObject or sdfProperty. There can | a Class Name Keyword such as sdfObject or sdfProperty. There can | |||
| only be one group per keyword at this level; putting all the | only be one group per keyword at this level; putting all the | |||
| individual definitions in the group under that keyword is just a | individual definitions in the group under that keyword is just a | |||
| shortcut for identifying the class name keyword that applies to each | shortcut for identifying the class name keyword that applies to each | |||
| of them, without repeating it for each definition. | of them without repeating it for each definition. | |||
| The value of each group is a JSON map, the keys of which serve for | The value of each group is a JSON map, the keys of which serve for | |||
| naming the individual definitions in this group, and the | naming the individual definitions in this group, and the | |||
| corresponding values provide a set of qualities (name-value pairs) | corresponding values provide a set of qualities (name-value pairs) | |||
| for the individual definition. (In short, these map entries are also | for the individual definition. (In short, these map entries are also | |||
| termed "named sets of qualities".) | termed "named sets of qualities".) | |||
| Each group may contain zero or more definitions. Each identifier | Each group may contain zero or more definitions. Each identifier | |||
| defined creates a new type and term in the target namespace. | defined creates a new type and term in the target namespace. | |||
| Declarations have a scope of the definition block they are directly | Declarations have a scope of the definition block they are directly | |||
| contained in. | contained in. | |||
| A definition may in turn contain other definitions. Each definition | In turn, a definition may contain other definitions. Each definition | |||
| is a named set of qualities, i.e., it consists of the newly defined | is a named set of qualities, i.e., it consists of the newly defined | |||
| identifier and a set of key-value pairs that represent the defined | identifier and a set of key-value pairs that represent the defined | |||
| qualities and contained definitions. | qualities and contained definitions. | |||
| An example for an sdfObject definition is given in Figure 3: | An example for an sdfObject definition is given in Figure 3: | |||
| "sdfObject": { | "sdfObject": { | |||
| "foo": { | "foo": { | |||
| "sdfProperty": { | "sdfProperty": { | |||
| "bar": { | "bar": { | |||
| "type": "boolean" | "type": "boolean" | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| Figure 3: Example sdfObject definition | Figure 3: Example sdfObject Definition | |||
| This example defines an sdfObject "foo" that is defined in the | This example defines an sdfObject "foo" that is defined in the | |||
| default namespace (full address: #/sdfObject/foo), containing a | default namespace (full address: #/sdfObject/foo), containing a | |||
| property that can be addressed as #/sdfObject/foo/sdfProperty/bar, | property that can be addressed as #/sdfObject/foo/sdfProperty/bar, | |||
| with data of type boolean. | with data of type boolean. | |||
| Often, definitions are also declarations: the definition of the entry | Often, definitions are also declarations. The definition of the | |||
| "bar" in the property "foo" means that data corresponding to the | entry "bar" in the property "foo" means that data corresponding to | |||
| "foo" property in a property interaction offered by Thing can have | the "foo" property in a property interaction offered by Thing can | |||
| zero or one components modeled by "bar". Entries within sdfProperty, | have zero or one components modeled by "bar". Entries within | |||
| sdfAction, and sdfEvent that are in turn within sdfObject or sdfThing | sdfProperty, sdfAction, and sdfEvent that are in turn within | |||
| entries, are also declarations; entries within sdfData are not. | sdfObject or sdfThing entries, are also declarations; entries within | |||
| Similarly, sdfObject or sdfThing entries within an sdfThing | sdfData are not. Similarly, sdfObject or sdfThing entries within an | |||
| definition specify that the interactions offered by a Thing modeled | sdfThing definition specify that the interactions offered by a Thing | |||
| by this sdfThing include the interactions modeled by the nested | modeled by this sdfThing include the interactions modeled by the | |||
| sdfObject or sdfThing. | nested sdfObject or sdfThing. | |||
| 3.4. Top-level Affordances and sdfData | 3.4. Top-Level Affordances and sdfData | |||
| Besides their placement within an sdfObject or sdfThing, affordances | Besides their placement within an sdfObject or sdfThing, affordances | |||
| (i.e., sdfProperty, sdfAction, and sdfEvent) as well as sdfData can | (i.e., sdfProperty, sdfAction, and sdfEvent) as well as sdfData can | |||
| also be placed at the top level of an SDF document. Since they are | also be placed at the top level of an SDF document. Since they are | |||
| not associated with an sdfObject or sdfThing, these kinds of | not associated with an sdfObject or sdfThing, these kinds of | |||
| definitions are intended to be re-used via the sdfRef mechanism (see | definitions are intended to be reused via the sdfRef mechanism (see | |||
| Section 4.4). | Section 4.4). | |||
| 4. Names and namespaces | 4. Names and Namespaces | |||
| SDF documents may contribute to a global namespace, and may reference | SDF documents may contribute to a global namespace and may reference | |||
| elements from that global namespace. (An SDF document that does not | elements from that global namespace. (An SDF document that does not | |||
| set a defaultNamespace does not contribute to a global namespace.) | set a defaultNamespace does not contribute to a global namespace.) | |||
| 4.1. Structure | 4.1. Structure | |||
| Global names look exactly like https:// URIs with attached fragment | Global names look exactly like https:// URIs with attached fragment | |||
| identifiers. | identifiers. | |||
| There is no intention to require that these URIs can be dereferenced. | There is no intention to require that these URIs can be dereferenced. | |||
| (However, as future extensions of SDF might find a use for | (However, as future extensions of SDF might find a use for | |||
| dereferencing global names, the URI should be chosen in such a way | dereferencing global names, the URI should be chosen in such a way | |||
| that this may become possible in the future. See also | that this may become possible in the future. See also | |||
| [I-D.bormann-t2trg-deref-id] for a discussion of dereferenceable | [DEREF-ID-PATTERN] for a discussion of dereferenceable identifiers.) | |||
| identifiers.) | ||||
| 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. | |||
| skipping to change at page 25, line 5 ¶ | skipping to change at line 1051 ¶ | |||
| value | value | |||
| * https://example.com/capability/cap#/sdfObject/Switch/sdfAction/on | * https://example.com/capability/cap#/sdfObject/Switch/sdfAction/on | |||
| * https://example.com/capability/cap#/sdfObject/Switch/sdfAction/off | * https://example.com/capability/cap#/sdfObject/Switch/sdfAction/off | |||
| Note the #, which separates the absolute-URI part (Section 4.3 of RFC | Note the #, which separates the absolute-URI part (Section 4.3 of RFC | |||
| 3986 [STD66]) from the fragment identifier part (including the #, a | 3986 [STD66]) from the fragment identifier part (including the #, a | |||
| JSON Pointer as in Section 6 of [RFC6901]). | JSON Pointer as in Section 6 of [RFC6901]). | |||
| 4.3. Referencing global names | 4.3. Referencing Global Names | |||
| 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 | |||
| skipping to change at page 25, line 30 ¶ | skipping to change at line 1076 ¶ | |||
| 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. | |||
| skipping to change at page 26, line 27 ¶ | skipping to change at line 1116 ¶ | |||
| For example, this reference: | For example, this reference: | |||
| "temperatureProperty": { | "temperatureProperty": { | |||
| "sdfRef": "#/sdfData/temperatureData" | "sdfRef": "#/sdfData/temperatureData" | |||
| } | } | |||
| creates a new definition "temperatureProperty" that contains all of | creates a new definition "temperatureProperty" that contains all of | |||
| the qualities defined in the definition at /sdfData/temperatureData. | the qualities defined in the definition at /sdfData/temperatureData. | |||
| The sdfRef member need not be the only member of a map. Additional | The sdfRef member need not be the only member of a map. Additional | |||
| members may be present with the intention to override parts of the | members may be present with the intention of overriding parts of the | |||
| referenced map or to add new qualities or definitions. | referenced map or adding new qualities or definitions. | |||
| When processing sdfRef, if the target definition contains also sdfRef | When processing sdfRef, if the target definition contains also sdfRef | |||
| (i.e., is based on yet another definition), that MUST be processed as | (i.e., is based on yet another definition), that MUST be processed as | |||
| 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 is 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 | |||
| describe the _result_ of applying a merge-patch: the notations are | describe the _result_ of applying a merge-patch. The notations are | |||
| not powerful enough to describe, for instance, how the merge-patch | not powerful enough to describe, for instance, how the merge-patch | |||
| algorithm causes null values within the sdfRef to remove members of | algorithm causes null values within the sdfRef to remove members of | |||
| JSON maps from the referenced target. Nonetheless, the syntaxes also | JSON maps from the referenced target. Nonetheless, the syntaxes also | |||
| give the syntax of the sdfRef itself, which vanishes during the | give the syntax of the sdfRef itself, which vanishes during the | |||
| resolution; in many cases therefore even merge-patch inputs will | resolution; therefore, in many cases, even merge-patch inputs will | |||
| validate with these formal syntaxes. | validate with these formal syntaxes. | |||
| Given the example (Figure 1), and the following definition: | Given the example (Figure 1) and the following definition: | |||
| { | { | |||
| "info": { | "info": { | |||
| "title": "Example light switch using sdfRef" | "title": "Example light switch using sdfRef" | |||
| }, | }, | |||
| "namespace": { | "namespace": { | |||
| "cap": "https://example.com/capability/cap" | "cap": "https://example.com/capability/cap" | |||
| }, | }, | |||
| "defaultNamespace": "cap", | "defaultNamespace": "cap", | |||
| "sdfObject": { | "sdfObject": { | |||
| "BasicSwitch": { | "BasicSwitch": { | |||
| "sdfRef": "cap:#/sdfObject/Switch", | "sdfRef": "cap:#/sdfObject/Switch", | |||
| "sdfAction": { | "sdfAction": { | |||
| "toggle": null | "toggle": null | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| The resulting definition of the "BasicSwitch" sdfObject would be | The resulting definition of the "BasicSwitch" sdfObject would be | |||
| identical to the definition of the "Switch" sdfObject except it would | identical to the definition of the "Switch" sdfObject, except it | |||
| not contain the "toggle" Action. | would not contain the "toggle" Action. | |||
| { | { | |||
| "info": { | "info": { | |||
| "title": "Example light switch using sdfRef" | "title": "Example light switch using sdfRef" | |||
| }, | }, | |||
| "namespace": { | "namespace": { | |||
| "cap": "https://example.com/capability/cap" | "cap": "https://example.com/capability/cap" | |||
| }, | }, | |||
| "defaultNamespace": "cap", | "defaultNamespace": "cap", | |||
| "sdfObject": { | "sdfObject": { | |||
| skipping to change at page 28, line 36 ¶ | skipping to change at line 1205 ¶ | |||
| }, | }, | |||
| "off": { | "off": { | |||
| "description": | "description": | |||
| "Turn the switch off; equivalent to setting value to false." | "Turn the switch off; equivalent to setting value to false." | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| 4.4.1. Resolved models | 4.4.1. Resolved Models | |||
| A model where all sdfRef references are processed as described in | A model where all sdfRef references are processed as described in | |||
| Section 4.4 is called a resolved model. | Section 4.4 is called a resolved model. | |||
| For example, given the following sdfData definitions: | For example, given the following sdfData definitions: | |||
| "sdfData": { | "sdfData": { | |||
| "Coordinate" : { | "Coordinate" : { | |||
| "type": "number", "unit": "m" | "type": "number", "unit": "m" | |||
| }, | }, | |||
| skipping to change at page 29, line 20 ¶ | skipping to change at line 1227 ¶ | |||
| "sdfRef" : "#/sdfData/Coordinate", | "sdfRef" : "#/sdfData/Coordinate", | |||
| "description": | "description": | |||
| "Distance from the base of the Thing along the X axis." | "Distance from the base of the Thing along the X axis." | |||
| }, | }, | |||
| "Non-neg-X-Coordinate" : { | "Non-neg-X-Coordinate" : { | |||
| "sdfRef": "#/sdfData/X-Coordinate", | "sdfRef": "#/sdfData/X-Coordinate", | |||
| "minimum": 0 | "minimum": 0 | |||
| } | } | |||
| } | } | |||
| After resolving the definitions would look as follows: | the definitions would look as follows after being resolved: | |||
| "sdfData": { | "sdfData": { | |||
| "Coordinate" : { | "Coordinate" : { | |||
| "type": "number", "unit": "m" | "type": "number", "unit": "m" | |||
| }, | }, | |||
| "X-Coordinate" : { | "X-Coordinate" : { | |||
| "description": | "description": | |||
| "Distance from the base of the Thing along the X axis.", | "Distance from the base of the Thing along the X axis.", | |||
| "type": "number", "unit": "m" | "type": "number", "unit": "m" | |||
| }, | }, | |||
| skipping to change at page 29, line 48 ¶ | skipping to change at line 1255 ¶ | |||
| 4.5. sdfRequired | 4.5. sdfRequired | |||
| The keyword sdfRequired is provided to apply a constraint that | The keyword sdfRequired is provided to apply a constraint that | |||
| defines for which declarations the corresponding data are mandatory | defines for which declarations the corresponding data are mandatory | |||
| in a grouping (sdfThing or sdfObject) modeled by the current | in a grouping (sdfThing or sdfObject) modeled by the current | |||
| definition. | definition. | |||
| The value of sdfRequired is an array of references, each indicating | The value of sdfRequired is an array of references, each indicating | |||
| one or more declarations that are mandatory to be represented. | one or more declarations that are mandatory to be represented. | |||
| References in this array can be SDF names (JSON Pointers), or one of | References in this array can be SDF names (JSON Pointers) or one of | |||
| two abbreviated reference formats: | two abbreviated reference formats: | |||
| * a text string with a "referenceable-name", namely an affordance | * A text string with a "referenceable-name", namely an affordance | |||
| name or a grouping name: | name or a grouping name: | |||
| - All affordance declarations that are directly in the same | - All affordance declarations that are directly in the same | |||
| grouping (i.e., not nested further in another grouping) and | grouping (i.e., not nested further in another grouping) and | |||
| that carry this name are declared to be mandatory to be | that carry this name are declared to be mandatory to be | |||
| represented. Note that there can be multiple such affordance | represented. Note that there can be multiple such affordance | |||
| 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 | |||
| skipping to change at page 31, line 39 ¶ | skipping to change at line 1327 ¶ | |||
| } | } | |||
| } | } | |||
| Figure 4: Using sdfRequired | Figure 4: Using sdfRequired | |||
| In Figure 4, the same sdfRequired can also be represented in short | In Figure 4, the same sdfRequired can also be represented in short | |||
| form: | form: | |||
| "sdfRequired": ["currentTemperature", "overTemperatureEvent"] | "sdfRequired": ["currentTemperature", "overTemperatureEvent"] | |||
| Or, for instance "overTemperatureEvent" could carry | Or, for instance, "overTemperatureEvent" could carry: | |||
| "overTemperatureEvent": { | "overTemperatureEvent": { | |||
| "sdfRequired": [true], | "sdfRequired": [true], | |||
| "...": "..." | "...": "..." | |||
| } | } | |||
| 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, in its place | application and no label is given in the SDF model, applications | |||
| applications could use the last part (the last reference-token, | could use the last part (the last reference-token, Section 3 of | |||
| Section 3 of [RFC6901]) of the JSON pointer to the definition. | [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 | | |||
| +-------------+--------------+-----------------------------+ | ||||
| | sdfRef | sdf-pointer | (see Section 4.4) | | | sdfRef | sdf-pointer | (see Section 4.4) | | |||
| +-------------+--------------+-----------------------------+ | ||||
| | sdfRequired | pointer-list | (see Section 4.5, used in | | | sdfRequired | pointer-list | (see Section 4.5, used in | | |||
| | | | affordances or groupings) | | | | | affordances or groupings) | | |||
| +-------------+--------------+-----------------------------+ | +-------------+--------------+-----------------------------+ | |||
| Table 3: Common Qualities | Table 3: Common Qualities | |||
| 4.7. Data Qualities | 4.7. Data Qualities | |||
| Data qualities are used in sdfData and sdfProperty definitions, which | Data qualities are used in sdfData and sdfProperty definitions, which | |||
| are named sets of data qualities (abbreviated as named-sdq). | are named sets of data qualities (abbreviated as named-sdq). | |||
| These qualities include the common qualities, JSO-inspired qualities | These qualities include the common qualities, JSO-inspired qualities | |||
| (see below), and data qualities defined specifically for the present | (see below), and data qualities defined specifically for the present | |||
| specification; the latter are shown in Table 4. None of these | specification; the latter are shown in Table 4. None of these | |||
| qualities are required or have default values that are assumed if the | qualities are required or have default values that are assumed if the | |||
| quality is absent. | quality is absent. | |||
| Appendix C lists data qualities inspired by the various proposals at | Appendix C lists data qualities inspired by the various proposals at | |||
| json-schema.org; the intention is that these (information model | json-schema.org; the intention is that these (information model- | |||
| level) qualities are compatible with the (data model) semantics from | level) qualities are compatible with the (data model) semantics from | |||
| the versions of the json-schema.org proposal they were imported from. | the versions of the json-schema.org proposal they were imported from. | |||
| +---------------+----------------+--------------------+---------+ | +===============+================+====================+=========+ | |||
| | Quality | Type | Description | Default | | | Quality | Type | Description | Default | | |||
| +---------------+----------------+--------------------+---------+ | +===============+================+====================+=========+ | |||
| | (common) | | Section 4.6 | | | | (common) | | Section 4.6 | | | |||
| +---------------+----------------+--------------------+---------+ | ||||
| | unit | string | unit name (note 1) | N/A | | | unit | string | unit name (note 1) | N/A | | |||
| +---------------+----------------+--------------------+---------+ | ||||
| | nullable | boolean | indicates a null | true | | | nullable | boolean | indicates a null | true | | |||
| | | | value is available | | | | | | value is available | | | |||
| | | | for this type | | | | | | for this type | | | |||
| +---------------+----------------+--------------------+---------+ | ||||
| | contentFormat | string | content type (IANA | N/A | | | contentFormat | string | content type (IANA | N/A | | |||
| | | | media type string | | | | | | media type string | | | |||
| | | | plus parameters), | | | | | | plus parameters), | | | |||
| | | | encoding (note 2) | | | | | | encoding (note 2) | | | |||
| +---------------+----------------+--------------------+---------+ | ||||
| | sdfType | string | sdfType | N/A | | | sdfType | string | sdfType | N/A | | |||
| | | (Section | enumeration | | | | | (Section | enumeration | | | |||
| | | 4.7.1) | (extensible) | | | | | 4.7.1) | (extensible) | | | |||
| +---------------+----------------+--------------------+---------+ | ||||
| | sdfChoice | named set of | named alternatives | N/A | | | sdfChoice | named set of | named alternatives | N/A | | |||
| | | data qualities | | | | | | data qualities | | | | |||
| | | (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 Sections | |||
| 4.5.1 and 12.1 of [RFC8428] and Section 3 of [RFC8798], | 4.5.2 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 [I-D.bormann-t2trg-deref-id] for a more | to humans, though. (See [DEREF-ID-PATTERN] for a more extensive | |||
| extensive discussion of dereferenceable identifiers). | discussion of dereferenceable identifiers). | |||
| A URI unit name is distinguished from a registered unit name by | A URI unit name is distinguished from a registered unit name by | |||
| the presence of a colon; any registered unit names that contain a | the presence of a colon; therefore, any registered unit names | |||
| colon (at the time of writing, none) can therefore not be | that contain a colon (at the time of writing, none) cannot be | |||
| directly used in SDF. | directly used in SDF. | |||
| For use by translators into ecosystems that require URIs for unit | For use by translators into ecosystems that require URIs for unit | |||
| names, the URN sub-namespace "urn:ietf:params:unit" is provided | names, the URN sub-namespace "urn:ietf:params:unit" is provided | |||
| (Section 7.3). URNs from this sub-namespace MUST NOT be used in | (Section 7.3). URNs from this sub-namespace MUST NOT be used in | |||
| a unit quality, in favor of simply notating the unit name (such | a unit quality in favor of simply notating the unit name (such as | |||
| as kg instead of urn:ietf:params:unit:kg), except where the unit | kg instead of urn:ietf:params:unit:kg) except where the unit name | |||
| name contains a colon and can therefore not be directly used in | contains a colon and can therefore not be directly used in SDF. | |||
| SDF. | ||||
| 2. The contentFormat quality follows the Content-Format-Spec as | 2. The contentFormat quality follows the Content-Format-Spec as | |||
| defined in Section 6 of [RFC9193], allowing for expressing both | defined in Section 6 of [RFC9193], allowing for expressing both | |||
| numeric and string based Content-Formats. | numeric and string based Content-Formats. | |||
| 4.7.1. sdfType | 4.7.1. sdfType | |||
| SDF defines a number of basic types beyond those provided by JSON or | SDF defines a number of basic types beyond those provided by JSON or | |||
| JSO. These types are identified by the sdfType quality, which is a | JSO. These types are identified by the sdfType quality, which is a | |||
| text string from a set of type names defined by the "sdfType values" | text string from a set of type names defined by the "sdfType values" | |||
| registry in the "Semantic Definition Format (SDF)" registry group | registry in the "Semantic Definition Format (SDF)" registry group | |||
| (Section 7.5.3). The sdfType name is composed of lower case ASCII | (Section 7.5.3). The sdfType name is composed of lowercase ASCII | |||
| letters, digits, and - (ASCII hyphen/minus) characters, starting with | letters, digits, and - (ASCII hyphen/minus) characters, starting with | |||
| a lower case ASCII letter (i.e., using a pattern of | a lowercase ASCII letter (i.e., using a pattern of "[a-z][-a-z0-9]*") | |||
| "[a-z][-a-z0-9]*"), typically employing kebab-case for names | and typically employing kebab-case for names constructed out of | |||
| constructed out of multiple words [KebabCase]. | multiple words [KebabCase]. | |||
| To aid interworking with JSO implementations, it is RECOMMENDED that | To aid interworking with JSO implementations, it is RECOMMENDED that | |||
| sdfType is always used in conjunction with the type quality inherited | sdfType is always used in conjunction with the type quality inherited | |||
| from [JSO7V], in such a way as to yield a common representation of | from [JSO7V] in such a way as to yield a common representation of the | |||
| the type's values in JSON. | type's values in JSON. | |||
| Values for sdfType that are defined in this specification are shown | Values for sdfType that are defined in this specification are shown | |||
| in Table 5. This table also gives a description of the semantics of | in Table 5. This table also gives a description of the semantics of | |||
| the sdfType, the conventional value for type to be used with the | the sdfType, the conventional value for type to be used with the | |||
| sdfType value, and a conventional JSON representation for values of | sdfType value, and a conventional JSON representation for values of | |||
| the type. The type and the JSON representation are chosen to be | the type. The type and the JSON representation are chosen to be | |||
| consistent with each other; this MUST be true for additionally | consistent with each other; this MUST be true for additionally | |||
| registered sdfType values as well. | registered sdfType values as well. | |||
| +-------------+-------------+--------+----------------+------------+ | +=============+=============+========+================+============+ | |||
| | Name | Description | type | JSON | Reference | | | Name | Description | type | JSON | Reference | | |||
| | | | | Representation | | | | | | | Representation | | | |||
| +-------------+-------------+--------+----------------+------------+ | +=============+=============+========+================+============+ | |||
| | byte-string | A sequence | string | base64url | Section | | | byte-string | A sequence | string | base64url | Section | | |||
| | | of zero or | | without | 3.4.5.2 of | | | | of zero or | | without | 3.4.5.2 of | | |||
| | | more bytes | | padding | RFC 8949 | | | | more bytes | | padding | RFC 8949 | | |||
| | | | | | [STD94] | | | | | | | [STD94] | | |||
| +-------------+-------------+--------+----------------+------------+ | ||||
| | unix-time | A point in | number | POSIX time | Section | | | unix-time | A point in | number | POSIX time | Section | | |||
| | | civil time | | | 3.4.2 of | | | | civil time | | | 3.4.2 of | | |||
| | | (note 1) | | | RFC 8949 | | | | (note 1) | | | RFC 8949 | | |||
| | | | | | [STD94] | | | | | | | [STD94] | | |||
| +-------------+-------------+--------+----------------+------------+ | +-------------+-------------+--------+----------------+------------+ | |||
| Table 5: Values Defined in Base SDF for the sdfType Quality | Table 5: Values Defined in Base SDF for the sdfType Quality | |||
| (1) Note that the definition of unix-time does not imply the | (1) Note that the definition of unix-time does not imply the | |||
| capability to represent points in time that fall on leap seconds. | capability to represent points in time that fall on leap seconds. | |||
| More date/time-related sdfTypes are likely to be added in the sdfType | More date/time-related sdfTypes are likely to be added in the sdfType | |||
| value registry. | value registry. | |||
| 4.7.2. sdfChoice | 4.7.2. sdfChoice | |||
| Data can be a choice of named alternatives, called sdfChoice. Each | Data can be a choice of named alternatives called sdfChoice. Each | |||
| alternative is identified by a name (string, key in the outer JSON | alternative is identified by a name (string, key in the outer JSON | |||
| map used to represent the overall choice) and a set of dataqualities | map used to represent the overall choice) and a set of dataqualities | |||
| (each in an inner JSON map, the value used to represent the | (each in an inner JSON map, the value used to represent the | |||
| individual alternative in the outer JSON map). Dataqualities that | individual alternative in the outer JSON map). Dataqualities that | |||
| are specified at the same level as the sdfChoice apply to all choices | are specified at the same level as the sdfChoice apply to all choices | |||
| in the sdfChoice, except those specific choices where the dataquality | in the sdfChoice except those specific choices where the dataquality | |||
| is overridden at the choice level. | is overridden at the choice level. | |||
| sdfChoice merges the functions of two constructs found in [JSO7V]: | sdfChoice merges the functions of two constructs found in [JSO7V]: | |||
| * enum | * enum | |||
| What could be expressed as | What could be expressed as: | |||
| "enum": ["foo", "bar", "baz"] | "enum": ["foo", "bar", "baz"] | |||
| in JSO, is often best represented as: | in JSO, is often best represented as: | |||
| "sdfChoice": { | "sdfChoice": { | |||
| "foo": { "description": "This is a foonly"}, | "foo": { "description": "This is a foonly"}, | |||
| "bar": { "description": | "bar": { "description": | |||
| "As defined in the second world congress"}, | "As defined in the second world congress"}, | |||
| "baz": { "description": "From bigzee foobaz"} | "baz": { "description": "From bigzee foobaz"} | |||
| } | } | |||
| This allows the placement of other dataqualities such as | This allows the placement of other dataqualities such as | |||
| description in the example. | description in the example. | |||
| If an enum needs to use a data type different from text string, | If an enum needs to use a data type different from the text | |||
| what would for instance have been: | string, what would, for instance, have been: | |||
| "type": "number", | "type": "number", | |||
| "enum": [1, 2, 3] | "enum": [1, 2, 3] | |||
| in JSO, is represented as: | in JSO, is represented as: | |||
| "type": "number", | "type": "number", | |||
| "sdfChoice": { | "sdfChoice": { | |||
| "a-better-name-for-alternative-1": { "const": 1 }, | "a-better-name-for-alternative-1": { "const": 1 }, | |||
| "alternative-2": { "const": 2 }, | "alternative-2": { "const": 2 }, | |||
| skipping to change at page 36, line 48 ¶ | skipping to change at line 1568 ¶ | |||
| "items": {"sdfRef": "#/sdfData/rgbVal"}}, | "items": {"sdfRef": "#/sdfData/rgbVal"}}, | |||
| "cmyk": {"type": "array", "minItems": 4, "maxItems": "4", | "cmyk": {"type": "array", "minItems": 4, "maxItems": "4", | |||
| "items": {"sdfRef": "#/sdfData/cmykVal"}} | "items": {"sdfRef": "#/sdfData/cmykVal"}} | |||
| } | } | |||
| Note that there is no need in SDF for the type intersection construct | Note that there is no need in SDF for the type intersection construct | |||
| allOf or the peculiar type-xor construct oneOf found in [JSO7V]. | allOf or the peculiar type-xor construct oneOf found in [JSO7V]. | |||
| As a simplification for users of SDF models who are accustomed to the | As a simplification for users of SDF models who are accustomed to the | |||
| JSO enum keyword, this is retained, but limited to a choice of text | JSO enum keyword, this is retained, but limited to a choice of text | |||
| string values, such that | string values, such that: | |||
| "enum": ["foo", "bar", "baz"] | "enum": ["foo", "bar", "baz"] | |||
| is syntactic sugar for | is syntactic sugar for: | |||
| "sdfChoice": { | "sdfChoice": { | |||
| "foo": { "const": "foo"}, | "foo": { "const": "foo"}, | |||
| "bar": { "const": "bar"}, | "bar": { "const": "bar"}, | |||
| "baz": { "const": "baz"} | "baz": { "const": "baz"} | |||
| } | } | |||
| In a single definition, the keyword enum cannot be used at the same | In a single definition, the keyword enum cannot be used at the same | |||
| time as the keyword sdfChoice, as the former is just syntactic sugar | time as the keyword sdfChoice, as the former is just syntactic sugar | |||
| for the latter. | for the latter. | |||
| 5. Keywords for definition groups | 5. Keywords for Definition Groups | |||
| The following SDF keywords are used to create definition groups in | The following SDF keywords are used to create definition groups in | |||
| the target namespace. All these definitions share some common | the target namespace. All these definitions share some common | |||
| qualities as discussed in Section 4.6. | qualities as discussed in Section 4.6. | |||
| 5.1. sdfObject | 5.1. sdfObject | |||
| The sdfObject keyword denotes a group of zero or more sdfObject | The sdfObject keyword denotes a group of zero or more sdfObject | |||
| definitions. sdfObject definitions may contain or include definitions | definitions. sdfObject definitions may contain or include definitions | |||
| of named Properties, Actions, Events declared for the sdfObject, as | of named Properties, Actions, and Events declared for the sdfObject, | |||
| well as named data types (sdfData group) to be used in this or other | as well as named data types (sdfData group) to be used in this or | |||
| sdfObjects. | other sdfObjects. | |||
| The qualities of an sdfObject include the common qualities; | The qualities of an sdfObject include the common qualities; | |||
| additional qualities are shown in Table 6. None of these qualities | additional qualities are shown in Table 6. 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 | | |||
| +-------------+-----------+--------------------------------+ | +=============+===========+================================+ | |||
| | (common) | | Section 4.6 | | | (common) | | Section 4.6 | | |||
| +-------------+-----------+--------------------------------+ | ||||
| | sdfProperty | property | zero or more named property | | | sdfProperty | property | zero or more named property | | |||
| | | | definitions for this sdfObject | | | | | definitions for this sdfObject | | |||
| +-------------+-----------+--------------------------------+ | ||||
| | sdfAction | action | zero or more named action | | | sdfAction | action | zero or more named action | | |||
| | | | definitions for this sdfObject | | | | | definitions for this sdfObject | | |||
| +-------------+-----------+--------------------------------+ | ||||
| | sdfEvent | event | zero or more named event | | | sdfEvent | event | zero or more named event | | |||
| | | | definitions for this sdfObject | | | | | definitions for this sdfObject | | |||
| +-------------+-----------+--------------------------------+ | ||||
| | sdfData | named-sdq | zero or more named data type | | | sdfData | named-sdq | zero or more named data type | | |||
| | | | definitions that might be used | | | | | definitions that might be used | | |||
| | | | in the above | | | | | in the above | | |||
| | minItems | number | (array) Minimum number of | | +-------------+-----------+--------------------------------+ | |||
| | minItems | number | (array) minimum number of | | ||||
| | | | multiplied affordances in | | | | | multiplied affordances in | | |||
| | | | array | | | | | array | | |||
| | maxItems | number | (array) Maximum number of | | +-------------+-----------+--------------------------------+ | |||
| | maxItems | number | (array) maximum number of | | ||||
| | | | multiplied affordances in | | | | | multiplied affordances in | | |||
| | | | array | | | | | array | | |||
| +-------------+-----------+--------------------------------+ | +-------------+-----------+--------------------------------+ | |||
| Table 6: Qualities of sdfObject | Table 6: Qualities of sdfObject | |||
| 5.2. sdfProperty | 5.2. sdfProperty | |||
| The sdfProperty keyword denotes a group of zero or more Property | The sdfProperty keyword denotes a group of zero or more Property | |||
| definitions. | definitions. | |||
| Properties are used to model elements of state. | Properties are used to model elements of state. | |||
| The qualities of a Property definition include the data qualities | The qualities of a Property definition include the data qualities | |||
| (and thus the common qualities), see Section 4.7, additional | (and thus the common qualities); see Section 4.7. Additional | |||
| qualities are shown in Table 7. | qualities are shown in Table 7. | |||
| +------------+---------+-------------------------------+---------+ | +============+=========+===============================+=========+ | |||
| | Quality | Type | Description | Default | | | Quality | Type | Description | Default | | |||
| +------------+---------+-------------------------------+---------+ | +============+=========+===============================+=========+ | |||
| | (data) | | Section 4.7 | | | | (data) | | Section 4.7 | | | |||
| +------------+---------+-------------------------------+---------+ | ||||
| | readable | boolean | Reads are allowed | true | | | readable | boolean | Reads are allowed | true | | |||
| +------------+---------+-------------------------------+---------+ | ||||
| | writable | boolean | Writes are allowed | true | | | writable | boolean | Writes are allowed | true | | |||
| | observable | boolean | flag to indicate asynchronous | true | | +------------+---------+-------------------------------+---------+ | |||
| | observable | boolean | Flag to indicate asynchronous | true | | ||||
| | | | notification is available | | | | | | notification is available | | | |||
| +------------+---------+-------------------------------+---------+ | +------------+---------+-------------------------------+---------+ | |||
| Table 7: Qualities of sdfProperty | Table 7: Qualities of sdfProperty | |||
| 5.3. sdfAction | 5.3. sdfAction | |||
| The sdfAction keyword denotes a group of zero or more Action | The sdfAction keyword denotes a group of zero or more Action | |||
| definitions. | definitions. | |||
| Actions are used to model commands and methods which are invoked. | Actions are used to model commands and methods that are invoked. | |||
| Actions may have parameter data that are supplied upon invocation and | Actions may have parameter data that is supplied upon invocation and | |||
| output data that is provided as a direct result of the invocation of | output data that is provided as a direct result of the invocation of | |||
| the action (note that "action objects" may also be created to furnish | the action (note that "action objects" may also be created to furnish | |||
| ongoing information during a long-running action; these would be | ongoing information during a long-running action; these would be | |||
| pointed to by the output data). | pointed to by the output data). | |||
| The qualities of an Action definition include the common qualities, | The qualities of an Action definition include the common qualities. | |||
| additional qualities are shown in Table 8. | Additional qualities are shown in Table 8. | |||
| +---------------+-----------+----------------------------+ | +===============+===========+============================+ | |||
| | Quality | Type | Description | | | Quality | Type | Description | | |||
| +---------------+-----------+----------------------------+ | +===============+===========+============================+ | |||
| | (common) | | Section 4.6 | | | (common) | | Section 4.6 | | |||
| +---------------+-----------+----------------------------+ | ||||
| | sdfInputData | map | data qualities of the | | | sdfInputData | map | data qualities of the | | |||
| | | | input data for an Action | | | | | input data for an Action | | |||
| +---------------+-----------+----------------------------+ | ||||
| | sdfOutputData | map | data qualities of the | | | sdfOutputData | map | data qualities of the | | |||
| | | | output data for an Action | | | | | output data for an Action | | |||
| +---------------+-----------+----------------------------+ | ||||
| | sdfData | named-sdq | zero or more named data | | | sdfData | named-sdq | zero or more named data | | |||
| | | | type definitions that | | | | | type definitions that | | |||
| | | | might be used in the above | | | | | might be used in the above | | |||
| +---------------+-----------+----------------------------+ | +---------------+-----------+----------------------------+ | |||
| Table 8: Qualities of sdfAction | Table 8: Qualities of sdfAction | |||
| sdfInputData defines the input data of the action. sdfOutputData | sdfInputData defines the input data of the action. sdfOutputData | |||
| defines the output data of the action. As discussed in | defines the output data of the action. As discussed in | |||
| Section 2.2.3, a set of data qualities with type "object" can be used | Section 2.2.3, a set of data qualities with type "object" can be used | |||
| to substructure either data item, with optionality indicated by the | to substructure either data item, with optionality indicated by the | |||
| data quality required. | data quality required. | |||
| 5.4. sdfEvent | 5.4. sdfEvent | |||
| The sdfEvent keyword denotes zero or more Event definitions. | The sdfEvent keyword denotes zero or more Event definitions. | |||
| Events are used to model asynchronous occurrences that may be | Events are used to model asynchronous occurrences that may be | |||
| communicated proactively. Events have data elements which are | communicated proactively. Events have data elements that are | |||
| communicated upon the occurrence of the event. | communicated upon the occurrence of the event. | |||
| The qualities of sdfEvent include the common qualities, additional | The qualities of sdfEvent include the common qualities. Additional | |||
| qualities are shown in Table 9. | qualities are shown in Table 9. | |||
| +---------------+-----------+----------------------------+ | +===============+===========+============================+ | |||
| | Quality | Type | Description | | | Quality | Type | Description | | |||
| +---------------+-----------+----------------------------+ | +===============+===========+============================+ | |||
| | (common) | | Section 4.6 | | | (common) | | Section 4.6 | | |||
| +---------------+-----------+----------------------------+ | ||||
| | sdfOutputData | map | data qualities of the | | | sdfOutputData | map | data qualities of the | | |||
| | | | output data for an Event | | | | | output data for an Event | | |||
| +---------------+-----------+----------------------------+ | ||||
| | sdfData | named-sdq | zero or more named data | | | sdfData | named-sdq | zero or more named data | | |||
| | | | type definitions that | | | | | type definitions that | | |||
| | | | might be used in the above | | | | | might be used in the above | | |||
| +---------------+-----------+----------------------------+ | +---------------+-----------+----------------------------+ | |||
| Table 9: Qualities of sdfEvent | Table 9: Qualities of sdfEvent | |||
| sdfOutputData defines the output data of the action. As discussed in | sdfOutputData defines the output data of the action. As discussed in | |||
| Section 2.2.4, a set of data qualities with type "object" can be used | Section 2.2.4, a set of data qualities with type "object" can be used | |||
| to substructure the output data item, with optionality indicated by | to substructure the output data item, with optionality indicated by | |||
| skipping to change at page 40, line 34 ¶ | skipping to change at line 1739 ¶ | |||
| The sdfData keyword denotes a group of zero or more named data type | The sdfData keyword denotes a group of zero or more named data type | |||
| definitions (named-sdq). | definitions (named-sdq). | |||
| An sdfData definition provides a reusable semantic identifier for a | An sdfData definition provides a reusable semantic identifier for a | |||
| type of data item and describes the constraints on the defined type. | type of data item and describes the constraints on the defined type. | |||
| sdfData is not itself a declaration, so it does not cause any of | sdfData is not itself a declaration, so it does not cause any of | |||
| these data items to be included in an affordance definition. | these data items to be included in an affordance definition. | |||
| The qualities of sdfData include the data qualities (and thus the | The qualities of sdfData include the data qualities (and thus the | |||
| common qualities), see Section 4.7. | common qualities); see Section 4.7. | |||
| 6. High Level Composition | 6. High-Level Composition | |||
| The requirements for high level composition include the following: | The requirements for high-level composition include the following: | |||
| * The ability to represent products, standardized product types, and | * The ability to represent products, standardized product types, and | |||
| modular products while maintaining the atomicity of sdfObjects. | modular products while maintaining the atomicity of sdfObjects. | |||
| * The ability to compose a reusable definition block from | * The ability to compose a reusable definition block from | |||
| sdfObjects. Example: a single plug unit of an outlet strip with | sdfObjects. Example: a single plug unit of an outlet strip with | |||
| sdfObjects for on/off control, energy monitor, and optional | sdfObjects for on/off control, energy monitor, and optional | |||
| dimmer, while retaining the atomicity of the individual | dimmer, while retaining the atomicity of the individual | |||
| sdfObjects. | sdfObjects. | |||
| skipping to change at page 41, line 13 ¶ | skipping to change at line 1766 ¶ | |||
| the atomicity of sdfObjects. | the atomicity of sdfObjects. | |||
| * The ability to enrich and refine a base definition to have | * The ability to enrich and refine a base definition to have | |||
| product-specific qualities and quality values, such as unit, | product-specific qualities and quality values, such as unit, | |||
| range, and scale settings. | range, and scale settings. | |||
| * The ability to reference items in one part of a complex definition | * The ability to reference items in one part of a complex definition | |||
| from another part of the same definition. Example: summarizing | from another part of the same definition. Example: summarizing | |||
| the energy readings from all plugs in an outlet strip. | the energy readings from all plugs in an outlet strip. | |||
| 6.1. Paths in the model namespaces | 6.1. Paths in the Model Namespaces | |||
| The model namespace is organized according to terms that are defined | The model namespace is organized according to terms that are defined | |||
| in the SDF documents that contribute to the namespace. For example, | in the SDF documents that contribute to the namespace. For example, | |||
| definitions that originate from an organization or vendor are | definitions that originate from an organization or vendor are | |||
| expected to be in a namespace that is specific to that organization | expected to be in a namespace that is specific to that organization | |||
| or vendor. | or vendor. | |||
| The structure of a path in a namespace is defined by the JSON | The structure of a path in a namespace is defined by the JSON | |||
| Pointers to the definitions in the SDF documents in that namespace. | Pointers to the definitions in the SDF documents in that namespace. | |||
| For example, if there is an SDF document defining an sdfObject | For example, if there is an SDF document defining an sdfObject | |||
| "Switch" with an action "on", then the reference to the action would | "Switch" with an action "on", then the reference to the action would | |||
| be "ns:#/sdfObject/Switch/sdfAction/on" where ns is the namespace | be "ns:#/sdfObject/Switch/sdfAction/on", where ns is the namespace | |||
| prefix (short name for the namespace). | prefix (short name for the namespace). | |||
| 6.2. Modular Composition | 6.2. Modular Composition | |||
| Modular composition of definitions enables an existing definition | Modular composition of definitions enables an existing definition | |||
| (could be in the same or another SDF document) to become part of a | (which could be in the same or another SDF document) to become part | |||
| new definition by including a reference to the existing definition | of a new definition by including a reference to the existing | |||
| within the model namespace. | definition within the model namespace. | |||
| 6.2.1. Use of the "sdfRef" keyword to re-use a definition | 6.2.1. Use of the "sdfRef" Keyword to Reuse a Definition | |||
| An existing definition may be used as a template for a new | An existing definition may be used as a template for a new | |||
| definition, that is, a new definition is created in the target | definition, that is, a new definition is created in the target | |||
| namespace which uses the defined qualities of some existing | namespace which uses the defined qualities of some existing | |||
| definition. This pattern uses the keyword sdfRef as a quality of a | definition. This pattern uses the keyword sdfRef as a quality of a | |||
| new definition with a value consisting of a reference to the existing | new definition with a value consisting of a reference to the existing | |||
| definition that is to be used as a template. | definition that is to be used as a template. | |||
| In the definition that uses sdfRef, new qualities may be added and | In the definition that uses sdfRef, new qualities may be added and | |||
| existing qualities from the referenced definition may be overridden. | existing qualities from the referenced definition may be overridden. | |||
| skipping to change at page 42, line 4 ¶ | skipping to change at line 1801 ¶ | |||
| definition, that is, a new definition is created in the target | definition, that is, a new definition is created in the target | |||
| namespace which uses the defined qualities of some existing | namespace which uses the defined qualities of some existing | |||
| definition. This pattern uses the keyword sdfRef as a quality of a | definition. This pattern uses the keyword sdfRef as a quality of a | |||
| new definition with a value consisting of a reference to the existing | new definition with a value consisting of a reference to the existing | |||
| definition that is to be used as a template. | definition that is to be used as a template. | |||
| In the definition that uses sdfRef, new qualities may be added and | In the definition that uses sdfRef, new qualities may be added and | |||
| existing qualities from the referenced definition may be overridden. | existing qualities from the referenced definition may be overridden. | |||
| (Note that JSON maps do not have a defined order, so the SDF | (Note that JSON maps do not have a defined order, so the SDF | |||
| processor may see these overrides before seeing the sdfRef.) | processor may see these overrides before seeing the sdfRef.) | |||
| Note that the definition referenced by sdfRef might contain qualities | Note that the definition referenced by sdfRef might contain qualities | |||
| or definitions that are not valid in the context where the sdfRef is | or definitions that are not valid in the context where the sdfRef is | |||
| used. In this case, the resulting model, when resolved, may be | used. In this case, the resulting model, when resolved, may be | |||
| invalid. Example: an sdfRef adds an sdfThing definition in an | invalid. Example: an sdfRef adds an sdfThing definition in an | |||
| sdfObject definition. | sdfObject definition. | |||
| As a convention, overrides are intended to be used only for further | As a convention, overrides are intended to be used only for further | |||
| restricting the allowable set of data values. Such a usage is shown | restricting the allowable set of data values. Such a usage is shown | |||
| in Figure 5: any value allowable for a cable-length also is an | in Figure 5: any value allowable for a cable-length is also an | |||
| allowable value for a length, with the additional restriction that | allowable value for a length, with the additional restriction that | |||
| the length cannot be smaller than 5 cm. (This is labeled as a | the length cannot be smaller than 5 cm. (This is labeled as a | |||
| convention as it cannot be checked in the general case. A quality of | convention as it cannot be checked in the general case. A quality of | |||
| implementation consideration for a tool might be to provide at least | implementation consideration for a tool might be to provide at least | |||
| some form of checking.) Note that the example provides a description | some form of checking.) Note that the example provides a description | |||
| that overrides the description of the referenced definition; as this | that overrides the description of the referenced definition; as this | |||
| quality is intended for human consumption there is no conflict with | quality is intended for human consumption, there is no conflict with | |||
| the intended goal. | the intended goal. | |||
| "sdfData": | "sdfData": | |||
| "length" : { | "length" : { | |||
| "type": "number", | "type": "number", | |||
| "minimum": 0, | "minimum": 0, | |||
| "unit": "m" | "unit": "m" | |||
| "description": "There can be no negative lengths." | "description": "There can be no negative lengths." | |||
| } | } | |||
| ... | ... | |||
| skipping to change at page 43, line 13 ¶ | skipping to change at line 1859 ¶ | |||
| composed of sdfObjects and other sdfThings. It can also contain | composed of sdfObjects and other sdfThings. It can also contain | |||
| sdfData definitions, as well as declarations of interaction | sdfData definitions, as well as declarations of interaction | |||
| affordances itself, such as a status (on/off) for the refrigerator- | affordances itself, such as a status (on/off) for the refrigerator- | |||
| freezer as a whole (see Figure 8 in Appendix D.2 for an example SDF | freezer as a whole (see Figure 8 in Appendix D.2 for an example SDF | |||
| model illustrating these aspects). | model illustrating these aspects). | |||
| The qualities of sdfThing are shown in Table 10. Analogous to | The qualities of sdfThing are shown in Table 10. Analogous to | |||
| sdfObject, the presence of one or both of the optional qualities | sdfObject, the presence of one or both of the optional qualities | |||
| "minItems" and "maxItems" defines the sdfThing as an array. | "minItems" and "maxItems" defines the sdfThing as an array. | |||
| +-------------+-----------+-----------------------------+ | +=============+===========+=============================+ | |||
| | Quality | Type | Description | | | Quality | Type | Description | | |||
| +-------------+-----------+-----------------------------+ | +=============+===========+=============================+ | |||
| | (common) | | Section 4.6 | | | (common) | | Section 4.6 | | |||
| +-------------+-----------+-----------------------------+ | ||||
| | sdfThing | thing | | | | sdfThing | thing | | | |||
| +-------------+-----------+-----------------------------+ | ||||
| | sdfObject | object | | | | sdfObject | object | | | |||
| +-------------+-----------+-----------------------------+ | ||||
| | sdfProperty | property | zero or more named property | | | sdfProperty | property | zero or more named property | | |||
| | | | definitions for this thing | | | | | definitions for this thing | | |||
| +-------------+-----------+-----------------------------+ | ||||
| | sdfAction | action | zero or more named action | | | sdfAction | action | zero or more named action | | |||
| | | | definitions for this thing | | | | | definitions for this thing | | |||
| +-------------+-----------+-----------------------------+ | ||||
| | sdfEvent | event | zero or more named event | | | sdfEvent | event | zero or more named event | | |||
| | | | definitions for this thing | | | | | definitions for this thing | | |||
| +-------------+-----------+-----------------------------+ | ||||
| | sdfData | named-sdq | zero or more named data | | | sdfData | named-sdq | zero or more named data | | |||
| | | | type definitions that might | | | | | type definitions that might | | |||
| | | | be used in the above | | | | | be used in the above | | |||
| | minItems | number | (array) Minimum number of | | +-------------+-----------+-----------------------------+ | |||
| | minItems | number | (array) minimum number of | | ||||
| | | | multiplied affordances in | | | | | multiplied affordances in | | |||
| | | | array | | | | | array | | |||
| | maxItems | number | (array) Maximum number of | | +-------------+-----------+-----------------------------+ | |||
| | maxItems | number | (array) maximum number of | | ||||
| | | | multiplied affordances in | | | | | multiplied affordances in | | |||
| | | | array | | | | | array | | |||
| +-------------+-----------+-----------------------------+ | +-------------+-----------+-----------------------------+ | |||
| Table 10: Qualities of sdfThing | Table 10: Qualities of sdfThing | |||
| 7. IANA Considerations | 7. IANA Considerations | |||
| // RFC Ed.: throughout this section, please replace RFC XXXX with | ||||
| // this RFC number, and remove this note. | ||||
| 7.1. Media Type | 7.1. Media Type | |||
| IANA is requested to add the following Media-Type to the "Media | IANA has added the following Media-Type to the "Media Types" registry | |||
| Types" registry [IANA.media-types]. | [IANA.media-types]. | |||
| +----------+----------------------+-----------------------+ | +==========+======================+=======================+ | |||
| | Name | Template | Reference | | | Name | Template | Reference | | |||
| +----------+----------------------+-----------------------+ | +==========+======================+=======================+ | |||
| | sdf+json | application/sdf+json | RFC XXXX, Section 7.1 | | | sdf+json | application/sdf+json | RFC 9880, Section 7.1 | | |||
| +----------+----------------------+-----------------------+ | +----------+----------------------+-----------------------+ | |||
| Table 11: Media Type Registration for SDF | Table 11: Media Type Registration for SDF | |||
| Type name: application | Type name: application | |||
| Subtype name: sdf+json | Subtype name: sdf+json | |||
| Required parameters: N/A | Required parameters: N/A | |||
| Optional parameters: N/A | Optional parameters: N/A | |||
| Encoding considerations: binary (JSON is UTF-8-encoded text) | Encoding considerations: binary (JSON is UTF-8-encoded text) | |||
| Security considerations: Section 8 of RFC XXXX | ||||
| Security considerations: Section 8 of RFC 9880 | ||||
| Interoperability considerations: none | Interoperability considerations: none | |||
| Published specification: Section 7.1 of RFC XXXX | ||||
| Published specification: Section 7.1 of RFC 9880 | ||||
| Applications that use this media type: Tools for data and | Applications that use this media type: Tools for data and | |||
| interaction modeling in the Internet of Things and related | interaction modeling in the Internet of Things and related | |||
| environments | environments. | |||
| Fragment identifier considerations: A JSON Pointer fragment | ||||
| identifier may be used, as defined in Section 6 of [RFC6901]. | ||||
| Additional information: Magic number(s): n/a | ||||
| File extension(s): .sdf.json | ||||
| Windows Clipboard Name: "Semantic | Fragment identifier considerations: A JSON Pointer fragment | |||
| Definition Format (SDF) for Data and Interactions of Things" | identifier may be used as defined in Section 6 of [RFC6901]. | |||
| Macintosh file type code(s): n/a | Additional information: | |||
| Macintosh Universal Type Identifier code: o | Magic number(s): n/a | |||
| rg.ietf.sdf-json | File extension(s): .sdf.json | |||
| Windows Clipboard Name: "Semantic Definition Format (SDF) for | ||||
| Data and Interactions of Things" | ||||
| Macintosh file type code(s): n/a | ||||
| Macintosh Universal Type Identifier code: org.ietf.sdf-json | ||||
| conforms to public.text | conforms to public.text | |||
| Person & email address to contact for further information: ASDF WG | Person & email address to contact for further information: ASDF WG | |||
| mailing list (asdf@ietf.org), or IETF Applications and Real-Time | mailing list (asdf@ietf.org) or IETF Applications and Real-Time | |||
| Area (art@ietf.org) | Area (art@ietf.org) | |||
| Intended usage: COMMON | Intended usage: COMMON | |||
| Restrictions on usage: none | Restrictions on usage: none | |||
| Author/Change controller: IETF | Author/Change controller: IETF | |||
| Provisional registration: no | Provisional registration: no | |||
| 7.2. Content-Format | 7.2. Content-Format | |||
| This document adds the following Content-Format to the "CoAP Content- | IANA has added the following Content-Format to the "CoAP Content- | |||
| Formats" registry, within the "Constrained RESTful Environments | Formats" registry within the "Constrained RESTful Environments (CoRE) | |||
| (CoRE) Parameters" registry group [IANA.core-parameters], where 434 | Parameters" registry group [IANA.core-parameters]. | |||
| comes from the "IETF Review" 256-999 range. | ||||
| +----------------------+----------------+-----+-----------+ | +======================+================+=====+===========+ | |||
| | Content Type | Content Coding | ID | Reference | | | Content Type | Content Coding | ID | Reference | | |||
| +----------------------+----------------+-----+-----------+ | +======================+================+=====+===========+ | |||
| | application/sdf+json | - | 434 | RFC XXXX | | | application/sdf+json | - | 434 | RFC 9880 | | |||
| +----------------------+----------------+-----+-----------+ | +----------------------+----------------+-----+-----------+ | |||
| Table 12: SDF Content-format Registration | Table 12: SDF Content-Format Registration | |||
| // RFC Ed.: 434 was earmarked in | ||||
| https://mailarchive.ietf.org/arch/msg/core-parameters/ | ||||
| iLDsdxk80YO9IsLMXMAgcx5S8Ak/ (https://mailarchive.ietf.org/arch/msg/ | ||||
| core-parameters/iLDsdxk80YO9IsLMXMAgcx5S8Ak/); please replace 434 | ||||
| with the assigned ID, remove the requested range, and remove this | ||||
| note. | ||||
| // RFC Ed.: please replace RFC XXXX with this RFC number and remove | ||||
| this note. | ||||
| 7.3. IETF URN Sub-namespace for Unit Names (urn:ietf:params:unit) | 7.3. IETF URN Sub-Namespace for Unit Names (urn:ietf:params:unit) | |||
| IANA is requested to register the following value in the "IETF URN | IANA has registered the following value in the "IETF URN Sub- | |||
| Sub-namespace for Registered Protocol Parameter Identifiers" registry | namespace for Registered Protocol Parameter Identifiers" registry in | |||
| in [IANA.params], following the template in [BCP73]: | [IANA.params], following the template in [BCP73]: | |||
| Registry name: unit | Registry name: unit | |||
| Specification: RFC XXXX | Specification: RFC 9880 | |||
| 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 [IANA.senml] as | registry and the "Secondary Units" registry in the "Sensor | |||
| specified by Sections 4.5.1 and 12.1 of [RFC8428] and Section 3 of | Measurement Lists (SenML)" registry group [IANA.senml] as | |||
| [RFC8798], respectively (which by the registration policy are | specified by Sections 4.5.2 and 12.1 of [RFC8428] and Section 3 of | |||
| [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]), ":" or "@" (i.e., the | delims" (Section 2.3 of RFC 3986 [STD66]), and ":" or "@" (i.e., | |||
| result must match the ABNF rule "pchar" in Section 3.3 of RFC 3986 | the result must match the ABNF rule "pchar" in Section 3.3 of RFC | |||
| [STD66]). | 3986 [STD66]). | |||
| 7.4. SenML registry group | 7.4. SenML Registry Group | |||
| IANA is requested to add the following note to the SenML registry | IANA has added the following note to the "Sensor Measurement Lists | |||
| group [IANA.senml]: | (SenML)" registry group [IANA.senml]: | |||
| | In SDF [RFC XXXX], 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 | |||
| | unit name that contains a colon can therefore not be directly used | | unit name that contains a colon can therefore not be directly used | |||
| | in SDF. | | in SDF. | |||
| 7.5. Registries | 7.5. Registries | |||
| IANA is requested to create a "Semantic Definition Format (SDF)" | IANA has created the "Semantic Definition Format (SDF)" registry | |||
| registry group, with the registries defined in this Section. | group with the registries defined in this Section. | |||
| 7.5.1. Quality Names | 7.5.1. SDF Quality Names | |||
| IANA is requested to create a "Quality Names" registry in the | IANA has created the "SDF Quality Names" registry in the "Semantic | |||
| "Semantic Definition Format (SDF)" registry group, with the following | Definition Format (SDF)" registry group with the following template: | |||
| template: | ||||
| Name: A quality name composed of ASCII letters, digits, and dollar | Name: A quality name composed of ASCII letters, digits, and dollar | |||
| signs, starting with a lower case ASCII letter or a dollar sign | signs, starting with a lowercase ASCII letter or a dollar sign | |||
| (i.e., using a pattern of "[a-z$][A-Za-z$0-9]*"). | (i.e., using a pattern of "[a-z$][A-Za-z$0-9]*"). | |||
| Brief Description: A brief description. | Brief Description: A brief description. | |||
| Reference: A pointer to a specification. | Reference: A pointer to a specification. | |||
| Change Controller: (see Section 2.3 of RFC 8126 [BCP26]) | Change Controller: (See Section 2.3 of RFC 8126 [BCP26]) | |||
| Quality Names in this registry are intended to be registered in | Quality Names in this registry are intended to be registered in | |||
| conjunction with RFCs and activities of the IETF. | conjunction with RFCs and activities of the IETF. | |||
| The registration policy is Specification Required as per Section 4.6 | The registration policy is Specification Required as per Section 4.6 | |||
| of RFC 8126 [BCP26]. (Note that the policy is not "RFC Required" or | of RFC 8126 [BCP26]. Note that the policy is not "RFC Required" or | |||
| "IETF Review" Sections 4.7 and 4.8 of RFC 8126 [BCP26] so that | "IETF Review" (Sections 4.7 and 4.8 of RFC 8126 [BCP26]) so that | |||
| registrations can be made earlier in the process, even earlier than | registrations can be made earlier in the process, even earlier than | |||
| foreseen in [BCP100].) | foreseen in [BCP100].) | |||
| The instructions to the Experts are: | The instructions to the Experts are: | |||
| * to ascertain that the specification is available in an immutable | * to ascertain that the specification is available in an immutable | |||
| reference and has achieved a good level of review in conjunction | reference and has achieved a good level of review in conjunction | |||
| with RFCs or activities of the IETF, and | with RFCs or activities of the IETF, and | |||
| * to be frugal in the allocation of quality names that are | * to be frugal in the allocation of quality names that are | |||
| suggestive of generally applicable semantics, keeping them in | suggestive of generally applicable semantics, keeping them in | |||
| reserve for qualities that are likely to enjoy wide use and can | reserve for qualities that are likely to enjoy wide use and can | |||
| make good use of their conciseness. | make good use of their conciseness. | |||
| The "Quality Names" registry starts out as in Table 13; all | The "SDF Quality Names" registry starts out as in Table 13; all | |||
| references for these initial entries are to RFC XXXX and all change | references for these initial entries are to RFC 9880 (this document) | |||
| controllers are given as "IETF"". | and all change controllers are "IETF"". | |||
| +----------------------+------------------------------------------+ | +======================+==========================================+ | |||
| | Name | Brief Description | | | Name | Brief Description | | |||
| +----------------------+------------------------------------------+ | +======================+==========================================+ | |||
| | $comment | source code comments only, no semantics | | | $comment | source code comments only, no semantics | | |||
| +----------------------+------------------------------------------+ | ||||
| | const | constant value | | | const | constant value | | |||
| +----------------------+------------------------------------------+ | ||||
| | contentFormat | content format | | | contentFormat | content format | | |||
| +----------------------+------------------------------------------+ | ||||
| | default | default value | | | default | default value | | |||
| +----------------------+------------------------------------------+ | ||||
| | description | long description text | | | description | long description text | | |||
| +----------------------+------------------------------------------+ | ||||
| | enum | sdfChoice limited to text strings | | | enum | sdfChoice limited to text strings | | |||
| +----------------------+------------------------------------------+ | ||||
| | exclusiveMaximum | exclusive maximum for a number | | | exclusiveMaximum | exclusive maximum for a number | | |||
| +----------------------+------------------------------------------+ | ||||
| | exclusiveMinimum | exclusive minimum for a number | | | exclusiveMinimum | exclusive minimum for a number | | |||
| +----------------------+------------------------------------------+ | ||||
| | format | specific format for a text string | | | format | specific format for a text string | | |||
| +----------------------+------------------------------------------+ | ||||
| | items | items of an array | | | items | items of an array | | |||
| +----------------------+------------------------------------------+ | ||||
| | label | short text (no constraints); defaults to | | | label | short text (no constraints); defaults to | | |||
| | | key | | | | key | | |||
| +----------------------+------------------------------------------+ | ||||
| | maxItems | maximum number of items in an array | | | maxItems | maximum number of items in an array | | |||
| +----------------------+------------------------------------------+ | ||||
| | maxLength | maximum length for a text string (in | | | maxLength | maximum length for a text string (in | | |||
| | | characters, i.e., Unicode scalar values) | | | | characters, i.e., Unicode scalar values) | | |||
| +----------------------+------------------------------------------+ | ||||
| | maximum | maximum for a number | | | maximum | maximum for a number | | |||
| +----------------------+------------------------------------------+ | ||||
| | minItems | minimum number of items in an array | | | minItems | minimum number of items in an array | | |||
| +----------------------+------------------------------------------+ | ||||
| | minLength | minimum length for a text string (in | | | minLength | minimum length for a text string (in | | |||
| | | characters, i.e., Unicode scalar values) | | | | characters, i.e., Unicode scalar values) | | |||
| +----------------------+------------------------------------------+ | ||||
| | minimum | minimum for a number | | | minimum | minimum for a number | | |||
| +----------------------+------------------------------------------+ | ||||
| | multipleOf | step size of number | | | multipleOf | step size of number | | |||
| +----------------------+------------------------------------------+ | ||||
| | nullable | boolean: can the item be left out? | | | nullable | boolean: can the item be left out? | | |||
| +----------------------+------------------------------------------+ | ||||
| | observable | boolean: can the item be observed? | | | observable | boolean: can the item be observed? | | |||
| +----------------------+------------------------------------------+ | ||||
| | pattern | regular expression pattern for a text | | | pattern | regular expression pattern for a text | | |||
| | | string | | | | string | | |||
| +----------------------+------------------------------------------+ | ||||
| | properties | named dataqualities for type="object" | | | properties | named dataqualities for type="object" | | |||
| +----------------------+------------------------------------------+ | ||||
| | readable | boolean: can the item be read? | | | readable | boolean: can the item be read? | | |||
| +----------------------+------------------------------------------+ | ||||
| | required | which data items are required? | | | required | which data items are required? | | |||
| +----------------------+------------------------------------------+ | ||||
| | sdfChoice | named dataqualities for a choice | | | sdfChoice | named dataqualities for a choice | | |||
| +----------------------+------------------------------------------+ | ||||
| | sdfData | named dataqualities for an independent | | | sdfData | named dataqualities for an independent | | |||
| | | data type definition | | | | data type definition | | |||
| +----------------------+------------------------------------------+ | ||||
| | sdfInputData | input data to an action | | | sdfInputData | input data to an action | | |||
| +----------------------+------------------------------------------+ | ||||
| | sdfOutputData | output data of an action or event | | | sdfOutputData | output data of an action or event | | |||
| | | (sdfRequired applies here) | | | | (sdfRequired applies here) | | |||
| +----------------------+------------------------------------------+ | ||||
| | sdfRef | sdf-pointer to definition being | | | sdfRef | sdf-pointer to definition being | | |||
| | | referenced | | | | referenced | | |||
| +----------------------+------------------------------------------+ | ||||
| | sdfRequired | pointer-list to declarations of required | | | sdfRequired | pointer-list to declarations of required | | |||
| | | components | | | | components | | |||
| +----------------------+------------------------------------------+ | ||||
| | sdfRequiredInputData | pointer-list to declarations of required | | | sdfRequiredInputData | pointer-list to declarations of required | | |||
| | | input data for an action | | | | input data for an action | | |||
| +----------------------+------------------------------------------+ | ||||
| | sdfType | more detailed information about the type | | | sdfType | more detailed information about the type | | |||
| | | of a string | | | | of a string | | |||
| +----------------------+------------------------------------------+ | ||||
| | type | general category of data type | | | type | general category of data type | | |||
| +----------------------+------------------------------------------+ | ||||
| | uniqueItems | boolean: do the items of the array need | | | uniqueItems | boolean: do the items of the array need | | |||
| | | to be all different? | | | | to be all different? | | |||
| +----------------------+------------------------------------------+ | ||||
| | unit | engineering unit and scale (per SenML | | | unit | engineering unit and scale (per SenML | | |||
| | | registry) | | | | registry) | | |||
| +----------------------+------------------------------------------+ | ||||
| | writable | boolean: can the item be written to? | | | writable | boolean: can the item be written to? | | |||
| +----------------------+------------------------------------------+ | +----------------------+------------------------------------------+ | |||
| Table 13: Initial Content of Quality Names Registry | Table 13: Initial Content of the SDF Quality Names Registry | |||
| 7.5.2. Quality Name Prefixes | 7.5.2. SDF Quality Name Prefixes | |||
| IANA is requested to create a "Quality Name Prefixes" registry in the | IANA has created the "SDF Quality Name Prefixes" registry in the | |||
| "Semantic Definition Format (SDF)" registry group, with the following | "Semantic Definition Format (SDF)" registry group with the following | |||
| template: | template: | |||
| Prefix: A quality name prefix composed of lower case ASCII letters | Prefix: A quality name prefix composed of lower case ASCII letters | |||
| and digits, starting with a lower case ASCII letter (i.e., using a | and digits, starting with a lower case ASCII letter (i.e., using a | |||
| pattern of "[a-z][a-z0-9]*"). | pattern of "[a-z][a-z0-9]*"). | |||
| Contact: A contact point for the organization that assigns quality | Contact: A contact point for the organization that assigns quality | |||
| names with this prefix. | names with this prefix. | |||
| Reference: A pointer to additional information, if available. | Reference: A pointer to additional information, if available. | |||
| Quality Name Prefixes are intended to be registered by organizations | Quality Name Prefixes are intended to be registered by organizations | |||
| that plan to define quality names constructed with an organization- | that plan to define quality names constructed with an organization- | |||
| specifix prefix (Section 2.3.3). | specific prefix (Section 2.3.3). | |||
| The registration policy is Expert Review as per Section 4.5 of RFC | The registration policy is Expert Review as per Section 4.5 of RFC | |||
| 8126 [BCP26]. The instructions to the Expert are to ascertain that | 8126 [BCP26]. The instructions to the Expert are to ascertain that | |||
| the organization will handle quality names constructed using their | the organization will handle quality names constructed using their | |||
| prefix in a way that roughly achieves the objectives for an IANA | prefix in a way that roughly achieves the objectives for an IANA | |||
| registry that support interoperability of SDF models employing these | registry that supports interoperability of SDF models employing these | |||
| quality names, including: | quality names, including: | |||
| * Stability, "stable and permanent"; | * Stability, "stable and permanent"; | |||
| * Transparency, "readily available", "in sufficient detail" | * Transparency, "readily available" and "in sufficient detail" | |||
| (Section 4.6 of RFC 8126 [BCP26]). | (Section 4.6 of RFC 8126 [BCP26]). | |||
| The "Quality Name Prefixes" registry starts out empty. | The "SDF Quality Name Prefixes" registry is empty at this time. | |||
| 7.5.3. sdfType Values | 7.5.3. sdfType Values | |||
| IANA is requested to create a "sdfType values" registry in the | IANA has created the "sdfType Values" registry in the "Semantic | |||
| "Semantic Definition Format (SDF)" registry group, with the following | Definition Format (SDF)" registry group with the following template: | |||
| template: | ||||
| Name: A name composed of lower case ASCII letters, digits and - | Name: A name composed of lower case ASCII letters, digits and - | |||
| (ASCII hyphen/minus) characters, starting with a lower case ASCII | (ASCII hyphen/minus) characters, starting with a lower case ASCII | |||
| letter (i.e., using a pattern of "[a-z][-a-z0-9]*"). | letter (i.e., using a pattern of "[a-z][-a-z0-9]*"). | |||
| Description: A short description of the information model level | Description: A short description of the information model level | |||
| structure and semantics | structure and semantics. | |||
| type: The value of the quality "type" to be used with this sdfType | type: The value of the quality "type" to be used with this sdfType. | |||
| JSON Representation A short description of a JSON representation | JSON Representation A short description of a JSON representation | |||
| that can be used for this sdfType. As per Section 4.7.1, this | that can be used for this sdfType. As per Section 4.7.1, this | |||
| MUST be consistent with the type. | MUST be consistent with the type. | |||
| Reference: A more detailed specification of meaning and use of | Reference: A more detailed specification of meaning and use of | |||
| sdfType. | sdfType. | |||
| sdfType values are intended to be registered to enable modeling | sdfType values are intended to be registered to enable modeling | |||
| additional SDF-specific types (see Section 4.7.1). | additional SDF-specific types (see Section 4.7.1). | |||
| skipping to change at page 49, line 40 ¶ | skipping to change at line 2201 ¶ | |||
| The registration policy is Specification Required as per Section 4.6 | The registration policy is Specification Required as per Section 4.6 | |||
| of RFC 8126 [BCP26]. The instructions to the Expert are to ascertain | of RFC 8126 [BCP26]. The instructions to the Expert are to ascertain | |||
| that the specification provides enough detail to enable | that the specification provides enough detail to enable | |||
| interoperability between implementations of the sdfType being | interoperability between implementations of the sdfType being | |||
| registered, and that names are chosen with enough specificity that | registered, and that names are chosen with enough specificity that | |||
| ecosystem-specific sdfTypes will not be confused with more generally | ecosystem-specific sdfTypes will not be confused with more generally | |||
| applicable ones. | applicable ones. | |||
| The initial set of registrations is described in Table 5. | The initial set of registrations is described in Table 5. | |||
| 7.5.4. Feature Names | 7.5.4. SDF Feature Names | |||
| IANA is requested to create a "Feature Names" registry in the | IANA has created the "SDF Feature Names" registry in the "Semantic | |||
| "Semantic Definition Format (SDF)" registry group, with the following | Definition Format (SDF)" registry group with the following template: | |||
| template: | ||||
| Name: A feature name composed of ASCII letters, digits, and dollar | Name: A feature name composed of ASCII letters, digits, and dollar | |||
| signs, starting with a lower case ASCII letter or a dollar sign | signs, starting with a lower case ASCII letter or a dollar sign | |||
| (i.e., using a pattern of "[a-z$][A-Za-z$0-9]*"). | (i.e., using a pattern of "[a-z$][A-Za-z$0-9]*"). | |||
| Brief Description: A brief description. | Brief Description: A brief description. | |||
| Reference: A pointer to a specification. | Reference: A pointer to a specification. | |||
| Change Controller: (see Section 2.3 of RFC 8126 [BCP26]) | Change Controller: (See Section 2.3 of RFC 8126 [BCP26]) | |||
| The registration policy is Specification Required as per Section 4.6 | The registration policy is Specification Required as per Section 4.6 | |||
| of RFC 8126 [BCP26]. | of RFC 8126 [BCP26]. | |||
| The instructions to the Experts are: | The instructions to the Experts are: | |||
| * to ascertain that the specification is available in an immutable | * to ascertain that the specification is available in an immutable | |||
| reference and has achieved a good level of review, and | reference and has achieved a good level of review, and | |||
| * to be frugal in the allocation of feature names that are | * to be frugal in the allocation of feature names that are | |||
| suggestive of generally applicable semantics, keeping them in | suggestive of generally applicable semantics, keeping them in | |||
| reserve for features that are likely to enjoy wide use and can | reserve for features that are likely to enjoy wide use and can | |||
| make good use of their conciseness. | make good use of their conciseness. | |||
| The "Feature Names" registry starts out empty. | The "SDF Feature Names" registry is empty at this time. | |||
| 8. Security Considerations | 8. Security Considerations | |||
| Some wider security considerations applicable to Things are discussed | Some wider security considerations applicable to Things are discussed | |||
| in [RFC8576]. | in [RFC8576]. | |||
| Section 5 of [RFC8610] gives an overview over security considerations | Section 5 of [RFC8610] gives an overview over security considerations | |||
| that arise when formal description techniques are used to govern | that arise when formal description techniques are used to govern | |||
| interoperability; analogs of these security considerations can apply | interoperability; analogs of these security considerations can apply | |||
| to SDF. | to SDF. | |||
| The security considerations of underlying building blocks such as | The security considerations of underlying building blocks such as | |||
| those detailed in Section 10 of RFC 3629 [STD63] apply. | those detailed in Section 10 of RFC 3629 [STD63] apply. | |||
| SDF uses JSON as a representation language. For a number of cases, | SDF uses JSON as a representation language. For a number of cases, | |||
| [STD90] indicates that implementation behavior for certain constructs | [STD90] indicates that implementation behavior for certain constructs | |||
| allowed by the JSON grammar is unpredictable. | allowed by the JSON grammar is unpredictable. | |||
| Implementations need to be robust against invalid or unpredictable | Implementations need to be robust against invalid or unpredictable | |||
| cases on input, preferably by rejecting input that is invalid or that | cases on input, preferably by rejecting input that is invalid or that | |||
| would lead to unpredictable behavior, and need to avoid generating | would lead to unpredictable behavior, and avoid generating these | |||
| these cases on output. | cases on output. | |||
| Implementations of model languages may also exhibit performance- | Implementations of model languages may also exhibit performance- | |||
| related availability issues when the attacker can control the input, | related availability issues when the attacker can control the input, | |||
| see Section 4.1 of [RFC9535] for a brief discussion and Section 8 of | see Section 4.1 of [RFC9535] for a brief discussion and Section 8 of | |||
| [RFC9485] for considerations specific to the use of pattern. | [RFC9485] for considerations specific to the use of pattern. | |||
| SDF may be used in two processes that are often security relevant: | SDF may be used in two processes that are often security relevant: | |||
| model-based _validation_ of data that is intended to be described by | model-based _validation_ of data that is intended to be described by | |||
| SDF models, and model-based _augmentation_ of these data with | SDF models and model-based _augmentation_ of these data with | |||
| information obtained from the SDF models that apply. | information obtained from the SDF models that apply. | |||
| Implementations need to ascertain the provenance (and thus | Implementations need to ascertain the provenance (and thus | |||
| authenticity and integrity) and applicability of the SDF models they | authenticity and integrity) and applicability of the SDF models they | |||
| employ operationally in such security relevant ways. Implementations | employ operationally in such security-relevant ways. Implementations | |||
| that make use of the composition mechanisms defined in this document | that make use of the composition mechanisms defined in this document | |||
| need to do this for each of the components they combine into the SDF | need to do this for each of the components they combine into the SDF | |||
| models they employ. Essentially, this process needs to undergo the | models they employ. Essentially, this process needs to undergo the | |||
| same care and scrutiny as any other introduction of source code into | same care and scrutiny as any other introduction of source code into | |||
| a build environment; the possibility of supply-chain attacks on the | a build environment; the possibility of supply-chain attacks on the | |||
| modules imported needs to be considered. | modules imported needs to be considered. | |||
| Specifically, implementations might rely on model-based input | Specifically, implementations might rely on model-based input | |||
| validation for enforcing certain properties of the data structure | validation for enforcing certain properties of the data structure | |||
| ingested (which, if not validated, could lead to malfunctions such as | ingested (which, if not validated, could lead to malfunctions such as | |||
| skipping to change at page 51, line 29 ¶ | skipping to change at line 2287 ¶ | |||
| particularly careful about the data models they apply, including | particularly careful about the data models they apply, including | |||
| their provenance and potential changes of these properties that | their provenance and potential changes of these properties that | |||
| upgrades to the referenced modules may (inadvertently or as part of | upgrades to the referenced modules may (inadvertently or as part of | |||
| 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, the security considerations of | |||
| dereferenceable identifiers apply (see [I-D.bormann-t2trg-deref-id] | dereferenceable identifiers apply (see [DEREF-ID-PATTERN] for a more | |||
| for a more extensive discussion of dereferenceable identifiers). | 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; this is therefore left as future | of the protocols employed there; therefore, this is left as future | |||
| work (e.g., for documents such as [I-D.bormann-asdf-sdf-mapping]). | work (e.g., for documents such as [SDF-MAPPING]). | |||
| 9. References | 9. References | |||
| 9.1. Normative References | 9.1. Normative References | |||
| [BCP14] Best Current Practice 14, | ||||
| <https://www.rfc-editor.org/info/bcp14>. | ||||
| At the time of writing, this BCP comprises the following: | ||||
| Bradner, S., "Key words for use in RFCs to Indicate | ||||
| Requirement Levels", BCP 14, RFC 2119, | ||||
| DOI 10.17487/RFC2119, March 1997, | ||||
| <https://www.rfc-editor.org/info/rfc2119>. | ||||
| Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | ||||
| 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | ||||
| May 2017, <https://www.rfc-editor.org/info/rfc8174>. | ||||
| [BCP26] Best Current Practice 26, | [BCP26] Best Current Practice 26, | |||
| <https://www.rfc-editor.org/info/bcp26>. | <https://www.rfc-editor.org/info/bcp26>. | |||
| At the time of writing, this BCP comprises the following: | At the time of writing, this BCP comprises the following: | |||
| Cotton, M., Leiba, B., and T. Narten, "Guidelines for | Cotton, M., Leiba, B., and T. Narten, "Guidelines for | |||
| Writing an IANA Considerations Section in RFCs", BCP 26, | Writing an IANA Considerations Section in RFCs", BCP 26, | |||
| RFC 8126, DOI 10.17487/RFC8126, June 2017, | RFC 8126, DOI 10.17487/RFC8126, June 2017, | |||
| <https://www.rfc-editor.org/info/rfc8126>. | <https://www.rfc-editor.org/info/rfc8126>. | |||
| [BCP73] Best Current Practice 73, | [BCP73] Best Current Practice 73, | |||
| skipping to change at page 52, line 49 ¶ | skipping to change at line 2343 ¶ | |||
| <https://www.iana.org/assignments/media-types>. | <https://www.iana.org/assignments/media-types>. | |||
| [IANA.params] | [IANA.params] | |||
| IANA, "Uniform Resource Name (URN) Namespace for IETF | IANA, "Uniform Resource Name (URN) Namespace for IETF | |||
| Use", <https://www.iana.org/assignments/params>. | Use", <https://www.iana.org/assignments/params>. | |||
| [IANA.senml] | [IANA.senml] | |||
| IANA, "Sensor Measurement Lists (SenML)", | IANA, "Sensor Measurement Lists (SenML)", | |||
| <https://www.iana.org/assignments/senml>. | <https://www.iana.org/assignments/senml>. | |||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | ||||
| Requirement Levels", BCP 14, RFC 2119, | ||||
| DOI 10.17487/RFC2119, March 1997, | ||||
| <https://www.rfc-editor.org/info/rfc2119>. | ||||
| [RFC3339] Klyne, G. and C. Newman, "Date and Time on the Internet: | [RFC3339] Klyne, G. and C. Newman, "Date and Time on the Internet: | |||
| Timestamps", RFC 3339, DOI 10.17487/RFC3339, July 2002, | Timestamps", RFC 3339, DOI 10.17487/RFC3339, July 2002, | |||
| <https://www.rfc-editor.org/rfc/rfc3339>. | <https://www.rfc-editor.org/info/rfc3339>. | |||
| [RFC6901] Bryan, P., Ed., Zyp, K., and M. Nottingham, Ed., | [RFC6901] Bryan, P., Ed., Zyp, K., and M. Nottingham, Ed., | |||
| "JavaScript Object Notation (JSON) Pointer", RFC 6901, | "JavaScript Object Notation (JSON) Pointer", RFC 6901, | |||
| DOI 10.17487/RFC6901, April 2013, | DOI 10.17487/RFC6901, April 2013, | |||
| <https://www.rfc-editor.org/rfc/rfc6901>. | <https://www.rfc-editor.org/info/rfc6901>. | |||
| [RFC7396] Hoffman, P. and J. Snell, "JSON Merge Patch", RFC 7396, | [RFC7396] Hoffman, P. and J. Snell, "JSON Merge Patch", RFC 7396, | |||
| DOI 10.17487/RFC7396, October 2014, | DOI 10.17487/RFC7396, October 2014, | |||
| <https://www.rfc-editor.org/rfc/rfc7396>. | <https://www.rfc-editor.org/info/rfc7396>. | |||
| [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | ||||
| 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | ||||
| May 2017, <https://www.rfc-editor.org/info/rfc8174>. | ||||
| [RFC8428] Jennings, C., Shelby, Z., Arkko, J., Keranen, A., and C. | [RFC8428] Jennings, C., Shelby, Z., Arkko, J., Keranen, A., and C. | |||
| Bormann, "Sensor Measurement Lists (SenML)", RFC 8428, | Bormann, "Sensor Measurement Lists (SenML)", RFC 8428, | |||
| DOI 10.17487/RFC8428, August 2018, | DOI 10.17487/RFC8428, August 2018, | |||
| <https://www.rfc-editor.org/rfc/rfc8428>. | <https://www.rfc-editor.org/info/rfc8428>. | |||
| [RFC8610] Birkholz, H., Vigano, C., and C. Bormann, "Concise Data | [RFC8610] Birkholz, H., Vigano, C., and C. Bormann, "Concise Data | |||
| Definition Language (CDDL): A Notational Convention to | Definition Language (CDDL): A Notational Convention to | |||
| Express Concise Binary Object Representation (CBOR) and | Express Concise Binary Object Representation (CBOR) and | |||
| JSON Data Structures", RFC 8610, DOI 10.17487/RFC8610, | JSON Data Structures", RFC 8610, DOI 10.17487/RFC8610, | |||
| June 2019, <https://www.rfc-editor.org/rfc/rfc8610>. | June 2019, <https://www.rfc-editor.org/info/rfc8610>. | |||
| [RFC8798] Bormann, C., "Additional Units for Sensor Measurement | [RFC8798] Bormann, C., "Additional Units for Sensor Measurement | |||
| Lists (SenML)", RFC 8798, DOI 10.17487/RFC8798, June 2020, | Lists (SenML)", RFC 8798, DOI 10.17487/RFC8798, June 2020, | |||
| <https://www.rfc-editor.org/rfc/rfc8798>. | <https://www.rfc-editor.org/info/rfc8798>. | |||
| [RFC9165] Bormann, C., "Additional Control Operators for the Concise | [RFC9165] Bormann, C., "Additional Control Operators for the Concise | |||
| Data Definition Language (CDDL)", RFC 9165, | Data Definition Language (CDDL)", RFC 9165, | |||
| DOI 10.17487/RFC9165, December 2021, | DOI 10.17487/RFC9165, December 2021, | |||
| <https://www.rfc-editor.org/rfc/rfc9165>. | <https://www.rfc-editor.org/info/rfc9165>. | |||
| [RFC9193] Keränen, A. and C. Bormann, "Sensor Measurement Lists | [RFC9193] Keränen, A. and C. Bormann, "Sensor Measurement Lists | |||
| (SenML) Fields for Indicating Data Value Content-Format", | (SenML) Fields for Indicating Data Value Content-Format", | |||
| RFC 9193, DOI 10.17487/RFC9193, June 2022, | RFC 9193, DOI 10.17487/RFC9193, June 2022, | |||
| <https://www.rfc-editor.org/rfc/rfc9193>. | <https://www.rfc-editor.org/info/rfc9193>. | |||
| [RFC9562] Davis, K., Peabody, B., and P. Leach, "Universally Unique | [RFC9562] Davis, K., Peabody, B., and P. Leach, "Universally Unique | |||
| IDentifiers (UUIDs)", RFC 9562, DOI 10.17487/RFC9562, May | IDentifiers (UUIDs)", RFC 9562, DOI 10.17487/RFC9562, May | |||
| 2024, <https://www.rfc-editor.org/rfc/rfc9562>. | 2024, <https://www.rfc-editor.org/info/rfc9562>. | |||
| [SPDX] "SPDX License List", <https://spdx.org/licenses/>. | [SPDX] "SPDX License List", <https://spdx.org/licenses/>. | |||
| [STD63] Internet Standard 63, | [STD63] Internet Standard 63, | |||
| <https://www.rfc-editor.org/info/std63>. | <https://www.rfc-editor.org/info/std63>. | |||
| At the time of writing, this STD comprises the following: | At the time of writing, this STD comprises the following: | |||
| Yergeau, F., "UTF-8, a transformation format of ISO | Yergeau, F., "UTF-8, a transformation format of ISO | |||
| 10646", STD 63, RFC 3629, DOI 10.17487/RFC3629, November | 10646", STD 63, RFC 3629, DOI 10.17487/RFC3629, November | |||
| 2003, <https://www.rfc-editor.org/info/rfc3629>. | 2003, <https://www.rfc-editor.org/info/rfc3629>. | |||
| skipping to change at page 54, line 42 ¶ | skipping to change at line 2441 ¶ | |||
| <https://www.rfc-editor.org/info/std94>. | <https://www.rfc-editor.org/info/std94>. | |||
| At the time of writing, this STD comprises the following: | At the time of writing, this STD comprises the following: | |||
| Bormann, C. and P. Hoffman, "Concise Binary Object | Bormann, C. and P. Hoffman, "Concise Binary Object | |||
| Representation (CBOR)", STD 94, RFC 8949, | Representation (CBOR)", STD 94, RFC 8949, | |||
| DOI 10.17487/RFC8949, December 2020, | DOI 10.17487/RFC8949, December 2020, | |||
| <https://www.rfc-editor.org/info/rfc8949>. | <https://www.rfc-editor.org/info/rfc8949>. | |||
| [W3C.NOTE-curie-20101216] | [W3C.NOTE-curie-20101216] | |||
| Birbeck, M., Ed. and S. McCarron, Ed., "CURIE Syntax 1.0", | Birbeck, M., Ed. and S. McCarron, Ed., "CURIE Syntax 1.0", | |||
| W3C NOTE NOTE-curie-20101216, W3C NOTE-curie-20101216, 16 | W3C Working Group Note, 16 December 2010, | |||
| December 2010, | ||||
| <https://www.w3.org/TR/2010/NOTE-curie-20101216/>. | <https://www.w3.org/TR/2010/NOTE-curie-20101216/>. | |||
| 9.2. Informative References | 9.2. Informative References | |||
| [BCP100] Best Current Practice 100, | [BCP100] Best Current Practice 100, | |||
| <https://www.rfc-editor.org/info/bcp100>. | <https://www.rfc-editor.org/info/bcp100>. | |||
| At the time of writing, this BCP comprises the following: | At the time of writing, this BCP comprises the following: | |||
| Cotton, M., "Early IANA Allocation of Standards Track Code | Cotton, M., "Early IANA Allocation of Standards Track Code | |||
| Points", BCP 100, RFC 7120, DOI 10.17487/RFC7120, January | Points", BCP 100, RFC 7120, DOI 10.17487/RFC7120, January | |||
| 2014, <https://www.rfc-editor.org/info/rfc7120>. | 2014, <https://www.rfc-editor.org/info/rfc7120>. | |||
| [CamelCase] | [CamelCase] | |||
| "Camel Case", December 2014, | "Camel Case", December 2014, | |||
| <http://wiki.c2.com/?CamelCase>. | <http://wiki.c2.com/?CamelCase>. | |||
| [ECMA-262] Ecma International, "ECMAScript 2020 Language | [DEREF-ID-PATTERN] | |||
| Specification", ECMA Standard ECMA-262, 11th Edition, June | ||||
| 2020, <https://www.ecma-international.org/wp- | ||||
| content/uploads/ECMA-262.pdf>. | ||||
| [I-D.bormann-asdf-sdf-mapping] | ||||
| Bormann, C. and J. Romann, "Semantic Definition Format | ||||
| (SDF): Mapping files", Work in Progress, Internet-Draft, | ||||
| draft-bormann-asdf-sdf-mapping-07, 20 July 2025, | ||||
| <https://datatracker.ietf.org/doc/html/draft-bormann-asdf- | ||||
| sdf-mapping-07>. | ||||
| [I-D.bormann-asdf-sdftype-link] | ||||
| Bormann, C., "An sdfType for Links", Work in Progress, | ||||
| Internet-Draft, draft-bormann-asdf-sdftype-link-04, 6 | ||||
| December 2024, <https://datatracker.ietf.org/doc/html/ | ||||
| draft-bormann-asdf-sdftype-link-04>. | ||||
| [I-D.bormann-t2trg-deref-id] | ||||
| 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-05, 3 March 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-05>. | t2trg-deref-id-06>. | |||
| [I-D.irtf-t2trg-rest-iot] | [ECMA-262] Ecma International, "ECMAScript 2024 Language | |||
| Keränen, A., Kovatsch, M., and K. Hartke, "Guidance on | Specification", 15th Edition, ECMA Standard ECMA-262, June | |||
| RESTful Design for Internet of Things Systems", Work in | 2024, <https://www.ecma-international.org/wp- | |||
| Progress, Internet-Draft, draft-irtf-t2trg-rest-iot-16, 23 | content/uploads/ECMA-262.pdf>. | |||
| April 2025, <https://datatracker.ietf.org/doc/html/draft- | ||||
| irtf-t2trg-rest-iot-16>. | ||||
| [JSO4] Galiegue, F., Zyp, K., and G. Court, "JSON Schema: core | [JSO4] Galiegue, F., Ed., Zyp, K., Ed., and G. Court, "JSON | |||
| definitions and terminology", Work in Progress, Internet- | Schema: core definitions and terminology", Work in | |||
| Draft, draft-zyp-json-schema-04, 31 January 2013, | Progress, Internet-Draft, draft-zyp-json-schema-04, 31 | |||
| <https://datatracker.ietf.org/doc/html/draft-zyp-json- | January 2013, <https://datatracker.ietf.org/doc/html/ | |||
| schema-04>. This is the base specification for json- | draft-zyp-json-schema-04>. | |||
| schema.org "draft 4". | ||||
| [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, | |||
| <https://datatracker.ietf.org/doc/html/draft-fge-json- | <https://datatracker.ietf.org/doc/html/draft-fge-json- | |||
| schema-validation-00>. This is the validation | schema-validation-00>. | |||
| specification for json-schema.org "draft 4". | ||||
| [JSO7] Wright, A. and H. Andrews, "JSON Schema: A Media Type for | [JSO7] Wright, A., Ed., Andrews, H., Ed., Hutton, B., Ed., and G. | |||
| Describing JSON Documents", Work in Progress, Internet- | Dennis, "JSON Schema: A Media Type for Describing JSON | |||
| Draft, draft-handrews-json-schema-01, 19 March 2018, | Documents", Work in Progress, Internet-Draft, draft- | |||
| handrews-json-schema-02, 17 September 2019, | ||||
| <https://datatracker.ietf.org/doc/html/draft-handrews- | <https://datatracker.ietf.org/doc/html/draft-handrews- | |||
| json-schema-01>. This is the base specification for json- | json-schema-02>. | |||
| schema.org "draft 7". | ||||
| [JSO7V] Wright, A., Andrews, H., and G. Luff, "JSON Schema | [JSO7V] Wright, A., Ed., Andrews, H., Ed., and B. Hutton, Ed., | |||
| Validation: A Vocabulary for Structural Validation of | "JSON Schema Validation: A Vocabulary for Structural | |||
| JSON", Work in Progress, Internet-Draft, draft-handrews- | Validation of JSON", Work in Progress, Internet-Draft, | |||
| json-schema-validation-01, 19 March 2018, | draft-handrews-json-schema-validation-02, 17 September | |||
| <https://datatracker.ietf.org/doc/html/draft-handrews- | 2019, <https://datatracker.ietf.org/doc/html/draft- | |||
| json-schema-validation-01>. This is the validation | handrews-json-schema-validation-02>. | |||
| specification for json-schema.org "draft 7". | ||||
| [KebabCase] | [KebabCase] | |||
| "Kebab Case", August 2014, | "Kebab Case", August 2014, | |||
| <http://wiki.c2.com/?KebabCase>. | <http://wiki.c2.com/?KebabCase>. | |||
| [OCF] "OCF Resource Type Specification", | [OCF] Open Connectivity Foundation, "OCF Resource Type | |||
| 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] "OMA LightweightM2M (LwM2M) Object and Resource Registry", | [OMA] Open Mobile Alliance, "OMA LightweightM2M (LwM2M) Object | |||
| and Resource Registry", | ||||
| <http://www.openmobilealliance.org/wp/omna/lwm2m/ | <http://www.openmobilealliance.org/wp/omna/lwm2m/ | |||
| lwm2mregistry.html>. | lwm2mregistry.html>. | |||
| [REST-IOT] Keränen, A., Kovatsch, M., and K. Hartke, "Guidance on | ||||
| RESTful Design for Internet of Things Systems", Work in | ||||
| Progress, Internet-Draft, draft-irtf-t2trg-rest-iot-16, 23 | ||||
| April 2025, <https://datatracker.ietf.org/doc/html/draft- | ||||
| irtf-t2trg-rest-iot-16>. | ||||
| [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, | |||
| <https://www.rfc-editor.org/rfc/rfc8576>. | <https://www.rfc-editor.org/info/rfc8576>. | |||
| [RFC9485] Bormann, C. and T. Bray, "I-Regexp: An Interoperable | [RFC9485] Bormann, C. and T. Bray, "I-Regexp: An Interoperable | |||
| Regular Expression Format", RFC 9485, | Regular Expression Format", RFC 9485, | |||
| DOI 10.17487/RFC9485, October 2023, | DOI 10.17487/RFC9485, October 2023, | |||
| <https://www.rfc-editor.org/rfc/rfc9485>. | <https://www.rfc-editor.org/info/rfc9485>. | |||
| [RFC9535] Gössner, S., Ed., Normington, G., Ed., and C. Bormann, | [RFC9535] Gössner, S., Ed., Normington, G., Ed., and C. Bormann, | |||
| Ed., "JSONPath: Query Expressions for JSON", RFC 9535, | Ed., "JSONPath: Query Expressions for JSON", RFC 9535, | |||
| DOI 10.17487/RFC9535, February 2024, | DOI 10.17487/RFC9535, February 2024, | |||
| <https://www.rfc-editor.org/rfc/rfc9535>. | <https://www.rfc-editor.org/info/rfc9535>. | |||
| [SDF-MAPPING] | ||||
| Bormann, C., Ed. and J. Romann, "Semantic Definition | ||||
| Format (SDF): Mapping files", Work in Progress, Internet- | ||||
| Draft, draft-bormann-asdf-sdf-mapping-05, 6 December 2024, | ||||
| <https://datatracker.ietf.org/doc/html/draft-bormann-asdf- | ||||
| sdf-mapping-05>. | ||||
| [SDFTYPE-LINK] | ||||
| Bormann, C., "An sdfType for Links", Work in Progress, | ||||
| Internet-Draft, draft-bormann-asdf-sdftype-link-04, 6 | ||||
| December 2024, <https://datatracker.ietf.org/doc/html/ | ||||
| draft-bormann-asdf-sdftype-link-04>. | ||||
| [STD97] Internet Standard 97, | [STD97] Internet Standard 97, | |||
| <https://www.rfc-editor.org/info/std97>. | <https://www.rfc-editor.org/info/std97>. | |||
| At the time of writing, this STD comprises the following: | At the time of writing, this STD comprises the following: | |||
| Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | |||
| Ed., "HTTP Semantics", STD 97, RFC 9110, | Ed., "HTTP Semantics", STD 97, RFC 9110, | |||
| DOI 10.17487/RFC9110, June 2022, | DOI 10.17487/RFC9110, June 2022, | |||
| <https://www.rfc-editor.org/info/rfc9110>. | <https://www.rfc-editor.org/info/rfc9110>. | |||
| [WoT] Kaebisch, S., McCool, M., and E. Korkan, "Web of Things | [WoT] Kaebisch, S., Ed., McCool, M., Ed., and E. Korkan, Ed., | |||
| (WoT) Thing Description 1.1", W3C Recommendation, 5 | "Web of Things (WoT) Thing Description 1.1", | |||
| December 2023, | W3C Recommendation, 5 December 2023, | |||
| <https://www.w3.org/TR/wot-thing-description11/>. | <https://www.w3.org/TR/2023/REC-wot-thing- | |||
| description11-20231205/>. | ||||
| [ZCL] "The ZigBee Cluster Library", Elsevier, Zigbee Wireless | [ZCL] "Chapter 6 - The ZigBee Cluster Library", Zigbee Wireless | |||
| Networking pp. 239-271, | Networking, pp. 239-271, | |||
| DOI 10.1016/b978-0-7506-8597-9.00006-9, | DOI 10.1016/b978-0-7506-8597-9.00006-9, | |||
| ISBN ["9780750685979"], 2008, | ISBN 9780750685979, 2008, | |||
| <https://doi.org/10.1016/b978-0-7506-8597-9.00006-9>. | <https://doi.org/10.1016/b978-0-7506-8597-9.00006-9>. | |||
| Appendix A. Formal Syntax of SDF | Appendix A. Formal Syntax of SDF | |||
| This normative appendix describes the syntax of SDF using CDDL | This normative appendix describes the syntax of SDF using CDDL | |||
| [RFC8610]. | [RFC8610]. | |||
| This appendix shows the framework syntax only, i.e., a syntax with | This appendix shows the framework syntax only, i.e., a syntax with | |||
| liberal extension points. Since this syntax is nearly useless in | liberal extension points. Since this syntax is nearly useless in | |||
| finding typos in an SDF specification, a second syntax, the | finding typos in an SDF specification, a second syntax, the | |||
| skipping to change at page 62, line 44 ¶ | skipping to change at line 2825 ¶ | |||
| partial-time = time-hour ":" time-minute ":" time-second | partial-time = time-hour ":" time-minute ":" time-second | |||
| [time-secfrac] | [time-secfrac] | |||
| full-date = date-fullyear "-" date-month "-" date-mday | full-date = date-fullyear "-" date-month "-" date-mday | |||
| modified-dt = full-date ["T" partial-time "Z"] | modified-dt = full-date ["T" partial-time "Z"] | |||
| ' | ' | |||
| Appendix B. json-schema.org Rendition of SDF Syntax | Appendix B. json-schema.org Rendition of SDF Syntax | |||
| This informative appendix describes the syntax of SDF defined in | This informative appendix describes the syntax of SDF defined in | |||
| Appendix A, but using 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: 2024-02-29T07:42:35Z", | |||
| + "title": "sdf-framework.cddl -- Generated: 2024-02-29T07:42:52Z", | + "title": "sdf-framework.cddl -- Generated: 2024-02-29T07:42:52Z", | |||
| "$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": { | |||
| skipping to change at page 104, line 24 ¶ | skipping to change at line 4822 ¶ | |||
| - "sdfType-": { | - "sdfType-": { | |||
| - "type": "string", | - "type": "string", | |||
| - "enum": [ | - "enum": [ | |||
| - "byte-string", | - "byte-string", | |||
| - "unix-time" | - "unix-time" | |||
| - ] | - ] | |||
| } | } | |||
| } | } | |||
| } | } | |||
| Appendix C. Data Qualities inspired by json-schema.org | Appendix C. Data Qualities Inspired by json-schema.org | |||
| This appendix is normative. | This appendix is normative. | |||
| Data qualities define data used in SDF affordances at an information | Data qualities define data used in SDF affordances at an information | |||
| model level. A popular way to describe JSON data at a data model | model level. A popular way to describe JSON data at a data model | |||
| level is proposed by a number of drafts on json-schema.org (which | level is proposed by a number of drafts on json-schema.org (which | |||
| collectively are abbreviated JSO here); for reference to a popular | collectively are abbreviated JSO here); for reference to a popular | |||
| version this appendix points to [JSO7] and [JSO7V]. As the | version, this appendix points to [JSO7] and [JSO7V]. As the | |||
| vocabulary used by JSO is familiar to many JSON modelers, the present | vocabulary used by JSO is familiar to many JSON modelers, the present | |||
| specification borrows some of the terms and ports their semantics to | specification borrows some of the terms and ports their semantics to | |||
| the information model level needed for SDF. | the information model level needed for SDF. | |||
| 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 | |||
| skipping to change at page 105, line 18 ¶ | skipping to change at line 4862 ¶ | |||
| C.1. type "number", type "integer" | C.1. type "number", type "integer" | |||
| The types "number" and "integer" are associated with floating point | The types "number" and "integer" are associated with floating point | |||
| and integer numbers, as they are available in JSON. A type value of | and integer numbers, as they are available in JSON. A type value of | |||
| integer means that only integer values of JSON numbers can be used | integer means that only integer values of JSON numbers can be used | |||
| (note that 10.0 is an integer value, even if it is in a notation that | (note that 10.0 is an integer value, even if it is in a notation that | |||
| would also allow non-zero decimal fractions). | would also allow non-zero decimal fractions). | |||
| The additional data qualities "minimum", "maximum", | The additional data qualities "minimum", "maximum", | |||
| "exclusiveMinimum", "exclusiveMaximum" provide number values that | "exclusiveMinimum", and "exclusiveMaximum" provide number values that | |||
| serve as inclusive/exclusive lower/upper bounds for the number. | serve as inclusive/exclusive lower/upper bounds for the number. | |||
| (Note that the Boolean form of "exclusiveMinimum"/"exclusiveMaximum" | (Note that the Boolean form of "exclusiveMinimum"/"exclusiveMaximum" | |||
| found in earlier JSO drafts [JSO4V] is not used.) | found in earlier JSO drafts [JSO4V] is not used.) | |||
| The data quality "multipleOf" gives a positive number that constrains | The data quality "multipleOf" gives a positive number that constrains | |||
| the data value to be an integer multiple of the number given. (Type | the data value to be an integer multiple of the number given. (Type | |||
| "integer" can also be expressed as a "multipleOf" quality of value 1, | "integer" can also be expressed as a "multipleOf" quality of value 1, | |||
| unless another "multipleOf" quality is present.) | unless another "multipleOf" quality is present.) | |||
| C.2. type "string" | C.2. type "string" | |||
| The type "string" is associated with Unicode text string values as | The type "string" is associated with Unicode text string values, as | |||
| they can be represented in JSON. | they can be represented in JSON. | |||
| The length (as measured in characters, specifically Unicode scalar | The length (as measured in characters, specifically Unicode scalar | |||
| values) can be constrained by the additional data qualities | values) can be constrained by the additional data qualities | |||
| "minLength" and "maxLength", which are inclusive bounds. | "minLength" and "maxLength", which are inclusive bounds. | |||
| (More specifically, Unicode text strings as defined in this | (More specifically, Unicode text strings as defined in this | |||
| specification are sequences of Unicode scalar values, the number of | specification are sequences of Unicode scalar values, the number of | |||
| which is taken as the length of such a text string. | which is taken as the length of such a text string. | |||
| skipping to change at page 106, line 4 ¶ | skipping to change at line 4896 ¶ | |||
| as an [ECMA-262] regular expression in Unicode mode that constrains | as an [ECMA-262] regular expression in Unicode mode that constrains | |||
| the string (note that these are not anchored by default, so unless ^ | the string (note that these are not anchored by default, so unless ^ | |||
| and $ anchors are employed, ECMA-262 regular expressions match any | and $ anchors are employed, ECMA-262 regular expressions match any | |||
| string that _contains_ a match). The JSO proposals acknowledge that | string that _contains_ a match). The JSO proposals acknowledge that | |||
| regular expression support is rather diverse in various platforms, so | regular expression support is rather diverse in various platforms, so | |||
| the suggestion is to limit them to: | the suggestion is to limit them to: | |||
| * characters; | * characters; | |||
| * character classes in square brackets, including ranges; their | * character classes in square brackets, including ranges; their | |||
| complements; | complements; | |||
| * simple quantifiers *, +, ?, and range quantifiers {n}, {n,m}, and | * simple quantifiers *, +, ?, and range quantifiers {n}, {n,m}, and | |||
| {n,}; | {n,}; | |||
| * grouping parentheses; | * grouping parentheses; | |||
| * the choice operator |; | * the choice operator |; | |||
| * and anchors (beginning-of-input ^ and end-of-input $). | * and anchors (beginning-of-input ^ and end-of-input $). | |||
| Note that this subset is somewhat similar to the subset introduced by | Note that this subset is somewhat similar to the subset introduced by | |||
| I-Regexps [RFC9485], which however are anchored regular expressions, | I-Regexps [RFC9485], which are anchored regular expressions and | |||
| and which include certain backslash escapes for characters and | include certain backslash escapes for characters and character | |||
| character classes. | classes. | |||
| The additional data quality "format" can take one of the following | The additional data quality "format" can take one of the following | |||
| values. Note that, at an information model level, the presence of | values. Note that, at an information model level, the presence of | |||
| this data quality changes the type from being a simple text string to | this data quality changes the type from being a simple text string to | |||
| the abstract meaning of the format given (i.e., the format "date- | the abstract meaning of the format given (i.e., the format "date- | |||
| time" is less about the specific syntax employed in [RFC3339] than | time" is less about the specific syntax employed in [RFC3339] than | |||
| about the usage as an absolute point in civil time). | about the usage as an absolute point in civil time). | |||
| * "date-time", "date", "time": An [RFC3339] date-time, full-date, or | * "date-time", "date", "time": A date-time, full-date, or full-time | |||
| full-time, respectively. | as defined in [RFC3339], respectively. | |||
| * "uri", "uri-reference": An [STD66] URI or URI Reference, | * "uri", "uri-reference": A URI or URI Reference as defined in | |||
| respectively. | [STD66], respectively. | |||
| * "uuid": An [RFC9562] UUID. | * "uuid": A Universally Unique Identifier (UUID) as defined in | |||
| [RFC9562]). | ||||
| C.3. type "boolean" | C.3. type "boolean" | |||
| The type "boolean" can take the values "true" or "false". | The type "boolean" can take the values "true" or "false". | |||
| C.4. type "array" | C.4. type "array" | |||
| The type "array" is associated with arrays as they are available in | The type "array" is associated with arrays, as they are available in | |||
| JSON. | JSON. | |||
| The additional quality "items" gives the type that each of the | The additional quality "items" gives the type that each of the | |||
| elements of the array must match. | elements of the array must match. | |||
| The number of elements in the array can be constrained by the | The number of elements in the array can be constrained by the | |||
| additional data qualities "minItems" and "maxItems", which are | additional data qualities "minItems" and "maxItems", which are | |||
| inclusive bounds. | inclusive bounds. | |||
| The additional data quality "uniqueItems" gives a Boolean value that, | The additional data quality "uniqueItems" gives a Boolean value that, | |||
| if true, requires the elements to be all different. | if true, requires the elements to be all different. | |||
| C.5. type "object" | C.5. type "object" | |||
| The type "object" is associated with maps, from strings to values, as | The type "object" is associated with maps, from strings to values, as | |||
| they are available in JSON. | they are available in JSON. | |||
| The additional quality "properties" is a map the entries of which | The additional quality "properties" is a map the entries of which | |||
| describe entries in the specified JSON map: The key gives an | describe entries in the specified JSON map: the key gives an | |||
| allowable map key for the specified JSON map, and the value is a map | allowable map key for the specified JSON map and the value is a map | |||
| with a named set of data qualities giving the type for the | with a named set of data qualities giving the type for the | |||
| corresponding value in the specified JSON map. | corresponding value in the specified JSON map. | |||
| All entries specified this way are optional, unless they are listed | All entries specified in this way are optional unless they are listed | |||
| in the value of the additional quality "required", which is an array | in the value of the additional quality "required", which is an array | |||
| of string values that give the key names of required entries. | of string values that give the key names of required entries. | |||
| Note that the term "properties" as an additional quality for defining | Note that the term "properties" as an additional quality for defining | |||
| map entries is unrelated to sdfProperty. | map entries is unrelated to sdfProperty. | |||
| For example, to include information about the type of the event in | For example, to include information about the type of the event in | |||
| the "overTemperatureEvent" of Figure 4, the sdfOutputData there could | the "overTemperatureEvent" of Figure 4, the sdfOutputData there could | |||
| be defined as follows: | be defined as follows: | |||
| skipping to change at page 107, line 35 ¶ | skipping to change at line 4975 ¶ | |||
| "alarmType": { | "alarmType": { | |||
| "sdfRef": "cap:#/sdfData/alarmTypes/quantityAlarms", | "sdfRef": "cap:#/sdfData/alarmTypes/quantityAlarms", | |||
| "const": "OverTemperatureAlarm" | "const": "OverTemperatureAlarm" | |||
| }, | }, | |||
| "temperature": { | "temperature": { | |||
| "sdfRef": "#/sdfObject/temperatureWithAlarm/sdfData/temperatureData" | "sdfRef": "#/sdfObject/temperatureWithAlarm/sdfData/temperatureData" | |||
| } | } | |||
| } | } | |||
| } | } | |||
| Figure 6: Using object type with sdfOutputData | Figure 6: Using Object Type with sdfOutputData | |||
| C.6. Implementation notes | C.6. Implementation Notes | |||
| JSO-based keywords are also used in the specification techniques of a | JSO-based keywords are also used in the specification techniques of a | |||
| number of ecosystems, but some adjustments may be required. | number of ecosystems, but some adjustments may be required. | |||
| For instance, [OCF] is based on Swagger 2.0 which appears to be based | For instance, [OCF] is based on Swagger 2.0, which appears to be | |||
| on "draft-4" [JSO4][JSO4V] (also called draft-5, but semantically | based on "draft-4" [JSO4] [JSO4V] (also called draft-5, but | |||
| intended to be equivalent to draft-4). The "exclusiveMinimum" and | semantically intended to be equivalent to draft-4). The | |||
| "exclusiveMaximum" keywords use the Boolean form there, so on import | "exclusiveMinimum" and "exclusiveMaximum" keywords use the Boolean | |||
| to SDF their values have to be replaced by the values of the | form there, so on import to SDF, their values have to be replaced by | |||
| respective "minimum"/"maximum" keyword, which are themselves then | the values of the respective "minimum"/"maximum" keyword, which are | |||
| removed; the reverse transformation applies on export. | then removed; the reverse transformation applies on export. | |||
| Appendix D. Composition Examples | Appendix D. Composition Examples | |||
| This informative appendix contains two examples illustrating | This informative appendix contains two examples illustrating | |||
| different composition approaches using the sdfThing quality. | different composition approaches using the sdfThing quality. | |||
| D.1. Outlet Strip Example | D.1. Outlet Strip Example | |||
| { | { | |||
| "sdfThing": { | "sdfThing": { | |||
| skipping to change at page 110, line 16 ¶ | skipping to change at line 5076 ¶ | |||
| 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. | |||
| * sdfType was developed out of a concept previously called subtype. | * sdfType was developed out of a concept previously called subtype. | |||
| * sdfChoice is the preferred way to represent JSO enum (only a | * sdfChoice is the preferred way to represent JSO enum (only a | |||
| limited form of which is retained), and also the way to represent | limited form of which is retained) and also the way to represent | |||
| JSO anyOf. | JSO anyOf. | |||
| * the length of text strings (as used with minLength/maxLength | * The length of text strings (as used with minLength/maxLength | |||
| constraints) was previously defined in bytes. It now is defined | constraints) was previously defined in bytes. It now is defined | |||
| as the number of characters (Unicode scalar values, to be exact); | as the number of characters (Unicode scalar values, to be exact); | |||
| a length in bytes is not meaningful unless bound to a specific | a length in bytes is not meaningful unless bound to a specific | |||
| encoding, which might differ from UTF-8 in some ecosystem mappings | encoding, which might differ from UTF-8 in some ecosystem mappings | |||
| and protocol bindings. | and protocol bindings. | |||
| List of Figures | List of Figures | |||
| Figure 1: A simple example of an SDF document | Figure 1: A Simple Example of an SDF Document | |||
| Figure 2: Main classes used in SDF models | Figure 2: Main Classes Used in SDF Models | |||
| Figure 3: Example sdfObject definition | Figure 3: Example sdfObject Definition | |||
| Figure 4: Using sdfRequired | Figure 4: Using sdfRequired | |||
| Figure 5: Using an Override to Further Restrict the Set of Data | Figure 5: Using an Override to Further Restrict the Set of Data | |||
| Values | Values | |||
| Figure 6: Using object type with sdfOutputData | Figure 6: Using Object Type with sdfOutputData | |||
| Figure 7: Outlet Strip Example | Figure 7: Outlet Strip Example | |||
| Figure 8: Refrigerator-Freezer Example | Figure 8: Refrigerator-Freezer Example | |||
| List of Tables | List of Tables | |||
| Table 1: Qualities of the Information Block | Table 1: Qualities of the Information Block | |||
| Table 2: Namespaces Block | Table 2: Namespaces Block | |||
| Table 3: Common Qualities | Table 3: Common Qualities | |||
| Table 4: SDF-defined Qualities of sdfData and sdfProperty | Table 4: SDF-Defined Qualities of sdfData and sdfProperty | |||
| Table 5: Values Defined in Base SDF for the sdfType Quality | Table 5: Values Defined in Base SDF for the sdfType Quality | |||
| Table 6: Qualities of sdfObject | Table 6: Qualities of sdfObject | |||
| Table 7: Qualities of sdfProperty | Table 7: Qualities of sdfProperty | |||
| Table 8: Qualities of sdfAction | Table 8: Qualities of sdfAction | |||
| Table 9: Qualities of sdfEvent | Table 9: Qualities of sdfEvent | |||
| Table 10: Qualities of sdfThing | Table 10: Qualities of sdfThing | |||
| Table 11: Media Type Registration for SDF | Table 11: Media Type Registration for SDF | |||
| Table 12: SDF Content-format Registration | Table 12: SDF Content-Format Registration | |||
| Table 13: Initial Content of Quality Names Registry | Table 13: Initial Content of the SDF Quality Names Registry | |||
| Acknowledgements | Acknowledgements | |||
| This specification is based on work by the One Data Model group. | This specification is based on work by the One Data Model group. | |||
| Contributors | Contributors | |||
| Jan Romann | Jan Romann | |||
| Hochschule Emden/Leer | Hochschule Emden/Leer | |||
| Germany | Germany | |||
| skipping to change at page 111, line 29 ¶ | skipping to change at line 5138 ¶ | |||
| Threefield Lane | Threefield Lane | |||
| Southampton | Southampton | |||
| United Kingdom | United Kingdom | |||
| Email: w.vanderbeek@cascoda.com | Email: w.vanderbeek@cascoda.com | |||
| Authors' Addresses | Authors' Addresses | |||
| Michael Koster (editor) | Michael Koster (editor) | |||
| KTC Control AB | KTC Control AB | |||
| 29415 Alderpoint Road | 29415 Alderpoint Road | |||
| Blocksburg, CA, 95514 | Blocksburg, CA 95514 | |||
| United States of America | United States of America | |||
| Phone: +1-707-502-5136 | Phone: +1-707-502-5136 | |||
| Email: michaeljohnkoster@gmail.com | Email: michaeljohnkoster@gmail.com | |||
| Carsten Bormann (editor) | Carsten Bormann (editor) | |||
| Universität Bremen TZI | Universität Bremen TZI | |||
| Postfach 330440 | Postfach 330440 | |||
| D-28359 Bremen | D-28359 Bremen | |||
| Germany | Germany | |||
| Phone: +49-421-218-63921 | Phone: +49-421-218-63921 | |||
| End of changes. 337 change blocks. | ||||
| 563 lines changed or deleted | 610 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. | ||||