<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.2 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-asdf-sdf-17" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.18.1 -->
  <front>
    <title abbrev="SDF (Semantic Definition Format)">Semantic Definition Format (SDF) for Data and Interactions of Things</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-asdf-sdf-17"/>
    <author initials="M." surname="Koster" fullname="Michael Koster" role="editor">
      <organization>KTC</organization>
      <address>
        <postal>
          <street>29415 Alderpoint Road</street>
          <city>Blocksburg, CA</city>
          <code>95514</code>
          <country>USA</country>
        </postal>
        <phone>+1-707-502-5136</phone>
        <email>michaeljohnkoster@gmail.com</email>
      </address>
    </author>
    <author initials="C." surname="Bormann" fullname="Carsten Bormann" role="editor">
      <organization ascii="Universitaet Bremen TZI">Universität Bremen TZI</organization>
      <address>
        <postal>
          <street>Postfach 330440</street>
          <city>Bremen</city>
          <code>D-28359</code>
          <country>Germany</country>
        </postal>
        <phone>+49-421-218-63921</phone>
        <email>cabo@tzi.org</email>
      </address>
    </author>
    <author initials="A." surname="Keränen" fullname="Ari Keränen">
      <organization>Ericsson</organization>
      <address>
        <postal>
          <city>Jorvas</city>
          <code>02420</code>
          <country>Finland</country>
        </postal>
        <email>ari.keranen@ericsson.com</email>
      </address>
    </author>
    <date year="2023" month="November" day="05"/>
    <area>Applications</area>
    <workgroup>ASDF</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 139?>

<t>The Semantic Definition Format (SDF) is a format for domain experts to
use in the creation and maintenance of data and interaction models
that describe Things, i.e., physical objects that are available for interaction
over a network. An SDF specification describes definitions of
SDF Objects/SDF Things and their associated interactions (Events, Actions,
Properties), as well as the Data types for the information exchanged
in those interactions. Tools convert this format to database formats
and other serializations as needed.</t>
      <t><cref anchor="status">The present revision (-17) addresses additional Working
