draft-ietf-asdf-sdf-05.txt   draft-ietf-asdf-sdf-06.txt 
ASDF M. Koster, Ed. ASDF M. Koster, Ed.
Internet-Draft Dogtiger Labs Internet-Draft Dogtiger Labs
Intended status: Standards Track C. Bormann, Ed. Intended status: Standards Track C. Bormann, Ed.
Expires: 12 September 2021 Universit├Ąt Bremen TZI Expires: 3 December 2021 Universit├Ąt Bremen TZI
11 March 2021 1 June 2021
Semantic Definition Format (SDF) for Data and Interactions of Things Semantic Definition Format (SDF) for Data and Interactions of Things
draft-ietf-asdf-sdf-05 draft-ietf-asdf-sdf-06
Abstract Abstract
The Semantic Definition Format (SDF) is a format for domain experts The Semantic Definition Format (SDF) is a format for domain experts
to use in the creation and maintenance of data and interaction models to use in the creation and maintenance of data and interaction models
in the Internet of Things. It was created as a common language for in the Internet of Things. It was created as a common language for
use in the development of the One Data Model liaison organization use in the development of the One Data Model liaison organization
(OneDM) definitions. Tools convert this format to database formats (OneDM) definitions. Tools convert this format to database formats
and other serializations as needed. and other serializations as needed.
An SDF specification describes definitions of SDF Objects and their An SDF specification describes definitions of SDF Objects and their
associated interactions (Events, Actions, Properties), as well as the associated interactions (Events, Actions, Properties), as well as the
Data types for the information exchanged in those interactions. Data types for the information exchanged in those interactions.
A JSON format representation of SDF 1.0 was defined in a previous A JSON format representation of SDF 1.0 was defined in version (-00)
(-00) version of this document. The present document has been of this document; version (-05) was designated as an _implementation
designated as an _implementation draft_, labeled SDF 1.1, at the draft_, labeled SDF 1.1, at the IETF110 meeting of the ASDF WG
IETF110 meeting of the ASDF WG (2021-03-11). (2021-03-11). The present version (-06) is intended for discussion
at the ASDF interim meeting on 2021-06-02.
Contributing Contributing
Recent versions of this document are available at its GitHub Recent versions of this document are available at its GitHub
repository https://github.com/ietf-wg-asdf/SDF (https://github.com/ repository https://github.com/ietf-wg-asdf/SDF (https://github.com/
ietf-wg-asdf/SDF) -- this also provides an issue tracker as well as a ietf-wg-asdf/SDF) -- this also provides an issue tracker as well as a
way to supply "pull requests". way to supply "pull requests".
General discussion of this SDF Internet-Draft happens on the mailing General discussion of this SDF Internet-Draft happens on the mailing
list of the IETF ASDF Working Group, asdf@ietf.org (subscribe at list of the IETF ASDF Working Group, asdf@ietf.org (subscribe at
skipping to change at page 2, line 15 skipping to change at page 2, line 15
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet- working documents as Internet-Drafts. The list of current Internet-
Drafts is at https://datatracker.ietf.org/drafts/current/. Drafts is at https://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
This Internet-Draft will expire on 12 September 2021. This Internet-Draft will expire on 3 December 2021.
Copyright Notice Copyright Notice
Copyright (c) 2021 IETF Trust and the persons identified as the Copyright (c) 2021 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 (https://trustee.ietf.org/
license-info) in effect on the date of publication of this document. license-info) in effect on the date of publication of this document.
Please review these documents carefully, as they describe your rights Please review these documents carefully, as they describe your rights
and restrictions with respect to this document. Code Components and restrictions with respect to this document. Code Components
extracted from this document must include Simplified BSD License text extracted from this document must include Simplified BSD License text
as described in Section 4.e of the Trust Legal Provisions and are as described in Section 4.e of the Trust Legal Provisions and are
provided without warranty as described in the Simplified BSD License. provided without warranty as described in the Simplified BSD License.
Table of Contents Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1. Terminology and Conventions . . . . . . . . . . . . . . . 4 1.1. Terminology and Conventions . . . . . . . . . . . . . . . 4
2. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.1. Example Definition . . . . . . . . . . . . . . . . . . . 6 2.1. Example Definition . . . . . . . . . . . . . . . . . . . 5
2.2. Elements of an SDF model . . . . . . . . . . . . . . . . 7 2.2. Elements of an SDF model . . . . . . . . . . . . . . . . 7
2.2.1. sdfObject . . . . . . . . . . . . . . . . . . . . . . 8 2.2.1. sdfObject . . . . . . . . . . . . . . . . . . . . . . 8
2.2.2. sdfProperty . . . . . . . . . . . . . . . . . . . . . 8 2.2.2. sdfProperty . . . . . . . . . . . . . . . . . . . . . 8
2.2.3. sdfAction . . . . . . . . . . . . . . . . . . . . . . 9 2.2.3. sdfAction . . . . . . . . . . . . . . . . . . . . . . 9
2.2.4. sdfEvent . . . . . . . . . . . . . . . . . . . . . . 10 2.2.4. sdfEvent . . . . . . . . . . . . . . . . . . . . . . 10
2.2.5. sdfData . . . . . . . . . . . . . . . . . . . . . . . 10 2.2.5. sdfData . . . . . . . . . . . . . . . . . . . . . . . 10
2.2.6. sdfThing . . . . . . . . . . . . . . . . . . . . . . 11 2.2.6. sdfThing . . . . . . . . . . . . . . . . . . . . . . 11
2.2.7. sdfProduct . . . . . . . . . . . . . . . . . . . . . 11 2.2.7. sdfProduct . . . . . . . . . . . . . . . . . . . . . 11
3. SDF structure . . . . . . . . . . . . . . . . . . . . . . . . 11 3. SDF structure . . . . . . . . . . . . . . . . . . . . . . . . 11
3.1. Information block . . . . . . . . . . . . . . . . . . . . 11 3.1. Information block . . . . . . . . . . . . . . . . . . . . 11
3.2. Namespaces section . . . . . . . . . . . . . . . . . . . 12 3.2. Namespaces section . . . . . . . . . . . . . . . . . . . 12
3.3. Definitions section . . . . . . . . . . . . . . . . . . . 13 3.3. Definitions section . . . . . . . . . . . . . . . . . . . 13
4. Names and namespaces . . . . . . . . . . . . . . . . . . . . 14 4. Names and namespaces . . . . . . . . . . . . . . . . . . . . 14
4.1. Structure . . . . . . . . . . . . . . . . . . . . . . . . 14 4.1. Structure . . . . . . . . . . . . . . . . . . . . . . . . 14
4.2. Contributing global names . . . . . . . . . . . . . . . . 15 4.2. Contributing global names . . . . . . . . . . . . . . . . 15
4.3. Referencing global names . . . . . . . . . . . . . . . . 15 4.3. Referencing global names . . . . . . . . . . . . . . . . 15
4.4. sdfRef . . . . . . . . . . . . . . . . . . . . . . . . . 16 4.4. sdfRef . . . . . . . . . . . . . . . . . . . . . . . . . 16
4.5. sdfRequired . . . . . . . . . . . . . . . . . . . . . . . 17 4.5. sdfRequired . . . . . . . . . . . . . . . . . . . . . . . 17
4.5.1. Optionality using the keyword "sdfRequired" . . . . . 17
4.6. Common Qualities . . . . . . . . . . . . . . . . . . . . 18 4.6. Common Qualities . . . . . . . . . . . . . . . . . . . . 18
4.7. Data Qualities . . . . . . . . . . . . . . . . . . . . . 19 4.7. Data Qualities . . . . . . . . . . . . . . . . . . . . . 19
4.7.1. sdfType . . . . . . . . . . . . . . . . . . . . . . . 23 4.7.1. sdfType . . . . . . . . . . . . . . . . . . . . . . . 23
4.7.2. sdfChoice . . . . . . . . . . . . . . . . . . . . . . 24 4.7.2. sdfChoice . . . . . . . . . . . . . . . . . . . . . . 24
5. Keywords for definition groups . . . . . . . . . . . . . . . 26 5. Keywords for definition groups . . . . . . . . . . . . . . . 26
5.1. sdfObject . . . . . . . . . . . . . . . . . . . . . . . . 26 5.1. sdfObject . . . . . . . . . . . . . . . . . . . . . . . . 26
5.2. sdfProperty . . . . . . . . . . . . . . . . . . . . . . . 26 5.2. sdfProperty . . . . . . . . . . . . . . . . . . . . . . . 27
5.3. sdfAction . . . . . . . . . . . . . . . . . . . . . . . . 27 5.3. sdfAction . . . . . . . . . . . . . . . . . . . . . . . . 27
5.4. sdfEvent . . . . . . . . . . . . . . . . . . . . . . . . 27 5.4. sdfEvent . . . . . . . . . . . . . . . . . . . . . . . . 28
5.5. sdfData . . . . . . . . . . . . . . . . . . . . . . . . . 28 5.5. sdfData . . . . . . . . . . . . . . . . . . . . . . . . . 28
6. High Level Composition . . . . . . . . . . . . . . . . . . . 28 6. High Level Composition . . . . . . . . . . . . . . . . . . . 28
6.1. Paths in the model namespaces . . . . . . . . . . . . . . 29 6.1. Paths in the model namespaces . . . . . . . . . . . . . . 29
6.2. Modular Composition . . . . . . . . . . . . . . . . . . . 29 6.2. Modular Composition . . . . . . . . . . . . . . . . . . . 29
6.2.1. Use of the "sdfRef" keyword to re-use a definition . 29 6.2.1. Use of the "sdfRef" keyword to re-use a definition . 30
6.3. sdfThing . . . . . . . . . . . . . . . . . . . . . . . . 30 6.3. sdfThing . . . . . . . . . . . . . . . . . . . . . . . . 31
6.4. sdfProduct . . . . . . . . . . . . . . . . . . . . . . . 31 6.4. sdfProduct . . . . . . . . . . . . . . . . . . . . . . . 31
7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 31 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 32
7.1. Media Type . . . . . . . . . . . . . . . . . . . . . . . 31 7.1. Media Type . . . . . . . . . . . . . . . . . . . . . . . 32
7.2. Registries . . . . . . . . . . . . . . . . . . . . . . . 32 7.2. Registries . . . . . . . . . . . . . . . . . . . . . . . 32
8. Security Considerations . . . . . . . . . . . . . . . . . . . 32 8. Security Considerations . . . . . . . . . . . . . . . . . . . 32
9. References . . . . . . . . . . . . . . . . . . . . . . . . . 32 9. References . . . . . . . . . . . . . . . . . . . . . . . . . 33
9.1. Normative References . . . . . . . . . . . . . . . . . . 32 9.1. Normative References . . . . . . . . . . . . . . . . . . 33
9.2. Informative References . . . . . . . . . . . . . . . . . 34 9.2. Informative References . . . . . . . . . . . . . . . . . 34
Appendix A. Formal Syntax of SDF . . . . . . . . . . . . . . . . 34 Appendix A. Formal Syntax of SDF . . . . . . . . . . . . . . . . 35
Appendix B. json-schema.org Rendition of SDF Syntax . . . . . . 38 Appendix B. json-schema.org Rendition of SDF Syntax . . . . . . 39
Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . 77 Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . 77
Contributors . . . . . . . . . . . . . . . . . . . . . . . . . . 77 Contributors . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 77 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 78
1. Introduction 1. Introduction
The Semantic Definition Format (SDF) is a format for domain experts The Semantic Definition Format (SDF) is a format for domain experts
to use in the creation and maintenance of data and interaction models to use in the creation and maintenance of data and interaction models
in the Internet of Things. It was created as a common language for in the Internet of Things. It was created as a common language for
use in the development of the One Data Model liaison organization use in the development of the One Data Model liaison organization
(OneDM) definitions. Tools convert this format to database formats (OneDM) definitions. Tools convert this format to database formats
and other serializations as needed. and other serializations as needed.
skipping to change at page 4, line 12 skipping to change at page 4, line 7
associated interactions (Events, Actions, Properties), as well as the associated interactions (Events, Actions, Properties), as well as the
Data types for the information exchanged in those interactions. Data types for the information exchanged in those interactions.
A JSON format representation of SDF 1.0 was defined in a previous A JSON format representation of SDF 1.0 was defined in a previous
(-00) version of this document. The present document has been (-00) version of this document. The present document has been
designated as an _implementation draft_, labeled SDF 1.1, at the designated as an _implementation draft_, labeled SDF 1.1, at the
IETF110 meeting of the ASDF WG (2021-03-11). IETF110 meeting of the ASDF WG (2021-03-11).
1.1. Terminology and Conventions 1.1. Terminology and Conventions
Thing: A physical device that is also made available in the Internet Thing: A physical item that is also made available in the Internet
of Things. The term is used here for Things that are notable for of Things. The term is used here for Things that are notable for
their interaction with the physical world beyond interaction with their interaction with the physical world beyond interaction with
humans; a temperature sensor or a light might be a Thing, but a humans; a temperature sensor or a light might be a Thing, but a
router that employs both temperature sensors and indicator lights router that employs both temperature sensors and indicator lights
might exhibit less Thingness, as the effects of its functioning might exhibit less Thingness, as the effects of its functioning
are mostly on the digital side. are mostly on the digital side.
Affordance: An element of an interface offered for interaction, Affordance: An element of an interface offered for interaction,
defining its possible uses or making clear how it can or should be defining its possible uses or making clear how it can or should be
used. The term is used here for the digital interfaces of a Thing used. The term is used here for the digital interfaces of a Thing
skipping to change at page 7, line 29 skipping to change at page 7, line 25
terms of their names, input, and output data (no data are used in the terms of their names, input, and output data (no data are used in the
example), as in a POST method in REST or in a remote procedure call. example), as in a POST method in REST or in a remote procedure call.
The example "toggle" is an Action that changes the state based on the The example "toggle" is an Action that changes the state based on the
current state of the Property named "value". (The third type of current state of the Property named "value". (The third type of
affordance is Events, which are not described in this example.) affordance is Events, which are not described in this example.)
2.2. Elements of an SDF model 2.2. Elements of an SDF model
The SDF language uses seven predefined Class Name Keywords for The SDF language uses seven predefined Class Name Keywords for
modeling connected Things, six of which are illustrated in Figure 2 modeling connected Things, six of which are illustrated in Figure 2
(the seventh class "sdfProduct" is exactly like "sdfThing"). (the seventh class "sdfProduct" is similar enough to "sdfThing" that
it would look the same in the figure).
,--------. ,--------.
|sdfThing| |sdfThing|
|--------| |--------|
`--------' `--------'
| |
| |
,---------. ,---------.
|sdfObject| |sdfObject|
|---------| |---------|
skipping to change at page 8, line 30 skipping to change at page 8, line 26
For the granularity of definition, "sdfObject" definitions are meant For the granularity of definition, "sdfObject" definitions are meant
to be kept narrow enough in scope to enable broad reuse and to 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 "sdfObject" definitions for on/off control, dimming, and color
control affordances will enable interoperable functionality to be control affordances will enable interoperable functionality to be
configured for diverse product types. An "sdfObject" definition for configured for diverse product types. An "sdfObject" definition for
a common on/off control may be used to control may different kinds of a common on/off control may be used to control may different kinds of
Things that require on/off control. Things that require on/off control.
Optional qualities "minItems" and "maxItems" can be used to define
sdfObjects as arrays.
2.2.2. sdfProperty 2.2.2. sdfProperty
"sdfProperty" is used to model elements of state within "sdfObject" "sdfProperty" is used to model elements of state within "sdfObject"
instances. instances.
An instance of "sdfProperty" may be associated with some protocol An instance of "sdfProperty" may be associated with some protocol
affordance to enable the application to obtain the state variable affordance to enable the application to obtain the state variable
and, optionally, modify the state variable. Additionally, some and, optionally, modify the state variable. Additionally, some
protocols provide for in-time reporting of state changes. (These protocols provide for in-time reporting of state changes. (These
three aspects are described by the qualities "readable", "writable", three aspects are described by the qualities "readable", "writable",
skipping to change at page 17, line 7 skipping to change at page 17, line 7
[I-D.handrews-json-schema-validation].) [I-D.handrews-json-schema-validation].)
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.
4.5. sdfRequired 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
referenced map. More formally, for a JSON map that contains an
sdfRef member, the semantics is defined to be as if the following
steps were performed:
The value of "sdfRequired" is an array of name references, each 1. The JSON map that contains the sdfRef member is copied into a
pointing to one declaration the instantiation of which is declared variable named "patch".
mandatory.
4.5.1. Optionality using the keyword "sdfRequired" 2. The sdfRef member of the copy in "patch" is removed.
3. the JSON pointer that is the value of the sdfRef member is
dereferenced and the result is copied into a variable named
"original".
4. The JSON Merge Patch algorithm [RFC7396] is applied to patch the
contents of "original" with the contents of "patch".
5. The result of the Merge Patch is used in place of the value of
the original JSON map.
TODO: Make sure that the grammar in Appendix A allows specifying the
null values that are necessary to remove members in a merge-patch.
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 corresponding data are mandatory in an defines for which declarations corresponding data are mandatory in an
instance conforming the current definition. instance conforming the current definition.
The value of "sdfRequired" is an array of JSON pointers, each The value of "sdfRequired" is an array of name references (JSON
indicating one declaration that is mandatory to be represented. pointers), each indicating one declaration that is mandatory to be
represented.
The example in Figure 4 shows two required elements in the sdfObject The example in Figure 4 shows two required elements in the sdfObject
definition for "temperatureWithAlarm", the sdfProperty definition for "temperatureWithAlarm", the sdfProperty
"currentTemperature", and the sdfEvent "overTemperatureEvent". The "currentTemperature", and the sdfEvent "overTemperatureEvent". The
example also shows the use of JSON pointer with "sdfRef" to use a example also shows the use of JSON pointer with "sdfRef" to use a
pre-existing definition in this definition, for the "alarmType" data pre-existing definition in this definition, for the "alarmType" data
(sdfOutputData) produced by the sdfEvent "overTemperatureEvent". (sdfOutputData) produced by the sdfEvent "overTemperatureEvent".
{ {
"sdfObject": { "sdfObject": {
skipping to change at page 26, line 41 skipping to change at page 26, line 41
| sdfAction | action | zero or more named action | | sdfAction | action | zero or more named action |
| | | definitions for this object | | | | definitions for this object |
+-------------+-----------+-----------------------------+ +-------------+-----------+-----------------------------+
| sdfEvent | event | zero or more named event | | sdfEvent | event | zero or more named event |
| | | definitions for this object | | | | definitions for this object |
+-------------+-----------+-----------------------------+ +-------------+-----------+-----------------------------+
| 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 |
| | | sdfObject instances in |
| | | array |
+-------------+-----------+-----------------------------+
| maxItems | number | (array) Maximum number of |
| | | sdfObject instances in |
| | | array |
+-------------+-----------+-----------------------------+
Table 7: Qualities of sdfObject Table 7: 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.
skipping to change at page 33, line 34 skipping to change at page 33, line 46
[RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform
Resource Identifier (URI): Generic Syntax", STD 66, Resource Identifier (URI): Generic Syntax", STD 66,
RFC 3986, DOI 10.17487/RFC3986, January 2005, RFC 3986, DOI 10.17487/RFC3986, January 2005,
<https://www.rfc-editor.org/info/rfc3986>. <https://www.rfc-editor.org/info/rfc3986>.
[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/info/rfc6901>. <https://www.rfc-editor.org/info/rfc6901>.
[RFC7396] Hoffman, P. and J. Snell, "JSON Merge Patch", RFC 7396,
DOI 10.17487/RFC7396, October 2014,
<https://www.rfc-editor.org/info/rfc7396>.
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
May 2017, <https://www.rfc-editor.org/info/rfc8174>. May 2017, <https://www.rfc-editor.org/info/rfc8174>.
[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/info/rfc8610>. June 2019, <https://www.rfc-editor.org/info/rfc8610>.
skipping to change at page 36, line 21 skipping to change at page 36, line 27
; for building hierarchy ; for building hierarchy
thingqualities = { thingqualities = {
commonqualities, commonqualities,
? sdfObject: named<objectqualities> ? sdfObject: named<objectqualities>
? sdfThing: named<thingqualities> ? sdfThing: named<thingqualities>
EXTENSION-POINT<"thing-ext"> EXTENSION-POINT<"thing-ext">
} }
productqualities = thingqualities ; ISSUE: get rid of sdfProduct? productqualities = thingqualities ; ISSUE: get rid of sdfProduct?
; for single objects ; for single objects, or for arrays of objects (1.2)
objectqualities = { objectqualities = {
commonqualities, commonqualities,
? ("minItems" .feature "1.2") => number
? ("maxItems" .feature "1.2") => number
? sdfProperty: named<propertyqualities> ? sdfProperty: named<propertyqualities>
? sdfAction: named<actionqualities> ? sdfAction: named<actionqualities>
? sdfEvent: named<eventqualities> ? sdfEvent: named<eventqualities>
? sdfData: named<dataqualities> ? sdfData: named<dataqualities>
EXTENSION-POINT<"object-ext"> EXTENSION-POINT<"object-ext">
} }
propertyqualities = dataqualities ; the definitions in sdfData are declarations in sdfProperty propertyqualities = dataqualities ; the definitions in sdfData are declarations in sdfProperty
parameter-list = parameter-list =
skipping to change at page 42, line 16 skipping to change at page 42, line 30
}, },
"$comment": { "$comment": {
"type": "string" "type": "string"
}, },
"sdfRef": { "sdfRef": {
"$ref": "#/definitions/sdf-pointer" "$ref": "#/definitions/sdf-pointer"
}, },
"sdfRequired": { "sdfRequired": {
"$ref": "#/definitions/pointer-list" "$ref": "#/definitions/pointer-list"
}, },
"minItems": {
"type": "number"
},
"maxItems": {
"type": "number"
},
"sdfProperty": { "sdfProperty": {
"type": "object", "type": "object",
"additionalProperties": { "additionalProperties": {
"$ref": "#/definitions/propertyqualities" "$ref": "#/definitions/propertyqualities"
} }
}, },
"sdfAction": { "sdfAction": {
"type": "object", "type": "object",
"additionalProperties": { "additionalProperties": {
"$ref": "#/definitions/actionqualities" "$ref": "#/definitions/actionqualities"
 End of changes. 25 change blocks. 
32 lines changed or deleted 75 lines changed or added

This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/