<?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.1 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-asdf-sdf-16" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.18.1 -->
  <front>
    <title abbrev="OneDM SDF">Semantic Definition Format (SDF) for Data and Interactions of Things</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-asdf-sdf-16"/>
    <author initials="M." surname="Koster" fullname="Michael Koster" role="editor">
      <organization>PassiveLogic</organization>
      <address>
        <postal>
          <street>524 H Street</street>
          <city>Antioch, CA</city>
          <code>94509</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="October" day="02"/>
    <area>Applications</area>
    <workgroup>ASDF</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 138?>

<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 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 (-16) addresses the Working Group Last
Call comments.</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 157?>

<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 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 (-16) addresses the Working Group Last
Call comments.</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.
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>sdfThing:</dt>
          <dd>
            <t>A grouping of sdfObjects (Objects) and/or sdfThings.</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 SDF map 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 Object.
(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 Object.</t>
          </dd>
          <dt>Event:</dt>
          <dd>
            <t>An affordance that can potentially be used to obtain information about what happened to an Object.</t>
          </dd>
          <dt>Object, sdfObject:</dt>
          <dd>
            <t>A grouping of Property, Action, and Event definitions; 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 Objects or sdfThings. (Note that
JSON maps are often called JSON objects due to JSON's JavaScript
heritage; in this document, the
term Object, short 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 Object 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 OneDM 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 Object.
The <tt>sdfProperty</tt> group lists the property affordances described by the model; these represent various perspectives on the state of the Object.
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>Objects, the items listed in an <tt>sdfObject</tt> group, are the main "atom" of reusable semantics for model construction.
It 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 <tt>sdfObject</tt>.</t>
          <t>An 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 a Property with the given qualities to be potentially present in the containing Object.</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 Object; 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> groups enables definition of models for
complex devices that will use one or more <tt>sdfObject</tt> definitions.
<tt>sdfThing</tt> groups, however, 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>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 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 current 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">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.
(For models to be handled by the One Data Model liaison group, this 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 current definition block. <!-- what exactly does this mean? -->
        </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 Object definition is given in <xref target="exobject"/>:</t>
        <figure anchor="exobject">
          <name>Example Object definition</name>
          <sourcecode type="json"><![CDATA[
"sdfObject": {
  "foo": {
    "sdfProperty": {
      "bar": {
        "type": "boolean"
      }
    }
  }
}
]]></sourcecode>
        </figure>
        <t>This example defines an Object "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 name references (JSON pointers), each
indicating one declaration that is mandatory to be represented.</t>
        <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>
      </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">text</td>
              <td align="left">long text (no constraints)</td>
            </tr>
            <tr>
              <td align="left">label</td>
              <td align="left">text</td>
              <td align="left">short text (no constraints)</td>
            </tr>
            <tr>
              <td align="left">$comment</td>
              <td align="left">text</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"/>, applies to qualities of properties, of data)</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 Object definitions.
Object definitions may contain or include definitions of Properties, Actions, Events declared for the Object, as well as data types (sdfData group) to be used in this or other Objects.</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 Object</td>
            </tr>
            <tr>
              <td align="left">sdfAction</td>
              <td align="left">action</td>
              <td align="left">zero or more named action definitions for this Object</td>
            </tr>
            <tr>
              <td align="left">sdfEvent</td>
              <td align="left">event</td>
              <td align="left">zero or more named event definitions for this Object</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 Objects.</t>
        </li>
        <li>
          <t>The ability to compose a reusable definition block from Objects, for example a single plug unit of an outlet strip with on/off control, energy monitor, and optional dimmer Objects, while retaining the atomicity of the individual Objects.</t>
        </li>
        <li>
          <t>The ability to compose Objects and other definition blocks into a higher level sdfThing that represents a product, while retaining the atomicity of Objects.</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 Object "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="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, 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="I-D.ietf-jsonpath-iregexp">
          <front>
            <title>I-Regexp: An Interoperable Regexp Format</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <author fullname="Tim Bray" initials="T." surname="Bray">
              <organization>Textuality</organization>
            </author>
            <date day="29" month="June" year="2023"/>
            <abstract>
              <t>   This document specifies I-Regexp, a flavor of regular expressions
   that is limited in scope with the goal of interoperation across many
   different regular-expression libraries.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-jsonpath-iregexp-08"/>
        </reference>
      </references>
    </references>
    <?line 1770?>

<section anchor="syntax">
      <name>Formal Syntax of SDF</name>
      <t>This appendix describes the syntax of SDF using CDDL <xref target="RFC8610"/>.  Note
that this appendix was derived from <contact fullname="Ari Keränen"/>'s "alt-schema" and
<contact fullname="Michael Koster"/>'s "schema", with a view of covering the syntax that
was in use at the time of writing in the One Data Model <tt>playground</tt>
repository.</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
 ? 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                   ; for EXTENSION-POINT
       "([a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*"; for EXTENSION-POINT

sdf-pointer = text ; .regexp curie-regexp -- TO DO!
; 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-09-30T22:26:24Z",
+  "title": "sdf-framework.cddl -- Generated: 2023-09-30T22:26:41Z",
   "$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"
         },
         "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": {
       "type": "string"
     },
     "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-"
             },
-            "sdfChoice": {
+            "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-": {
+    "sdfProperty-": {
       "type": "object",
       "additionalProperties": {
-        "$ref": "#/definitions/actionqualities"
+        "$ref": "#/definitions/propertyqualities"
       }
     },
     "sdfEvent-": {
       "type": "object",
       "additionalProperties": {
         "$ref": "#/definitions/eventqualities"
       }
     },
-    "sdfProperty-": {
+    "sdfAction-": {
       "type": "object",
       "additionalProperties": {
-        "$ref": "#/definitions/propertyqualities"
+        "$ref": "#/definitions/actionqualities"
       }
-    },
-    "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 are available 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.
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 constrain 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
iregexps <xref target="I-D.ietf-jsonpath-iregexp"/>, 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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
DjHzcyEyHSjwo5/wv1SeBgYQJgIA

-->

</rfc>