Group Last Call comments that came in during a grace period added.</cref></t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-asdf-sdf/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        A Semantic Definition Format for Data and Interactions of Things (ASDF) Working Group mailing list (<eref target="mailto:asdf@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/asdf/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/asdf/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/ietf-wg-asdf/SDF"/>.</t>
    </note>
  </front>
  <middle>
    <?line 158?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The Semantic Definition Format (SDF) is a format for domain experts to
use in the creation and maintenance of data and interaction models
that describe Things, i.e., physical objects that are available for interaction
over a network. An SDF specification describes definitions of
SDF Objects/SDF Things and their associated interactions (Events, Actions,
Properties), as well as the Data types for the information exchanged
in those interactions. Tools convert this format to database formats
and other serializations as needed.</t>
      <t><cref anchor="status_1">The present revision (-17) addresses additional Working
Group Last Call comments that came in during a grace period added.</cref></t>
      <t>SDF is designed to be an extensible format.
The present document constitutes the base specification for SDF; we
speak of "base SDF" for short.
In addition, SDF extensions can be defined, some of which may make use
of extension points specifically defined for this in base SDF.
One area for such extensions would be refinements of SDF's abstract
interaction models into protocol bindings for specific ecosystems
(e.g., <xref target="I-D.bormann-asdf-sdf-mapping"/>).
For other extensions, it may be necessary to indicate in the SDF
document that a specific extension is in effect; see
<xref target="information-block"/> for details of the <tt>features</tt> quality that can be
used for such indications.
With extension points and feature indications available,
base SDF does not define a "version" concept for the SDF format itself
(as opposed to version indications within SDF documents indicating
their own evolution, see <xref target="information-block"/>).</t>
      <section anchor="terminology-and-conventions">
        <name>Terminology and Conventions</name>
        <dl>
          <dt>Thing:</dt>
          <dd>
            <t>A physical item that is also available for interaction over a network.</t>
          </dd>
          <dt>Grouping:</dt>
          <dd>
            <t>An sdfThing or sdfObject, i.e., (directly or indirectly) a combination of Affordances.</t>
          </dd>
          <dt>sdfThing:</dt>
          <dd>
            <t>A grouping of Groupings as well as potentially Affordance
declarations (Property, Action, and Event declarations).</t>
          </dd>
          <dt>Affordance:</dt>
          <dd>
            <t>An element of an interface offered for interaction, for which
information is available (directly or indirectly) that indicates how
it can or should be used.
The term is used here for the digital (network-directed) interfaces
of a Thing only; it
might also have physical affordances such as buttons, dials, and
displays.</t>
          </dd>
          <dt>Quality:</dt>
          <dd>
            <t>A metadata item in a definition or declaration which says something
about that definition or declaration.  A quality is represented in
SDF as an entry in a JSON map (JSON object) that serves as a definition
or declaration.</t>
          </dd>
          <dt>Entry:</dt>
          <dd>
            <t>A key-value pair in a map. (In JSON maps, sometimes also called "member".)</t>
          </dd>
          <dt>Block:</dt>
          <dd>
            <t>One or more entries in a JSON map that is part of an SDF
specification; these entries together serve a specific function.</t>
          </dd>
          <dt>Group:</dt>
          <dd>
            <t>An entry in the main JSON map representing the SDF document, and in
certain nested definitions, that
has a Class Name Keyword as its key and a map of named definition
entries (Definition Group) as a value.</t>
          </dd>
          <dt>Class Name Keyword:</dt>
          <dd>
            <t>One of sdfThing, sdfObject, sdfProperty, sdfAction,
sdfEvent, or sdfData; the Classes for these type keywords are
capitalized and prefixed with <tt>sdf</tt>.</t>
          </dd>
          <dt>Class:</dt>
          <dd>
            <t>Abstract term for the information that is contained in groups
identified by a Class Name Keyword.</t>
          </dd>
          <dt>Property:</dt>
          <dd>
            <t>An affordance that can potentially be used to read, write, and/or
observe state (current/stored information) on an sdfObject.
(Note that Entries are often called
properties in other environments; in this document, the term
Property is specifically reserved for affordances, even if the map
key "properties" might be imported from a data definition language
with the other semantics.)</t>
          </dd>
          <dt>Action:</dt>
          <dd>
            <t>An affordance that can potentially be used to perform a named operation on an sdfObject.</t>
          </dd>
          <dt>Event:</dt>
          <dd>
            <t>An affordance that can potentially be used to obtain information about what happened to an sdfObject.</t>
          </dd>
          <dt>Object, sdfObject:</dt>
          <dd>
            <t>A grouping containing only Affordance declarations (Property, Action, and Event declarations); the main
"atom" of reusable semantics for model construction. sdfObjects are
similar to sdfThings but do not allow nesting, i.e., they cannot contain
other Groupings (sdfObjects or sdfThings). (Note that
JSON maps are often called JSON objects due to JSON's JavaScript
heritage; in the context of SDF, the term Object as the colloquial shorthand for sdfObject, is specifically reserved for the
above grouping, even if
the type name <tt>"object"</tt> is imported from a data definition
language with the other semantics.)</t>
          </dd>
          <dt>Element:</dt>
          <dd>
            <t>A part or an aspect of something abstract; used here in its usual English definition.
(Occasionally, also used specifically for the elements of JSON arrays.)</t>
          </dd>
          <dt>Definition:</dt>
          <dd>
            <t>An entry in a Definition Group; the entry creates a new semantic
term for use in SDF models and associates it with a set of
qualities.
Unless it is also a Declaration, a definition just defines a term,
it does not create a component item within the enclosing definition.</t>
          </dd>
          <dt>Declaration:</dt>
          <dd>
            <t>A definition within an enclosing
definition, intended to create a component item within that
enclosing definition.  Every declaration can also be used as a
definition for reference in a different place.</t>
          </dd>
          <dt>SDF Document:</dt>
          <dd>
            <t>Container for SDF Definitions, together with data
about the SDF Document itself (information block).
Represented as a JSON text representing a single JSON map, which is
built from nested maps.</t>
          </dd>
          <dt>SDF Model:</dt>
          <dd>
            <t>Definitions and declarations that model the digital interaction
opportunities offered by one or more kinds of Things, represented
by sdfObjects and sdfThings.
An SDF Model can be fully contained in a single SDF Document, or it
can be built from an SDF Document that references definitions and
declarations from additional SDF documents.</t>
          </dd>
          <dt>Protocol Binding:</dt>
          <dd>
            <t>A companion document to an SDF Model that defines how to map
the abstract concepts in the model into the protocols in use
in a specific ecosystem.  Might supply URL components, numeric IDs,
and similar details.  Protocol Bindings are one case of an
Augmentation Mechanism.</t>
          </dd>
          <dt>Augmentation Mechanism:</dt>
          <dd>
            <t>A companion document to a base SDF Model that provides additional
information ("augments" the base specification), possibly for use in
a specific ecosystem or with a specific protocol ("Protocol Binding").
No specific Augmentation Mechanisms are defined in base SDF.
A simple mechanism for such augmentations has been discussed as a
"mapping file" <xref target="I-D.bormann-asdf-sdf-mapping"/>.</t>
          </dd>
        </dl>
        <t>The term "byte" is used in its now-customary sense as a synonym for
"octet".</t>
        <t>Conventions:</t>
        <ul spacing="normal">
          <li>
            <t>The singular form is chosen as the preferred one for the keywords defined here.</t>
          </li>
        </ul>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <?line -18?>

</section>
    </section>
    <section anchor="overview">
      <name>Overview</name>
      <section anchor="example-definition">
        <name>Example Definition</name>
        <t>We start with an example for the SDF definition of a simple sdfObject called "Switch" (<xref target="example1"/>).</t>
        <figure anchor="example1">
          <name>A simple example of an SDF document</name>
          <sourcecode type="json" name="example1.sdf.json"><![CDATA[
{
  "info": {
    "title": "Example document for SDF (Semantic Definition Format)",
    "version": "2019-04-24",
    "copyright": "Copyright 2019 Example Corp. All rights reserved.",
    "license": "https://example.com/license"
  },
  "namespace": {
    "cap": "https://example.com/capability/cap"
  },
  "defaultNamespace": "cap",
  "sdfObject": {
    "Switch": {
      "sdfProperty": {
        "value": {
          "description":
"The state of the switch; false for off and true for on.",
          "type": "boolean"
        }
      },
      "sdfAction": {
        "on": {
          "description":
"Turn the switch on; equivalent to setting value to true."
        },
        "off": {
          "description":
"Turn the switch off; equivalent to setting value to false."
        },
        "toggle": {
          "description":
"Toggle the switch; equivalent to setting value to its complement."
        }
      }
    }
  }
}
]]></sourcecode>
        </figure>
        <t>This is a model of a switch.
The state <tt>value</tt> declared in the <tt>sdfProperty</tt> group, represented by a Boolean, will be true for "on" and will be false for "off".
The actions <tt>on</tt> or <tt>off</tt> declared in the <tt>sdfAction</tt> group are redundant with setting the <tt>value</tt> and are in the example to illustrate that there are often different ways of achieving the same effect.
The action <tt>toggle</tt> will invert the value of the sdfProperty value, so that 2-way switches can be created; having such action will avoid the need for first retrieving the current value and then applying/setting the inverted value.</t>
        <t>The <tt>sdfObject</tt> group lists the affordances of Things modeled by this sdfObject.
The <tt>sdfProperty</tt> group lists the property affordances described by the model; these represent various perspectives on the state of the sdfObject.
Properties can have additional qualities to describe the state more precisely.
Properties can be annotated to be read, write or read/write; how this is actually done by the underlying transfer protocols is not described in the SDF model but left to companion protocol bindings.
Properties are often used with RESTful paradigms <xref target="I-D.irtf-t2trg-rest-iot"/>, describing state.
The <tt>sdfAction</tt> group is the mechanism to describe other interactions in 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.
The example <tt>toggle</tt> is an Action that
changes the state based on the current state of the Property named <tt>value</tt>.
(The third type of affordance is Events, which are not described in this example.)</t>
        <t>In the JSON representation, note how (with the exception of the <tt>info</tt>
group) maps that have keys taken from the SDF vocabulary (<tt>info</tt>,
<tt>namespace</tt>, <tt>sdfObject</tt>) alternate in nesting with maps that have keys
that are freely defined by the model writer (<tt>Switch</tt>, <tt>value</tt>, <tt>on</tt>,
etc.); the latter usually use the <tt>named&lt;&gt;</tt> production in the <xref target="syntax">formal
syntax of SDF</xref>, while the former SDF-defined vocabulary items
are often, but not always, called <em>qualities</em>.</t>
      </section>
      <section anchor="elements-of-an-sdf-model">
        <name>Elements of an SDF model</name>
        <t>The SDF language uses six predefined Class Name Keywords for modeling connected
Things which are illustrated in <xref target="fig-class-2"/>.</t>
        <figure anchor="fig-class-2">
          <name>Main classes used in SDF models</name>
          <artset>
            <artwork type="svg"><svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" height="437px" preserveAspectRatio="none" version="1.1" viewBox="0 0 542 437" width="542px">
                <defs/>
                <g>
                  <!--class sdfThing-->
    <g id="elem_sdfThing">
                    <rect fill="white" height="48" id="sdfThing" rx="2.5" ry="2.5" width="93" x="136.13" y="7" stroke="black" stroke-width="0.5"/>
                    <ellipse cx="151.13" cy="23" fill="white" rx="11" ry="11" stroke="black" stroke-width="1.0"/>
                    <path d="M153.6031,29.1431 Q153.0221,29.4419 152.3829,29.5913 Q151.7438,29.7407 151.0382,29.7407 Q148.5314,29.7407 147.2115,28.0889 Q145.8917,26.437 145.8917,23.3159 Q145.8917,20.1865 147.2115,18.5347 Q148.5314,16.8828 151.0382,16.8828 Q151.7438,16.8828 152.3912,17.0322 Q153.0387,17.1816 153.6031,17.4805 L153.6031,20.2031 Q152.9723,19.6221 152.3788,19.3523 Q151.7853,19.0825 151.1544,19.0825 Q149.8097,19.0825 149.1249,20.1492 Q148.4401,21.2158 148.4401,23.3159 Q148.4401,25.4077 149.1249,26.4744 Q149.8097,27.541 151.1544,27.541 Q151.7853,27.541 152.3788,27.2712 Q152.9723,27.0015 153.6031,26.4204 Z " fill="black"/>
                    <text fill="black" font-family="sans-serif" font-size="14" x="165.13" y="28.291">sdfThing</text>
                    <line x1="137.13" x2="228.13" y1="39" y2="39" stroke="black" stroke-width="0.5"/>
                    <line x1="137.13" x2="228.13" y1="47" y2="47" stroke="black" stroke-width="0.5"/>
                  </g>
                  <!--class sdfObject-->
    <g id="elem_sdfObject">
                    <rect fill="white" height="48" id="sdfObject" rx="2.5" ry="2.5" width="97" x="205.13" y="132" stroke="black" stroke-width="0.5"/>
                    <ellipse cx="220.13" cy="148" fill="white" rx="11" ry="11" stroke="black" stroke-width="1.0"/>
                    <path d="M222.6031,154.1431 Q222.0221,154.4419 221.3829,154.5913 Q220.7438,154.7407 220.0382,154.7407 Q217.5314,154.7407 216.2115,153.0889 Q214.8917,151.437 214.8917,148.3159 Q214.8917,145.1865 216.2115,143.5347 Q217.5314,141.8828 220.0382,141.8828 Q220.7438,141.8828 221.3912,142.0322 Q222.0387,142.1816 222.6031,142.4805 L222.6031,145.2031 Q221.9723,144.6221 221.3788,144.3523 Q220.7853,144.0825 220.1544,144.0825 Q218.8097,144.0825 218.1249,145.1492 Q217.4401,146.2158 217.4401,148.3159 Q217.4401,150.4077 218.1249,151.4744 Q218.8097,152.541 220.1544,152.541 Q220.7853,152.541 221.3788,152.2712 Q221.9723,152.0015 222.6031,151.4204 Z " fill="black"/>
                    <text fill="black" font-family="sans-serif" font-size="14" x="234.13" y="153.291">sdfObject</text>
                    <line x1="206.13" x2="301.13" y1="164" y2="164" stroke="black" stroke-width="0.5"/>
                    <line x1="206.13" x2="301.13" y1="172" y2="172" stroke="black" stroke-width="0.5"/>
                  </g>
                  <!--class sdfProperty-->
    <g id="elem_sdfProperty">
                    <rect fill="white" height="48" id="sdfProperty" rx="2.5" ry="2.5" width="111" x="29.13" y="257" stroke="black" stroke-width="0.5"/>
                    <ellipse cx="44.13" cy="273" fill="white" rx="11" ry="11" stroke="black" stroke-width="1.0"/>
                    <path d="M46.6031,279.1431 Q46.0221,279.4419 45.3829,279.5913 Q44.7438,279.7407 44.0382,279.7407 Q41.5314,279.7407 40.2115,278.0889 Q38.8917,276.437 38.8917,273.3159 Q38.8917,270.1865 40.2115,268.5347 Q41.5314,266.8828 44.0382,266.8828 Q44.7438,266.8828 45.3912,267.0322 Q46.0387,267.1816 46.6031,267.4805 L46.6031,270.2031 Q45.9723,269.6221 45.3788,269.3523 Q44.7853,269.0825 44.1544,269.0825 Q42.8097,269.0825 42.1249,270.1492 Q41.4401,271.2158 41.4401,273.3159 Q41.4401,275.4077 42.1249,276.4744 Q42.8097,277.541 44.1544,277.541 Q44.7853,277.541 45.3788,277.2712 Q45.9723,277.0015 46.6031,276.4204 Z " fill="black"/>
                    <text fill="black" font-family="sans-serif" font-size="14" x="58.13" y="278.291">sdfProperty</text>
                    <line x1="30.13" x2="139.13" y1="289" y2="289" stroke="black" stroke-width="0.5"/>
                    <line x1="30.13" x2="139.13" y1="297" y2="297" stroke="black" stroke-width="0.5"/>
                  </g>
                  <!--class sdfAction-->
    <g id="elem_sdfAction">
                    <rect fill="white" height="48" id="sdfAction" rx="2.5" ry="2.5" width="97" x="363.13" y="257" stroke="black" stroke-width="0.5"/>
                    <ellipse cx="378.13" cy="273" fill="white" rx="11" ry="11" stroke="black" stroke-width="1.0"/>
                    <path d="M380.6031,279.1431 Q380.0221,279.4419 379.3829,279.5913 Q378.7438,279.7407 378.0382,279.7407 Q375.5314,279.7407 374.2115,278.0889 Q372.8917,276.437 372.8917,273.3159 Q372.8917,270.1865 374.2115,268.5347 Q375.5314,266.8828 378.0382,266.8828 Q378.7438,266.8828 379.3912,267.0322 Q380.0387,267.1816 380.6031,267.4805 L380.6031,270.2031 Q379.9723,269.6221 379.3788,269.3523 Q378.7853,269.0825 378.1544,269.0825 Q376.8097,269.0825 376.1249,270.1492 Q375.4401,271.2158 375.4401,273.3159 Q375.4401,275.4077 376.1249,276.4744 Q376.8097,277.541 378.1544,277.541 Q378.7853,277.541 379.3788,277.2712 Q379.9723,277.0015 380.6031,276.4204 Z " fill="black"/>
                    <text fill="black" font-family="sans-serif" font-size="14" x="392.13" y="278.291">sdfAction</text>
                    <line x1="364.13" x2="459.13" y1="289" y2="289" stroke="black" stroke-width="0.5"/>
                    <line x1="364.13" x2="459.13" y1="297" y2="297" stroke="black" stroke-width="0.5"/>
                  </g>
                  <!--class sdfEvent-->
    <g id="elem_sdfEvent">
                    <rect fill="white" height="48" id="sdfEvent" rx="2.5" ry="2.5" width="90" x="175.63" y="257" stroke="black" stroke-width="0.5"/>
                    <ellipse cx="190.63" cy="273" fill="white" rx="11" ry="11" stroke="black" stroke-width="1.0"/>
                    <path d="M193.1031,279.1431 Q192.5221,279.4419 191.8829,279.5913 Q191.2438,279.7407 190.5382,279.7407 Q188.0314,279.7407 186.7115,278.0889 Q185.3917,276.437 185.3917,273.3159 Q185.3917,270.1865 186.7115,268.5347 Q188.0314,266.8828 190.5382,266.8828 Q191.2438,266.8828 191.8912,267.0322 Q192.5387,267.1816 193.1031,267.4805 L193.1031,270.2031 Q192.4723,269.6221 191.8788,269.3523 Q191.2853,269.0825 190.6544,269.0825 Q189.3097,269.0825 188.6249,270.1492 Q187.9401,271.2158 187.9401,273.3159 Q187.9401,275.4077 188.6249,276.4744 Q189.3097,277.541 190.6544,277.541 Q191.2853,277.541 191.8788,277.2712 Q192.4723,277.0015 193.1031,276.4204 Z " fill="black"/>
                    <text fill="black" font-family="sans-serif" font-size="14" x="204.63" y="278.291">sdfEvent</text>
                    <line x1="176.63" x2="264.63" y1="289" y2="289" stroke="black" stroke-width="0.5"/>
                    <line x1="176.63" x2="264.63" y1="297" y2="297" stroke="black" stroke-width="0.5"/>
                  </g>
                  <!--class sdfData-->
    <g id="elem_sdfData">
                    <rect fill="white" height="48" id="sdfData" rx="2.5" ry="2.5" width="84" x="236.63" y="382" stroke="black" stroke-width="0.5"/>
                    <ellipse cx="251.63" cy="398" fill="white" rx="11" ry="11" stroke="black" stroke-width="1.0"/>
                    <path d="M254.1031,404.1431 Q253.5221,404.4419 252.8829,404.5913 Q252.2438,404.7407 251.5382,404.7407 Q249.0314,404.7407 247.7115,403.0889 Q246.3917,401.437 246.3917,398.3159 Q246.3917,395.1865 247.7115,393.5347 Q249.0314,391.8828 251.5382,391.8828 Q252.2438,391.8828 252.8912,392.0322 Q253.5387,392.1816 254.1031,392.4805 L254.1031,395.2031 Q253.4723,394.6221 252.8788,394.3523 Q252.2853,394.0825 251.6544,394.0825 Q250.3097,394.0825 249.6249,395.1492 Q248.9401,396.2158 248.9401,398.3159 Q248.9401,400.4077 249.6249,401.4744 Q250.3097,402.541 251.6544,402.541 Q252.2853,402.541 252.8788,402.2712 Q253.4723,402.0015 254.1031,401.4204 Z " fill="black"/>
                    <text fill="black" font-family="sans-serif" font-size="14" x="265.63" y="403.291">sdfData</text>
                    <line x1="237.63" x2="319.63" y1="414" y2="414" stroke="black" stroke-width="0.5"/>
                    <line x1="237.63" x2="319.63" y1="422" y2="422" stroke="black" stroke-width="0.5"/>
                  </g>
                  <!--link sdfThing to sdfObject-->
    <g id="link_sdfThing_sdfObject">
                    <path d="M196.16,55.42 C207.75,75.52 224.51,104.54 236.94,126.08 " fill="none" id="sdfThing-to-sdfObject" stroke="black" stroke-width="1.0"/>
                    <polygon fill="black" points="239.41,130.35,238.3726,120.5559,236.9093,126.0203,231.445,124.557,239.41,130.35" stroke="black" stroke-width="1.0"/>
                    <text fill="black" font-family="sans-serif" font-size="13" x="222.63" y="98.5684">hasObject</text>
                    <text fill="black" font-family="sans-serif" font-size="13" x="216.4021" y="121.1091">0+</text>
                  </g>
                  <!--link sdfThing to sdfThing-->
    <g id="link_sdfThing_sdfThing">
                    <path d="M229.53,19.35 C248.35,18.69 264.13,22.58 264.13,31 C264.13,38.44 251.83,42.33 236,42.69 " fill="none" id="sdfThing-to-sdfThing" stroke="black" stroke-width="1.0"/>
                    <polygon fill="black" points="231.05,42.66,240.027,46.7114,236.0499,42.6886,240.0727,38.7115,231.05,42.66" stroke="black" stroke-width="1.0"/>
                    <text fill="black" font-family="sans-serif" font-size="13" x="270.13" y="36.0684">hasThing</text>
                    <text fill="black" font-family="sans-serif" font-size="13" x="237.0416" y="40.7969">0+</text>
                  </g>
                  <!--link sdfThing to sdfProperty-->
    <g id="link_sdfThing_sdfProperty">
                    <path d="M136,47.85 C99.23,63.1 50.46,90.1 27.63,132 C6,171.7 35.57,221.37 59.56,251.88 " fill="none" id="sdfThing-to-sdfProperty" stroke="black" stroke-width="1.0"/>
                    <polygon fill="black" points="62.41,255.43,59.8985,245.9068,59.2813,251.5298,53.6582,250.9127,62.41,255.43" stroke="black" stroke-width="1.0"/>
                    <text fill="black" font-family="sans-serif" font-size="13" x="28.63" y="161.0684">hasProperty</text>
                    <text fill="black" font-family="sans-serif" font-size="13" x="37.9817" y="246.443">0+</text>
                  </g>
                  <!--link sdfThing to sdfAction-->
    <g id="link_sdfThing_sdfAction">
                    <path d="M229.41,49.61 C250.34,58.6 274.73,70.67 294.63,85 C357.14,129.99 385.89,138.55 414.63,210 C419.75,222.7 419.78,237.77 418.22,250.67 " fill="none" id="sdfThing-to-sdfAction" stroke="black" stroke-width="1.0"/>
                    <polygon fill="black" points="417.55,255.31,422.7961,246.9746,418.2651,250.3614,414.8783,245.8304,417.55,255.31" stroke="black" stroke-width="1.0"/>
                    <text fill="black" font-family="sans-serif" font-size="13" x="400.63" y="161.0684">hasAction</text>
                    <text fill="black" font-family="sans-serif" font-size="13" x="398.4969" y="246.285">0+</text>
                  </g>
                  <!--link sdfThing to sdfEvent-->
    <g id="link_sdfThing_sdfEvent">
                    <path d="M164.06,55.38 C136.18,93.53 90.16,170.57 123.63,227 C129.23,236.43 149.15,248 169.5,257.92 " fill="none" id="sdfThing-to-sdfEvent" stroke="black" stroke-width="1.0"/>
                    <polygon fill="black" points="173.87,260.02,167.4833,252.5226,169.3613,257.8587,164.0252,259.7366,173.87,260.02" stroke="black" stroke-width="1.0"/>
                    <text fill="black" font-family="sans-serif" font-size="13" x="121.63" y="161.0684">hasEvent</text>
                    <text fill="black" font-family="sans-serif" font-size="13" x="149.5914" y="254.3466">0+</text>
                  </g>
                  <!--link sdfObject to sdfProperty-->
    <g id="link_sdfObject_sdfProperty">
                    <path d="M204.71,177.95 C186.9,186.64 167.11,197.61 150.63,210 C134.71,221.98 119.28,238.01 107.36,251.7 " fill="none" id="sdfObject-to-sdfProperty" stroke="black" stroke-width="1.0"/>
                    <polygon fill="black" points="104.12,255.48,113.0049,251.2306,107.3657,251.6767,106.9196,246.0374,104.12,255.48" stroke="black" stroke-width="1.0"/>
                    <text fill="black" font-family="sans-serif" font-size="13" x="151.63" y="223.5684">hasProperty</text>
                    <text fill="black" font-family="sans-serif" font-size="13" x="87.5644" y="246.0715">0+</text>
                  </g>
                  <!--link sdfObject to sdfAction-->
    <g id="link_sdfObject_sdfAction">
                    <path d="M283.72,180.42 C310.19,201.03 348.73,231.03 376.58,252.71 " fill="none" id="sdfObject-to-sdfAction" stroke="black" stroke-width="1.0"/>
                    <polygon fill="black" points="380.46,255.73,375.8181,247.0436,376.5155,252.6573,370.9019,253.3548,380.46,255.73" stroke="black" stroke-width="1.0"/>
                    <text fill="black" font-family="sans-serif" font-size="13" x="342.63" y="223.5684">hasAction</text>
                    <text fill="black" font-family="sans-serif" font-size="13" x="353.6739" y="246.1091">0+</text>
                  </g>
                  <!--link sdfObject to sdfEvent-->
    <g id="link_sdfObject_sdfEvent">
                    <path d="M247.35,180.42 C242,200.34 234.3,229.05 228.54,250.53 " fill="none" id="sdfObject-to-sdfEvent" stroke="black" stroke-width="1.0"/>
                    <polygon fill="black" points="227.29,255.2,233.4711,247.5323,228.5765,250.3684,225.7404,245.4738,227.29,255.2" stroke="black" stroke-width="1.0"/>
                    <text fill="black" font-family="sans-serif" font-size="13" x="239.63" y="223.5684">hasEvent</text>
                    <text fill="black" font-family="sans-serif" font-size="13" x="208.2004" y="246.1091">0+</text>
                  </g>
                  <!--link sdfAction to sdfData-->
    <g id="link_sdfAction_sdfData">
                    <path d="M380.17,305.36 C368.69,314.29 355.78,324.78 344.63,335 C330.27,348.17 315.29,363.87 303.24,377.07 " fill="none" id="sdfAction-to-sdfData" stroke="black" stroke-width="1.0"/>
                    <polygon fill="black" points="299.96,380.69,308.97,376.7126,303.3198,376.9871,303.0453,371.3369,299.96,380.69" stroke="black" stroke-width="1.0"/>
                    <text fill="black" font-family="sans-serif" font-size="13" x="345.63" y="348.5684">hasInputData</text>
                    <text fill="black" font-family="sans-serif" font-size="13" x="283.8382" y="371.2976">0+</text>
                  </g>
                  <!--link sdfAction to sdfData-->
    <g id="link_sdfAction_sdfData">
                    <path d="M429.32,305.37 C437.95,319.82 444.54,338.17 434.63,352 C410.38,385.85 363.27,398.34 327.13,402.82 " fill="none" id="sdfAction-to-sdfData-1" stroke="black" stroke-width="1.0"/>
                    <polygon fill="black" points="322.48,403.35,331.8779,406.2961,327.4473,402.779,330.9644,398.3484,322.48,403.35" stroke="black" stroke-width="1.0"/>
                    <text fill="black" font-family="sans-serif" font-size="13" x="439.63" y="348.5684">hasOutputData</text>
                    <text fill="black" font-family="sans-serif" font-size="13" x="328.522" y="399.6454">0+</text>
                  </g>
                  <!--link sdfEvent to sdfData-->
    <g id="link_sdfEvent_sdfData">
                    <path d="M209.17,305.42 C203.95,319.53 200.38,337.53 207.63,352 C213.04,362.77 221.78,371.92 231.32,379.42 " fill="none" id="sdfEvent-to-sdfData" stroke="black" stroke-width="1.0"/>
                    <polygon fill="black" points="235.15,382.28,230.3303,373.691,231.1431,379.2892,225.545,380.102,235.15,382.28" stroke="black" stroke-width="1.0"/>
                    <text fill="black" font-family="sans-serif" font-size="13" x="208.63" y="348.5684">hasOutputData</text>
                    <text fill="black" font-family="sans-serif" font-size="13" x="210.5093" y="376.1409">0+</text>
                  </g>
                  <!--link sdfProperty to sdfData-->
    <g id="link_sdfProperty_sdfData">
                    <path d="M89.02,305.4 C93.01,320.6 100.38,339.79 113.63,352 C145.64,381.48 194.15,394.57 230.3,400.38 " fill="none" id="sdfProperty-to-sdfData" stroke="black" stroke-width="1.0"/>
                    <polygon fill="black" points="234.94,401.08,226.6344,395.7868,229.9955,400.3369,225.4455,403.698,234.94,401.08" stroke="black" stroke-width="1.0"/>
                    <text fill="black" font-family="sans-serif" font-size="13" x="114.63" y="348.5684">isInstanceOf</text>
                    <text fill="black" font-family="sans-serif" font-size="13" x="220.5011" y="396.8099">1</text>
                  </g>
                  <!--SRC=[ZP7D2i8m48Jl-nIXLoderOCWwC5JFVW2CKrjHTBItGeYlhisc_u45knjTlYIcMKnBovbvMugJNSgMQyIXNcHNU_MaDggKYDhG8bZnsDUojIvhHlRqel1OPBPlQ6gTaoobhdZqxfGq4k0gVQoR06MmmLGJ0-lvzn1asRiv9gE-l4lcNKqe316BKB7NJszcSFLhm2ITiPc1O1vQCJfVc_upBomRcoENyTsM2GskN7i-HgzzGK0]-->
  </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[                  ,--------.           
                  |sdfThing|           
                  |--------|           
                  `--------'           
                                       
                                       
            ,---------.                
            |sdfObject|                
            |---------|                
            `---------'                
                                       
,-----------.  ,---------.   ,--------.
|sdfProperty|  |sdfAction|   |sdfEvent|
|-----------|  |---------|   |--------|
`-----------'  `---------'   `--------'
                    |                  
                                       
                ,-------.              
                |sdfData|              
                |-------|              
                `-------'              
]]></artwork>
          </artset>
        </figure>
        <t>The six main Class Name Keywords are discussed below.</t>
        <section anchor="sdfobject">
          <name>sdfObject</name>
          <t>sdfObjects, the items listed in an <tt>sdfObject</tt> definition group, are
the main "atom" of reusable semantics for model construction.
The concept aligns in scope with common definition items from many IoT modeling
systems, for example ZigBee Clusters <xref target="ZCL"/>, OMA SpecWorks LwM2M
Objects <xref target="OMA"/>, and
OCF Resource Types <xref target="OCF"/>.</t>
          <t>An <tt>sdfObject</tt> contains a set of <tt>sdfProperty</tt>, <tt>sdfAction</tt>, and
<tt>sdfEvent</tt> definitions that describe the interaction affordances
associated with some scope of functionality.</t>
          <t>For the granularity of definition, <tt>sdfObject</tt> definitions are meant
to be kept narrow enough in scope to enable broad reuse and
interoperability.
For example, defining a light bulb using separate <tt>sdfObject</tt>
definitions for on/off control, dimming, and color control affordances
will enable interoperable functionality to be configured for diverse
product types.
An <tt>sdfObject</tt> definition for a common on/off control may be used to
control may different kinds of Things that require on/off control.</t>
          <t>The presence of one or both of the optional qualities "<tt>minItems</tt>" and
"<tt>maxItems</tt>" defines the sdfObject as an array, i.e., all the
affordances defined for the sdfObject exist a number of times, indexed
by a number constrained to be between <tt>minItems</tt> and <tt>maxItems</tt>,
inclusive, if given.
(Note: Setting "minItems" to zero and leaving out "maxItems" puts the
minimum constraints on that array.)</t>
        </section>
        <section anchor="sdfproperty">
          <name>sdfProperty</name>
          <t><tt>sdfProperty</tt> is used to model elements of state within Things modeled
by the enclosing grouping.</t>
          <t>A named definition entry in <tt>sdfProperty</tt> may be associated with some protocol
affordance to enable the application to obtain the state variable and,
optionally, modify the state variable.
Additionally, some protocols provide for in-time reporting of state
changes.
(These three aspects are described by the qualities <tt>readable</tt>,
<tt>writable</tt>, and <tt>observable</tt> defined for an <tt>sdfProperty</tt>.)</t>
          <t>Definitions in <tt>sdfProperty</tt> groups include the definitions from
<tt>sdfData</tt> groups, however, they actually also declare that a Property
with the given qualities potentially is present in the containing sdfObject.</t>
          <t>For definitions in <tt>sdfProperty</tt> and <tt>sdfData</tt>, SDF provides qualities that can
constrain the structure and values of data allowed in the interactions
modeled by them, as well as qualities that associate semantics to these
data, such as engineering units and unit scaling information.</t>
          <t>For the data definition within <tt>sdfProperty</tt> or <tt>sdfData</tt>, SDF borrows
some vocabulary proposed for the drafts 4 <xref target="JSO4"/> <xref target="JSO4V"/> and 7
<xref target="JSO7"/> <xref target="JSO7V"/> of the json-schema.org "JSON Schema" format
(collectively called JSO here), enhanced by qualities that are
specific to SDF.
Details about the JSO-inspired vocabulary are in <xref target="jso-inspired"/>.
For base SDF, data are constrained to be of
simple types (number, string, Boolean),
JSON maps composed of named data, and arrays of these types.
Syntax extension points are provided that can be used to provide
richer types in a future extension of this specification (possibly more
of which can be borrowed from json-schema.org).</t>
          <t>Note that <tt>sdfProperty</tt> definitions (and <tt>sdfData</tt> definitions in
general) are not intended to constrain the formats of data used for
communication over network interfaces.
Where needed, data definitions for payloads of protocol messages are
expected to be part of the protocol binding.</t>
        </section>
        <section anchor="sdfaction-overview">
          <name>sdfAction</name>
          <t>The <tt>sdfAction</tt> group contains declarations of Actions, model affordances that, when triggered,
have more effect than just reading, updating, or observing Thing
state, often resulting in some outward physical effect (which, itself,
cannot be modeled in SDF).  From a programmer's perspective, they
might be considered to be roughly analogous to method calls.</t>
          <t>Actions may have data parameters; these are modeled as a single item of input
data and output data, each.  (Where multiple parameters need to be
modeled, an <tt>"object"</tt> type can be used to combine these parameters into one.)
<!-- (using `sdfData` definitions, i.e., the same entries as for `sdfProperty` declarations). -->
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
<tt>sdfProperty</tt>; the effects may play out over time and emit action
results.
Actions may also not always complete and may result in application
errors, such as an item blocking the closing of an automatic door.</t>
          <t>One idiom for giving an action initiator status and control about the
ongoing action is to provide a URI for an ephemeral "action resource"
in the sdfAction output data, allowing the action to deliver
immediate feedback (including errors that prevent the action from
starting) and the action initiator to use the action resource
for further observation or modification of the ongoing action
(including canceling it).
Base SDF does not provide any tailored support for describing such
action resources; an extension for modeling links in more detail
(for instance, <xref target="I-D.bormann-asdf-sdftype-link"/>) may be all that is needed to fully enable modeling
them.</t>
          <t>Actions may have (or lack) qualities of idempotency and side-effect safety.</t>
          <t>Base SDF only provides data constraint modeling and semantics for the input and output data of definitions in <tt>sdfAction</tt> groups.
Again, data definitions for payloads of protocol messages, and
detailed protocol settings for invoking the action, are expected to be
part of the protocol binding.</t>
        </section>
        <section anchor="sdfevent-overview">
          <name>sdfEvent</name>
          <t>The <tt>sdfEvent</tt> group contains declarations of Events, which can model
affordances that inform about "happenings" associated with a Thing
modeled by the enclosing sdfObject; these may result in a signal being
stored or emitted as a result.</t>
          <t>Note that there is a trivial overlap with sdfProperty state changes,
which may also be defined as events but are not generally required to
be defined as such.
However, Events may exhibit certain ordering, consistency, and
reliability requirements that are expected to be supported in various
implementations of <tt>sdfEvent</tt> that do distinguish sdfEvent from
sdfProperty.
For instance, while a state change may simply be superseded by another
state change, some events are "precious" and need to be preserved even
if further events follow.</t>
          <t>Base SDF only provides data constraint modeling and
semantics for the output data of Event affordances.
Again, data definitions for payloads of protocol messages, and
detailed protocol settings for invoking the action, are expected to be
part of the protocol binding.</t>
        </section>
        <section anchor="sdfdata">
          <name>sdfData</name>
          <t>Definitions in <tt>sdfData</tt> groups do not themselves specify affordances.
These definitions
are provided separately from those in
<tt>sdfProperty</tt> groups to enable common
modeling patterns, data constraints, and semantic anchor concepts to
be factored out for data items that make up <tt>sdfProperty</tt> items and
serve as input and output data for <tt>sdfAction</tt> and <tt>sdfEvent</tt> items.
The <tt>sdfData</tt> definitions only spring to life by being referenced in
one of these contexts (directly or indirectly via some other <tt>sdfData</tt>
definitions).</t>
          <t>It is a common use case for such a data definition to be shared
between an <tt>sdfProperty</tt> item and input or output parameters of an
<tt>sdfAction</tt> or output data provided by an <tt>sdfEvent</tt>.
<tt>sdfData</tt> definitions also enable factoring out extended application
data types such as mode and machine state enumerations to be reused
across multiple definitions that have similar basic characteristics
and requirements.</t>
        </section>
        <section anchor="sdfthing">
          <name>sdfThing</name>
          <t>Back at the top level, the <tt>sdfThing</tt> group enables definition of models for
complex devices that will use one or more <tt>sdfObject</tt> definitions.
Like <tt>sdfObject</tt>, <tt>sdfThing</tt> groups also allow for including interaction
affordances, <tt>sdfData</tt>, as well as <tt>minItems</tt> and <tt>maxItems</tt> qualities.
Therefore, they can be seen as a superset of <tt>sdfObject</tt> groups, additionally
allowing for composition.</t>
          <t>As a result, an <tt>sdfThing</tt> directly or indirectly contains a set of <tt>sdfProperty</tt>, <tt>sdfAction</tt>, and
<tt>sdfEvent</tt> definitions that describe the interaction affordances
associated with some scope of functionality.</t>
          <t>A definition in an <tt>sdfThing</tt> group can refine the metadata of the definitions it
is composed of: other definitions in <tt>sdfThing</tt> groups or definitions in <tt>sdfObject</tt> groups.</t>
        </section>
      </section>
      <section anchor="member-names-given-names-and-quality-names">
        <name>Member names: Given Names and Quality Names</name>
        <t>SDF documents are JSON maps that mostly employ JSON maps as
member 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 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
be interspersed in this tree.)</t>
        <section anchor="given-names-and-quality-names">
          <name>Given Names and Quality Names</name>
          <t>For any particular JSON map in an SDF document, the set of member
names that are used is either of:</t>
          <ul spacing="normal">
            <li>
              <t>A set of "<em>Quality Names</em>", where the entries in the map are
Qualities.  Quality Names are defined by the present specification
and its extensions, together with specific semantics to be
associated with the member value given with a certain Quality Name.</t>
            </li>
            <li>
              <t>A set of "<em>Given Names</em>", where the entries in the map are separate
entities (definitions, declarations, etc.) that each have names that
are chosen by the SDF document author in order that these names can be
employed by a user of that model.</t>
            </li>
          </ul>
          <t>In a path from the root of the tree to any leaf, Quality Names and
Given Names roughly alternate (with the information block,
<xref target="information-block"/>, as a prominent exception).</t>
          <t>The meaning of the JSON map that is the member value associated
with a Given Name is derived from the Quality Name that was used as
the member name associated to the parent.
In the CDDL grammar given in <xref target="syntax"/>, JSON maps with member names that are
Given Names are defined using the CDDL generic rule reference <tt>named&lt;membervalues&gt;</tt>,
where <tt>membervalues</tt> is in turn the structure of the member values of the
JSON map, i.e., the value of the member named by the Given Name.
As quality-named maps and given-named maps roughly alternate in
a path down the tree, <tt>membervalues</tt> is usually a map built from
Quality Names as keys.</t>
        </section>
        <section anchor="hierarchical-names">
          <name>Hierarchical Names</name>
          <t>From the outside of a specification, Given Names are usually used as
part of a hierarchical name that looks like a JSON pointer <xref target="RFC6901"/>,
itself generally rooted in (used as the fragment identifier in) an
outer namespace that looks like an <tt>https://</tt> URL (see <xref target="names-and-namespaces"/>).</t>
          <t>As Quality Names and Given Names roughly alternate in a path into the
model, the JSON pointer part of the hierarchical name also alternates
between Quality Names and Given Names.</t>
        </section>
        <section anchor="gnqn">
          <name>Extensibility of Given Names and Quality Names</name>
          <t>In SDF, both Quality Names and Given Names are <em>extension points</em>.
This is more obvious for Quality Names: Extending SDF is mostly done
by defining additional qualities.  To enable non-conflicting third
party extensions to SDF, qualified names (names with an embedded
colon) can be used as Quality Names.</t>
          <t>A nonqualified Quality Name is composed of ASCII letters, digits, and
<tt>$</tt> signs, starting with a lower case letter or a <tt>$</tt> sign (i.e.,
using a pattern of "⁠<tt>[a-z$][A-Za-z$0-9]*</tt>").
Names with <tt>$</tt> signs are intended to be used for functions separate
from most other names; for instance, in this specification <tt>$comment</tt>
is used for the comment quality (the presence or absence of a
<tt>$comment</tt> quality does not change the meaning of the SDF model).
Names that are composed of multiple English words can use the
"lowerCamelCase" convention <xref target="CamelCase"/> for indicating the word
boundaries; no other use is intended for upper case letters in quality
names.</t>
          <t>A qualified Quality Name is composed of a Quality Name Prefix, a <tt>:</tt>
(colon) character, and a nonqualified Quality Name.
Quality Name Prefixes are registered in the "Quality Name Prefixes"
sub-registry in the "SDF Parameters" registry (<xref target="qnp"/>); they are
composed of lower case ASCII letters and digits, starting with a lower
case ASCII letter (i.e., using a pattern of "⁠<tt>[a-z][a-z0-9]*</tt>").</t>
          <t>Given Names are not restricted by the formal SDF syntax.
To enable non-surprising name translations in tools, combinations of
ASCII alphanumeric characters and <tt>-</tt> (ASCII hyphen/minus) are preferred,
typically employing KebabCase for names constructed out of multiple
words <xref target="KebabCase"/>.  ASCII hyphen/minus can then unambiguously be
translated to an ASCII <tt>_</tt> underscore character and back depending on
the programming environment.
Some styles also allow a dot <tt>.</tt> in given names.
Given Names are often sufficiently self-explanatory that they can be
used in place of the <tt>label</tt> quality if that is not given.
In turn, if a given name turns out too complicated, a more elaborate
<tt>label</tt> can be given and the given name kept simple.
Base SDF does not address internationalization of
given names.</t>
          <t>Further, to enable Given Names to have a more powerful role in building
global hierarchical names, an extension is planned that makes use of
qualified names for Given Names.
So, until that extension is defined, Given Names with (one or more)
embedded colons are reserved and <bcp14>MUST NOT</bcp14> be used in an SDF document.</t>
          <t>All names in SDF are case-sensitive.</t>
        </section>
      </section>
    </section>
    <section anchor="sdf-structure">
      <name>SDF structure</name>
      <t>SDF definitions are contained in SDF documents, together with data
about the SDF document itself (information block).
Definitions and declarations from additional SDF documents can be
referenced; together with the definitions and declarations in the
referencing SDF document they build the SDF model expressed by that
SDF document.</t>
      <t>Each SDF document is represented as a single JSON map.
This map has three blocks: the information block, the namespaces block, and the definitions block.</t>
      <section anchor="information-block">
        <name>Information block</name>
        <t>The information block contains generic meta data for the SDF document
itself and all included definitions.
To enable tool integration, the information block is optional in the grammar
of SDF; most processes for working with SDF documents will have policies
that only SDF documents with an info block can be processed.
It is therefore <bcp14>RECOMMENDED</bcp14> that SDF validator tools emit a warning
when no information block is found.</t>
        <t>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 qualities that apply to the included definition.</t>
        <t>Qualities of the information block are shown in <xref target="infoblockqual"/>.</t>
        <table anchor="infoblockqual">
          <name>Qualities of the Information Block</name>
          <thead>
            <tr>
              <th align="left">Quality</th>
              <th align="left">Type</th>
              <th align="left">Required</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">title</td>
              <td align="left">string</td>
              <td align="left">no</td>
              <td align="left">A short summary to be displayed in search results, etc.</td>
            </tr>
            <tr>
              <td align="left">description</td>
              <td align="left">string</td>
              <td align="left">no</td>
              <td align="left">Long-form text description (no constraints)</td>
            </tr>
            <tr>
              <td align="left">version</td>
              <td align="left">string</td>
              <td align="left">no</td>
              <td align="left">The incremental version of the definition</td>
            </tr>
            <tr>
              <td align="left">modified</td>
              <td align="left">string</td>
              <td align="left">no</td>
              <td align="left">Time of the latest modification</td>
            </tr>
            <tr>
              <td align="left">copyright</td>
              <td align="left">string</td>
              <td align="left">no</td>
              <td align="left">Link to text or embedded text containing a copyright notice</td>
            </tr>
            <tr>
              <td align="left">license</td>
              <td align="left">string</td>
              <td align="left">no</td>
              <td align="left">Link to text or embedded text containing license terms</td>
            </tr>
            <tr>
              <td align="left">features</td>
              <td align="left">array of strings</td>
              <td align="left">no</td>
              <td align="left">List of extension features used</td>
            </tr>
            <tr>
              <td align="left">$comment</td>
              <td align="left">string</td>
              <td align="left">no</td>
              <td align="left">Source code comments only, no semantics</td>
            </tr>
          </tbody>
        </table>
        <t>The version quality is used to indicate version information about the
set of definitions in the SDF document.
The version is <bcp14>RECOMMENDED</bcp14> to be lexicographically increasing over the life of a model: a newer model always has a version string that string-compares higher than all previous versions.
This is easily achieved by following the convention to start the version with an <xref target="RFC3339"/> <tt>date-time</tt> or, if new versions are generated less frequently than once a day, just the <tt>full-date</tt> (i.e., YYYY-MM-DD); in many cases, that will be all that is needed (see <xref target="example1"/> for an example).
This specification does not give a strict definition for the format of the version string but each using system or organization should define internal structure and semantics to the level needed for their use.
If no further details are provided, a <tt>date-time</tt> or <tt>full-date</tt> in
this field can be assumed to indicate the latest update time of the
definitions in the SDF document.</t>
        <t>The modified quality can be used with a value using <xref target="RFC3339"/> <tt>date-time</tt> (with <tt>Z</tt> for time-zone) or <tt>full-date</tt> format to express time of the latest revision of the definitions.</t>
        <t>The license string is preferably either a URI that points to a web page with an unambiguous definition of the license, or an <xref target="SPDX"/> license identifier.
(As an example, for models to be handled by the One Data Model liaison
group, this license identifier will typically be "BSD-3-Clause".)</t>
        <t>The <tt>features</tt> quality can be used to list names of critical (i.e., cannot be safely ignored) SDF extension features that need to be understood for the definitions to be properly processed.
Extension feature names will be specified in extension documents.</t>
      </section>
      <section anchor="namespaces-block">
        <name>Namespaces block</name>
        <t>The namespaces block contains the namespace map and the defaultNamespace setting.</t>
        <t>The namespace map is a map from short names for URIs to the namespace URIs
themselves.</t>
        <t>The defaultNamespace setting selects one of the entries in the
namespace map by giving its short name.  The associated URI (value of
this entry) becomes the default namespace for the SDF document.</t>
        <table anchor="nssec">
          <name>Namespaces Block</name>
          <thead>
            <tr>
              <th align="left">Quality</th>
              <th align="left">Type</th>
              <th align="left">Required</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">namespace</td>
              <td align="left">map</td>
              <td align="left">no</td>
              <td align="left">Defines short names mapped to namespace URIs, to be used as identifier prefixes</td>
            </tr>
            <tr>
              <td align="left">defaultNamespace</td>
              <td align="left">string</td>
              <td align="left">no</td>
              <td align="left">Identifies one of the prefixes in the namespace map to be used as a default in resolving identifiers</td>
            </tr>
          </tbody>
        </table>
        <t>The following example declares a set of namespaces and defines <tt>cap</tt>
as the default namespace.
By convention, the values in the namespace map contain full URIs
without a fragment identifier, and the fragment identifier is then
added, if needed, where the namespace entry is used.</t>
        <sourcecode type="json"><![CDATA[
"namespace": {
  "cap": "https://example.com/capability/cap",
  "zcl": "https://zcl.example.com/sdf"
},
"defaultNamespace": "cap"
]]></sourcecode>
        <t>If no defaultNamespace setting is given, the SDF document does not
contribute to a global namespace (all definitions remain local to the
model and are not accessible for re-use by other models).
As the defaultNamespace is set by giving a
namespace short name, its presence requires a namespace map that contains a
mapping for that namespace short name.</t>
        <t>If no namespace map is given, no short names for namespace URIs are
set up, and no defaultNamespace can be given.</t>
      </section>
      <section anchor="definitions-block">
        <name>Definitions block</name>
        <t>The Definitions block contains one or more groups, each identified by a Class Name Keyword (there can only be one group per keyword; the actual grouping is just a shortcut and does not carry any specific semantics).
The value of each group is a JSON map, the keys of which serve for naming the individual definitions in this group, and the corresponding values provide a set of qualities (name-value pairs) for the individual definition.
(In short, we speak of the map entries as "named sets of qualities".)</t>
        <t>Each group may contain zero or more definitions.
Each identifier defined creates a new type and term in the target namespace.
Declarations have a scope of the definition block they are
directly contained in.</t>
        <t>A definition may in turn contain other definitions. Each definition 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 qualities and contained definitions.</t>
        <t>An example for an sdfObject definition is given in <xref target="exobject"/>:</t>
        <figure anchor="exobject">
          <name>Example sdfObject definition</name>
          <sourcecode type="json"><![CDATA[
"sdfObject": {
  "foo": {
    "sdfProperty": {
      "bar": {
        "type": "boolean"
      }
    }
  }
}
]]></sourcecode>
        </figure>
        <t>This example defines an sdfObject "foo" that is defined in the default namespace (full address: <tt>#/sdfObject/foo</tt>), containing a property that can be addressed as
<tt>#/sdfObject/foo/sdfProperty/bar</tt>, with data of type boolean.
<!-- we could define a URN-style namespace that looks exactly that way -->
        </t>
        <t>Often, definitions are also declarations: the definition of the
entry "bar" in the property "foo" means that data corresponding to the
"foo" property in a property interaction offered by Thing can have zero or
one components modeled by "bar".  Entries within <tt>sdfProperty</tt>,
<tt>sdfAction</tt>, and <tt>sdfEvent</tt>, within <tt>sdfObject</tt> or <tt>sdfThing</tt> entries, are
declarations; entries within <tt>sdfData</tt> are not.
Similarly, <tt>sdfObject</tt> or <tt>sdfThing</tt> entries within an <tt>sdfThing</tt>
definition specify that the
interactions offered by a Thing modeled by this sdfThing include the
interactions modeled by the nested <tt>sdfObject</tt> or <tt>sdfThing</tt>.</t>
      </section>
    </section>
    <section anchor="names-and-namespaces">
      <name>Names and namespaces</name>
      <t>SDF documents may contribute to a global namespace, and may
reference elements from that global namespace.
(An SDF document that does not set a defaultNamespace does not
contribute to a global namespace.)</t>
      <section anchor="structure">
        <name>Structure</name>
        <t>Global names look exactly like <tt>https://</tt> URIs with attached fragment identifiers.</t>
        <t>There is no intention to require that these URIs can be dereferenced.
<!-- Looking things up there is a convenience -->
(However, as future extensions of SDF might find a use for dereferencing
global names, the URI should be chosen in such a way that this may
become possible in the future.
See also <xref target="I-D.bormann-t2trg-deref-id-01"/> for a discussion of dereferenceable identifiers.)</t>
        <t>The absolute URI of a global name should be a URI as per <xref section="3" sectionFormat="of" target="RFC3986"/>, with a scheme of "https" and a path (<tt>hier-part</tt> in <xref target="RFC3986"/>).
For base SDF, the query part should
not be used (it might be used in extensions).</t>
        <t>The fragment identifier is constructed as per <xref section="6" sectionFormat="of" target="RFC6901"/>.</t>
      </section>
      <section anchor="contributing-global-names">
        <name>Contributing global names</name>
        <t>The fragment identifier part of a global name defined in an SDF
document is constructed from a JSON pointer that selects the
element defined for this name in the SDF document.</t>
        <t>The absolute URI part is a copy of the default namespace, i.e., the
default namespace is always the target namespace for a name for which
a definition is contributed.
When emphasizing that name definitions are contributed to the default namespace,
we therefore also call it the "target namespace" of the SDF document.</t>
        <t>For instance, in <xref target="example1"/>, definitions for the following global names are contributed:</t>
        <ul spacing="normal">
          <li>
            <t>https://example.com/capability/cap#/sdfObject/Switch</t>
          </li>
          <li>
            <t>https://example.com/capability/cap#/sdfObject/Switch/sdfProperty/value</t>
          </li>
          <li>
            <t>https://example.com/capability/cap#/sdfObject/Switch/sdfAction/on</t>
          </li>
          <li>
            <t>https://example.com/capability/cap#/sdfObject/Switch/sdfAction/off</t>
          </li>
        </ul>
        <t>Note the <tt>#</tt>, which separates the absolute-URI part (<xref section="4.3" sectionFormat="of" target="RFC3986"/>) from the fragment identifier part.</t>
      </section>
      <section anchor="referencing-global-names">
        <name>Referencing global names</name>
        <t>A name reference takes the form of the production <tt>curie</tt> in
<xref target="W3C.NOTE-curie-20101216"/> (note that this excludes the production <tt>safe-curie</tt>),
but also limiting the IRIs involved in that production to URIs as per <xref target="RFC3986"/>
and the prefixes to ASCII characters <xref target="RFC0020"/>.</t>
        <t>A name that is contributed by the current SDF document can be
referenced by a Same-Document Reference as per <xref section="4.4" sectionFormat="of" target="RFC3986"/>.
As there is little point in referencing the entire SDF document, this will be a <tt>#</tt> followed by a JSON pointer.
This is the only kind of name reference to itself that is possible in an SDF
document that does not set a default namespace.</t>
        <t>Name references that point outside the current SDF document
need to contain curie prefixes.  These then reference namespace
declarations in the namespaces block.</t>
        <t>For example, if a namespace prefix is defined:</t>
        <sourcecode type="json"><![CDATA[
"namespace": {
  "foo": "https://example.com/"
}
]]></sourcecode>
        <t>Then this reference to that namespace:</t>
        <sourcecode type="json"><![CDATA[
"sdfRef": "foo:#/sdfData/temperatureData"
]]></sourcecode>
        <t>references the global name:</t>
        <sourcecode type="json"><![CDATA[
"https://example.com/#/sdfData/temperatureData"
]]></sourcecode>
        <t>Note that there is no way to provide a URI scheme name in a curie, so
all references outside of the document need to go through the
namespace map.</t>
        <t>Name references occur only in specific elements of the syntax of SDF:</t>
        <ul spacing="normal">
          <li>
            <t>copying elements via sdfRef values</t>
          </li>
          <li>
            <t>pointing to elements via sdfRequired value elements</t>
          </li>
        </ul>
      </section>
      <section anchor="sdfref">
        <name>sdfRef</name>
        <t>In a JSON map establishing a definition, the keyword "sdfRef" is used
to copy all of the qualities and enclosed definitions of the referenced definition, indicated
by the included name reference, into the newly formed definition.
(This can be compared to the processing of the "$ref" keyword in <xref target="JSO7"/>.)</t>
        <t>For example, this reference:</t>
        <sourcecode type="json"><![CDATA[
"temperatureProperty": {
  "sdfRef": "#/sdfData/temperatureData"
}
]]></sourcecode>
        <t>creates a new definition "temperatureProperty" that contains all of the qualities defined in the definition at /sdfData/temperatureData.</t>
        <t>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 or to add new qualities or definitions.</t>
        <t>When processing sdfRef, if the target definition contains also sdfRef (i.e., is based on yet another definition), that <bcp14>MUST</bcp14> be processed as well.</t>
        <t>More formally, for a JSON map that contains an
sdfRef member, the semantics is defined to be as if the following steps were performed:</t>
        <ol spacing="normal" type="1"><li>
            <t>The JSON map that contains the sdfRef member is copied into a
variable named "patch".</t>
          </li>
          <li>
            <t>The sdfRef member of the copy in "patch" is removed.</t>
          </li>
          <li>
            <t>the JSON pointer that is the value of the sdfRef member is
dereferenced and the result is copied into a variable named "original".</t>
          </li>
          <li>
            <t>The JSON Merge Patch algorithm <xref target="RFC7396"/> is applied to patch
the contents of "original" with the contents of "patch".</t>
          </li>
          <li>
            <t>The result of the Merge Patch is used in place of the value of the
original JSON map.</t>
          </li>
        </ol>
        <t>Note that the formal syntaxes given in Appendices <xref format="counter" target="syntax"/> and <xref format="counter" target="jso"/>
generally describe the <em>result</em> of applying a merge-patch; the notations
are not powerful enough to describe, for instance, the effect of null
values given with the sdfRef to remove members of JSON maps from
the referenced target.  Nonetheless, the syntaxes also give the syntax
of the sdfRef itself, which vanishes during the resolution; in many
cases therefore even merge-patch inputs will validate with these
formal syntaxes.</t>
        <t>Given the example (<xref target="example1"/>), and the following definition:</t>
        <sourcecode type="json"><![CDATA[
{
  "info": {
    "title": "Example light switch using sdfRef"
  },
  "namespace": {
    "cap": "https://example.com/capability/cap"
  },
  "defaultNamespace": "cap",
  "sdfObject": {
    "BasicSwitch": {
      "sdfRef": "cap:#/sdfObject/Switch",
      "sdfAction": {
        "toggle": null
      }
    }
  }
}
]]></sourcecode>
        <t>The resulting definition of the "BasicSwitch" sdfObject would be identical to the definition of the "Switch" sdfObject except it would not contain the "toggle" Action.</t>
        <sourcecode type="json" name="example1-without-toggle.sdf.json"><![CDATA[
{
  "info": {
    "title": "Example light switch using sdfRef"
  },
  "namespace": {
    "cap": "https://example.com/capability/cap"
  },
  "defaultNamespace": "cap",
  "sdfObject": {
    "BasicSwitch": {
      "sdfProperty": {
        "value": {
          "description":
"The state of the switch; false for off and true for on.",
          "type": "boolean"
        }
      },
      "sdfAction": {
        "on": {
          "description":
"Turn the switch on; equivalent to setting value to true."
        },
        "off": {
          "description":
"Turn the switch off; equivalent to setting value to false."
        }
      }
    }
  }
}
]]></sourcecode>
        <section anchor="resolved-models">
          <name>Resolved models</name>
          <t>A model where all sdfRef references are processed as described in <xref target="sdfref"/> is called a resolved model.</t>
          <t>For example, given the following sdfData definitions:</t>
          <sourcecode type="json"><![CDATA[
"sdfData": {
  "Coordinate" : {
    "type": "number", "unit": "m"
  },
  "X-Coordinate" : {
    "sdfRef" : "#/sdfData/Coordinate",
    "description":
"Distance from the base of the Thing along the X axis."
  },
  "Non-neg-X-Coordinate" : {
    "sdfRef": "#/sdfData/X-Coordinate",
    "minimum": 0
  }
}
]]></sourcecode>
          <t>After resolving the definitions would look as follows:</t>
          <sourcecode type="json"><![CDATA[
"sdfData": {
  "Coordinate" : {
    "type": "number", "unit": "m"
  },
  "X-Coordinate" : {
    "description":
"Distance from the base of the Thing along the X axis.",
    "type": "number", "unit": "m"
  },
  "Non-neg-X-Coordinate" : {
    "description":
"Distance from the base of the Thing along the X axis.",
    "minimum": 0, "type": "number", "unit": "m"
  }
}
]]></sourcecode>
        </section>
      </section>
      <section anchor="sdfrequired">
        <name>sdfRequired</name>
        <t>The keyword "sdfRequired" is provided to apply a constraint that
defines for which declarations the corresponding data are mandatory in a
Thing modeled by the current definition.</t>
        <t>The value of "sdfRequired" is an array of references, each indicating
one or more declarations that are mandatory to be represented.</t>
        <t>References in this array can be SDF names (JSON Pointers), or one of
two abbreviated reference formats:</t>
        <ul spacing="normal">
          <li>
            <t>a text string with an affordance name or grouping name.
All affordance declarations that are directly (i.e., not nested further in another grouping) in the same grouping and that
carry this name (there can be multiple ones, one per affordance type)
are declared to be mandatory to be represented. The same applies for
groupings made mandatory within groupings containing them.</t>
          </li>
          <li>
            <t>the Boolean value <tt>true</tt>.
The affordance/grouping itself that carries the sdfRequired keyword is declared
to be mandatory to be represented.</t>
          </li>
        </ul>
        <t>The example in <xref target="example-req"/> shows two required elements in the sdfObject definition for "temperatureWithAlarm", the sdfProperty "currentTemperature", and the sdfEvent "overTemperatureEvent". The example also shows the use of JSON pointer with "sdfRef" to use a pre-existing definition in this definition, for the "alarmType" data (sdfOutputData) produced by the sdfEvent "overTemperatureEvent".</t>
        <figure anchor="example-req">
          <name>Using sdfRequired</name>
          <sourcecode type="json"><![CDATA[
"sdfObject": {
  "temperatureWithAlarm": {
    "sdfRequired": [
"#/sdfObject/temperatureWithAlarm/sdfProperty/currentTemperature",
"#/sdfObject/temperatureWithAlarm/sdfEvent/overTemperatureEvent"
    ],
    "sdfData":{
       "temperatureData": {
        "type": "number"
      }
    },
    "sdfProperty": {
      "currentTemperature": {
"sdfRef": "#/sdfObject/temperatureWithAlarm/sdfData/temperatureData"
      }
    },
    "sdfEvent": {
      "overTemperatureEvent": {
       "sdfOutputData": {
          "type": "object",
          "properties": {
            "alarmType": {
              "sdfRef": "cap:#/sdfData/alarmTypes/quantityAlarms",
              "const": "OverTemperatureAlarm"
            },
            "temperature": {
"sdfRef": "#/sdfObject/temperatureWithAlarm/sdfData/temperatureData"
            }
          }
        }
      }
    }
  }
}
]]></sourcecode>
        </figure>
        <t>In <xref target="example-req"/>, the same sdfRequired can also be represented in
short form:</t>
        <sourcecode type="json"><![CDATA[
    "sdfRequired": ["currentTemperature", "overTemperatureEvent"]
]]></sourcecode>
        <t>Or, for instance "overTemperatureEvent" could carry</t>
        <sourcecode type="json"><![CDATA[
      "overTemperatureEvent": {
        "sdfRequired": [true],
        "...": "..."
      }
]]></sourcecode>
      </section>
      <section anchor="common-qualities">
        <name>Common Qualities</name>
        <t>Definitions in SDF share a number of qualities that provide metadata for
them.  These are listed in <xref target="tbl-common-qualities"/>.  None of these
qualities are required or have default values that are assumed if the
quality is absent.
If a label is required for an application and no label is given in the SDF model, the
last part (<tt>reference-token</tt>, <xref section="3" sectionFormat="of" target="RFC6901"/>) of the JSON
pointer to the definition can be used.</t>
        <table anchor="tbl-common-qualities">
          <name>Common Qualities</name>
          <thead>
            <tr>
              <th align="left">Quality</th>
              <th align="left">Type</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">description</td>
              <td align="left">string</td>
              <td align="left">long text (no constraints)</td>
            </tr>
            <tr>
              <td align="left">label</td>
              <td align="left">string</td>
              <td align="left">short text (no constraints)</td>
            </tr>
            <tr>
              <td align="left">$comment</td>
              <td align="left">string</td>
              <td align="left">source code comments only, no semantics</td>
            </tr>
            <tr>
              <td align="left">sdfRef</td>
              <td align="left">sdf-pointer</td>
              <td align="left">(see <xref target="sdfref"/>)</td>
            </tr>
            <tr>
              <td align="left">sdfRequired</td>
              <td align="left">pointer-list</td>
              <td align="left">(see <xref target="sdfrequired"/>, used in affordances or groupings)</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="data-qualities">
        <name>Data Qualities</name>
        <t>Data qualities are used in <tt>sdfData</tt> and <tt>sdfProperty</tt> definitions,
which are named sets of data qualities (abbreviated as <tt>named-sdq</tt>).</t>
        <t><xref target="jso-inspired"/> lists data qualities inspired by the various
proposals at json-schema.org; the
intention is that these (information model level) qualities are
compatible with the (data model) semantics from the
versions of the json-schema.org proposal they were imported from.</t>
        <t><xref target="sdfdataqual2"/> lists data qualities defined specifically for the
present specification.</t>
        <table anchor="sdfdataqual2">
          <name>SDF-defined Qualities of sdfData</name>
          <thead>
            <tr>
              <th align="left">Quality</th>
              <th align="left">Type</th>
              <th align="left">Description</th>
              <th align="left">Default</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">(common)</td>
              <td align="left"> </td>
              <td align="left">
                <xref target="common-qualities"/></td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">unit</td>
              <td align="left">string</td>
              <td align="left">unit name (note 1)</td>
              <td align="left">N/A</td>
            </tr>
            <tr>
              <td align="left">nullable</td>
              <td align="left">boolean</td>
              <td align="left">indicates a null value is available for this type</td>
              <td align="left">true</td>
            </tr>
            <tr>
              <td align="left">contentFormat</td>
              <td align="left">string</td>
              <td align="left">content type (IANA media type string plus parameters), encoding (note 2)</td>
              <td align="left">N/A</td>
            </tr>
            <tr>
              <td align="left">sdfType</td>
              <td align="left">string (<xref target="sdftype"/>)</td>
              <td align="left">sdfType enumeration (extensible)</td>
              <td align="left">N/A</td>
            </tr>
            <tr>
              <td align="left">sdfChoice</td>
              <td align="left">named set of data qualities (<xref target="sdfchoice"/>)</td>
              <td align="left">named alternatives</td>
              <td align="left">N/A</td>
            </tr>
            <tr>
              <td align="left">enum</td>
              <td align="left">array of strings</td>
              <td align="left">abbreviation for string-valued named alternatives</td>
              <td align="left">N/A</td>
            </tr>
          </tbody>
        </table>
        <ol spacing="normal" type="1"><li>
            <t>Note that the quality <tt>unit</tt> was called <tt>units</tt> in earlier drafts
of SDF.
The unit name <bcp14>SHOULD</bcp14> be as
per the <xref section="SenML Units" relative="#senml-units" sectionFormat="bare" target="RFC8428"/> Registry
or the <xref section="Secondary Units" relative="#secondary-units" sectionFormat="bare" target="RFC8798"/> Registry in <xref target="IANA.senml"/>
as specified by
Sections <xref target="RFC8428" section="4.5.1" sectionFormat="bare"/> and <xref target="RFC8428" section="12.1" sectionFormat="bare"/> of <xref target="RFC8428"/> and <xref section="3" sectionFormat="of" target="RFC8798"/>, respectively.  </t>
            <t>
Exceptionally, if a registration in these registries cannot be
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
processors are not expected to (and normally <bcp14>SHOULD NOT</bcp14>)
dereference these URIs (see also <xref target="I-D.bormann-t2trg-deref-id-01"/>); they may be useful to
humans, though.
A URI unit name is distinguished from a registered unit name by the
presence of a colon; any registered unit names that contain a colon (at
the time of writing, none) can therefore not be used in SDF.  </t>
            <t>
For use by translators into ecosystems that require URIs for unit
names, the URN sub-namespace "urn:ietf:params:unit" is provided
(<xref target="unit-urn"/>); URNs from this sub-namespace <bcp14>MUST NOT</bcp14> be used in a
<tt>unit</tt> quality, in favor of simply notating the unit name (such as
<tt>kg</tt> instead of <tt>urn:ietf:params:unit:kg</tt>).</t>
          </li>
          <li>
            <t>The <tt>contentFormat</tt> quality follows the Content-Format-Spec as defined in
<xref section="6" sectionFormat="of" target="RFC9193"/>, allowing for expressing both numeric and string
based Content-Formats.</t>
          </li>
        </ol>
        <section anchor="sdftype">
          <name>sdfType</name>
          <t>SDF defines a number of basic types beyond those provided by JSON or
JSO.  These types are identified by the <tt>sdfType</tt> quality, which
is a text string from a set of type names defined by the  "<tt>sdfType</tt>
values" sub-registry in the "SDF Parameters" registry
(<xref target="sdftype-values"/>).
The <tt>sdfType</tt> name is composed of lower case ASCII letters, digits,
and <tt>-</tt> (ASCII hyphen/minus) characters, starting
with a lower case ASCII letter (i.e., using a pattern of
"⁠<tt>[a-z][-a-z0-9]*</tt>"), typically employing KebabCase for
names constructed out of multiple words <xref target="KebabCase"/>.</t>
          <t>To aid interworking with JSO implementations, it is <bcp14>RECOMMENDED</bcp14>
that <tt>sdfType</tt> is always used in conjunction with the <tt>type</tt> quality
inherited from <xref target="JSO7V"/>, in such a way as to yield a common
representation of the type's values in JSON.</t>
          <t>Values for <tt>sdfType</tt> that are defined in this specification are shown in
<xref target="sdftype1"/>.
This table also gives a description of the semantics of the sdfType,
the conventional value for <tt>type</tt> to be used with the <tt>sdfType</tt> value,
and a conventional JSON representation for values of the type.</t>
          <table anchor="sdftype1">
            <name>Values defined in base SDF for the sdfType quality</name>
            <thead>
              <tr>
                <th align="left">sdfType</th>
                <th align="left">Description</th>
                <th align="left">type</th>
                <th align="left">JSON Representation</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">byte-string</td>
                <td align="left">A sequence of zero or more bytes</td>
                <td align="left">string</td>
                <td align="left">base64url without padding (<xref section="3.4.5.2" sectionFormat="of" target="RFC8949"/>)</td>
              </tr>
              <tr>
                <td align="left">unix-time</td>
                <td align="left">A point in civil time (note 1)</td>
                <td align="left">number</td>
                <td align="left">POSIX time (<xref section="3.4.2" sectionFormat="of" target="RFC8949"/>)</td>
              </tr>
            </tbody>
          </table>
          <t>(1) Note that the definition of <tt>unix-time</tt> does not imply the
capability to represent points in time that fall on leap seconds.
More date/time-related sdfTypes are likely to be added in the sdfType
value registry.</t>
          <t>(In earlier drafts of this specification, a similar concept was called <tt>subtype</tt>.)</t>
        </section>
        <section anchor="sdfchoice">
          <name>sdfChoice</name>
          <t>Data can be a choice of named alternatives, called <tt>sdfChoice</tt>.
Each alternative is identified by a name (string, key in the outer JSON
map used to represent the overall choice) and a set of dataqualities
(each in an inner JSON map, the value used to represent the
individual alternative in the outer JSON map).
Dataqualities that are specified at the same level as the sdfChoice
apply to all choices in the sdfChoice, except those specific choices
where the dataquality is overridden at the choice level.</t>
          <t>sdfChoice merges the functions of two constructs found in <xref target="JSO7V"/>:</t>
          <ul spacing="normal">
            <li>
              <t><tt>enum</tt>  </t>
              <t>
What would have been  </t>
              <sourcecode type="json"><![CDATA[
"enum": ["foo", "bar", "baz"]
]]></sourcecode>
              <t>
in earlier drafts of this specification, is often best represented as:  </t>
              <sourcecode type="json"><![CDATA[
"sdfChoice": {
  "foo": { "description": "This is a foonly"},
  "bar": { "description":
"As defined in the second world congress"},
  "baz": { "description": "From zigbee foobaz"}
}
]]></sourcecode>
              <t>
This allows the placement of other dataqualities such as
<tt>description</tt> in the example.  </t>
              <t>
If an enum needs to use a data type different from text string,
what would for instance have been:  </t>
              <sourcecode type="json"><![CDATA[
"type": "number",
"enum": [1, 2, 3]
]]></sourcecode>
              <t>
in earlier drafts of this specification, is represented as:  </t>
              <sourcecode type="json"><![CDATA[
"type": "number",
"sdfChoice": {
  "a-better-name-for-alternative-1": { "const": 1 },
  "alternative-2": { "const": 2 },
  "the-third-alternative": { "const": 3 }
}
]]></sourcecode>
              <t>
where the string names obviously would be chosen in a way that is
descriptive for what these numbers actually stand for; sdfChoice
also makes it easy to add number ranges into the mix.  </t>
              <t>
(Note that <tt>const</tt> can also be used for strings as in the previous
example, for instance, if the actual string value is indeed a crucial
element for the data model.)</t>
            </li>
            <li>
              <t>anyOf  </t>
              <t>
JSO provides a type union called <tt>anyOf</tt>, which provides a
choice between anonymous alternatives.  </t>
              <t>
What could have been in JSO:  </t>
              <sourcecode type="json"><![CDATA[
"anyOf": [
  {"type": "array", "minItems": 3, "maxItems": "3",
   "items": {"$ref": "#/sdfData/rgbVal"}},
  {"type": "array", "minItems": 4, "maxItems": "4",
   "items": {"$ref": "#/sdfData/cmykVal"}}
]
]]></sourcecode>
              <t>
can be more descriptively notated in SDF as:  </t>
              <sourcecode type="json"><![CDATA[
"sdfChoice": {
  "rgb": {"type": "array", "minItems": 3, "maxItems": "3",
          "items": {"sdfRef": "#/sdfData/rgbVal"}},
  "cmyk": {"type": "array", "minItems": 4, "maxItems": "4",
           "items": {"sdfRef": "#/sdfData/cmykVal"}}
}
]]></sourcecode>
            </li>
          </ul>
          <t>Note that there is no need in SDF for the type intersection construct
<tt>allOf</tt> or the peculiar type-xor construct <tt>oneOf</tt> found in <xref target="JSO7V"/>.</t>
          <t>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 string values, such that</t>
          <sourcecode type="json"><![CDATA[
"enum": ["foo", "bar", "baz"]
]]></sourcecode>
          <t>is syntactic sugar for</t>
          <sourcecode type="json"><![CDATA[
"sdfChoice": {
  "foo": { "const": "foo"},
  "bar": { "const": "bar"},
  "baz": { "const": "baz"}
}
]]></sourcecode>
          <t>In a single definition, the keyword <tt>enum</tt> cannot be used at the same
time as the keyword <tt>sdfChoice</tt>, as the former is just syntactic
sugar for the latter.</t>
        </section>
      </section>
    </section>
    <section anchor="keywords-for-definition-groups">
      <name>Keywords for definition groups</name>
      <t>The following SDF keywords are used to create definition groups in the target namespace.
All these definitions share some common qualities as discussed in <xref target="common-qualities"/>.</t>
      <section anchor="sdfobject-1">
        <name>sdfObject</name>
        <t>The sdfObject keyword denotes a group of zero or more sdfObject definitions.
sdfObject definitions may contain or include definitions of Properties, Actions, Events declared for the sdfObject, as well as data types (sdfData group) to be used in this or other sdfObjects.</t>
        <t>The qualities of an sdfObject include the common qualities, additional qualities are shown in <xref target="sdfobjqual"/>.
None of these
qualities are required or have default values that are assumed if the
quality is absent.</t>
        <table anchor="sdfobjqual">
          <name>Qualities of sdfObject</name>
          <thead>
            <tr>
              <th align="left">Quality</th>
              <th align="left">Type</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">(common)</td>
              <td align="left"> </td>
              <td align="left">
                <xref target="common-qualities"/></td>
            </tr>
            <tr>
              <td align="left">sdfProperty</td>
              <td align="left">property</td>
              <td align="left">zero or more named property definitions for this sdfObject</td>
            </tr>
            <tr>
              <td align="left">sdfAction</td>
              <td align="left">action</td>
              <td align="left">zero or more named action definitions for this sdfObject</td>
            </tr>
            <tr>
              <td align="left">sdfEvent</td>
              <td align="left">event</td>
              <td align="left">zero or more named event definitions for this sdfObject</td>
            </tr>
            <tr>
              <td align="left">sdfData</td>
              <td align="left">named-sdq</td>
              <td align="left">zero or more named data type definitions that might be used in the above</td>
            </tr>
            <tr>
              <td align="left">minItems</td>
              <td align="left">number</td>
              <td align="left">(array) Minimum number of multiplied affordances in array</td>
            </tr>
            <tr>
              <td align="left">maxItems</td>
              <td align="left">number</td>
              <td align="left">(array) Maximum number of multiplied affordances in array</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="sdfproperty-1">
        <name>sdfProperty</name>
        <t>The sdfProperty keyword denotes a group of zero or more Property definitions.</t>
        <t>Properties are used to model elements of state.</t>
        <t>The qualities of a Property definition include the data qualities (and
thus the common qualities), see <xref target="data-qualities"/>, additional qualities are shown in <xref target="sdfpropqual"/>.</t>
        <table anchor="sdfpropqual">
          <name>Qualities of sdfProperty</name>
          <thead>
            <tr>
              <th align="left">Quality</th>
              <th align="left">Type</th>
              <th align="left">Description</th>
              <th align="left">Default</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">(data)</td>
              <td align="left"> </td>
              <td align="left">
                <xref target="data-qualities"/></td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">readable</td>
              <td align="left">boolean</td>
              <td align="left">Reads are allowed</td>
              <td align="left">true</td>
            </tr>
            <tr>
              <td align="left">writable</td>
              <td align="left">boolean</td>
              <td align="left">Writes are allowed</td>
              <td align="left">true</td>
            </tr>
            <tr>
              <td align="left">observable</td>
              <td align="left">boolean</td>
              <td align="left">flag to indicate asynchronous notification is available</td>
              <td align="left">true</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="sdfaction">
        <name>sdfAction</name>
        <t>The sdfAction keyword denotes a group of zero or more Action definitions.</t>
        <t>Actions are used to model commands and methods which are invoked. Actions have parameter data that are supplied upon invocation.</t>
        <t>The qualities of an Action definition include the common qualities, additional qualities are shown in <xref target="sdfactqual"/>.</t>
        <table anchor="sdfactqual">
          <name>Qualities of sdfAction</name>
          <thead>
            <tr>
              <th align="left">Quality</th>
              <th align="left">Type</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">(common)</td>
              <td align="left"> </td>
              <td align="left">
                <xref target="common-qualities"/></td>
            </tr>
            <tr>
              <td align="left">sdfInputData</td>
              <td align="left">map</td>
              <td align="left">data qualities of the input data for an Action</td>
            </tr>
            <tr>
              <td align="left">sdfOutputData</td>
              <td align="left">map</td>
              <td align="left">data qualities of the output data for an Action</td>
            </tr>
            <tr>
              <td align="left">sdfData</td>
              <td align="left">named-sdq</td>
              <td align="left">zero or more named data type definitions that might be used in the above</td>
            </tr>
          </tbody>
        </table>
        <t><tt>sdfInputData</tt> defines the input data of the action.  <tt>sdfOutputData</tt>
defines the output data of the action.
As discussed in <xref target="sdfaction-overview"/>, a set of data qualities with
type <tt>"object"</tt> can be used to substructure either data item, with
optionality indicated by the data quality <tt>required</tt>.</t>
      </section>
      <section anchor="sdfevent">
        <name>sdfEvent</name>
        <t>The sdfEvent keyword denotes zero or more Event definitions.</t>
        <t>Events are used to model asynchronous occurrences that may be communicated proactively. Events have data elements which are communicated upon the occurrence of the event.</t>
        <t>The qualities of sdfEvent include the common qualities, additional qualities are shown in <xref target="sdfevqual"/>.</t>
        <table anchor="sdfevqual">
          <name>Qualities of sdfEvent</name>
          <thead>
            <tr>
              <th align="left">Quality</th>
              <th align="left">Type</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">(common)</td>
              <td align="left"> </td>
              <td align="left">
                <xref target="common-qualities"/></td>
            </tr>
            <tr>
              <td align="left">sdfOutputData</td>
              <td align="left">map</td>
              <td align="left">data qualities of the output data for an Event</td>
            </tr>
            <tr>
              <td align="left">sdfData</td>
              <td align="left">named-sdq</td>
              <td align="left">zero or more named data type definitions that might be used in the above</td>
            </tr>
          </tbody>
        </table>
        <t><tt>sdfOutputData</tt> defines the output data of the action.
As discussed in <xref target="sdfevent-overview"/>, a set of data qualities with
type <tt>"object"</tt> can be used to substructure the output data item, with
optionality indicated by the data quality <tt>required</tt>.</t>
      </section>
      <section anchor="sdfdata-1">
        <name>sdfData</name>
        <t>The sdfData keyword denotes a group of zero or more named data type
definitions (named-sdq).</t>
        <t>An sdfData definition provides a reusable semantic identifier for a
type of data item and describes the constraints on the defined type.
It is not itself a declaration, i.e., it does not cause any of these
data items to be included in an affordance definition.</t>
        <t>The qualities of sdfData include the data qualities (and thus the common qualities), see <xref target="data-qualities"/>.</t>
      </section>
    </section>
    <section anchor="high-level-composition">
      <name>High Level Composition</name>
      <t>The requirements for high level composition include the following:</t>
      <ul spacing="normal">
        <li>
          <t>The ability to represent products, standardized product types, and modular products while maintaining the atomicity of sdfObjects.</t>
        </li>
        <li>
          <t>The ability to compose a reusable definition block from sdfObjects, for example a single plug unit of an outlet strip with on/off control, energy monitor, and optional dimmer sdfObjects, while retaining the atomicity of the individual sdfObjects.</t>
        </li>
        <li>
          <t>The ability to compose sdfObjects and other definition blocks into a higher level sdfThing that represents a product, while retaining the atomicity of sdfObjects.</t>
        </li>
        <li>
          <t>The ability to enrich and refine a base definition to have
product-specific qualities and quality values, such as unit, range, and scale settings.</t>
        </li>
        <li>
          <t>The ability to reference items in one part of a complex definition from another part of the same definition, for example to summarize the energy readings from all plugs in an outlet strip.</t>
        </li>
      </ul>
      <section anchor="paths-in-the-model-namespaces">
        <name>Paths in the model namespaces</name>
        <t>The model namespace is organized according to terms that are defined
in the SDF documents that contribute to the namespace. For example, definitions that originate from an organization or vendor are expected to be in a namespace that is specific to that organization or vendor.</t>
        <t>The structure of a path in a namespace is defined by the JSON Pointers
to the definitions in the SDF documents in that namespace.
For example, if there is an SDF document defining an sdfObject "Switch"
with an action "on", then the reference to the action would be
"ns:/sdfObject/Switch/sdfAction/on" where <tt>ns</tt> is the namespace prefix
(short name for the namespace).</t>
      </section>
      <section anchor="modular-composition">
        <name>Modular Composition</name>
        <t>Modular composition of definitions enables an existing definition
(could be in the same or another SDF document) to become part of a new definition by including a reference to the existing definition within the model namespace.</t>
        <section anchor="use-of-the-sdfref-keyword-to-re-use-a-definition">
          <name>Use of the "sdfRef" keyword to re-use a definition</name>
          <t>An existing definition may be used as a template for a new definition, that is, a new definition is created in the target namespace which uses the defined qualities of some existing definition. This pattern will use the keyword "sdfRef" as a quality of a new definition with a value consisting of a reference to the existing definition that is to be used as a template.</t>
          <t>In the definition that uses "sdfRef", new qualities may be added
and existing qualities from the referenced definition may be
overridden.  (Note that JSON maps do not have a defined
order, so the SDF processor may see these overrides before seeing the
<tt>sdfRef</tt>.)</t>
          <t>Note that if the referenced definition contains qualities or
definitions that are not valid in the context where the sdfRef is used
(for instance, if an sdfThing definition would be added in an sdfObject definition), the resulting model, when resolved, may be invalid.</t>
          <t>As a convention, overrides are intended to be used only for further restricting
the set of data values, as shown in <xref target="exa-sdfref"/>:  any value for a
<tt>cable-length</tt> also is a valid value for a <tt>length</tt>, with the
additional restriction that 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 implementation consideration for a tool
might be to provide at least some form of checking.)
Note that a description is provided that overrides the description of
the referenced definition; as this quality is intended for human
consumption there is no conflict with the intended goal.</t>
          <figure anchor="exa-sdfref">
            <artwork><![CDATA[
"sdfData":
  "length" : {
    "type": "number",
    "minimum": 0,
    "unit": "m"
    "description": "There can be no negative lengths."
  }
...
  "cable-length" : {
    "sdfRef": "#/sdfData/length"
    "minimum": 5e-2,
    "description": "Cables must be at least 5 cm."
  }
]]></artwork>
          </figure>
        </section>
      </section>
      <section anchor="sdfthing-1">
        <name>sdfThing</name>
        <t>An sdfThing is a set of declarations and qualities that may be part of
a more complex model. For example, the sdfObject declarations that make
up the definition of a single socket of an outlet strip could be
encapsulated in an sdfThing, which itself could be used in a declaration in the sdfThing definition for the outlet strip
(see <xref target="exa-sdfthing-outlet-strip"/> in <xref target="outlet-strip-example"/> for an example SDF model).</t>
        <t>sdfThing definitions carry semantic meaning, such as a defined refrigerator compartment and a defined freezer compartment, making up a combination refrigerator-freezer product.
An sdfThing may be composed of sdfObjects and other sdfThings.
It can also contain sdfData definitions, as well as declarations of interaction affordances itself, such
as a status (on/off) for the refrigerator-freezer as a whole (see
<xref target="exa-sdfthing-fridge-freezer"/> in <xref target="fridge-freezer-example"/> for an example SDF
model illustrating these aspects).</t>
        <t>The qualities of sdfThing are shown in <xref target="sdfthingqual"/>.
Analogous to sdfObject, the presence of one or both of the optional
qualities "<tt>minItems</tt>" and "<tt>maxItems</tt>" defines the sdfThing as an
array.</t>
        <table anchor="sdfthingqual">
          <name>Qualities of sdfThing</name>
          <thead>
            <tr>
              <th align="left">Quality</th>
              <th align="left">Type</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">(common)</td>
              <td align="left"> </td>
              <td align="left">
                <xref target="common-qualities"/></td>
            </tr>
            <tr>
              <td align="left">sdfThing</td>
              <td align="left">thing</td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">sdfObject</td>
              <td align="left">object</td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">sdfProperty</td>
              <td align="left">property</td>
              <td align="left">zero or more named property definitions for this thing</td>
            </tr>
            <tr>
              <td align="left">sdfAction</td>
              <td align="left">action</td>
              <td align="left">zero or more named action definitions for this thing</td>
            </tr>
            <tr>
              <td align="left">sdfEvent</td>
              <td align="left">event</td>
              <td align="left">zero or more named event definitions for this thing</td>
            </tr>
            <tr>
              <td align="left">sdfData</td>
              <td align="left">named-sdq</td>
              <td align="left">zero or more named data type definitions that might be used in the above</td>
            </tr>
            <tr>
              <td align="left">minItems</td>
              <td align="left">number</td>
              <td align="left">(array) Minimum number of multiplied affordances in array</td>
            </tr>
            <tr>
              <td align="left">maxItems</td>
              <td align="left">number</td>
              <td align="left">(array) Maximum number of multiplied affordances in array</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t><cref anchor="replace-xxxx">RFC Ed.: throughout this section, please replace RFC XXXX with this RFC number, and remove this note.</cref></t>
      <section anchor="media-type">
        <name>Media Type</name>
        <t>IANA is requested to add the following Media-Type to the "Media Types" registry.</t>
        <table align="left">
          <name>Media Type Registration for SDF</name>
          <thead>
            <tr>
              <th align="left">Name</th>
              <th align="left">Template</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">sdf+json</td>
              <td align="left">application/sdf+json</td>
              <td align="left">RFC XXXX, <xref target="media-type"/></td>
            </tr>
          </tbody>
        </table>
        <dl spacing="compact">
          <dt>Type name:</dt>
          <dd>
            <t>application</t>
          </dd>
          <dt>Subtype name:</dt>
          <dd>
            <t>sdf+json</t>
          </dd>
          <dt>Required parameters:</dt>
          <dd>
            <t>none</t>
          </dd>
          <dt>Optional parameters:</dt>
          <dd>
            <t>none</t>
          </dd>
          <dt>Encoding considerations:</dt>
          <dd>
            <t>binary (JSON is UTF-8-encoded text)</t>
          </dd>
          <dt>Security considerations:</dt>
          <dd>
            <t><xref target="seccons"/> of RFC XXXX</t>
          </dd>
          <dt>Interoperability considerations:</dt>
          <dd>
            <t>none</t>
          </dd>
          <dt>Published specification:</dt>
          <dd>
            <t><xref target="media-type"/> of RFC XXXX</t>
          </dd>
          <dt>Applications that use this media type:</dt>
          <dd>
            <t>Tools for data and interaction modeling in the Internet of Things
and related environments</t>
          </dd>
          <dt>Fragment identifier considerations:</dt>
          <dd>
            <t>A JSON Pointer fragment identifier may be used, as defined in
<xref section="6" sectionFormat="of" target="RFC6901"/>.</t>
          </dd>
          <dt>Additional information:</dt>
          <dd>
            <dl>
              <dt>Magic number(s):</dt>
              <dd>
                <t>n/a</t>
              </dd>
              <dt>File extension(s):</dt>
              <dd>
                <t>.sdf.json</t>
              </dd>
              <dt>Windows Clipboard Name:</dt>
              <dd>
                <t>"Semantic Definition Format (SDF) for Data and Interactions of Things"</t>
              </dd>
              <dt>Macintosh file type code(s):</dt>
              <dd>
                <t>n/a</t>
              </dd>
              <dt>Macintosh Universal Type Identifier code:</dt>
              <dd>
                <t>org.ietf.sdf-json<br/>
conforms to public.text</t>
              </dd>
            </dl>
          </dd>
          <dt>Person &amp; email address to contact for further information:</dt>
          <dd>
            <t>ASDF WG mailing list (asdf@ietf.org),
or IETF Applications and Real-Time Area (art@ietf.org)</t>
          </dd>
          <dt>Intended usage:</dt>
          <dd>
            <t>COMMON</t>
          </dd>
          <dt>Restrictions on usage:</dt>
          <dd>
            <t>none</t>
          </dd>
          <dt>Author/Change controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
          <dt>Provisional registration:</dt>
          <dd>
            <t>no</t>
          </dd>
        </dl>
      </section>
      <section anchor="content-format">
        <name>Content-Format</name>
        <t>This document adds the following Content-Format to the "CoAP Content-Formats",
within the "Constrained RESTful Environments (CoRE) Parameters"
registry, where TBD1 comes from the "IETF Review" 256-999 range.</t>
        <table align="left">
          <name>SDF Content-format Registration</name>
          <thead>
            <tr>
              <th align="left">Content Type</th>
              <th align="left">Content Coding</th>
              <th align="left">ID</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">application/sdf+json</td>
              <td align="left">-</td>
              <td align="left">TBD1</td>
              <td align="left">RFC XXXX</td>
            </tr>
          </tbody>
        </table>
        <t>// RFC Ed.: please replace TBD1 with the assigned ID, remove the
requested range, and remove this note.<br/>
// RFC Ed.: please replace RFC XXXX with this RFC number and remove this note.</t>
      </section>
      <section anchor="unit-urn">
        <name>IETF URN Sub-namespace for Unit Names (urn:ietf:params:unit)</name>
        <t>IANA is requested to register the following value in the "<xref section="IETF URN Sub-namespace for Registered Protocol Parameter Identifiers" relative="#params-1" sectionFormat="bare" target="IANA.params"/>" registry in <xref target="IANA.params"/>, following the template in
<xref target="RFC3553"/>:</t>
        <dl>
          <dt>Registry name:</dt>
          <dd>
            <t>unit</t>
          </dd>
          <dt>Specification:</dt>
          <dd>
            <t>RFC XXXX</t>
          </dd>
          <dt>Repository:</dt>
          <dd>
            <t>combining the symbol values from the <xref section="SenML Units" relative="#senml-units" sectionFormat="bare" target="IANA.senml"/> Registry and the <xref section="Secondary Units" relative="#secondary-units" sectionFormat="bare" target="IANA.senml"/> Registry in <xref target="IANA.senml"/> as specified by Sections <xref target="RFC8428" section="4.5.1" sectionFormat="bare"/> and <xref target="RFC8428" section="12.1" sectionFormat="bare"/> of <xref target="RFC8428"/> and <xref section="3" sectionFormat="of" target="RFC8798"/>,
respectively (which by the registration policy are guaranteed to be
non-overlapping).</t>
          </dd>
          <dt>Index value:</dt>
          <dd>
            <t>Percent-encoding (<xref section="2.1" sectionFormat="of" target="RFC3986"/>) is required of
any characters in unit names as required by ABNF rule "pchar" in
<xref section="3.3" sectionFormat="of" target="RFC3986"/>, specifically at the time of writing for the
unit names "%" (deprecated in favor of "/"), "%RH", "%EL".</t>
          </dd>
        </dl>
      </section>
      <section anchor="registries">
        <name>Registries</name>
        <t>IANA is requested to create an "SDF Parameters" registry, with the
sub-registries defined in this Section.</t>
        <section anchor="qnp">
          <name>Quality Name Prefixes</name>
          <t>IANA is requested to create a "Quality Name Prefixes" sub-registry in
the "SDF Parameters" registry, with the following template:</t>
          <dl>
            <dt>Prefix:</dt>
            <dd>
              <t>A name composed of lower case ASCII letters and digits, starting
with a lower case ASCII letter (i.e., using a pattern of "⁠<tt>[a-z][a-z0-9]*</tt>").</t>
            </dd>
            <dt>Contact:</dt>
            <dd>
              <t>A contact point for the organization that assigns quality names with
this prefix.</t>
            </dd>
          </dl>
          <t>Quality Name Prefixes are intended to be registered by organizations
that intend to define quality names constructed with an
organization-specifix prefix (<xref target="gnqn"/>).</t>
          <t>The registration policy is Expert Review as per <xref section="4.5" sectionFormat="of" target="RFC8126"/>.
The instructions to the Expert are to ascertain that the organization
will handle quality names constructed using their prefix in a way that
roughly achieves the objectives for an IANA registry that support
interoperability of SDF models employing these quality names,
including:</t>
          <ul spacing="normal">
            <li>
              <t>Stability, "stable and permanent";</t>
            </li>
            <li>
              <t>Transparency, "readily available", "in sufficient detail" (<xref section="4.6" sectionFormat="of" target="RFC8126"/>).</t>
            </li>
          </ul>
          <t>The Expert will take into account that other organizations operate in
different ways than the IETF, and that as a result some of these
overall objectives will be achieved in a different way and to a
different level of comfort.</t>
          <t>The "Quality Name Prefixes" sub-registry starts out empty.</t>
        </section>
        <section anchor="sdftype-values">
          <name>sdfType Values</name>
          <t>IANA is requested to create a "sdfType values" sub-registry in
the "SDF Parameters" registry, with the following template:</t>
          <dl>
            <dt>Name:</dt>
            <dd>
              <t>A name composed of lower case ASCII letters, digits and <tt>-</tt> (ASCII
hyphen/minus) characters, starting with a lower case ASCII letter
(i.e., using a pattern of "⁠<tt>[a-z][-a-z0-9]*</tt>").</t>
            </dd>
            <dt>Description:</dt>
            <dd>
              <t>A short description of the information model level structure and semantics</t>
            </dd>
            <dt>type:</dt>
            <dd>
              <t>The value of the quality "type" to be used with this sdfType</t>
            </dd>
            <dt>JSON Representation</dt>
            <dd>
              <t>A short description of a JSON representation that can be used for
this sdfType.  This <bcp14>MUST</bcp14> be consistent with the type.</t>
            </dd>
            <dt>Reference:</dt>
            <dd>
              <t>A more detailed specification of meaning and use of sdfType.</t>
            </dd>
          </dl>
          <t>sdfType values are intended to be registered to enable modeling additional
SDF-specific types (see <xref target="sdftype"/>).</t>
          <t>The registration policy is Specification Required as per <xref section="4.6" sectionFormat="of" target="RFC8126"/>.  The instructions to the Expert are to ascertain that the
specification provides enough detail to enable interoperability
between implementations of the sdfType being registered, and that
names are chosen with enough specificity that ecosystem-specific
sdfTypes will not be confused with more generally applicable ones.</t>
          <t>The initial set of registrations is described in <xref target="sdftype-r"/>.</t>
          <table anchor="sdftype-r">
            <name>Initial set of sdfType values</name>
            <thead>
              <tr>
                <th align="left">Name</th>
                <th align="left">Description</th>
                <th align="left">type</th>
                <th align="left">JSON Representation</th>
                <th align="left">Reference</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">byte-string</td>
                <td align="left">A sequence of zero or more bytes</td>
                <td align="left">string</td>
                <td align="left">base64url without padding</td>
                <td align="left">
                  <xref section="3.4.5.2" sectionFormat="of" target="RFC8949"/></td>
              </tr>
              <tr>
                <td align="left">unix-time</td>
                <td align="left">A point in civil time</td>
                <td align="left">number</td>
                <td align="left">POSIX time</td>
                <td align="left">
                  <xref section="3.4.2" sectionFormat="of" target="RFC8949"/></td>
              </tr>
            </tbody>
          </table>
        </section>
      </section>
    </section>
    <section anchor="seccons">
      <name>Security Considerations</name>
      <t>Some wider issues are discussed in <xref target="RFC8576"/>.</t>
      <t>(Specifics: TBD.)</t>
    </section>
  </middle>
  <back>
    <displayreference target="RFC8126" to="BCP26"/>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="IANA.senml" target="https://www.iana.org/assignments/senml">
          <front>
            <title>Sensor Measurement Lists (SenML)</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="IANA.params" target="https://www.iana.org/assignments/params">
          <front>
            <title>Uniform Resource Name (URN) Namespace for IETF Use</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="RFC3339">
          <front>
            <title>Date and Time on the Internet: Timestamps</title>
            <author fullname="G. Klyne" initials="G." surname="Klyne"/>
            <author fullname="C. Newman" initials="C." surname="Newman"/>
            <date month="July" year="2002"/>
            <abstract>
              <t>This document defines a date and time format for use in Internet protocols that is a profile of the ISO 8601 standard for representation of dates and times using the Gregorian calendar.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3339"/>
          <seriesInfo name="DOI" value="10.17487/RFC3339"/>
        </reference>
        <reference anchor="RFC8428">
          <front>
            <title>Sensor Measurement Lists (SenML)</title>
            <author fullname="C. Jennings" initials="C." surname="Jennings"/>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby"/>
            <author fullname="J. Arkko" initials="J." surname="Arkko"/>
            <author fullname="A. Keranen" initials="A." surname="Keranen"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This specification defines a format for representing simple sensor measurements and device parameters in Sensor Measurement Lists (SenML). Representations are defined in JavaScript Object Notation (JSON), Concise Binary Object Representation (CBOR), Extensible Markup Language (XML), and Efficient XML Interchange (EXI), which share the common SenML data model. A simple sensor, such as a temperature sensor, could use one of these media types in protocols such as HTTP or the Constrained Application Protocol (CoAP) to transport the measurements of the sensor or to be configured.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8428"/>
          <seriesInfo name="DOI" value="10.17487/RFC8428"/>
        </reference>
        <reference anchor="RFC8798">
          <front>
            <title>Additional Units for Sensor Measurement Lists (SenML)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2020"/>
            <abstract>
              <t>The Sensor Measurement Lists (SenML) media type supports the indication of units for a quantity represented. This short document registers a number of additional unit names in the IANA registry for units in SenML. It also defines a registry for secondary units that cannot be in SenML's main registry, as they are derived by linear transformation from units already in that registry.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8798"/>
          <seriesInfo name="DOI" value="10.17487/RFC8798"/>
        </reference>
        <reference anchor="RFC3986">
          <front>
            <title>Uniform Resource Identifier (URI): Generic Syntax</title>
            <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <author fullname="L. Masinter" initials="L." surname="Masinter"/>
            <date month="January" year="2005"/>
            <abstract>
              <t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource. This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet. The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier. This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="66"/>
          <seriesInfo name="RFC" value="3986"/>
          <seriesInfo name="DOI" value="10.17487/RFC3986"/>
        </reference>
        <reference anchor="RFC4122">
          <front>
            <title>A Universally Unique IDentifier (UUID) URN Namespace</title>
            <author fullname="P. Leach" initials="P." surname="Leach"/>
            <author fullname="M. Mealling" initials="M." surname="Mealling"/>
            <author fullname="R. Salz" initials="R." surname="Salz"/>
            <date month="July" year="2005"/>
            <abstract>
              <t>This specification defines a Uniform Resource Name namespace for UUIDs (Universally Unique IDentifier), also known as GUIDs (Globally Unique IDentifier). A UUID is 128 bits long, and can guarantee uniqueness across space and time. UUIDs were originally used in the Apollo Network Computing System and later in the Open Software Foundation\'s (OSF) Distributed Computing Environment (DCE), and then in Microsoft Windows platforms.</t>
              <t>This specification is derived from the DCE specification with the kind permission of the OSF (now known as The Open Group). Information from earlier versions of the DCE specification have been incorporated into this document. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4122"/>
          <seriesInfo name="DOI" value="10.17487/RFC4122"/>
        </reference>
        <reference anchor="RFC6901">
          <front>
            <title>JavaScript Object Notation (JSON) Pointer</title>
            <author fullname="P. Bryan" initials="P." role="editor" surname="Bryan"/>
            <author fullname="K. Zyp" initials="K." surname="Zyp"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <date month="April" year="2013"/>
            <abstract>
              <t>JSON Pointer defines a string syntax for identifying a specific value within a JavaScript Object Notation (JSON) document.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6901"/>
          <seriesInfo name="DOI" value="10.17487/RFC6901"/>
        </reference>
        <reference anchor="RFC7396">
          <front>
            <title>JSON Merge Patch</title>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <author fullname="J. Snell" initials="J." surname="Snell"/>
            <date month="October" year="2014"/>
            <abstract>
              <t>This specification defines the JSON merge patch format and processing rules. The merge patch format is primarily intended for use with the HTTP PATCH method as a means of describing a set of modifications to a target resource's content.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7396"/>
          <seriesInfo name="DOI" value="10.17487/RFC7396"/>
        </reference>
        <reference anchor="RFC8610">
          <front>
            <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="C. Vigano" initials="C." surname="Vigano"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2019"/>
            <abstract>
              <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8610"/>
          <seriesInfo name="DOI" value="10.17487/RFC8610"/>
        </reference>
        <reference anchor="RFC8949">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="December" year="2020"/>
            <abstract>
              <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
              <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049. It does not create a new version of the format.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="94"/>
          <seriesInfo name="RFC" value="8949"/>
          <seriesInfo name="DOI" value="10.17487/RFC8949"/>
        </reference>
        <reference anchor="RFC9193">
          <front>
            <title>Sensor Measurement Lists (SenML) Fields for Indicating Data Value Content-Format</title>
            <author fullname="A. Keränen" initials="A." surname="Keränen"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Sensor Measurement Lists (SenML) media types support multiple types of values, from numbers to text strings and arbitrary binary Data Values. In order to facilitate processing of binary Data Values, this document specifies a pair of new SenML fields for indicating the content format of those binary Data Values, i.e., their Internet media type, including parameters as well as any content codings applied.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9193"/>
          <seriesInfo name="DOI" value="10.17487/RFC9193"/>
        </reference>
        <reference anchor="RFC8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <date month="June" year="2017"/>
            <abstract>
              <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>
        <reference anchor="W3C.NOTE-curie-20101216" target="https://www.w3.org/TR/2010/NOTE-curie-20101216/">
          <front>
            <title>CURIE Syntax 1.0</title>
            <author fullname="Mark Birbeck" role="editor"/>
            <author fullname="Shane McCarron" role="editor"/>
            <date day="16" month="December" year="2010"/>
          </front>
          <seriesInfo name="W3C NOTE" value="NOTE-curie-20101216"/>
          <seriesInfo name="W3C" value="NOTE-curie-20101216"/>
        </reference>
        <reference anchor="RFC0020">
          <front>
            <title>ASCII format for network interchange</title>
            <author fullname="V.G. Cerf" initials="V.G." surname="Cerf"/>
            <date month="October" year="1969"/>
          </front>
          <seriesInfo name="STD" value="80"/>
          <seriesInfo name="RFC" value="20"/>
          <seriesInfo name="DOI" value="10.17487/RFC0020"/>
        </reference>
        <reference anchor="SPDX" target="https://spdx.org/licenses/">
          <front>
            <title>SPDX License List</title>
            <author>
              <organization/>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="RFC9165">
          <front>
            <title>Additional Control Operators for the Concise Data Definition Language (CDDL)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="December" year="2021"/>
            <abstract>
              <t>The Concise Data Definition Language (CDDL), standardized in RFC 8610, provides "control operators" as its main language extension point.</t>
              <t>The present document defines a number of control operators that were not yet ready at the time RFC 8610 was completed:,, and for the construction of constants; / for including ABNF (RFC 5234 and RFC 7405) in CDDL specifications; and for indicating the use of a non-basic feature in an instance.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9165"/>
          <seriesInfo name="DOI" value="10.17487/RFC9165"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC3553">
          <front>
            <title>An IETF URN Sub-namespace for Registered Protocol Parameters</title>
            <author fullname="M. Mealling" initials="M." surname="Mealling"/>
            <author fullname="L. Masinter" initials="L." surname="Masinter"/>
            <author fullname="T. Hardie" initials="T." surname="Hardie"/>
            <author fullname="G. Klyne" initials="G." surname="Klyne"/>
            <date month="June" year="2003"/>
            <abstract>
              <t>This document describes a new sub-delegation for the 'ietf' URN namespace for registered protocol items. The 'ietf' URN namespace is defined in RFC 2648 as a root for persistent URIs that refer to IETF- defined resources. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="73"/>
          <seriesInfo name="RFC" value="3553"/>
          <seriesInfo name="DOI" value="10.17487/RFC3553"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="JSO7">
          <front>
            <title>JSON Schema: A Media Type for Describing JSON Documents</title>
            <author fullname="Austin Wright" initials="A." surname="Wright">
         </author>
            <author fullname="Henry Andrews" initials="H." surname="Andrews">
              <organization>Cloudflare, Inc.</organization>
            </author>
            <date day="19" month="March" year="2018"/>
            <abstract>
              <t>   JSON Schema defines the media type "application/schema+json", a JSON-
   based format for describing the structure of JSON data.  JSON Schema
   asserts what a JSON document must look like, ways to extract
   information from it, and how to interact with it.  The "application/
   schema-instance+json" media type provides additional feature-rich
   integration with "application/schema+json" beyond what can be offered
   for "application/json" documents.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-handrews-json-schema-01"/>
          <annotation>This is the base specification for json-schema.org "draft 7".</annotation>
        </reference>
        <reference anchor="JSO7V">
          <front>
            <title>JSON Schema Validation: A Vocabulary for Structural Validation of JSON</title>
            <author fullname="Austin Wright" initials="A." surname="Wright">
         </author>
            <author fullname="Henry Andrews" initials="H." surname="Andrews">
              <organization>Cloudflare, Inc.</organization>
            </author>
            <author fullname="Geraint Luff" initials="G." surname="Luff">
         </author>
            <date day="19" month="March" year="2018"/>
            <abstract>
              <t>   JSON Schema (application/schema+json) has several purposes, one of
   which is JSON instance validation.  This document specifies a
   vocabulary for JSON Schema to describe the meaning of JSON documents,
   provide hints for user interfaces working with JSON data, and to make
   assertions about what a valid document must look like.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-handrews-json-schema-validation-01"/>
          <annotation>This is the validation specification for json-schema.org "draft 7".</annotation>
        </reference>
        <reference anchor="JSO4">
          <front>
            <title>JSON Schema: core definitions and terminology</title>
            <author fullname="Francis Galiegue" initials="F." surname="Galiegue">
         </author>
            <author fullname="Kris Zyp" initials="K." surname="Zyp">
              <organization>SitePen (USA)</organization>
            </author>
            <author fullname="Gary Court" initials="G." surname="Court">
         </author>
            <date day="31" month="January" year="2013"/>
            <abstract>
              <t>   JSON Schema defines the media type "application/schema+json", a JSON
   based format for defining the structure of JSON data.  JSON Schema
   provides a contract for what JSON data is required for a given
   application and how to interact with it.  JSON Schema is intended to
   define validation, documentation, hyperlink navigation, and
   interaction control of JSON data.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-zyp-json-schema-04"/>
          <annotation>This is the base specification for json-schema.org "draft 4".</annotation>
        </reference>
        <reference anchor="JSO4V">
          <front>
            <title>JSON Schema: interactive and non interactive validation</title>
            <author fullname="Kris Zyp" initials="K." surname="Zyp">
              <organization>SitePen (USA)</organization>
            </author>
            <author fullname="Gary Court" initials="G." surname="Court">
         </author>
            <date day="31" month="January" year="2013"/>
            <abstract>
              <t>   JSON Schema (application/schema+json) has several purposes, one of
   which is instance validation.  The validation process may be
   interactive or non interactive.  For instance, applications may use
   JSON Schema to build a user interface enabling interactive content
   generation in addition to user input checking, or validate data
   retrieved from various sources.  This specification describes schema
   keywords dedicated to validation purposes.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-fge-json-schema-validation-00"/>
          <annotation>This is the validation specification for json-schema.org "draft 4".</annotation>
        </reference>
        <reference anchor="I-D.irtf-t2trg-rest-iot">
          <front>
            <title>Guidance on RESTful Design for Internet of Things Systems</title>
            <author fullname="Ari Keränen" initials="A." surname="Keränen">
              <organization>Ericsson</organization>
            </author>
            <author fullname="Matthias Kovatsch" initials="M." surname="Kovatsch">
              <organization>Siemens</organization>
            </author>
            <author fullname="Klaus Hartke" initials="K." surname="Hartke">
         </author>
            <date day="25" month="July" year="2023"/>
            <abstract>
              <t>   This document gives guidance for designing Internet of Things (IoT)
   systems that follow the principles of the Representational State
   Transfer (REST) architectural style.  This document is a product of
   the IRTF Thing-to-Thing Research Group (T2TRG).

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-irtf-t2trg-rest-iot-12"/>
        </reference>
        <reference anchor="ZCL">
          <front>
            <title>The ZigBee Cluster Library</title>
            <author>
              <organization/>
            </author>
            <date year="2008"/>
          </front>
          <seriesInfo name="Zigbee Wireless Networking" value="pp. 239-271"/>
          <seriesInfo name="DOI" value="10.1016/b978-0-7506-8597-9.00006-9"/>
          <refcontent>Elsevier</refcontent>
        </reference>
        <reference anchor="OMA" target="http://www.openmobilealliance.org/wp/omna/lwm2m/lwm2mregistry.html">
          <front>
            <title>OMA LightweightM2M (LwM2M) Object and Resource Registry</title>
            <author>
              <organization/>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="OCF" target="https://openconnectivity.org/specs/OCF_Resource_Type_Specification.pdf">
          <front>
            <title>OCF Resource Type Specification</title>
            <author>
              <organization/>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="RFC8576">
          <front>
            <title>Internet of Things (IoT) Security: State of the Art and Challenges</title>
            <author fullname="O. Garcia-Morchon" initials="O." surname="Garcia-Morchon"/>
            <author fullname="S. Kumar" initials="S." surname="Kumar"/>
            <author fullname="M. Sethi" initials="M." surname="Sethi"/>
            <date month="April" year="2019"/>
            <abstract>
              <t>The Internet of Things (IoT) concept refers to the usage of standard Internet protocols to allow for human-to-thing and thing-to-thing communication. The security needs for IoT systems are well recognized, and many standardization steps to provide security have been taken -- for example, the specification of the Constrained Application Protocol (CoAP) secured with Datagram Transport Layer Security (DTLS). However, security challenges still exist, not only because there are some use cases that lack a suitable solution, but also because many IoT devices and systems have been designed and deployed with very limited security capabilities. In this document, we first discuss the various stages in the lifecycle of a thing. Next, we document the security threats to a thing and the challenges that one might face to protect against these threats. Lastly, we discuss the next steps needed to facilitate the deployment of secure IoT systems. This document can be used by implementers and authors of IoT specifications as a reference for details about security considerations while documenting their specific security challenges, threat models, and mitigations.</t>
              <t>This document is a product of the IRTF Thing-to-Thing Research Group (T2TRG).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8576"/>
          <seriesInfo name="DOI" value="10.17487/RFC8576"/>
        </reference>
        <reference anchor="ECMA-262" target="https://www.ecma-international.org/wp-content/uploads/ECMA-262.pdf">
          <front>
            <title>ECMAScript 2020 Language Specification</title>
            <author>
              <organization>Ecma International</organization>
            </author>
            <date year="2020" month="June"/>
          </front>
          <seriesInfo name="ECMA" value="Standard ECMA-262, 11th Edition"/>
        </reference>
        <reference anchor="CamelCase" target="http://wiki.c2.com/?CamelCase">
          <front>
            <title>Camel Case</title>
            <author>
              <organization/>
            </author>
            <date year="2014" month="December"/>
          </front>
        </reference>
        <reference anchor="KebabCase" target="http://wiki.c2.com/?KebabCase">
          <front>
            <title>Kebab Case</title>
            <author>
              <organization/>
            </author>
            <date year="2014" month="August"/>
          </front>
        </reference>
        <reference anchor="I-D.bormann-asdf-sdftype-link">
          <front>
            <title>An sdfType for Links</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <date day="3" month="June" year="2023"/>
            <abstract>
              <t>   This document defines and registers an sdfType "link" for the
   Semantic Definition Format (SDF) for Data and Interactions of Things
   (draft-ietf-asdf-sdf).

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-bormann-asdf-sdftype-link-01"/>
        </reference>
        <reference anchor="I-D.bormann-asdf-sdf-mapping">
          <front>
            <title>Semantic Definition Format (SDF): Mapping files</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <author fullname="Jan Romann" initials="J." surname="Romann">
              <organization>Universität Bremen</organization>
            </author>
            <date day="26" month="April" year="2023"/>
            <abstract>
              <t>   The Semantic Definition Format (SDF) is a format for domain experts
   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
   use in the development of the One Data Model liaison organization
   (OneDM) definitions.  Tools convert this format to database formats
   and other serializations as needed.

   An SDF specification often needs to be augmented by additional
   information that is specific to its use in a particular ecosystem or
   application.  SDF mapping files provide a mechanism to represent this
   augmentation.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-bormann-asdf-sdf-mapping-02"/>
        </reference>
        <reference anchor="I-D.bormann-t2trg-deref-id-01">
          <front>
            <title>The "dereferenceable identifier" pattern</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <date day="9" month="May" year="2023"/>
            <abstract>
              <t>   In a protocol or an application environment, it is often important to
   be able to create unambiguous identifiers for some meaning (concept
   or some entity).

   Due to the simplicity of creating URIs, these have become popular for
   this purpose.  Beyond the purpose of identifiers to be uniquely
   associated with a meaning, some of these URIs are in principle
   _dereferenceable_, so something can be placed that can be retrieved
   when encountering such a URI.

   The present -00 version is a stub to draw some attention to the
   opportunity that this pattern would benefit from a common
   description, documenting its benefits and pitfalls, and some
   mitigations for the latter.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-bormann-t2trg-deref-id-01"/>
        </reference>
        <reference anchor="RFC9485">
          <front>
            <title>I-Regexp: An Interoperable Regular Expression Format</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="T. Bray" initials="T." surname="Bray"/>
            <date month="October" year="2023"/>
            <abstract>
              <t>This document specifies I-Regexp, a flavor of regular expression that is limited in scope with the goal of interoperation across many different regular expression libraries.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9485"/>
          <seriesInfo name="DOI" value="10.17487/RFC9485"/>
        </reference>
      </references>
    </references>
    <?line 1833?>

<section anchor="syntax">
      <name>Formal Syntax of SDF</name>
      <t>This appendix describes the syntax of SDF using CDDL <xref target="RFC8610"/>.</t>
      <t>This appendix shows the framework syntax only, i.e., a syntax with liberal extension points.
Since this syntax is nearly useless in finding typos in an SDF
specification, a second syntax, the validation syntax, is defined that
does not include the extension points.
The validation syntax can be generated from the framework syntax by
leaving out all lines containing the string <tt>EXTENSION-POINT</tt>; as this
is trivial, the result is not shown here.</t>
      <t>This appendix makes use of CDDL "features" as defined in <xref section="4" sectionFormat="of" target="RFC9165"/>.
Features whose names end in "-ext" indicate extension points for
further evolution.</t>
      <sourcecode type="cddl"><![CDATA[
start = sdf-syntax

sdf-syntax = {
 ; info will be required in most process policies
 ? info: sdfinfo
 ? namespace: named<text>
 ? defaultNamespace: text
 ; Thing is a composition of objects that work together in some way
 ? sdfThing: named<thingqualities>
 ; Object is a set of Properties, Actions, and Events that together
 ; perform a particular function
 ? sdfObject: named<objectqualities>
 ; Includes Properties, Actions, and Events as well as sdfData
 paedataqualities
 EXTENSION-POINT<"top-ext">
}

sdfinfo = {
 ? title: text
 ? description: text
 ? version: text
 ? copyright: text
 ? license: text
 ? modified: modified-date-time
 ? features: [
               * (any .feature "feature-name") ; EXTENSION-POINT
             ]
 optional-comment
 EXTENSION-POINT<"info-ext">
}

; Shortcut for a map that gives names to instances of X
; (has keys of type text and values of type X)
named<X> = { * text => X }

; EXTENSION-POINT is only used in framework syntax
EXTENSION-POINT<f> = ( * (quality-name .feature f) => any )
quality-name = text .regexp "([a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*"

sdf-pointer = global / same-object / true
global = text .regexp ".*[:#].*" ; rough CURIE or JSON Pointer syntax
same-object = referenceable-name
referenceable-name = text .regexp "[^:#]*"

; per se no point in having an empty list, but used for sdfRequired
; in odmobject-multiple_axis_joystick.sdf.json
pointer-list = [* sdf-pointer]

optional-comment = (
 ? $comment: text       ; source code comments only, no semantics
)

commonqualities = (
 ? description: text    ; long text (no constraints)
 ? label: text          ; short text (no constraints); default to key
 optional-comment
 ? sdfRef: sdf-pointer
 ; applies to qualities of properties, of data:
 ? sdfRequired: pointer-list
)

arraydefinitionqualities = (
 ? "minItems" => uint
 ? "maxItems" => uint
)

paedataqualities = (
 ; Property represents the state of an instance of an object
 ? sdfProperty: named<propertyqualities>
 ; Action invokes an application layer verb associated with an object
 ? sdfAction: named<actionqualities>
 ; Event represents an occurrence of event associated with an object
 ? sdfEvent: named<eventqualities>
 ; Data represents a piece of information that can be the state of a
 ; property or a parameter to an action or a signal in an event
 ? sdfData: named<dataqualities>

)

; for building hierarchy
thingqualities = {
 commonqualities
 ? sdfObject: named<objectqualities>
 ? sdfThing: named<thingqualities>
 paedataqualities
 arraydefinitionqualities
 EXTENSION-POINT<"thing-ext">
}

; for single objects, or for arrays of objects
objectqualities = {
 commonqualities
 paedataqualities
 arraydefinitionqualities
 EXTENSION-POINT<"object-ext">
}

parameter-list = dataqualities

actionqualities = {
 commonqualities
 ? sdfInputData: parameter-list   ; sdfRequiredInputData applies here
 ? sdfOutputData: parameter-list  ; sdfRequired applies here
 ; zero or more named data type definitions that might be used above
 ? sdfData: named<dataqualities>
 EXTENSION-POINT<"action-ext">
}

eventqualities = {
 commonqualities
 ? sdfOutputData: parameter-list  ; sdfRequired applies here
 ; zero or more named data type definitions that might be used above
 ? sdfData: named<dataqualities>
 EXTENSION-POINT<"event-ext">
}

sdftype-name = text .regexp "[a-z][-a-z0-9]*"       ; EXTENSION-POINT

dataqualities = {
 commonqualities
 jsonschema
 ? "unit" => text
 ? nullable: bool
 ? "sdfType" => "byte-string" / "unix-time"
            / (sdftype-name .feature "sdftype-ext") ; EXTENSION-POINT
 ? contentFormat: text
 EXTENSION-POINT<"data-ext">
}

propertyqualities = {
 ? observable: bool
 ? readable: bool
 ? writable: bool
 ~dataqualities
}

allowed-types = number / text / bool / null
              / [* number] / [* text] / [* bool]
              / {* text => any}
              / (any .feature "allowed-ext")        ; EXTENSION-POINT

compound-type = (
  "type" => "object"
  ? required: [+text]
  ? properties: named<dataqualities>
)

optional-choice = (
 ? (("sdfChoice" => named<dataqualities>)
  // ("enum" => [+ text])) ; limited to text strings
)

jsonschema = (
 ? (("type" => "number" / "string" / "boolean" / "integer" / "array")
    // compound-type
    // (type: text .feature "type-ext")             ; EXTENSION-POINT
   )
 ; if present, all other qualities apply to all choices:
 optional-choice
 ; the next three should validate against type:
 ? const: allowed-types
 ? default: allowed-types
 ; number/integer constraints
 ? minimum: number
 ? maximum: number
 ? exclusiveMinimum: number
 ? exclusiveMaximum: number
 ? multipleOf: number                   ; ISSUE: Do we need this?
 ; text string constraints
 ? minLength: uint
 ? maxLength: uint
 ? pattern: text                ; regexp
 ? format: "date-time" / "date" / "time"
           / "uri" / "uri-reference" / "uuid"
           / (text .feature "format-ext")           ; EXTENSION-POINT
 ; array constraints
 ? minItems: uint
 ? maxItems: uint
 ? uniqueItems: bool
 ? items: jso-items
)

jso-items = {
     ? sdfRef: sdf-pointer ; import limited to subset allowed here...
     ? description: text   ; long text (no constraints)
     optional-comment
     ; leave commonqualities out for non-complex data types,
     ; but need the above three.
     ; no further nesting: no "array"
     ? ((type: "number" / "string" / "boolean" / "integer")
        // compound-type
        // (type: text .feature "itemtype-ext")     ; EXTENSION-POINT
       )
     ; if present, all other qualities apply to all choices
     optional-choice
     ; jso subset
     ? minimum: number
     ? maximum: number
     ? format: text
     ? minLength: uint
     ? maxLength: uint
     EXTENSION-POINT<"items-ext">
   }

modified-date-time = text .abnf modified-dt-abnf
modified-dt-abnf = "modified-dt" .det rfc3339z

; RFC 3339 sans time-numoffset, slightly condensed
rfc3339z = '
   date-fullyear   = 4DIGIT
   date-month      = 2DIGIT  ; 01-12
   date-mday       = 2DIGIT  ; 01-28, 01-29, 01-30, 01-31 based on
                             ; month/year
   time-hour       = 2DIGIT  ; 00-23
   time-minute     = 2DIGIT  ; 00-59
   time-second     = 2DIGIT  ; 00-58, 00-59, 00-60 based on leap sec
                             ; rules
   time-secfrac    = "." 1*DIGIT
   DIGIT           =  %x30-39 ; 0-9

   partial-time    = time-hour ":" time-minute ":" time-second
                     [time-secfrac]
   full-date       = date-fullyear "-" date-month "-" date-mday

   modified-dt     = full-date ["T" partial-time "Z"]
'
]]></sourcecode>
    </section>
    <section anchor="jso">
      <name>json-schema.org Rendition of SDF Syntax</name>
      <t>This appendix describes the syntax of SDF defined in <xref target="syntax"/>, but
using a version of the description techniques advertised on
json-schema.org <xref target="JSO7"/> <xref target="JSO7V"/>.</t>
      <t>The appendix shows both the validation and the framework syntax.
Since most of the lines are the same between these two files, those lines are shown only once, with a leading space, in the form of a unified diff.
Lines leading with a <tt>-</tt> are part of the validation syntax, and lines leading with a <tt>+</tt> are part of the framework syntax.</t>
      <sourcecode type="jso.json"><![CDATA[
 {
-  "title": "sdf-validation.cddl -- Generated: 2023-11-04T15:25:34Z",
+  "title": "sdf-framework.cddl -- Generated: 2023-11-04T15:25:46Z",
   "$schema": "http://json-schema.org/draft-07/schema#",
   "$ref": "#/definitions/sdf-syntax",
   "definitions": {
     "sdf-syntax": {
       "type": "object",
       "properties": {
         "info": {
           "$ref": "#/definitions/sdfinfo"
         },
         "namespace": {
           "type": "object",
           "additionalProperties": {
             "type": "string"
           }
         },
         "defaultNamespace": {
           "type": "string"
         },
         "sdfThing": {
           "type": "object",
           "additionalProperties": {
             "$ref": "#/definitions/thingqualities"
           }
         },
         "sdfObject": {
           "type": "object",
           "additionalProperties": {
             "$ref": "#/definitions/objectqualities"
           }
         },
         "sdfProperty": {
           "$ref": "#/definitions/sdfProperty-"
         },
         "sdfAction": {
           "$ref": "#/definitions/sdfAction-"
         },
         "sdfEvent": {
           "$ref": "#/definitions/sdfEvent-"
         },
         "sdfData": {
           "$ref": "#/definitions/sdfData-sdfChoice-properties-"
         }
       },
+      "patternProperties": {
+        "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {
+        }
+      },
       "additionalProperties": false
     },
     "sdfinfo": {
       "type": "object",
       "properties": {
         "title": {
           "type": "string"
         },
         "description": {
           "type": "string"
         },
         "version": {
           "type": "string"
         },
         "copyright": {
           "type": "string"
         },
         "license": {
           "type": "string"
         },
         "modified": {
           "$ref": "#/definitions/modified-date-time"
         },
         "features": {
-          "type": "array",
-          "maxItems": 0
+          "type": "array"
         },
         "$comment": {
           "type": "string"
         }
       },
+      "patternProperties": {
+        "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {
+        }
+      },
       "additionalProperties": false
     },
     "modified-date-time": {
       "type": "string"
     },
     "thingqualities": {
       "type": "object",
       "properties": {
         "description": {
           "type": "string"
         },
         "label": {
           "type": "string"
         },
         "$comment": {
           "type": "string"
         },
         "sdfRef": {
           "$ref": "#/definitions/sdf-pointer"
         },
         "sdfRequired": {
           "$ref": "#/definitions/pointer-list"
         },
         "sdfObject": {
           "type": "object",
           "additionalProperties": {
             "$ref": "#/definitions/objectqualities"
           }
         },
         "sdfThing": {
           "type": "object",
           "additionalProperties": {
             "$ref": "#/definitions/thingqualities"
           }
         },
         "sdfProperty": {
           "$ref": "#/definitions/sdfProperty-"
         },
         "sdfAction": {
           "$ref": "#/definitions/sdfAction-"
         },
         "sdfEvent": {
           "$ref": "#/definitions/sdfEvent-"
         },
         "sdfData": {
           "$ref": "#/definitions/sdfData-sdfChoice-properties-"
         },
         "minItems": {
           "$ref": "#/definitions/uint"
         },
         "maxItems": {
           "$ref": "#/definitions/uint"
         }
       },
+      "patternProperties": {
+        "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {
+        }
+      },
       "additionalProperties": false
     },
     "sdf-pointer": {
       "anyOf": [
         {
           "$ref": "#/definitions/global"
         },
         {
           "$ref": "#/definitions/same-object"
         },
         {
           "$ref": "#/definitions/true"
         }
       ]
     },
     "global": {
       "type": "string",
       "pattern": "^[^\\n\\r]*[:#][^\\n\\r]*$"
     },
     "same-object": {
       "$ref": "#/definitions/referenceable-name"
     },
     "referenceable-name": {
       "type": "string",
       "pattern": "^[^:#]*$"
     },
     "true": {
       "type": "boolean",
       "const": true
     },
     "pointer-list": {
       "type": "array",
       "items": {
         "$ref": "#/definitions/sdf-pointer"
       }
     },
     "objectqualities": {
       "type": "object",
       "properties": {
         "description": {
           "type": "string"
         },
         "label": {
           "type": "string"
         },
         "$comment": {
           "type": "string"
         },
         "sdfRef": {
           "$ref": "#/definitions/sdf-pointer"
         },
         "sdfRequired": {
           "$ref": "#/definitions/pointer-list"
         },
         "sdfProperty": {
           "$ref": "#/definitions/sdfProperty-"
         },
         "sdfAction": {
           "$ref": "#/definitions/sdfAction-"
         },
         "sdfEvent": {
           "$ref": "#/definitions/sdfEvent-"
         },
         "sdfData": {
           "$ref": "#/definitions/sdfData-sdfChoice-properties-"
         },
         "minItems": {
           "$ref": "#/definitions/uint"
         },
         "maxItems": {
           "$ref": "#/definitions/uint"
         }
       },
+      "patternProperties": {
+        "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {
+        }
+      },
       "additionalProperties": false
     },
     "propertyqualities": {
       "anyOf": [
         {
           "type": "object",
+          "patternProperties": {
+            "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {
+            }
+          },
           "properties": {
             "type": {
               "$ref": "#/definitions/type-"
             },
             "sdfChoice": {
               "$ref": "#/definitions/sdfData-sdfChoice-properties-"
             },
             "observable": {
               "type": "boolean"
             },
             "readable": {
               "type": "boolean"
             },
             "writable": {
               "type": "boolean"
             },
             "description": {
               "type": "string"
             },
             "label": {
               "type": "string"
             },
             "$comment": {
               "type": "string"
             },
             "sdfRef": {
               "$ref": "#/definitions/sdf-pointer"
             },
             "sdfRequired": {
               "$ref": "#/definitions/pointer-list"
             },
             "const": {
               "$ref": "#/definitions/allowed-types"
             },
             "default": {
               "$ref": "#/definitions/allowed-types"
             },
             "minimum": {
               "type": "number"
             },
             "maximum": {
               "type": "number"
             },
             "exclusiveMinimum": {
               "type": "number"
             },
             "exclusiveMaximum": {
               "type": "number"
             },
             "multipleOf": {
               "type": "number"
             },
             "minLength": {
               "$ref": "#/definitions/uint"
             },
             "maxLength": {
               "$ref": "#/definitions/uint"
             },
             "pattern": {
               "type": "string"
             },
             "format": {
               "$ref": "#/definitions/format-"
             },
             "minItems": {
               "$ref": "#/definitions/uint"
             },
             "maxItems": {
               "$ref": "#/definitions/uint"
             },
             "uniqueItems": {
               "type": "boolean"
             },
             "items": {
               "$ref": "#/definitions/jso-items"
             },
             "unit": {
               "type": "string"
             },
             "nullable": {
               "type": "boolean"
             },
             "sdfType": {
               "$ref": "#/definitions/sdfType-"
             },
             "contentFormat": {
               "type": "string"
             }
           },
           "additionalProperties": false
         },
         {
           "type": "object",
+          "patternProperties": {
+            "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {
+            }
+          },
+          "properties": {
+            "type": {
+              "type": "string",
+              "const": "object"
+            },
+            "required": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              },
+              "minItems": 1
+            },
+            "properties": {
+              "$ref": "#/definitions/sdfData-sdfChoice-properties-"
+            },
+            "sdfChoice": {
+              "$ref": "#/definitions/sdfData-sdfChoice-properties-"
+            },
+            "observable": {
+              "type": "boolean"
+            },
+            "readable": {
+              "type": "boolean"
+            },
+            "writable": {
+              "type": "boolean"
+            },
+            "description": {
+              "type": "string"
+            },
+            "label": {
+              "type": "string"
+            },
+            "$comment": {
+              "type": "string"
+            },
+            "sdfRef": {
+              "$ref": "#/definitions/sdf-pointer"
+            },
+            "sdfRequired": {
+              "$ref": "#/definitions/pointer-list"
+            },
+            "const": {
+              "$ref": "#/definitions/allowed-types"
+            },
+            "default": {
+              "$ref": "#/definitions/allowed-types"
+            },
+            "minimum": {
+              "type": "number"
+            },
+            "maximum": {
+              "type": "number"
+            },
+            "exclusiveMinimum": {
+              "type": "number"
+            },
+            "exclusiveMaximum": {
+              "type": "number"
+            },
+            "multipleOf": {
+              "type": "number"
+            },
+            "minLength": {
+              "$ref": "#/definitions/uint"
+            },
+            "maxLength": {
+              "$ref": "#/definitions/uint"
+            },
+            "pattern": {
+              "type": "string"
+            },
+            "format": {
+              "$ref": "#/definitions/format-"
+            },
+            "minItems": {
+              "$ref": "#/definitions/uint"
+            },
+            "maxItems": {
+              "$ref": "#/definitions/uint"
+            },
+            "uniqueItems": {
+              "type": "boolean"
+            },
+            "items": {
+              "$ref": "#/definitions/jso-items"
+            },
+            "unit": {
+              "type": "string"
+            },
+            "nullable": {
+              "type": "boolean"
+            },
+            "sdfType": {
+              "$ref": "#/definitions/sdfType-"
+            },
+            "contentFormat": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        {
+          "type": "object",
+          "patternProperties": {
+            "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {
+            }
+          },
+          "properties": {
+            "type": {
+              "type": "string"
+            },
+            "sdfChoice": {
+              "$ref": "#/definitions/sdfData-sdfChoice-properties-"
+            },
+            "observable": {
+              "type": "boolean"
+            },
+            "readable": {
+              "type": "boolean"
+            },
+            "writable": {
+              "type": "boolean"
+            },
+            "description": {
+              "type": "string"
+            },
+            "label": {
+              "type": "string"
+            },
+            "$comment": {
+              "type": "string"
+            },
+            "sdfRef": {
+              "$ref": "#/definitions/sdf-pointer"
+            },
+            "sdfRequired": {
+              "$ref": "#/definitions/pointer-list"
+            },
+            "const": {
+              "$ref": "#/definitions/allowed-types"
+            },
+            "default": {
+              "$ref": "#/definitions/allowed-types"
+            },
+            "minimum": {
+              "type": "number"
+            },
+            "maximum": {
+              "type": "number"
+            },
+            "exclusiveMinimum": {
+              "type": "number"
+            },
+            "exclusiveMaximum": {
+              "type": "number"
+            },
+            "multipleOf": {
+              "type": "number"
+            },
+            "minLength": {
+              "$ref": "#/definitions/uint"
+            },
+            "maxLength": {
+              "$ref": "#/definitions/uint"
+            },
+            "pattern": {
+              "type": "string"
+            },
+            "format": {
+              "$ref": "#/definitions/format-"
+            },
+            "minItems": {
+              "$ref": "#/definitions/uint"
+            },
+            "maxItems": {
+              "$ref": "#/definitions/uint"
+            },
+            "uniqueItems": {
+              "type": "boolean"
+            },
+            "items": {
+              "$ref": "#/definitions/jso-items"
+            },
+            "unit": {
+              "type": "string"
+            },
+            "nullable": {
+              "type": "boolean"
+            },
+            "sdfType": {
+              "$ref": "#/definitions/sdfType-"
+            },
+            "contentFormat": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        {
+          "type": "object",
+          "patternProperties": {
+            "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {
+            }
+          },
+          "properties": {
+            "type": {
+              "$ref": "#/definitions/type-"
+            },
+            "enum": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              },
+              "minItems": 1
+            },
+            "observable": {
+              "type": "boolean"
+            },
+            "readable": {
+              "type": "boolean"
+            },
+            "writable": {
+              "type": "boolean"
+            },
+            "description": {
+              "type": "string"
+            },
+            "label": {
+              "type": "string"
+            },
+            "$comment": {
+              "type": "string"
+            },
+            "sdfRef": {
+              "$ref": "#/definitions/sdf-pointer"
+            },
+            "sdfRequired": {
+              "$ref": "#/definitions/pointer-list"
+            },
+            "const": {
+              "$ref": "#/definitions/allowed-types"
+            },
+            "default": {
+              "$ref": "#/definitions/allowed-types"
+            },
+            "minimum": {
+              "type": "number"
+            },
+            "maximum": {
+              "type": "number"
+            },
+            "exclusiveMinimum": {
+              "type": "number"
+            },
+            "exclusiveMaximum": {
+              "type": "number"
+            },
+            "multipleOf": {
+              "type": "number"
+            },
+            "minLength": {
+              "$ref": "#/definitions/uint"
+            },
+            "maxLength": {
+              "$ref": "#/definitions/uint"
+            },
+            "pattern": {
+              "type": "string"
+            },
+            "format": {
+              "$ref": "#/definitions/format-"
+            },
+            "minItems": {
+              "$ref": "#/definitions/uint"
+            },
+            "maxItems": {
+              "$ref": "#/definitions/uint"
+            },
+            "uniqueItems": {
+              "type": "boolean"
+            },
+            "items": {
+              "$ref": "#/definitions/jso-items"
+            },
+            "unit": {
+              "type": "string"
+            },
+            "nullable": {
+              "type": "boolean"
+            },
+            "sdfType": {
+              "$ref": "#/definitions/sdfType-"
+            },
+            "contentFormat": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        {
+          "type": "object",
+          "patternProperties": {
+            "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {
+            }
+          },
+          "properties": {
+            "type": {
+              "type": "string",
+              "const": "object"
+            },
+            "required": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              },
+              "minItems": 1
+            },
+            "properties": {
+              "$ref": "#/definitions/sdfData-sdfChoice-properties-"
+            },
+            "enum": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              },
+              "minItems": 1
+            },
+            "observable": {
+              "type": "boolean"
+            },
+            "readable": {
+              "type": "boolean"
+            },
+            "writable": {
+              "type": "boolean"
+            },
+            "description": {
+              "type": "string"
+            },
+            "label": {
+              "type": "string"
+            },
+            "$comment": {
+              "type": "string"
+            },
+            "sdfRef": {
+              "$ref": "#/definitions/sdf-pointer"
+            },
+            "sdfRequired": {
+              "$ref": "#/definitions/pointer-list"
+            },
+            "const": {
+              "$ref": "#/definitions/allowed-types"
+            },
+            "default": {
+              "$ref": "#/definitions/allowed-types"
+            },
+            "minimum": {
+              "type": "number"
+            },
+            "maximum": {
+              "type": "number"
+            },
+            "exclusiveMinimum": {
+              "type": "number"
+            },
+            "exclusiveMaximum": {
+              "type": "number"
+            },
+            "multipleOf": {
+              "type": "number"
+            },
+            "minLength": {
+              "$ref": "#/definitions/uint"
+            },
+            "maxLength": {
+              "$ref": "#/definitions/uint"
+            },
+            "pattern": {
+              "type": "string"
+            },
+            "format": {
+              "$ref": "#/definitions/format-"
+            },
+            "minItems": {
+              "$ref": "#/definitions/uint"
+            },
+            "maxItems": {
+              "$ref": "#/definitions/uint"
+            },
+            "uniqueItems": {
+              "type": "boolean"
+            },
+            "items": {
+              "$ref": "#/definitions/jso-items"
+            },
+            "unit": {
+              "type": "string"
+            },
+            "nullable": {
+              "type": "boolean"
+            },
+            "sdfType": {
+              "$ref": "#/definitions/sdfType-"
+            },
+            "contentFormat": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        {
+          "type": "object",
+          "patternProperties": {
+            "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {
+            }
+          },
           "properties": {
             "type": {
-              "type": "string",
-              "const": "object"
+              "type": "string"
             },
-            "required": {
+            "enum": {
               "type": "array",
               "items": {
                 "type": "string"
               },
               "minItems": 1
             },
-            "properties": {
-              "$ref": "#/definitions/sdfData-sdfChoice-properties-"
-            },
-            "sdfChoice": {
-              "$ref": "#/definitions/sdfData-sdfChoice-properties-"
-            },
             "observable": {
               "type": "boolean"
             },
             "readable": {
               "type": "boolean"
             },
             "writable": {
               "type": "boolean"
             },
             "description": {
               "type": "string"
             },
             "label": {
               "type": "string"
             },
             "$comment": {
               "type": "string"
             },
             "sdfRef": {
               "$ref": "#/definitions/sdf-pointer"
             },
             "sdfRequired": {
               "$ref": "#/definitions/pointer-list"
             },
             "const": {
               "$ref": "#/definitions/allowed-types"
             },
             "default": {
               "$ref": "#/definitions/allowed-types"
             },
             "minimum": {
               "type": "number"
             },
             "maximum": {
               "type": "number"
             },
             "exclusiveMinimum": {
               "type": "number"
             },
             "exclusiveMaximum": {
               "type": "number"
             },
             "multipleOf": {
               "type": "number"
             },
             "minLength": {
               "$ref": "#/definitions/uint"
             },
             "maxLength": {
               "$ref": "#/definitions/uint"
             },
             "pattern": {
               "type": "string"
             },
             "format": {
               "$ref": "#/definitions/format-"
             },
             "minItems": {
               "$ref": "#/definitions/uint"
             },
             "maxItems": {
               "$ref": "#/definitions/uint"
             },
             "uniqueItems": {
               "type": "boolean"
             },
             "items": {
               "$ref": "#/definitions/jso-items"
             },
             "unit": {
               "type": "string"
             },
             "nullable": {
               "type": "boolean"
             },
             "sdfType": {
               "$ref": "#/definitions/sdfType-"
             },
             "contentFormat": {
               "type": "string"
             }
           },
           "additionalProperties": false
-        },
+        }
+      ]
+    },
+    "dataqualities": {
+      "anyOf": [
         {
           "type": "object",
+          "patternProperties": {
+            "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {
+            }
+          },
           "properties": {
             "type": {
               "$ref": "#/definitions/type-"
             },
-            "enum": {
-              "type": "array",
-              "items": {
-                "type": "string"
-              },
-              "minItems": 1
-            },
-            "observable": {
-              "type": "boolean"
-            },
-            "readable": {
-              "type": "boolean"
-            },
-            "writable": {
-              "type": "boolean"
+            "sdfChoice": {
+              "$ref": "#/definitions/sdfData-sdfChoice-properties-"
             },
             "description": {
               "type": "string"
             },
             "label": {
               "type": "string"
             },
             "$comment": {
               "type": "string"
             },
             "sdfRef": {
               "$ref": "#/definitions/sdf-pointer"
             },
             "sdfRequired": {
               "$ref": "#/definitions/pointer-list"
             },
             "const": {
               "$ref": "#/definitions/allowed-types"
             },
             "default": {
               "$ref": "#/definitions/allowed-types"
             },
             "minimum": {
               "type": "number"
             },
             "maximum": {
               "type": "number"
             },
             "exclusiveMinimum": {
               "type": "number"
             },
             "exclusiveMaximum": {
               "type": "number"
             },
             "multipleOf": {
               "type": "number"
             },
             "minLength": {
               "$ref": "#/definitions/uint"
             },
             "maxLength": {
               "$ref": "#/definitions/uint"
             },
             "pattern": {
               "type": "string"
             },
             "format": {
               "$ref": "#/definitions/format-"
             },
             "minItems": {
               "$ref": "#/definitions/uint"
             },
             "maxItems": {
               "$ref": "#/definitions/uint"
             },
             "uniqueItems": {
               "type": "boolean"
             },
             "items": {
               "$ref": "#/definitions/jso-items"
             },
             "unit": {
               "type": "string"
             },
             "nullable": {
               "type": "boolean"
             },
             "sdfType": {
               "$ref": "#/definitions/sdfType-"
             },
             "contentFormat": {
               "type": "string"
             }
           },
           "additionalProperties": false
         },
         {
           "type": "object",
+          "patternProperties": {
+            "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {
+            }
+          },
           "properties": {
             "type": {
               "type": "string",
               "const": "object"
             },
             "required": {
               "type": "array",
               "items": {
                 "type": "string"
               },
               "minItems": 1
             },
             "properties": {
               "$ref": "#/definitions/sdfData-sdfChoice-properties-"
             },
-            "enum": {
-              "type": "array",
-              "items": {
-                "type": "string"
-              },
-              "minItems": 1
-            },
-            "observable": {
-              "type": "boolean"
-            },
-            "readable": {
-              "type": "boolean"
-            },
-            "writable": {
-              "type": "boolean"
+            "sdfChoice": {
+              "$ref": "#/definitions/sdfData-sdfChoice-properties-"
             },
             "description": {
               "type": "string"
             },
             "label": {
               "type": "string"
             },
             "$comment": {
               "type": "string"
             },
             "sdfRef": {
               "$ref": "#/definitions/sdf-pointer"
             },
             "sdfRequired": {
               "$ref": "#/definitions/pointer-list"
             },
             "const": {
               "$ref": "#/definitions/allowed-types"
             },
             "default": {
               "$ref": "#/definitions/allowed-types"
             },
             "minimum": {
               "type": "number"
             },
             "maximum": {
               "type": "number"
             },
             "exclusiveMinimum": {
               "type": "number"
             },
             "exclusiveMaximum": {
               "type": "number"
             },
             "multipleOf": {
               "type": "number"
             },
             "minLength": {
               "$ref": "#/definitions/uint"
             },
             "maxLength": {
               "$ref": "#/definitions/uint"
             },
             "pattern": {
               "type": "string"
             },
             "format": {
               "$ref": "#/definitions/format-"
             },
             "minItems": {
               "$ref": "#/definitions/uint"
             },
             "maxItems": {
               "$ref": "#/definitions/uint"
             },
             "uniqueItems": {
               "type": "boolean"
             },
             "items": {
               "$ref": "#/definitions/jso-items"
             },
             "unit": {
               "type": "string"
             },
             "nullable": {
               "type": "boolean"
             },
             "sdfType": {
               "$ref": "#/definitions/sdfType-"
             },
             "contentFormat": {
               "type": "string"
             }
           },
           "additionalProperties": false
-        }
-      ]
-    },
-    "dataqualities": {
-      "anyOf": [
+        },
         {
           "type": "object",
+          "patternProperties": {
+            "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {
+            }
+          },
           "properties": {
             "type": {
-              "$ref": "#/definitions/type-"
+              "type": "string"
             },
             "sdfChoice": {
               "$ref": "#/definitions/sdfData-sdfChoice-properties-"
             },
             "description": {
               "type": "string"
             },
             "label": {
               "type": "string"
             },
             "$comment": {
               "type": "string"
             },
             "sdfRef": {
               "$ref": "#/definitions/sdf-pointer"
             },
             "sdfRequired": {
               "$ref": "#/definitions/pointer-list"
             },
             "const": {
               "$ref": "#/definitions/allowed-types"
             },
             "default": {
               "$ref": "#/definitions/allowed-types"
             },
             "minimum": {
               "type": "number"
             },
             "maximum": {
               "type": "number"
             },
             "exclusiveMinimum": {
               "type": "number"
             },
             "exclusiveMaximum": {
               "type": "number"
             },
             "multipleOf": {
               "type": "number"
             },
             "minLength": {
               "$ref": "#/definitions/uint"
             },
             "maxLength": {
               "$ref": "#/definitions/uint"
             },
             "pattern": {
               "type": "string"
             },
             "format": {
               "$ref": "#/definitions/format-"
             },
             "minItems": {
               "$ref": "#/definitions/uint"
             },
             "maxItems": {
               "$ref": "#/definitions/uint"
             },
             "uniqueItems": {
               "type": "boolean"
             },
             "items": {
               "$ref": "#/definitions/jso-items"
             },
             "unit": {
               "type": "string"
             },
             "nullable": {
               "type": "boolean"
             },
             "sdfType": {
               "$ref": "#/definitions/sdfType-"
             },
             "contentFormat": {
               "type": "string"
             }
           },
           "additionalProperties": false
         },
         {
           "type": "object",
+          "patternProperties": {
+            "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {
+            }
+          },
           "properties": {
             "type": {
-              "type": "string",
-              "const": "object"
+              "$ref": "#/definitions/type-"
             },
-            "required": {
+            "enum": {
               "type": "array",
               "items": {
                 "type": "string"
               },
               "minItems": 1
             },
-            "properties": {
-              "$ref": "#/definitions/sdfData-sdfChoice-properties-"
-            },
-            "sdfChoice": {
-              "$ref": "#/definitions/sdfData-sdfChoice-properties-"
-            },
             "description": {
               "type": "string"
             },
             "label": {
               "type": "string"
             },
             "$comment": {
               "type": "string"
             },
             "sdfRef": {
               "$ref": "#/definitions/sdf-pointer"
             },
             "sdfRequired": {
               "$ref": "#/definitions/pointer-list"
             },
             "const": {
               "$ref": "#/definitions/allowed-types"
             },
             "default": {
               "$ref": "#/definitions/allowed-types"
             },
             "minimum": {
               "type": "number"
             },
             "maximum": {
               "type": "number"
             },
             "exclusiveMinimum": {
               "type": "number"
             },
             "exclusiveMaximum": {
               "type": "number"
             },
             "multipleOf": {
               "type": "number"
             },
             "minLength": {
               "$ref": "#/definitions/uint"
             },
             "maxLength": {
               "$ref": "#/definitions/uint"
             },
             "pattern": {
               "type": "string"
             },
             "format": {
               "$ref": "#/definitions/format-"
             },
             "minItems": {
               "$ref": "#/definitions/uint"
             },
             "maxItems": {
               "$ref": "#/definitions/uint"
             },
             "uniqueItems": {
               "type": "boolean"
             },
             "items": {
               "$ref": "#/definitions/jso-items"
             },
             "unit": {
               "type": "string"
             },
             "nullable": {
               "type": "boolean"
             },
             "sdfType": {
               "$ref": "#/definitions/sdfType-"
             },
             "contentFormat": {
               "type": "string"
             }
           },
           "additionalProperties": false
         },
         {
           "type": "object",
+          "patternProperties": {
+            "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {
+            }
+          },
           "properties": {
             "type": {
-              "$ref": "#/definitions/type-"
+              "type": "string",
+              "const": "object"
+            },
+            "required": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              },
+              "minItems": 1
+            },
+            "properties": {
+              "$ref": "#/definitions/sdfData-sdfChoice-properties-"
             },
             "enum": {
               "type": "array",
               "items": {
                 "type": "string"
               },
               "minItems": 1
             },
             "description": {
               "type": "string"
             },
             "label": {
               "type": "string"
             },
             "$comment": {
               "type": "string"
             },
             "sdfRef": {
               "$ref": "#/definitions/sdf-pointer"
             },
             "sdfRequired": {
               "$ref": "#/definitions/pointer-list"
             },
             "const": {
               "$ref": "#/definitions/allowed-types"
             },
             "default": {
               "$ref": "#/definitions/allowed-types"
             },
             "minimum": {
               "type": "number"
             },
             "maximum": {
               "type": "number"
             },
             "exclusiveMinimum": {
               "type": "number"
             },
             "exclusiveMaximum": {
               "type": "number"
             },
             "multipleOf": {
               "type": "number"
             },
             "minLength": {
               "$ref": "#/definitions/uint"
             },
             "maxLength": {
               "$ref": "#/definitions/uint"
             },
             "pattern": {
               "type": "string"
             },
             "format": {
               "$ref": "#/definitions/format-"
             },
             "minItems": {
               "$ref": "#/definitions/uint"
             },
             "maxItems": {
               "$ref": "#/definitions/uint"
             },
             "uniqueItems": {
               "type": "boolean"
             },
             "items": {
               "$ref": "#/definitions/jso-items"
             },
             "unit": {
               "type": "string"
             },
             "nullable": {
               "type": "boolean"
             },
             "sdfType": {
               "$ref": "#/definitions/sdfType-"
             },
             "contentFormat": {
               "type": "string"
             }
           },
           "additionalProperties": false
         },
         {
           "type": "object",
+          "patternProperties": {
+            "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {
+            }
+          },
           "properties": {
             "type": {
-              "type": "string",
-              "const": "object"
-            },
-            "required": {
-              "type": "array",
-              "items": {
-                "type": "string"
-              },
-              "minItems": 1
-            },
-            "properties": {
-              "$ref": "#/definitions/sdfData-sdfChoice-properties-"
+              "type": "string"
             },
             "enum": {
               "type": "array",
               "items": {
                 "type": "string"
               },
               "minItems": 1
             },
             "description": {
               "type": "string"
             },
             "label": {
               "type": "string"
             },
             "$comment": {
               "type": "string"
             },
             "sdfRef": {
               "$ref": "#/definitions/sdf-pointer"
             },
             "sdfRequired": {
               "$ref": "#/definitions/pointer-list"
             },
             "const": {
               "$ref": "#/definitions/allowed-types"
             },
             "default": {
               "$ref": "#/definitions/allowed-types"
             },
             "minimum": {
               "type": "number"
             },
             "maximum": {
               "type": "number"
             },
             "exclusiveMinimum": {
               "type": "number"
             },
             "exclusiveMaximum": {
               "type": "number"
             },
             "multipleOf": {
               "type": "number"
             },
             "minLength": {
               "$ref": "#/definitions/uint"
             },
             "maxLength": {
               "$ref": "#/definitions/uint"
             },
             "pattern": {
               "type": "string"
             },
             "format": {
               "$ref": "#/definitions/format-"
             },
             "minItems": {
               "$ref": "#/definitions/uint"
             },
             "maxItems": {
               "$ref": "#/definitions/uint"
             },
             "uniqueItems": {
               "type": "boolean"
             },
             "items": {
               "$ref": "#/definitions/jso-items"
             },
             "unit": {
               "type": "string"
             },
             "nullable": {
               "type": "boolean"
             },
             "sdfType": {
               "$ref": "#/definitions/sdfType-"
             },
             "contentFormat": {
               "type": "string"
             }
           },
           "additionalProperties": false
         }
       ]
     },
     "allowed-types": {
       "anyOf": [
         {
           "type": "number"
         },
         {
           "type": "string"
         },
         {
           "type": "boolean"
         },
         {
           "type": "null"
         },
         {
           "type": "array",
           "items": {
             "type": "number"
           }
         },
         {
           "type": "array",
           "items": {
             "type": "string"
           }
         },
         {
           "type": "array",
           "items": {
             "type": "boolean"
           }
         },
         {
           "type": "object",
           "additionalProperties": {
           }
+        },
+        {
         }
       ]
     },
     "uint": {
       "type": "integer",
       "minimum": 0
     },
     "jso-items": {
       "anyOf": [
         {
           "type": "object",
+          "patternProperties": {
+            "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {
+            }
+          },
           "properties": {
             "type": {
               "type": "string",
               "enum": [
                 "number",
                 "string",
                 "boolean",
                 "integer"
               ]
             },
             "sdfChoice": {
               "$ref": "#/definitions/sdfData-sdfChoice-properties-"
             },
             "sdfRef": {
               "$ref": "#/definitions/sdf-pointer"
             },
             "description": {
               "type": "string"
             },
             "$comment": {
               "type": "string"
             },
             "minimum": {
               "type": "number"
             },
             "maximum": {
               "type": "number"
             },
             "format": {
               "type": "string"
             },
             "minLength": {
               "$ref": "#/definitions/uint"
             },
             "maxLength": {
               "$ref": "#/definitions/uint"
             }
           },
           "additionalProperties": false
         },
         {
           "type": "object",
+          "patternProperties": {
+            "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {
+            }
+          },
           "properties": {
             "type": {
               "type": "string",
               "const": "object"
             },
             "required": {
               "type": "array",
               "items": {
                 "type": "string"
               },
               "minItems": 1
             },
             "properties": {
               "$ref": "#/definitions/sdfData-sdfChoice-properties-"
             },
             "sdfChoice": {
               "$ref": "#/definitions/sdfData-sdfChoice-properties-"
             },
             "sdfRef": {
               "$ref": "#/definitions/sdf-pointer"
             },
             "description": {
               "type": "string"
             },
             "$comment": {
               "type": "string"
             },
             "minimum": {
               "type": "number"
             },
             "maximum": {
               "type": "number"
             },
             "format": {
               "type": "string"
             },
             "minLength": {
               "$ref": "#/definitions/uint"
             },
             "maxLength": {
               "$ref": "#/definitions/uint"
             }
           },
           "additionalProperties": false
         },
         {
           "type": "object",
+          "patternProperties": {
+            "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {
+            }
+          },
+          "properties": {
+            "type": {
+              "type": "string"
+            },
+            "sdfChoice": {
+              "$ref": "#/definitions/sdfData-sdfChoice-properties-"
+            },
+            "sdfRef": {
+              "$ref": "#/definitions/sdf-pointer"
+            },
+            "description": {
+              "type": "string"
+            },
+            "$comment": {
+              "type": "string"
+            },
+            "minimum": {
+              "type": "number"
+            },
+            "maximum": {
+              "type": "number"
+            },
+            "format": {
+              "type": "string"
+            },
+            "minLength": {
+              "$ref": "#/definitions/uint"
+            },
+            "maxLength": {
+              "$ref": "#/definitions/uint"
+            }
+          },
+          "additionalProperties": false
+        },
+        {
+          "type": "object",
+          "patternProperties": {
+            "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {
+            }
+          },
           "properties": {
             "type": {
               "type": "string",
               "enum": [
                 "number",
                 "string",
                 "boolean",
                 "integer"
               ]
             },
             "enum": {
               "type": "array",
               "items": {
                 "type": "string"
               },
               "minItems": 1
             },
             "sdfRef": {
               "$ref": "#/definitions/sdf-pointer"
             },
             "description": {
               "type": "string"
             },
             "$comment": {
               "type": "string"
             },
             "minimum": {
               "type": "number"
             },
             "maximum": {
               "type": "number"
             },
             "format": {
               "type": "string"
             },
             "minLength": {
               "$ref": "#/definitions/uint"
             },
             "maxLength": {
               "$ref": "#/definitions/uint"
             }
           },
           "additionalProperties": false
         },
         {
           "type": "object",
+          "patternProperties": {
+            "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {
+            }
+          },
           "properties": {
             "type": {
               "type": "string",
               "const": "object"
             },
             "required": {
               "type": "array",
               "items": {
                 "type": "string"
               },
               "minItems": 1
             },
             "properties": {
               "$ref": "#/definitions/sdfData-sdfChoice-properties-"
             },
             "enum": {
               "type": "array",
               "items": {
                 "type": "string"
               },
               "minItems": 1
             },
             "sdfRef": {
               "$ref": "#/definitions/sdf-pointer"
             },
             "description": {
               "type": "string"
             },
             "$comment": {
               "type": "string"
             },
             "minimum": {
               "type": "number"
             },
             "maximum": {
               "type": "number"
             },
             "format": {
               "type": "string"
             },
             "minLength": {
               "$ref": "#/definitions/uint"
             },
             "maxLength": {
               "$ref": "#/definitions/uint"
             }
           },
           "additionalProperties": false
+        },
+        {
+          "type": "object",
+          "patternProperties": {
+            "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {
+            }
+          },
+          "properties": {
+            "type": {
+              "type": "string"
+            },
+            "enum": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              },
+              "minItems": 1
+            },
+            "sdfRef": {
+              "$ref": "#/definitions/sdf-pointer"
+            },
+            "description": {
+              "type": "string"
+            },
+            "$comment": {
+              "type": "string"
+            },
+            "minimum": {
+              "type": "number"
+            },
+            "maximum": {
+              "type": "number"
+            },
+            "format": {
+              "type": "string"
+            },
+            "minLength": {
+              "$ref": "#/definitions/uint"
+            },
+            "maxLength": {
+              "$ref": "#/definitions/uint"
+            }
+          },
+          "additionalProperties": false
         }
       ]
     },
+    "sdftype-name": {
+      "type": "string",
+      "pattern": "^[a-z][\\-a-z0-9]*$"
+    },
     "actionqualities": {
       "type": "object",
       "properties": {
         "description": {
           "type": "string"
         },
         "label": {
           "type": "string"
         },
         "$comment": {
           "type": "string"
         },
         "sdfRef": {
           "$ref": "#/definitions/sdf-pointer"
         },
         "sdfRequired": {
           "$ref": "#/definitions/pointer-list"
         },
         "sdfInputData": {
           "$ref": "#/definitions/parameter-list"
         },
         "sdfOutputData": {
           "$ref": "#/definitions/parameter-list"
         },
         "sdfData": {
           "$ref": "#/definitions/sdfData-sdfChoice-properties-"
         }
       },
+      "patternProperties": {
+        "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {
+        }
+      },
       "additionalProperties": false
     },
     "parameter-list": {
       "$ref": "#/definitions/dataqualities"
     },
     "eventqualities": {
       "type": "object",
       "properties": {
         "description": {
           "type": "string"
         },
         "label": {
           "type": "string"
         },
         "$comment": {
           "type": "string"
         },
         "sdfRef": {
           "$ref": "#/definitions/sdf-pointer"
         },
         "sdfRequired": {
           "$ref": "#/definitions/pointer-list"
         },
         "sdfOutputData": {
           "$ref": "#/definitions/parameter-list"
         },
         "sdfData": {
           "$ref": "#/definitions/sdfData-sdfChoice-properties-"
         }
       },
+      "patternProperties": {
+        "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {
+        }
+      },
       "additionalProperties": false
     },
     "format-": {
-      "type": "string",
-      "enum": [
-        "date-time",
-        "date",
-        "time",
-        "uri",
-        "uri-reference",
-        "uuid"
+      "anyOf": [
+        {
+          "type": "string",
+          "const": "date-time"
+        },
+        {
+          "type": "string",
+          "const": "date"
+        },
+        {
+          "type": "string",
+          "const": "time"
+        },
+        {
+          "type": "string",
+          "const": "uri"
+        },
+        {
+          "type": "string",
+          "const": "uri-reference"
+        },
+        {
+          "type": "string",
+          "const": "uuid"
+        },
+        {
+          "type": "string"
+        }
+      ]
+    },
+    "sdfType-": {
+      "anyOf": [
+        {
+          "type": "string",
+          "const": "byte-string"
+        },
+        {
+          "type": "string",
+          "const": "unix-time"
+        },
+        {
+          "$ref": "#/definitions/sdftype-name"
+        }
       ]
     },
     "sdfData-sdfChoice-properties-": {
       "type": "object",
       "additionalProperties": {
         "$ref": "#/definitions/dataqualities"
       }
     },
     "type-": {
       "type": "string",
       "enum": [
         "number",
         "string",
         "boolean",
         "integer",
         "array"
       ]
     },
-    "sdfAction-": {
+    "sdfEvent-": {
       "type": "object",
       "additionalProperties": {
-        "$ref": "#/definitions/actionqualities"
+        "$ref": "#/definitions/eventqualities"
       }
     },
-    "sdfProperty-": {
+    "sdfAction-": {
       "type": "object",
       "additionalProperties": {
-        "$ref": "#/definitions/propertyqualities"
+        "$ref": "#/definitions/actionqualities"
       }
     },
-    "sdfEvent-": {
+    "sdfProperty-": {
       "type": "object",
       "additionalProperties": {
-        "$ref": "#/definitions/eventqualities"
+        "$ref": "#/definitions/propertyqualities"
       }
-    },
-    "sdfType-": {
-      "type": "string",
-      "enum": [
-        "byte-string",
-        "unix-time"
-      ]
     }
   }
 }
]]></sourcecode>
    </section>
    <section anchor="jso-inspired">
      <name>Data Qualities inspired by json-schema.org</name>
      <t>Data qualities define data used in SDF affordances at an information
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 collectively are
abbreviated JSO here); for reference to a popular version we will
point here to <xref target="JSO7"/> and <xref target="JSO7V"/>.
As the vocabulary used by JSO is familiar to many JSON modelers, the
present specification borrows some of the terms and ports their
semantics to the information model level needed for SDF.</t>
      <t>The main data quality imported is the "<tt>type</tt>".
In SDF, this can take one of six (text string) values, which are
discussed in the following subsections (note that the JSO type
"<tt>null</tt>" is not supported as a value of this data quality in SDF).</t>
      <t>The additional quality "<tt>const</tt>" restricts the data to one specific
value (given as the value of the <tt>const</tt> quality).</t>
      <t>Similarly, the additional quality "<tt>default</tt>" provides data that can
be used in the absence of the data (given as the value of the <tt>const</tt>
quality); this is mainly documentary and not very well-defined for SDF
as no process is defined that would add default values to an instance
of some interaction data.</t>
      <section anchor="type-number-type-integer">
        <name>type "<tt>number</tt>", type "<tt>integer</tt>"</name>
        <t>The types "<tt>number</tt>" and "<tt>integer</tt>" are associated with floating point
and integer numbers, as they are available in JSON.
A type value of <tt>integer</tt> means that only integer values of JSON
numbers can be used (note that <tt>10.0</tt> is an integer value, even if it
is in a notation that would also allow non-zero decimal fractions).</t>
        <t>The additional data qualities "<tt>minimum</tt>", "<tt>maximum</tt>",
"<tt>exclusiveMinimum</tt>", "<tt>exclusiveMaximum</tt>" provide number values that
serve as inclusive/exclusive lower/upper bounds for the number.
(Note that the Boolean form of
"<tt>exclusiveMinimum</tt>"/"<tt>exclusiveMaximum</tt>" found in earlier JSO drafts <xref target="JSO4V"/>
is not used.)</t>
        <t>The data quality "<tt>multipleOf</tt>" gives a positive number that
constrains the data value to be an integer multiple of the number
given.
(Type "<tt>integer</tt>" can also be expressed as a "<tt>multipleOf</tt>" quality of
value 1, unless another "<tt>multipleOf</tt>" quality is present.)</t>
      </section>
      <section anchor="type-string">
        <name>type "<tt>string</tt>"</name>
        <t>The type "<tt>string</tt>" is associated with Unicode text string values as
they can be represented in JSON.</t>
        <t>The length (as measured in characters) can be constrained by the
additional data qualities "<tt>minLength</tt>" and "<tt>maxLength</tt>", which are
inclusive bounds.</t>
        <t>(More specifically, Unicode text strings as defined in this
specification are sequences of Unicode scalar values, the number of
which is taken as the length of such a text string.
Note that earlier drafts of this specification explained
text string length values in bytes, which however is not meaningful
unless bound to a specific encoding — which could be UTF-8, if this
unusual behavior is to be provided in an extension.)</t>
        <t>The data quality "<tt>pattern</tt>" takes a string value that is interpreted
as an <xref target="ECMA-262"/> regular expression in Unicode mode that constrains the
string (note that these are not anchored by default, so unless <tt>^</tt> and
<tt>$</tt> anchors are employed, ECMA-262 regular expressions match any string that <em>contains</em> a match).
The JSO proposals acknowledge that regular expression support is
rather diverse in various platforms, so the suggestion is to limit
them to:</t>
        <ul spacing="compact">
          <li>
            <t>characters;</t>
          </li>
          <li>
            <t>character classes in square brackets, including ranges; their complements;</t>
          </li>
          <li>
            <t>simple quantifiers <tt>*</tt>, <tt>+</tt>, <tt>?</tt>, and range quantifiers <tt>{n}</tt>,
<tt>{n,m}</tt>, and <tt>{n,}</tt>;</t>
          </li>
          <li>
            <t>grouping parentheses;</t>
          </li>
          <li>
            <t>the choice operator <tt>|</tt>;</t>
          </li>
          <li>
            <t>and anchors (beginning-of-input <tt>^</tt> and end-of-input <tt>$</tt>).</t>
          </li>
        </ul>
        <t>Note that this subset is somewhat similar to the subset introduced by
I-Regexps <xref target="RFC9485"/>, which however are anchored
regular expressions, and which include certain backslash escapes for
characters and character classes.</t>
        <t>The additional data quality "<tt>format</tt>" can take one of the following
values.  Note that, at an information model level, the presence of
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-time"
is less about the specific syntax employed in <xref target="RFC3339"/> than about the usage
as an absolute point in civil time).</t>
        <ul spacing="compact">
          <li>
            <t>"<tt>date-time</tt>", "<tt>date</tt>", "<tt>time</tt>":
An <xref target="RFC3339"/> <tt>date-time</tt>, <tt>full-date</tt>, or <tt>full-time</tt>, respectively.</t>
          </li>
          <li>
            <t>"<tt>uri</tt>", "<tt>uri-reference</tt>":
An <xref target="RFC3986"/> URI or URI Reference, respectively.</t>
          </li>
          <li>
            <t>"<tt>uuid</tt>": An <xref target="RFC4122"/> UUID.</t>
          </li>
        </ul>
      </section>
      <section anchor="type-boolean">
        <name>type "<tt>boolean</tt>"</name>
        <t>The type "<tt>boolean</tt>" can take the values "<tt>true</tt>" or "<tt>false</tt>".</t>
      </section>
      <section anchor="type-array">
        <name>type "<tt>array</tt>"</name>
        <t>The type "<tt>array</tt>" is associated with arrays as they are available in
JSON.</t>
        <t>The additional quality "<tt>items</tt>" gives the type that each of the
elements of the array must match.</t>
        <t>The number of elements in the array can be constrained by the additional
data qualities "<tt>minItems</tt>" and "<tt>maxItems</tt>", which are inclusive
bounds.</t>
        <t>The additional data quality "<tt>uniqueItems</tt>" gives a Boolean value
that, if true, requires the elements to be all different.</t>
      </section>
      <section anchor="type-object">
        <name>type "<tt>object</tt>"</name>
        <t>The type "<tt>object</tt>" is associated with maps, from strings to values, as
they are available in JSON.</t>
        <t>The additional quality "<tt>properties</tt>" is a map the entries of which
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 with a named set of data qualities giving the type for the
corresponding value in the specified JSON map.</t>
        <t>All entries specified this way are optional, unless they are listed in
the value of the additional quality "<tt>required</tt>", which is an array of
string values that give the key names of required entries.</t>
        <t>Note that the term "properties" as an additional quality for
defining map entries is unrelated to sdfProperty.</t>
      </section>
      <section anchor="implementation-notes">
        <name>Implementation notes</name>
        <t>JSO-based keywords are also used in the specification techniques of a
number of ecosystems, but some adjustments may be required.</t>
        <t>For instance, <xref target="OCF"/> is based on Swagger 2.0 which appears to be based on
"draft-4" <xref target="JSO4"/><xref target="JSO4V"/> (also called draft-5, but semantically intended to
be equivalent to draft-4).
The "<tt>exclusiveMinimum</tt>" and "<tt>exclusiveMaximum</tt>" keywords use the
Boolean form there, so on import to SDF their values have to be
replaced by the values of the respective "<tt>minimum</tt>"/"<tt>maximum</tt>"
keyword, which are themselves then removed; the reverse transformation
applies on export.</t>
      </section>
    </section>
    <section anchor="composition-examples">
      <name>Composition Examples</name>
      <t>This appendix contains two examples illustrating different composition approaches
using the <tt>sdfThing</tt> quality.</t>
      <section anchor="outlet-strip-example">
        <name>Outlet Strip Example</name>
        <figure anchor="exa-sdfthing-outlet-strip">
          <sourcecode type="json" name="example-sdfthing-outlet-strip.sdf.json"><![CDATA[
{
  "sdfThing": {
    "outlet-strip": {
      "label": "Outlet strip",
      "description": "Contains a number of Sockets",
      "sdfObject": {
        "socket": {
          "description": "An array of sockets in the outlet strip",
          "minItems": 2,
          "maxItems": 10
        }
      }
    }
  }
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="fridge-freezer-example">
        <name>Refrigerator-Freezer Example</name>
        <figure anchor="exa-sdfthing-fridge-freezer">
          <sourcecode type="json" name="example-sdfthing-refrigerator-freezer.sdf.json"><![CDATA[
{
  "sdfThing": {
    "refrigerator-freezer": {
      "description": "A refrigerator combined with a freezer",
      "sdfProperty": {
        "status": {
          "type": "boolean",
          "description":
"Indicates if the refrigerator-freezer is powered"
        }
      },
      "sdfObject": {
        "refrigerator": {
          "description": "A refrigerator compartment",
          "sdfProperty": {
            "temperature": {
              "sdfRef": "#/sdfProproperty/temperature",
              "maximum": 8
            }
          }
        },
        "freezer": {
          "label": "A freezer compartment",
          "sdfProperty": {
            "temperature": {
              "sdfRef": "#/sdfProproperty/temperature",
              "maximum": -6
            }
          }
        }
      }
    }
  },
  "sdfProperty": {
    "temperature": {
      "description": "The temperature for this compartment",
      "type": "number",
      "unit": "Cel"
    }
  }
}
]]></sourcecode>
        </figure>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>This specification is based on <tt>sdf.md</tt> and <tt>sdf-schema.json</tt> in the old
one-data-model <tt>language</tt> repository, as well as <contact fullname="Ari Keränen"/>'s
"alt-schema" from the Ericsson Research <tt>ipso-odm</tt> repository (which
is now under subdirectory <tt>sdflint</tt> in the one-data model <tt>tools</tt>
repository).</t>
      <!--  LocalWords:  SDF namespace defaultNamespace instantiation OMA
 -->
<!--  LocalWords:  affordances ZigBee LWM OCF sdfObject sdfThing
 -->
<!--  LocalWords:  idempotency Thingness sdfProperty sdfEvent sdfRef
 -->
<!--  LocalWords:  namespaces sdfRequired Optionality sdfAction
 -->
<!--  LocalWords:  dereferenced dereferencing atomicity
 -->
<!--  LocalWords:  interworking
 -->

</section>
    <section anchor="contributors" numbered="false" toc="include" removeInRFC="false">
      <name>Contributors</name>
      <contact initials="J." surname="Romann" fullname="Jan Romann">
        <organization>Universität Bremen</organization>
        <address>
          <email>jan.romann@uni-bremen.de</email>
        </address>
      </contact>
      <contact initials="W." surname="van der Beek" fullname="Wouter van der Beek">
        <organization>Cascoda Ltd.</organization>
        <address>
          <postal>
            <street>Threefield House</street>
            <street>Threefield Lane</street>
            <city>Southampton</city>
            <country>United Kingdom</country>
          </postal>
          <email>w.vanderbeek@cascoda.com</email>
        </address>
      </contact>
    </section>
  </back>
  <!-- ##markdown-source:
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
D9KvL66/39b3xPX1wLPi+pUYfbzs4H0/hH6Ibpvi+nseGEtFjqvF9SvhvAl+
H4jr7zlXX1xf+/AQcf1Kvt4Q16836xVi7Upx/eOul4LBf93i+kbI3AiZ2noj
ZEoPGyHTbITMjZDZnPlGyNwImUu62QiZGyHT+2FlFMIVjD2/gpn/7Ey/G5HV
XJtfbETWNQbYiKwbkXUjsi7tdyOybkTWTgA3IqvrbyOyrimybsIYzBW4W0XL
727w3cj7G3l/I+9v5H35bSPvr5zvRt7fyPs31e1G3n/nuW7k/V9colxsOn9w
8n6zwWp5v2Mhgl8vGx2u0AecCBwOsDT92v6+NFPgKuiaOKQ3AhF49WQaKG+i
7p3UhHjliGEgygcZMOxyk5xo1qDxsPUmOXGNATbJiZvkxCvmu0lO3CQn3lS3
m+TEd57rry85MfZechK/fnzNH/S3XnAVii+3bopqrCiqEcqtVrZfpn90lLCk
391Ga/zSQRyNFk0gmrL9akm7Ifgug9vuodW9BYLve/YVCL5X9tXS2G86kD3o
YiNZ+6NsJOuNZL2RrDeS9Uay3kjWXX39+iTrzpd+zTJxy37ebNCynwc/d1hI
V5z3PyNDeNh0Fe5uSq7cKBR+841CsVEoNgrFzXa/USjeeb4bhWKjUNxUtxuF
4p3n+utTKJypXj++5g8qxXSY52Pt2Jrn/bAeO/CvSS1ZLxKk7gi9ehf55F9b
H3sj8W0kvo3EdzNdbiS+m+h3I/FtJL5OADcSn+vvXSW+zpd+zbLa+4dgv0dg
xiYe+5cVj70RhjfC8EYYvpkuN8LwTfS7EYY3wnAngBth2PW3EYY7sXWzhstN
sZJ/kQ/+l6AZhE03YvNGbN6IzTfT5UZsvol+N2LzRmzuBHAjNrv+NmJzJ7Zu
woZ8VXipd97/YkJsP4T99/2CJTaS8kZSvnKAjaS8kZSvmO9GUt5IyjfV7UZS
fue5/polZf34Ogo66YUs3oNs/fIXLb50tVjemuXVr7TX8Op3kDiu9UKHvLZs
B6xiy5cfeswOKvngY3ZtomsNanUx/8cl5HsRjrKkcGMbjiZ5E8f0qVqBQZns
CJbNQuPJL7cbnTie9k7745epgxrT+cPyVFhRhr5v/mDsFmm9Y5Z3ZxzBdf2m
y9f86fXVLP5fG97+IfWRm1XmblAJ+zmqAiukw2tP7mctYL+/rPArtao1UXol
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

-->

</rfc>
