<?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.23 (Ruby 3.4.1) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-asdf-sdf-21" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.27.0 -->
  <front>
    <title abbrev="SDF (Semantic Definition Format)">Semantic Definition Format (SDF) for Data and Interactions of Things</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-asdf-sdf-21"/>
    <author initials="M." surname="Koster" fullname="Michael Koster" role="editor">
      <organization>KTC Control AB</organization>
      <address>
        <postal>
          <street>29415 Alderpoint Road</street>
          <city>Blocksburg, CA</city>
          <code>95514</code>
          <country>USA</country>
        </postal>
        <phone>+1-707-502-5136</phone>
        <email>michaeljohnkoster@gmail.com</email>
      </address>
    </author>
    <author initials="C." surname="Bormann" fullname="Carsten Bormann" role="editor">
      <organization ascii="Universitaet Bremen TZI">Universität Bremen TZI</organization>
      <address>
        <postal>
          <street>Postfach 330440</street>
          <city>Bremen</city>
          <code>D-28359</code>
          <country>Germany</country>
        </postal>
        <phone>+49-421-218-63921</phone>
        <email>cabo@tzi.org</email>
      </address>
    </author>
    <author initials="A." surname="Keränen" fullname="Ari Keränen">
      <organization>Ericsson</organization>
      <address>
        <postal>
          <city>Jorvas</city>
          <code>02420</code>
          <country>Finland</country>
        </postal>
        <email>ari.keranen@ericsson.com</email>
      </address>
    </author>
    <date year="2025" month="February" day="19"/>
    <area>Applications</area>
    <workgroup>ASDF</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 153?>

<t>The Semantic Definition Format (SDF) is concerned with Things,
namely physical objects that are available for interaction over a
network.
SDF is a format for domain experts to
use in the creation and maintenance of data and interaction models
that describe Things.
An SDF specification describes definitions of
SDF Objects/SDF Things and their associated interactions (Events, Actions,
Properties), as well as the Data types for the information exchanged
in those interactions. Tools convert this format to database formats
and other serializations as needed.</t>
      <t><cref anchor="status">(This note will be removed by the RFC editor:)
The present revision (-21) fixes a clerical error in (–20), which addresses comments from the AD review
and from the IESG directorate reviews.</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 176?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The Semantic Definition Format (SDF) is concerned with Things,
namely physical objects that are available for interaction over a
network.
SDF is a format for domain experts to
use in the creation and maintenance of data and interaction models
that describe Things.
An SDF specification describes definitions of
SDF Objects/SDF Things and their associated interactions (Events, Actions,
Properties), as well as the Data types for the information exchanged
in those interactions. Tools convert this format to database formats
and other serializations as needed.</t>
      <t><cref anchor="status_1">(This note will be removed by the RFC editor:)
The present revision (-21) fixes a clerical error in (–20), which addresses comments from the AD review
and from the IESG directorate reviews.</cref></t>
      <t>SDF is designed to be an extensible format.
The present document constitutes the base specification for SDF: we
speak of "base SDF" for short.
In addition, SDF extensions can be defined, some of which may make use
of extension points specifically defined for this in base SDF.
One area for such extensions would be refinements of SDF's abstract
interaction models into protocol bindings for specific ecosystems
(e.g., <xref target="I-D.bormann-asdf-sdf-mapping"/>).
For the use of certain other extensions, it may be necessary to
indicate in the SDF
document using them 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="structure-of-this-document">
        <name>Structure of This Document</name>
        <t>After introductory material and an overview (<xref target="overview"/>) over the
elements of the model and over the different kinds of names used,
<xref target="sdf-structure"/> introduces the main components of an SDF model.
<xref target="names-and-namespaces"/> revisits names and structures them into
namespaces.
<xref target="kw-defgroups"/> discusses the inner structure of the Objects defined by
SDF, the sdfObjects, in further detail.
<xref target="high-level-composition"/> discusses how SDF supports composition.
Conventional Sections (<xref format="title" target="iana"/>, <xref format="title" target="seccons"/>,
<xref format="title" target="sec-normative-references"/>, and <xref format="title" target="sec-informative-references"/>)
follow.
The normative <xref target="syntax"/> defines the syntax of SDF in
terms of its JSON structures, employing the Concise Data Definition
Language (CDDL) <xref target="RFC8610"/>.
This is followed by the informative <xref target="jso"/>, a rendition of the SDF
syntax in a "JSON Schema" format as they are defined by
<tt>json-schema.org</tt> (collectively called JSO).
The normative <xref target="jso-inspired"/> defines certain terms ("data qualities")
used at the SDF data model level that were inspired by JSO.
The informative <xref target="composition-examples"/> provides a few
examples for the use of composition in SDF.
Finally, <xref target="earlier"/> provides some historical information that can be
useful in upgrading earlier, pre-standard SDF models and
implementations to SDF base.</t>
      </section>
      <section anchor="terminology-and-conventions">
        <name>Terminology and Conventions</name>
        <t>Terms introduced in this section are capitalized when used in this
section; to maintain readability, capitalization is only done when
needed where they are used in the body of this document.</t>
        <section numbered="false" anchor="programming-platform-terms">
          <name>Programming Platform Terms</name>
          <t>The following definitions mention terms that are used with specific
meanings in various programming platforms, but often have an
independent definition for this document, which can be found further
below in this section.</t>
          <dl>
            <dt>Element:</dt>
            <dd>
              <t>A generic term used here in its English sense.
Exceptionally, in <xref target="jso-inspired"/>, used explicitly in accordance with
its meaning in the JSON ecosystem, i.e., the elements of JSON
arrays.</t>
            </dd>
            <dt>Entry:</dt>
            <dd>
              <t>A key-value pair in a map. (In JSON maps, sometimes also called "member".)</t>
            </dd>
            <dt>Map:</dt>
            <dd>
              <t>A collection of entries (key-value pairs), where there are no two
entries with equivalent keys.
(Also known as associative array, dictionary, or symbol table.)</t>
            </dd>
            <dt>Object:</dt>
            <dd>
              <t>An otherwise very generic term that JavaScript (and thus JSON) uses
for the kind of maps that were part of the original languages from
the outset.
In this document, Object is used exclusively in its general English
meaning or as the colloquial shorthand for sdfObject, even if the
type name <tt>"object"</tt> is imported with JSON-related semantics from a
data definition language.</t>
            </dd>
            <dt>Property:</dt>
            <dd>
              <t>Certain environments use the term "property" for a JSON concept that
JSON calls "member" and we call "entry", or sometimes just for the
map key of these.
In this document, the term Property is specifically reserved for a
certain kind of Affordance, even if the map key <tt>"properties"</tt> is
imported with JSON-related semantics from a data definition
language.</t>
            </dd>
            <dt>Byte:</dt>
            <dd>
              <t>This document uses the term "byte" in its now-customary sense as a
synonym for "octet".</t>
            </dd>
          </dl>
        </section>
        <section numbered="false" anchor="conceptual-terms">
          <name>Conceptual Terms</name>
          <dl>
            <dt>Thing:</dt>
            <dd>
              <t>A physical item that is also available for interaction over a network.</t>
            </dd>
            <dt>Element:</dt>
            <dd>
              <t>A part or an aspect of something abstract; i.e., the term is used
here in its usual English definition.</t>
            </dd>
            <dt>Affordance:</dt>
            <dd>
              <t>An element of an interface offered for interaction.
Such an element becomes an Affordance when information is available
(directly or indirectly) that indicates how it can or should be
used.
In the present document, the term is used for the digital
(network-directed) interfaces of a Thing only; as it is a physical
object as well, the Thing might also have physical affordances such
as buttons, dials, and displays.</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 a Grouping.</t>
            </dd>
            <dt>Action:</dt>
            <dd>
              <t>An Affordance that can potentially be used to perform a named operation on a Grouping.</t>
            </dd>
            <dt>Event:</dt>
            <dd>
              <t>An Affordance that can potentially be used to obtain information
about what happened to a Grouping.</t>
            </dd>
          </dl>
        </section>
        <section numbered="false" anchor="specification-language-terms">
          <name>Specification Language Terms</name>
          <dl>
            <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 Groupings (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>Block:</dt>
            <dd>
              <t>One or more entries in a JSON map that is part of an SDF
specification; these entries can be described as a Block to
emphasize that they together serve a specific function.</t>
            </dd>
            <dt>Group:</dt>
            <dd>
              <t>An entry in the main JSON map that represents the SDF document, and in
certain nested definitions.
A group
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 <tt>sdfThing</tt>, <tt>sdfObject</tt>, <tt>sdfProperty</tt>, <tt>sdfAction</tt>,
<tt>sdfEvent</tt>, or <tt>sdfData</tt>; 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>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.
(The term "Quality" is used because another popular term,
"Property", already has a different meaning.)</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 the Class Name Keyword of the Group also makes it a
Declaration (see <xref target="definitions-block"/>), 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 that is intended to create a component item within that
enclosing definition.  Every declaration can also be used as a
definition for reference elsewhere.</t>
            </dd>
            <dt>Grouping:</dt>
            <dd>
              <t>An sdfThing or sdfObject, i.e., (directly or indirectly) a
description for a combination of Affordances.</t>
            </dd>
            <dt>Object, sdfObject:</dt>
            <dd>
              <t>A Grouping that contains Affordance declarations (Property, Action,
and Event declarations) only.
It serves as the main "atom" of reusable semantics for model
construction, representing the interaction model for a Thing that is
simple enough to not require nested structure.
sdfObjects are therefore similar to sdfThings but do not allow
nesting, i.e., they cannot contain other Groupings (sdfObjects or
sdfThings).</t>
            </dd>
            <dt>sdfThing:</dt>
            <dd>
              <t>A Grouping that can contain nested Groupings (sdfThings and sdfObjects).
Like sdfObject, it can also contain Affordance
declarations (Property, Action, and Event declarations).
(Note that "Thing" has a different meaning from sdfThing and
therefore is not available as a colloquial shorthand of
sdfThing.)</t>
            </dd>
            <dt>Augmentation Mechanism:</dt>
            <dd>
              <t>A companion document to a base SDF Model that provides additional
information ("augments" the base specification).
The information may be 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>
            <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.
The Protocol Binding might supply URL components, numeric IDs, and
similar details.
Protocol Bindings are one case of an Augmentation Mechanism.</t>
            </dd>
          </dl>
        </section>
        <section numbered="false" anchor="conventions">
          <name>Conventions</name>
          <t>Regular expressions that are used in the text as a "pattern" for some
string are interpreted as per <xref target="RFC9485"/>.
(Note that a form of regular expressions is also used as values of the
quality <tt>pattern</tt>; see <xref target="type-string"/>.)</t>
          <t>The singular form is chosen as the preferred one for the keywords
defined in this specification.</t>
          <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 <xref target="BCP14"/> (<xref target="RFC2119"/>) (<xref target="RFC8174"/>) when, and only when, they
appear in all capitals, as shown here.</t>
          <?line -18?>

</section>
      </section>
    </section>
    <section anchor="overview">
      <name>Overview</name>
      <section anchor="example-definition">
        <name>Example Definition</name>
        <t>We start with an example for the SDF definition of a simple sdfObject called "Switch" (<xref target="example1"/>).</t>
        <figure anchor="example1">
          <name>A simple example of an SDF document</name>
          <sourcecode type="json" name="example1.sdf.json"><![CDATA[
{
  "info": {
    "title": "Example document for SDF (Semantic Definition Format)",
    "version": "2019-04-24",
    "copyright": "Copyright 2019 Example Corp. All rights reserved.",
    "license": "https://example.com/license"
  },
  "namespace": {
    "cap": "https://example.com/capability/cap"
  },
  "defaultNamespace": "cap",
  "sdfObject": {
    "Switch": {
      "sdfProperty": {
        "value": {
          "description":
"The state of the switch; false for off and true for on.",
          "type": "boolean"
        }
      },
      "sdfAction": {
        "on": {
          "description":
"Turn the switch on; equivalent to setting value to true."
        },
        "off": {
          "description":
"Turn the switch off; equivalent to setting value to false."
        },
        "toggle": {
          "description":
"Toggle the switch; equivalent to setting value to its complement."
        }
      }
    }
  }
}
]]></sourcecode>
        </figure>
        <t>This is a model of a switch.
The state <tt>value</tt> declared in the <tt>sdfProperty</tt> group, represented by a Boolean, will be true for "on" and will be false for "off".
The actions <tt>on</tt> or <tt>off</tt> declared in the <tt>sdfAction</tt> group are redundant with setting the <tt>value</tt> and are in the example to illustrate that there are often different ways of achieving the same effect.
The action <tt>toggle</tt> will invert the value of the sdfProperty value, so that 2-way switches can be created; having such action will avoid the need for first retrieving the current value and then applying/setting the inverted value.</t>
        <t>The <tt>sdfObject</tt> group lists the affordances of Things modeled by this sdfObject.
The <tt>sdfProperty</tt> group lists the property affordances described by the model; these represent various perspectives on the state of the sdfObject.
Properties can have additional qualities to describe the state more precisely.
Properties can be annotated to be read, write or read/write; how this is actually done by the underlying transfer protocols is not described in the SDF model but left to companion protocol bindings.
Properties are often used with RESTful paradigms <xref target="I-D.irtf-t2trg-rest-iot"/>, describing state.
The <tt>sdfAction</tt> group is the mechanism to describe other interactions in terms of their names, input, and output data (no data are used in the example), as in a POST method in REST or in a remote procedure call.
The example <tt>toggle</tt> is an Action that
changes the state based on the current state of the Property named <tt>value</tt>.
(The third type of affordance is Events, which are not described in this example.)</t>
        <t>In the JSON representation, the <tt>info</tt> group is an exception in that
this group's map has keys taken from the SDF vocabulary.
All other groups (such as <tt>namespace</tt>, <tt>sdfObject</tt>) have maps with
keys that are freely defined by the model writer (<tt>Switch</tt>, <tt>value</tt>,
<tt>on</tt>, etc.); we speak of <em>given names</em>.
The groups made up of entries with given names as keys usually use the
<tt>named&lt;&gt;</tt> production in the <xref target="syntax">formal syntax of SDF</xref>.
Where the values of these entries are maps, these again use SDF
vocabulary keys, and so on, generally alternating in further nesting.
The SDF-defined vocabulary items used in the hierarchy of such groups
are often, but not always, called <em>quality names</em> or <em>qualities</em>.
See <xref target="member-names"/> for more information about naming in SDF.</t>
      </section>
      <section anchor="elements-of-an-sdf-model">
        <name>Elements of an SDF model</name>
        <t>The SDF language uses six predefined Class Name Keywords for modeling connected
Things which are illustrated in <xref target="fig-class-2"/>.</t>
        <figure anchor="fig-class-2">
          <name>Main classes used in SDF models</name>
          <artset>
            <artwork type="svg"><svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" height="437px" preserveAspectRatio="none" version="1.1" viewBox="0 0 542 437" width="542px">
                <defs/>
                <g>
                  <!--class sdfThing-->
    <g id="elem_sdfThing">
                    <rect fill="white" height="48" id="sdfThing" rx="2.5" ry="2.5" width="93" x="136.13" y="7" stroke="black" stroke-width="0.5"/>
                    <ellipse cx="151.13" cy="23" fill="white" rx="11" ry="11" stroke="black" stroke-width="1.0"/>
                    <path d="M153.6031,29.1431 Q153.0221,29.4419 152.3829,29.5913 Q151.7438,29.7407 151.0382,29.7407 Q148.5314,29.7407 147.2115,28.0889 Q145.8917,26.437 145.8917,23.3159 Q145.8917,20.1865 147.2115,18.5347 Q148.5314,16.8828 151.0382,16.8828 Q151.7438,16.8828 152.3912,17.0322 Q153.0387,17.1816 153.6031,17.4805 L153.6031,20.2031 Q152.9723,19.6221 152.3788,19.3523 Q151.7853,19.0825 151.1544,19.0825 Q149.8097,19.0825 149.1249,20.1492 Q148.4401,21.2158 148.4401,23.3159 Q148.4401,25.4077 149.1249,26.4744 Q149.8097,27.541 151.1544,27.541 Q151.7853,27.541 152.3788,27.2712 Q152.9723,27.0015 153.6031,26.4204 Z " fill="black"/>
                    <text fill="black" font-family="sans-serif" font-size="14" x="165.13" y="28.291">sdfThing</text>
                    <line x1="137.13" x2="228.13" y1="39" y2="39" stroke="black" stroke-width="0.5"/>
                    <line x1="137.13" x2="228.13" y1="47" y2="47" stroke="black" stroke-width="0.5"/>
                  </g>
                  <!--class sdfObject-->
    <g id="elem_sdfObject">
                    <rect fill="white" height="48" id="sdfObject" rx="2.5" ry="2.5" width="97" x="205.13" y="132" stroke="black" stroke-width="0.5"/>
                    <ellipse cx="220.13" cy="148" fill="white" rx="11" ry="11" stroke="black" stroke-width="1.0"/>
                    <path d="M222.6031,154.1431 Q222.0221,154.4419 221.3829,154.5913 Q220.7438,154.7407 220.0382,154.7407 Q217.5314,154.7407 216.2115,153.0889 Q214.8917,151.437 214.8917,148.3159 Q214.8917,145.1865 216.2115,143.5347 Q217.5314,141.8828 220.0382,141.8828 Q220.7438,141.8828 221.3912,142.0322 Q222.0387,142.1816 222.6031,142.4805 L222.6031,145.2031 Q221.9723,144.6221 221.3788,144.3523 Q220.7853,144.0825 220.1544,144.0825 Q218.8097,144.0825 218.1249,145.1492 Q217.4401,146.2158 217.4401,148.3159 Q217.4401,150.4077 218.1249,151.4744 Q218.8097,152.541 220.1544,152.541 Q220.7853,152.541 221.3788,152.2712 Q221.9723,152.0015 222.6031,151.4204 Z " fill="black"/>
                    <text fill="black" font-family="sans-serif" font-size="14" x="234.13" y="153.291">sdfObject</text>
                    <line x1="206.13" x2="301.13" y1="164" y2="164" stroke="black" stroke-width="0.5"/>
                    <line x1="206.13" x2="301.13" y1="172" y2="172" stroke="black" stroke-width="0.5"/>
                  </g>
                  <!--class sdfProperty-->
    <g id="elem_sdfProperty">
                    <rect fill="white" height="48" id="sdfProperty" rx="2.5" ry="2.5" width="111" x="29.13" y="257" stroke="black" stroke-width="0.5"/>
                    <ellipse cx="44.13" cy="273" fill="white" rx="11" ry="11" stroke="black" stroke-width="1.0"/>
                    <path d="M46.6031,279.1431 Q46.0221,279.4419 45.3829,279.5913 Q44.7438,279.7407 44.0382,279.7407 Q41.5314,279.7407 40.2115,278.0889 Q38.8917,276.437 38.8917,273.3159 Q38.8917,270.1865 40.2115,268.5347 Q41.5314,266.8828 44.0382,266.8828 Q44.7438,266.8828 45.3912,267.0322 Q46.0387,267.1816 46.6031,267.4805 L46.6031,270.2031 Q45.9723,269.6221 45.3788,269.3523 Q44.7853,269.0825 44.1544,269.0825 Q42.8097,269.0825 42.1249,270.1492 Q41.4401,271.2158 41.4401,273.3159 Q41.4401,275.4077 42.1249,276.4744 Q42.8097,277.541 44.1544,277.541 Q44.7853,277.541 45.3788,277.2712 Q45.9723,277.0015 46.6031,276.4204 Z " fill="black"/>
                    <text fill="black" font-family="sans-serif" font-size="14" x="58.13" y="278.291">sdfProperty</text>
                    <line x1="30.13" x2="139.13" y1="289" y2="289" stroke="black" stroke-width="0.5"/>
                    <line x1="30.13" x2="139.13" y1="297" y2="297" stroke="black" stroke-width="0.5"/>
                  </g>
                  <!--class sdfAction-->
    <g id="elem_sdfAction">
                    <rect fill="white" height="48" id="sdfAction" rx="2.5" ry="2.5" width="97" x="363.13" y="257" stroke="black" stroke-width="0.5"/>
                    <ellipse cx="378.13" cy="273" fill="white" rx="11" ry="11" stroke="black" stroke-width="1.0"/>
                    <path d="M380.6031,279.1431 Q380.0221,279.4419 379.3829,279.5913 Q378.7438,279.7407 378.0382,279.7407 Q375.5314,279.7407 374.2115,278.0889 Q372.8917,276.437 372.8917,273.3159 Q372.8917,270.1865 374.2115,268.5347 Q375.5314,266.8828 378.0382,266.8828 Q378.7438,266.8828 379.3912,267.0322 Q380.0387,267.1816 380.6031,267.4805 L380.6031,270.2031 Q379.9723,269.6221 379.3788,269.3523 Q378.7853,269.0825 378.1544,269.0825 Q376.8097,269.0825 376.1249,270.1492 Q375.4401,271.2158 375.4401,273.3159 Q375.4401,275.4077 376.1249,276.4744 Q376.8097,277.541 378.1544,277.541 Q378.7853,277.541 379.3788,277.2712 Q379.9723,277.0015 380.6031,276.4204 Z " fill="black"/>
                    <text fill="black" font-family="sans-serif" font-size="14" x="392.13" y="278.291">sdfAction</text>
                    <line x1="364.13" x2="459.13" y1="289" y2="289" stroke="black" stroke-width="0.5"/>
                    <line x1="364.13" x2="459.13" y1="297" y2="297" stroke="black" stroke-width="0.5"/>
                  </g>
                  <!--class sdfEvent-->
    <g id="elem_sdfEvent">
                    <rect fill="white" height="48" id="sdfEvent" rx="2.5" ry="2.5" width="90" x="175.63" y="257" stroke="black" stroke-width="0.5"/>
                    <ellipse cx="190.63" cy="273" fill="white" rx="11" ry="11" stroke="black" stroke-width="1.0"/>
                    <path d="M193.1031,279.1431 Q192.5221,279.4419 191.8829,279.5913 Q191.2438,279.7407 190.5382,279.7407 Q188.0314,279.7407 186.7115,278.0889 Q185.3917,276.437 185.3917,273.3159 Q185.3917,270.1865 186.7115,268.5347 Q188.0314,266.8828 190.5382,266.8828 Q191.2438,266.8828 191.8912,267.0322 Q192.5387,267.1816 193.1031,267.4805 L193.1031,270.2031 Q192.4723,269.6221 191.8788,269.3523 Q191.2853,269.0825 190.6544,269.0825 Q189.3097,269.0825 188.6249,270.1492 Q187.9401,271.2158 187.9401,273.3159 Q187.9401,275.4077 188.6249,276.4744 Q189.3097,277.541 190.6544,277.541 Q191.2853,277.541 191.8788,277.2712 Q192.4723,277.0015 193.1031,276.4204 Z " fill="black"/>
                    <text fill="black" font-family="sans-serif" font-size="14" x="204.63" y="278.291">sdfEvent</text>
                    <line x1="176.63" x2="264.63" y1="289" y2="289" stroke="black" stroke-width="0.5"/>
                    <line x1="176.63" x2="264.63" y1="297" y2="297" stroke="black" stroke-width="0.5"/>
                  </g>
                  <!--class sdfData-->
    <g id="elem_sdfData">
                    <rect fill="white" height="48" id="sdfData" rx="2.5" ry="2.5" width="84" x="236.63" y="382" stroke="black" stroke-width="0.5"/>
                    <ellipse cx="251.63" cy="398" fill="white" rx="11" ry="11" stroke="black" stroke-width="1.0"/>
                    <path d="M254.1031,404.1431 Q253.5221,404.4419 252.8829,404.5913 Q252.2438,404.7407 251.5382,404.7407 Q249.0314,404.7407 247.7115,403.0889 Q246.3917,401.437 246.3917,398.3159 Q246.3917,395.1865 247.7115,393.5347 Q249.0314,391.8828 251.5382,391.8828 Q252.2438,391.8828 252.8912,392.0322 Q253.5387,392.1816 254.1031,392.4805 L254.1031,395.2031 Q253.4723,394.6221 252.8788,394.3523 Q252.2853,394.0825 251.6544,394.0825 Q250.3097,394.0825 249.6249,395.1492 Q248.9401,396.2158 248.9401,398.3159 Q248.9401,400.4077 249.6249,401.4744 Q250.3097,402.541 251.6544,402.541 Q252.2853,402.541 252.8788,402.2712 Q253.4723,402.0015 254.1031,401.4204 Z " fill="black"/>
                    <text fill="black" font-family="sans-serif" font-size="14" x="265.63" y="403.291">sdfData</text>
                    <line x1="237.63" x2="319.63" y1="414" y2="414" stroke="black" stroke-width="0.5"/>
                    <line x1="237.63" x2="319.63" y1="422" y2="422" stroke="black" stroke-width="0.5"/>
                  </g>
                  <!--link sdfThing to sdfObject-->
    <g id="link_sdfThing_sdfObject">
                    <path d="M196.16,55.42 C207.75,75.52 224.51,104.54 236.94,126.08 " fill="none" id="sdfThing-to-sdfObject" stroke="black" stroke-width="1.0"/>
                    <polygon fill="black" points="239.41,130.35,238.3726,120.5559,236.9093,126.0203,231.445,124.557,239.41,130.35" stroke="black" stroke-width="1.0"/>
                    <text fill="black" font-family="sans-serif" font-size="13" x="222.63" y="98.5684">hasObject</text>
                    <text fill="black" font-family="sans-serif" font-size="13" x="216.4021" y="121.1091">0+</text>
                  </g>
                  <!--link sdfThing to sdfThing-->
    <g id="link_sdfThing_sdfThing">
                    <path d="M229.53,19.35 C248.35,18.69 264.13,22.58 264.13,31 C264.13,38.44 251.83,42.33 236,42.69 " fill="none" id="sdfThing-to-sdfThing" stroke="black" stroke-width="1.0"/>
                    <polygon fill="black" points="231.05,42.66,240.027,46.7114,236.0499,42.6886,240.0727,38.7115,231.05,42.66" stroke="black" stroke-width="1.0"/>
                    <text fill="black" font-family="sans-serif" font-size="13" x="270.13" y="36.0684">hasThing</text>
                    <text fill="black" font-family="sans-serif" font-size="13" x="237.0416" y="40.7969">0+</text>
                  </g>
                  <!--link sdfThing to sdfProperty-->
    <g id="link_sdfThing_sdfProperty">
                    <path d="M136,47.85 C99.23,63.1 50.46,90.1 27.63,132 C6,171.7 35.57,221.37 59.56,251.88 " fill="none" id="sdfThing-to-sdfProperty" stroke="black" stroke-width="1.0"/>
                    <polygon fill="black" points="62.41,255.43,59.8985,245.9068,59.2813,251.5298,53.6582,250.9127,62.41,255.43" stroke="black" stroke-width="1.0"/>
                    <text fill="black" font-family="sans-serif" font-size="13" x="28.63" y="161.0684">hasProperty</text>
                    <text fill="black" font-family="sans-serif" font-size="13" x="37.9817" y="246.443">0+</text>
                  </g>
                  <!--link sdfThing to sdfAction-->
    <g id="link_sdfThing_sdfAction">
                    <path d="M229.41,49.61 C250.34,58.6 274.73,70.67 294.63,85 C357.14,129.99 385.89,138.55 414.63,210 C419.75,222.7 419.78,237.77 418.22,250.67 " fill="none" id="sdfThing-to-sdfAction" stroke="black" stroke-width="1.0"/>
                    <polygon fill="black" points="417.55,255.31,422.7961,246.9746,418.2651,250.3614,414.8783,245.8304,417.55,255.31" stroke="black" stroke-width="1.0"/>
                    <text fill="black" font-family="sans-serif" font-size="13" x="400.63" y="161.0684">hasAction</text>
                    <text fill="black" font-family="sans-serif" font-size="13" x="398.4969" y="246.285">0+</text>
                  </g>
                  <!--link sdfThing to sdfEvent-->
    <g id="link_sdfThing_sdfEvent">
                    <path d="M164.06,55.38 C136.18,93.53 90.16,170.57 123.63,227 C129.23,236.43 149.15,248 169.5,257.92 " fill="none" id="sdfThing-to-sdfEvent" stroke="black" stroke-width="1.0"/>
                    <polygon fill="black" points="173.87,260.02,167.4833,252.5226,169.3613,257.8587,164.0252,259.7366,173.87,260.02" stroke="black" stroke-width="1.0"/>
                    <text fill="black" font-family="sans-serif" font-size="13" x="121.63" y="161.0684">hasEvent</text>
                    <text fill="black" font-family="sans-serif" font-size="13" x="149.5914" y="254.3466">0+</text>
                  </g>
                  <!--link sdfObject to sdfProperty-->
    <g id="link_sdfObject_sdfProperty">
                    <path d="M204.71,177.95 C186.9,186.64 167.11,197.61 150.63,210 C134.71,221.98 119.28,238.01 107.36,251.7 " fill="none" id="sdfObject-to-sdfProperty" stroke="black" stroke-width="1.0"/>
                    <polygon fill="black" points="104.12,255.48,113.0049,251.2306,107.3657,251.6767,106.9196,246.0374,104.12,255.48" stroke="black" stroke-width="1.0"/>
                    <text fill="black" font-family="sans-serif" font-size="13" x="151.63" y="223.5684">hasProperty</text>
                    <text fill="black" font-family="sans-serif" font-size="13" x="87.5644" y="246.0715">0+</text>
                  </g>
                  <!--link sdfObject to sdfAction-->
    <g id="link_sdfObject_sdfAction">
                    <path d="M283.72,180.42 C310.19,201.03 348.73,231.03 376.58,252.71 " fill="none" id="sdfObject-to-sdfAction" stroke="black" stroke-width="1.0"/>
                    <polygon fill="black" points="380.46,255.73,375.8181,247.0436,376.5155,252.6573,370.9019,253.3548,380.46,255.73" stroke="black" stroke-width="1.0"/>
                    <text fill="black" font-family="sans-serif" font-size="13" x="342.63" y="223.5684">hasAction</text>
                    <text fill="black" font-family="sans-serif" font-size="13" x="353.6739" y="246.1091">0+</text>
                  </g>
                  <!--link sdfObject to sdfEvent-->
    <g id="link_sdfObject_sdfEvent">
                    <path d="M247.35,180.42 C242,200.34 234.3,229.05 228.54,250.53 " fill="none" id="sdfObject-to-sdfEvent" stroke="black" stroke-width="1.0"/>
                    <polygon fill="black" points="227.29,255.2,233.4711,247.5323,228.5765,250.3684,225.7404,245.4738,227.29,255.2" stroke="black" stroke-width="1.0"/>
                    <text fill="black" font-family="sans-serif" font-size="13" x="239.63" y="223.5684">hasEvent</text>
                    <text fill="black" font-family="sans-serif" font-size="13" x="208.2004" y="246.1091">0+</text>
                  </g>
                  <!--link sdfAction to sdfData-->
    <g id="link_sdfAction_sdfData">
                    <path d="M380.17,305.36 C368.69,314.29 355.78,324.78 344.63,335 C330.27,348.17 315.29,363.87 303.24,377.07 " fill="none" id="sdfAction-to-sdfData" stroke="black" stroke-width="1.0"/>
                    <polygon fill="black" points="299.96,380.69,308.97,376.7126,303.3198,376.9871,303.0453,371.3369,299.96,380.69" stroke="black" stroke-width="1.0"/>
                    <text fill="black" font-family="sans-serif" font-size="13" x="345.63" y="348.5684">hasInputData</text>
                    <text fill="black" font-family="sans-serif" font-size="13" x="283.8382" y="371.2976">0+</text>
                  </g>
                  <!--link sdfAction to sdfData-->
    <g id="link_sdfAction_sdfData">
                    <path d="M429.32,305.37 C437.95,319.82 444.54,338.17 434.63,352 C410.38,385.85 363.27,398.34 327.13,402.82 " fill="none" id="sdfAction-to-sdfData-1" stroke="black" stroke-width="1.0"/>
                    <polygon fill="black" points="322.48,403.35,331.8779,406.2961,327.4473,402.779,330.9644,398.3484,322.48,403.35" stroke="black" stroke-width="1.0"/>
                    <text fill="black" font-family="sans-serif" font-size="13" x="439.63" y="348.5684">hasOutputData</text>
                    <text fill="black" font-family="sans-serif" font-size="13" x="328.522" y="399.6454">0+</text>
                  </g>
                  <!--link sdfEvent to sdfData-->
    <g id="link_sdfEvent_sdfData">
                    <path d="M209.17,305.42 C203.95,319.53 200.38,337.53 207.63,352 C213.04,362.77 221.78,371.92 231.32,379.42 " fill="none" id="sdfEvent-to-sdfData" stroke="black" stroke-width="1.0"/>
                    <polygon fill="black" points="235.15,382.28,230.3303,373.691,231.1431,379.2892,225.545,380.102,235.15,382.28" stroke="black" stroke-width="1.0"/>
                    <text fill="black" font-family="sans-serif" font-size="13" x="208.63" y="348.5684">hasOutputData</text>
                    <text fill="black" font-family="sans-serif" font-size="13" x="210.5093" y="376.1409">0+</text>
                  </g>
                  <!--link sdfProperty to sdfData-->
    <g id="link_sdfProperty_sdfData">
                    <path d="M89.02,305.4 C93.01,320.6 100.38,339.79 113.63,352 C145.64,381.48 194.15,394.57 230.3,400.38 " fill="none" id="sdfProperty-to-sdfData" stroke="black" stroke-width="1.0"/>
                    <polygon fill="black" points="234.94,401.08,226.6344,395.7868,229.9955,400.3369,225.4455,403.698,234.94,401.08" stroke="black" stroke-width="1.0"/>
                    <text fill="black" font-family="sans-serif" font-size="13" x="114.63" y="348.5684">isInstanceOf</text>
                    <text fill="black" font-family="sans-serif" font-size="13" x="220.5011" y="396.8099">1</text>
                  </g>
                  <!--SRC=[ZP7D2i8m48Jl-nIXLoderOCWwC5JFVW2CKrjHTBItGeYlhisc_u45knjTlYIcMKnBovbvMugJNSgMQyIXNcHNU_MaDggKYDhG8bZnsDUojIvhHlRqel1OPBPlQ6gTaoobhdZqxfGq4k0gVQoR06MmmLGJ0-lvzn1asRiv9gE-l4lcNKqe316BKB7NJszcSFLhm2ITiPc1O1vQCJfVc_upBomRcoENyTsM2GskN7i-HgzzGK0]-->
  </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[                  ,--------.           
                  |sdfThing|           
                  |--------|           
                  `--------'           
                                       
                                       
            ,---------.                
            |sdfObject|                
            |---------|                
            `---------'                
                                       
,-----------.  ,---------.   ,--------.
|sdfProperty|  |sdfAction|   |sdfEvent|
|-----------|  |---------|   |--------|
`-----------'  `---------'   `--------'
                    |                  
                                       
                ,-------.              
                |sdfData|              
                |-------|              
                `-------'              
]]></artwork>
          </artset>
        </figure>
        <t>The six main Class Name Keywords are discussed below.</t>
        <section anchor="sdfobject">
          <name>sdfObject</name>
          <t>sdfObjects, the items listed in an <tt>sdfObject</tt> definition group, are
the main "atom" of reusable semantics for model construction.
The concept aligns in scope with common definition items from many IoT modeling
systems, for example ZigBee Clusters <xref target="ZCL"/>, OMA SpecWorks LwM2M
Objects <xref target="OMA"/>, and
OCF Resource Types <xref target="OCF"/>.</t>
          <t>An sdfObject definition 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, sdfObject definitions are meant
to be kept narrow enough in scope to enable broad reuse and
interoperability.
For example, defining a light bulb using separate sdfObject
definitions for on/off control, dimming, and color control affordances
will enable interoperable functionality to be configured for diverse
product types.
An sdfObject definition for a common on/off control may be used to
control many 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 "<tt>minItems</tt>" to zero and leaving out "<tt>maxItems</tt>" puts the
minimum constraints on that array.)</t>
        </section>
        <section anchor="sdfproperty">
          <name>sdfProperty</name>
          <t><tt>sdfProperty</tt> is used to model elements of state within Things modeled
by the enclosing grouping.</t>
          <t>A named definition entry in an sdfProperty 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 sdfProperty.)</t>
          <t>Definitions in <tt>sdfProperty</tt> groups look like the definitions in
<tt>sdfData</tt> groups.
However, they actually also declare that a Property
with the given qualities potentially is present in the containing sdfObject.</t>
          <t>For definitions in <tt>sdfProperty</tt> and <tt>sdfData</tt>, SDF provides qualities
that can constrain the structure and values of data allowed in the
interactions modeled by them.
It also provides 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 sdfProperty definitions (and sdfData 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, which
model affordances that, when triggered,
have more effect than just reading, updating, or observing Thing
state.
Actions often result 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; for an example see <xref target="example-obj-type"/> in <xref target="type-object"/>.</t>
          <t>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
sdfProperty; 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 idempotence and side-effect
safety (see Section <xref target="RFC9110" section="9.2" sectionFormat="bare"/> of RFC 9110 <xref target="STD97"/> for more on these terms).</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 model
affordances that inform about "happenings" associated with a Thing
modeled by the enclosing sdfObject; these may result in a signal being
stored or emitted as a result.</t>
          <t>Note that there is a trivial overlap with sdfProperty state changes,
which may also be defined as events but are not generally required to
be defined as such.
However, Events may exhibit certain ordering, consistency, and
reliability requirements that are expected to be supported in various
implementations of sdfEvent 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 soliciting the event, 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
sdfProperty groups to enable common
modeling patterns, data constraints, and semantic anchor concepts to
be factored out for data items that make up sdfProperty items and
serve as input and output data for sdfAction and sdfEvent items.
The data types defined in sdfData definitions only spring to life by being referenced in
one of these contexts (directly or indirectly via some other sdfData
definitions).</t>
          <t>It is a common use case for such a data definition to be shared
between an sdfProperty item and input or output parameters of an
sdfAction or output data provided by an sdfEvent.
sdfData definitions also enable factoring out extended application
data types such as mode and machine state enumerations to be reused
across multiple definitions that have similar basic characteristics
and requirements.</t>
        </section>
        <section anchor="sdfthing">
          <name>sdfThing</name>
          <t>Back at the top level, the <tt>sdfThing</tt> group enables definition of models for
complex devices that will use one or more sdfObject definitions.
Like sdfObject, sdfThing groups allow for the inclusion of interaction
affordances, sdfData, as well as "<tt>minItems</tt>" and "<tt>maxItems</tt>" qualities.
Therefore, they can be seen as a superset of sdfObject groups, additionally
allowing for composition.</t>
          <t>As a result, an sdfThing directly or indirectly contains a set of sdfProperty, sdfAction, and
sdfEvent definitions that describe the interaction affordances
associated with some scope of functionality.</t>
          <t>A definition in an sdfThing group can refine the metadata of the definitions it
is composed of: other definitions in sdfThing groups or definitions in sdfObject groups.</t>
        </section>
      </section>
      <section anchor="member-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>
          <t>Note that the actual Given Names may need to be encoded when specified
via the JSON pointer fragment identifier syntax, and that there are
two layers of such encoding: tilde encoding of <tt>~</tt> and <tt>/</tt> as per
<xref section="3" sectionFormat="of" target="RFC6901"/>, and then percent encoding of the
tilde-encoded name into a valid URI fragment as per <xref section="6" sectionFormat="of" target="RFC6901"/>.
For example, when a model is using the Given Name</t>
          <artwork><![CDATA[
   warning/danger alarm
]]></artwork>
          <t>(with an embedded slash and a space) for an
sdfObject, that sdfObject may need to be referenced as</t>
          <artwork><![CDATA[
   #/sdfObject/warning~1danger%20alarm
]]></artwork>
          <t>To sidestep potential interoperability problems, it is probably wise
to avoid characters in Given Names that need such encoding (Quality
Names are already defined in such a way that they never do).</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"
registry in the "SDF Parameters" registry group (<xref target="qnp"/>).
They are
composed of lower case ASCII letters and digits, starting with a lower
case ASCII letter (i.e., using a pattern of "⁠<tt>[a-z][a-z0-9]*</tt>").</t>
          <t>Given Names are not restricted by the formal SDF syntax.
To enable non-surprising name translations in tools, combinations of
ASCII alphanumeric characters and <tt>-</tt> (ASCII hyphen/minus) are preferred,
typically employing kebab-case 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 can be thought of as having three blocks: the information
block, the namespaces block, and the definitions block.
These blocks contain zero or more JSON name/value pairs, the names of
which are quality names and the values of which mostly are (nested)
maps (the exception defined in SDF base is the defaultNamespace
quality, the value of which is a text string).
An empty nested map of this kind is equivalent to not having the
quality included at all.</t>
      <section anchor="information-block">
        <name>Information block</name>
        <t>The information block contains generic metadata 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 this map are shown in <xref target="infoblockqual"/>.
None of these qualities are required or have default values that are
assumed if the quality is absent.</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">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">title</td>
              <td align="left">string</td>
              <td align="left">A short summary to be displayed in search results, etc.</td>
            </tr>
            <tr>
              <td align="left">description</td>
              <td align="left">string</td>
              <td align="left">Long-form text description (no constraints)</td>
            </tr>
            <tr>
              <td align="left">version</td>
              <td align="left">string</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">Time of the latest modification</td>
            </tr>
            <tr>
              <td align="left">copyright</td>
              <td align="left">string</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">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">List of extension features used</td>
            </tr>
            <tr>
              <td align="left">$comment</td>
              <td align="left">string</td>
              <td align="left">Source code comments only, no semantics</td>
            </tr>
          </tbody>
        </table>
        <t>The version quality is used to indicate version information about the
set of definitions in the SDF document.
The version is <bcp14>RECOMMENDED</bcp14> to be lexicographically increasing over the life of a model: a newer model always has a version string that string-compares higher than all previous versions.
This is easily achieved by following the convention to start the version with an <xref target="RFC3339"/> <tt>date-time</tt> or, if new versions are generated less frequently than once a day, just the <tt>full-date</tt> (i.e., YYYY-MM-DD); in many cases, that will be all that is needed (see <xref target="example1"/> for an example).
This specification does not give a strict definition for the format of the version string but each using system or organization should define internal structure and semantics to the level needed for their use.
If no further details are provided, a <tt>date-time</tt> or <tt>full-date</tt> in
this field can be assumed to indicate the latest update time of the
definitions in the SDF document.</t>
        <t>The modified quality can be used with a value using <xref target="RFC3339"/> <tt>date-time</tt> (with <tt>Z</tt> for time-zone) or <tt>full-date</tt> format to express time of the latest revision of the definitions.</t>
        <t>The license string is preferably either a URI that points to a web page with an unambiguous definition of the license, or an <xref target="SPDX"/> license identifier.
(As an example, for models to be handled by the One Data Model liaison
group, this license identifier will typically be "BSD-3-Clause".)</t>
        <t>The <tt>features</tt> quality can be used to list names of critical (i.e., cannot be safely ignored) SDF extension features that need to be understood for the definitions to be properly processed.
Extension feature names will be specified in extension documents.</t>
      </section>
      <section anchor="namespaces-block">
        <name>Namespaces block</name>
        <t>The namespaces block contains the <tt>namespace</tt> map and the
<tt>defaultNamespace</tt> setting; none of these qualities are required or
have default values that are assumed if the quality is absent.</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">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">namespace</td>
              <td align="left">map</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">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>Multiple SDF documents can contribute to the same namespace by using
the same namespace URI for the default namespace across the documents.</t>
        <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 supplying 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 such as <tt>sdfObject</tt> or <tt>sdfProperty</tt>.
There can only be one group per keyword at this level; putting all the
individual definitions in the group under that keyword is just a
shortcut for identifying the class name keyword that applies to each
of them, without repeating it for each definition.</t>
        <t>The value of each group is a JSON map, the keys of which serve for naming the individual definitions in this group, and the corresponding values provide a set of qualities (name-value pairs) for the individual definition.
(In short, we speak of the map entries as "named sets of qualities".)</t>
        <t>Each group may contain zero or more definitions.
Each identifier defined creates a new type and term in the target namespace.
Declarations have a scope of the definition block they are
directly contained in.</t>
        <t>A definition may in turn contain other definitions. Each definition is a named set of qualities, i.e., it consists of the newly defined identifier and a set of key-value pairs that represent the defined qualities and contained definitions.</t>
        <t>An example for an sdfObject definition is given in <xref target="exobject"/>:</t>
        <figure anchor="exobject">
          <name>Example sdfObject definition</name>
          <sourcecode type="json"><![CDATA[
"sdfObject": {
  "foo": {
    "sdfProperty": {
      "bar": {
        "type": "boolean"
      }
    }
  }
}
]]></sourcecode>
        </figure>
        <t>This example defines an sdfObject "foo" that is defined in the default namespace (full address: <tt>#/sdfObject/foo</tt>), containing a property that can be addressed as
<tt>#/sdfObject/foo/sdfProperty/bar</tt>, with data of type boolean.
<!-- we could define a URN-style namespace that looks exactly that way -->
        </t>
        <t>Often, definitions are also declarations: the definition of the
entry "bar" in the property "foo" means that data corresponding to the
"foo" property in a property interaction offered by Thing can have zero or
one components modeled by "bar".
Entries within <tt>sdfProperty</tt>, <tt>sdfAction</tt>, and <tt>sdfEvent</tt> that are in
turn within <tt>sdfObject</tt> or <tt>sdfThing</tt> entries, are also declarations;
entries within <tt>sdfData</tt> are not.
Similarly, <tt>sdfObject</tt> or <tt>sdfThing</tt> entries within an sdfThing
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 anchor="top-level-affordances-and-sdfdata">
        <name>Top-level Affordances and sdfData</name>
        <t>Besides their placement within an sdfObject or sdfThing, affordances
(i.e., <tt>sdfProperty</tt>, <tt>sdfAction</tt>, and <tt>sdfEvent</tt>) as well as <tt>sdfData</tt> can
also be placed at the top level of an SDF document.
Since they are not associated with an sdfObject or sdfThing, these kinds of
definitions are intended to be re-used via the <tt>sdfRef</tt> mechanism
(see <xref target="sdfref"/>).</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"/> for a discussion of dereferenceable identifiers.)</t>
        <t>The absolute URI of a global name should be a URI as per Section <xref target="RFC3986" section="3" sectionFormat="bare"/> of RFC 3986 <xref target="STD66"/>, with a scheme of "https" and a path (<tt>hier-part</tt> in <xref target="STD66"/>).
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.
The absolute URI part is a copy of the default namespace.</t>
        <t>As a result, the
default namespace is always the target namespace for a name for which
a definition is contributed.
When we want to emphasize 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 (Section <xref target="RFC3986" section="4.3" sectionFormat="bare"/> of RFC 3986 <xref target="STD66"/>) from the fragment identifier part (including the <tt>#</tt>, a
JSON Pointer as in <xref section="6" sectionFormat="of" target="RFC6901"/>).</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 Section 3
of <xref target="W3C.NOTE-curie-20101216"/>, but limiting the IRIs involved in that grammar to URIs as
per <xref target="STD66"/> and the prefixes to ASCII characters <xref target="STD80"/>.
(Note that this definition does not make use of the production
<tt>safe-curie</tt> in <xref target="W3C.NOTE-curie-20101216"/>.)</t>
        <t>A name that is contributed by the current SDF document can be
referenced by a Same-Document Reference as per Section <xref target="RFC3986" section="4.4" sectionFormat="bare"/> of RFC 3986 <xref target="STD66"/>.
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 to 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 <tt>sdfRef</tt> is used
to copy 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 <tt>$ref</tt> keyword in <xref target="JSO7"/>.)
The referenced definition should be such that, after copying and
applying the additional qualities in the referencing definition, the
newly built definition is also valid SDF (e.g., the copied qualities
and definitions are valid in the context of the new definition).</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, how the merge-patch
algorithm causes null values within 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 <tt>sdfRequired</tt> is provided to apply a constraint that
defines for which declarations the corresponding data are mandatory in a
grouping (sdfThing or sdfObject) modeled by the current definition.</t>
        <t>The value of <tt>sdfRequired</tt> is an array of references, each indicating
one or more declarations that are mandatory to be represented.</t>
        <t>References in this array can be SDF names (JSON Pointers), or one of
two abbreviated reference formats:</t>
        <ul spacing="normal">
          <li>
            <t>a text string with a "referenceable-name", namely an affordance name
or a grouping name:  </t>
            <ul spacing="normal">
              <li>
                <t>All affordance declarations that are directly in the same grouping
(i.e., not nested further in another grouping) and that carry this
name are declared to be mandatory to be represented.
Note that there can be multiple such affordance declarations, one
per affordance type.</t>
              </li>
              <li>
                <t>The same applies to groupings made mandatory within groupings
containing them.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>the Boolean value <tt>true</tt>.
The affordance or grouping itself that carries the <tt>sdfRequired</tt>
keyword is declared to be mandatory to be represented.</t>
          </li>
        </ul>
        <t>Note that referenceable-names are not
subject to the encoding JSON pointers require as discussed in <xref target="hierarchical-names"/>.
To ensure that referenceable-names are reliably distinguished from JSON pointers,
they are defined such that they cannot contain ":" or
"#" characters (see rule <tt>referenceable-name</tt> in <xref target="syntax"/>).
(If these characters are indeed contained in a Given Name, a JSON
pointer needs to be formed instead in order to reference it in "sdfRequired",
potentially requiring further path elements as well as JSON pointer
encoding.  The need for this is best avoided by choosing Given Names
without these characters.)</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 for the sdfProperty "currentTemperature" and for the 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",
      "writable": false
      }
    },
    "sdfEvent": {
      "overTemperatureEvent": {
       "sdfOutputData": {
"sdfRef": "#/sdfObject/temperatureWithAlarm/sdfData/temperatureData"
        }
      }
    }
  }
}
]]></sourcecode>
        </figure>
        <t>In <xref target="example-req"/>, the same sdfRequired can also be represented in
short form:</t>
        <sourcecode type="json"><![CDATA[
    "sdfRequired": ["currentTemperature", "overTemperatureEvent"]
]]></sourcecode>
        <t>Or, for instance "overTemperatureEvent" could carry</t>
        <sourcecode type="json"><![CDATA[
      "overTemperatureEvent": {
        "sdfRequired": [true],
        "...": "..."
      }
]]></sourcecode>
      </section>
      <section anchor="common-qualities">
        <name>Common Qualities</name>
        <t>Definitions in SDF share a number of qualities that provide metadata for
them.  These are listed in <xref target="tbl-common-qualities"/>.  None of these
qualities are required or have default values that are assumed if the
quality is absent.
If a short textual description is required for an application and no
label is given in the SDF model, in its place applications could use
the last part (the last <tt>reference-token</tt>, <xref section="3" sectionFormat="of" target="RFC6901"/>) of
the JSON pointer to the definition.</t>
        <table anchor="tbl-common-qualities">
          <name>Common Qualities</name>
          <thead>
            <tr>
              <th align="left">Quality</th>
              <th align="left">Type</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">description</td>
              <td align="left">string</td>
              <td align="left">long text (no constraints)</td>
            </tr>
            <tr>
              <td align="left">label</td>
              <td align="left">string</td>
              <td align="left">short text (no constraints)</td>
            </tr>
            <tr>
              <td align="left">$comment</td>
              <td align="left">string</td>
              <td align="left">source code comments only, no semantics</td>
            </tr>
            <tr>
              <td align="left">sdfRef</td>
              <td align="left">sdf-pointer</td>
              <td align="left">(see <xref target="sdfref"/>)</td>
            </tr>
            <tr>
              <td align="left">sdfRequired</td>
              <td align="left">pointer-list</td>
              <td align="left">(see <xref target="sdfrequired"/>, used in affordances or groupings)</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="data-qualities">
        <name>Data Qualities</name>
        <t>Data qualities are used in sdfData and sdfProperty definitions,
which are named sets of data qualities (abbreviated as <tt>named-sdq</tt>).</t>
        <t>These qualities include the common qualities, JSO-inspired qualities
(see below), and data qualities defined specifically for the present
specification; the latter are shown in <xref target="sdfdataqual2"/>.
None of these qualities are required or have default values that are
assumed if the quality is absent.</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>
        <table anchor="sdfdataqual2">
          <name>SDF-defined Qualities of sdfData and 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">(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>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; the definition pointed to may be useful to
humans, though.
(See <xref target="I-D.bormann-t2trg-deref-id"/> for a more extensive discussion of dereferenceable
identifiers).  </t>
            <t>
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  "sdfType
values" registry in the "SDF Parameters" registry group
(<xref target="sdftype-values"/>).
The sdfType 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 kebab-case for
names constructed out of multiple words <xref target="KebabCase"/>.</t>
          <t>To aid interworking with JSO implementations, it is <bcp14>RECOMMENDED</bcp14>
that sdfType 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 sdfType 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 sdfType 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">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">Section <xref target="RFC8949" section="3.4.5.2" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/></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</td>
                <td align="left">Section <xref target="RFC8949" section="3.4.2" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/></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>
        </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 could be expressed as  </t>
              <sourcecode type="json"><![CDATA[
"enum": ["foo", "bar", "baz"]
]]></sourcecode>
              <t>
in JSO, 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 bigzee 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 JSO, 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="kw-defgroups">
      <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 <tt>sdfObject</tt> keyword denotes a group of zero or more sdfObject definitions.
sdfObject definitions may contain or include definitions of named Properties, Actions, Events declared for the sdfObject, as well as named data types (sdfData group) to be used in this or other sdfObjects.</t>
        <t>The qualities of an sdfObject include the common qualities;
additional qualities are shown in <xref target="sdfobjqual"/>.
None of these
qualities are required or have default values that are assumed if the
quality is absent.</t>
        <table anchor="sdfobjqual">
          <name>Qualities of sdfObject</name>
          <thead>
            <tr>
              <th align="left">Quality</th>
              <th align="left">Type</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">(common)</td>
              <td align="left"> </td>
              <td align="left">
                <xref target="common-qualities"/></td>
            </tr>
            <tr>
              <td align="left">sdfProperty</td>
              <td align="left">property</td>
              <td align="left">zero or more named property definitions for this sdfObject</td>
            </tr>
            <tr>
              <td align="left">sdfAction</td>
              <td align="left">action</td>
              <td align="left">zero or more named action definitions for this sdfObject</td>
            </tr>
            <tr>
              <td align="left">sdfEvent</td>
              <td align="left">event</td>
              <td align="left">zero or more named event definitions for this sdfObject</td>
            </tr>
            <tr>
              <td align="left">sdfData</td>
              <td align="left">named-sdq</td>
              <td align="left">zero or more named data type definitions that might be used in the above</td>
            </tr>
            <tr>
              <td align="left">minItems</td>
              <td align="left">number</td>
              <td align="left">(array) Minimum number of multiplied affordances in array</td>
            </tr>
            <tr>
              <td align="left">maxItems</td>
              <td align="left">number</td>
              <td align="left">(array) Maximum number of multiplied affordances in array</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="sdfproperty-1">
        <name>sdfProperty</name>
        <t>The <tt>sdfProperty</tt> 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 <tt>sdfAction</tt> keyword denotes a group of zero or more Action definitions.</t>
        <t>Actions are used to model commands and methods which are invoked.
Actions may have parameter data that are supplied upon invocation and
output data that is provided as a direct result of the invocation of
the action (note that "action objects" may also be created to furnish
ongoing information during a long-running action; these would be
pointed to by the output data).</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 <tt>sdfEvent</tt> 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 <tt>sdfData</tt> 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.
sdfData is not itself a declaration, so it does not cause any of these
data items to be included in an affordance definition.</t>
        <t>The qualities of sdfData include the data qualities (and thus the common qualities), see <xref target="data-qualities"/>.</t>
      </section>
    </section>
    <section anchor="high-level-composition">
      <name>High Level Composition</name>
      <t>The requirements for high level composition include the following:</t>
      <ul spacing="normal">
        <li>
          <t>The ability to represent products, standardized product types, and modular products while maintaining the atomicity of sdfObjects.</t>
        </li>
        <li>
          <t>The ability to compose a reusable definition block from sdfObjects.
Example: a single plug unit of an outlet strip with sdfObjects
for on/off control, energy monitor, and optional dimmer, while
retaining the atomicity of the individual sdfObjects.</t>
        </li>
        <li>
          <t>The ability to compose sdfObjects and other definition blocks into a higher level sdfThing that represents a product, while retaining the atomicity of sdfObjects.</t>
        </li>
        <li>
          <t>The ability to enrich and refine a base definition to have
product-specific qualities and quality values, such as unit, range, and scale settings.</t>
        </li>
        <li>
          <t>The ability to reference items in one part of a complex definition
from another part of the same definition.
Example: summarizing the energy readings from all plugs in an outlet
strip.</t>
        </li>
      </ul>
      <section anchor="paths-in-the-model-namespaces">
        <name>Paths in the model namespaces</name>
        <t>The model namespace is organized according to terms that are defined
in the SDF documents that contribute to the namespace. For example, definitions that originate from an organization or vendor are expected to be in a namespace that is specific to that organization or vendor.</t>
        <t>The structure of a path in a namespace is defined by the JSON Pointers
to the definitions in the SDF documents in that namespace.
For example, if there is an SDF document defining an sdfObject "<tt>Switch</tt>"
with an action "<tt>on</tt>", then the reference to the action would be
"<tt>ns:/sdfObject/Switch/sdfAction/on</tt>" 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 uses the keyword <tt>sdfRef</tt> 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 <tt>sdfRef</tt>, 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 the definition referenced by <tt>sdfRef</tt> might contain
qualities or definitions that are not valid in the context where the
<tt>sdfRef</tt> is used.
In this case, the resulting model, when resolved, may be invalid.
Example: an sdfRef adds an sdfThing definition in an sdfObject
definition.</t>
          <t>As a convention, overrides are intended to be used only for further
restricting the allowable set of data values.
Such a usage is shown in <xref target="exa-sdfref"/>:  any value allowable for a
<tt>cable-length</tt> also is an allowable 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 the example provides a <tt>description</tt> that overrides the
<tt>description</tt> 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">
            <name>Using an Override to Further Restrict the Set of Data Values</name>
            <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 parts
of an SDF model for this example).</t>
        <t>sdfThing definitions carry semantic meaning, such as a defined refrigerator compartment and a defined freezer compartment, making up a combination refrigerator-freezer product.
An sdfThing may be composed of sdfObjects and other sdfThings.
It can also contain sdfData definitions, as well as declarations of interaction affordances itself, such
as a status (on/off) for the refrigerator-freezer as a whole (see
<xref target="exa-sdfthing-fridge-freezer"/> in <xref target="fridge-freezer-example"/> for an example SDF
model illustrating these aspects).</t>
        <t>The qualities of sdfThing are shown in <xref target="sdfthingqual"/>.
Analogous to sdfObject, the presence of one or both of the optional
qualities "<tt>minItems</tt>" and "<tt>maxItems</tt>" defines the sdfThing as an
array.</t>
        <table anchor="sdfthingqual">
          <name>Qualities of sdfThing</name>
          <thead>
            <tr>
              <th align="left">Quality</th>
              <th align="left">Type</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">(common)</td>
              <td align="left"> </td>
              <td align="left">
                <xref target="common-qualities"/></td>
            </tr>
            <tr>
              <td align="left">sdfThing</td>
              <td align="left">thing</td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">sdfObject</td>
              <td align="left">object</td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">sdfProperty</td>
              <td align="left">property</td>
              <td align="left">zero or more named property definitions for this thing</td>
            </tr>
            <tr>
              <td align="left">sdfAction</td>
              <td align="left">action</td>
              <td align="left">zero or more named action definitions for this thing</td>
            </tr>
            <tr>
              <td align="left">sdfEvent</td>
              <td align="left">event</td>
              <td align="left">zero or more named event definitions for this thing</td>
            </tr>
            <tr>
              <td align="left">sdfData</td>
              <td align="left">named-sdq</td>
              <td align="left">zero or more named data type definitions that might be used in the above</td>
            </tr>
            <tr>
              <td align="left">minItems</td>
              <td align="left">number</td>
              <td align="left">(array) Minimum number of multiplied affordances in array</td>
            </tr>
            <tr>
              <td align="left">maxItems</td>
              <td align="left">number</td>
              <td align="left">(array) Maximum number of multiplied affordances in array</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t><cref anchor="replace-xxxx">RFC Ed.: throughout this section, please replace RFC XXXX with this RFC number, and remove this note.</cref></t>
      <section anchor="media-type">
        <name>Media Type</name>
        <t>IANA is requested to add the following Media-Type to the "Media Types" registry.</t>
        <table align="left">
          <name>Media Type Registration for SDF</name>
          <thead>
            <tr>
              <th align="left">Name</th>
              <th align="left">Template</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">sdf+json</td>
              <td align="left">application/sdf+json</td>
              <td align="left">RFC XXXX, <xref target="media-type"/></td>
            </tr>
          </tbody>
        </table>
        <dl spacing="compact">
          <dt>Type name:</dt>
          <dd>
            <t>application</t>
          </dd>
          <dt>Subtype name:</dt>
          <dd>
            <t>sdf+json</t>
          </dd>
          <dt>Required parameters:</dt>
          <dd>
            <t>none</t>
          </dd>
          <dt>Optional parameters:</dt>
          <dd>
            <t>none</t>
          </dd>
          <dt>Encoding considerations:</dt>
          <dd>
            <t>binary (JSON is UTF-8-encoded text)</t>
          </dd>
          <dt>Security considerations:</dt>
          <dd>
            <t><xref target="seccons"/> of RFC XXXX</t>
          </dd>
          <dt>Interoperability considerations:</dt>
          <dd>
            <t>none</t>
          </dd>
          <dt>Published specification:</dt>
          <dd>
            <t><xref target="media-type"/> of RFC XXXX</t>
          </dd>
          <dt>Applications that use this media type:</dt>
          <dd>
            <t>Tools for data and interaction modeling in the Internet of Things
and related environments</t>
          </dd>
          <dt>Fragment identifier considerations:</dt>
          <dd>
            <t>A JSON Pointer fragment identifier may be used, as defined in
<xref section="6" sectionFormat="of" target="RFC6901"/>.</t>
          </dd>
          <dt>Additional information:</dt>
          <dd>
            <dl>
              <dt>Magic number(s):</dt>
              <dd>
                <t>n/a</t>
              </dd>
              <dt>File extension(s):</dt>
              <dd>
                <t>.sdf.json</t>
              </dd>
              <dt>Windows Clipboard Name:</dt>
              <dd>
                <t>"Semantic Definition Format (SDF) for Data and Interactions of Things"</t>
              </dd>
              <dt>Macintosh file type code(s):</dt>
              <dd>
                <t>n/a</t>
              </dd>
              <dt>Macintosh Universal Type Identifier code:</dt>
              <dd>
                <t>org.ietf.sdf-json<br/>
conforms to public.text</t>
              </dd>
            </dl>
          </dd>
          <dt>Person &amp; email address to contact for further information:</dt>
          <dd>
            <t>ASDF WG mailing list (asdf@ietf.org),
or IETF Applications and Real-Time Area (art@ietf.org)</t>
          </dd>
          <dt>Intended usage:</dt>
          <dd>
            <t>COMMON</t>
          </dd>
          <dt>Restrictions on usage:</dt>
          <dd>
            <t>none</t>
          </dd>
          <dt>Author/Change controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
          <dt>Provisional registration:</dt>
          <dd>
            <t>no</t>
          </dd>
        </dl>
      </section>
      <section anchor="content-format">
        <name>Content-Format</name>
        <t>This document adds the following Content-Format to the "CoAP
Content-Formats" registry,
within the "Constrained RESTful Environments (CoRE) Parameters"
registry group, where 434 comes from the "IETF Review" 256-999 range.</t>
        <table align="left">
          <name>SDF Content-format Registration</name>
          <thead>
            <tr>
              <th align="left">Content Type</th>
              <th align="left">Content Coding</th>
              <th align="left">ID</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">application/sdf+json</td>
              <td align="left">-</td>
              <td align="left">434</td>
              <td align="left">RFC XXXX</td>
            </tr>
          </tbody>
        </table>
        <t>// RFC Ed.: 434 was earmarked in <eref target="https://mailarchive.ietf.org/arch/msg/core-parameters/iLDsdxk80YO9IsLMXMAgcx5S8Ak/">https://mailarchive.ietf.org/arch/msg/core-parameters/iLDsdxk80YO9IsLMXMAgcx5S8Ak/</eref>;
please replace 434 with the assigned ID, remove the
requested range, and remove this note.<br/>
// RFC Ed.: please replace RFC XXXX with this RFC number and remove this note.</t>
      </section>
      <section anchor="unit-urn">
        <name>IETF URN Sub-namespace for Unit Names (urn:ietf:params:unit)</name>
        <t>IANA is requested to register the following value in the "<xref section="IETF URN Sub-namespace for Registered Protocol Parameter Identifiers" relative="#params-1" sectionFormat="bare" target="IANA.params"/>" registry in <xref target="IANA.params"/>, following the template in
<xref target="BCP73"/>:</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 (Section <xref target="RFC3986" section="2.1" sectionFormat="bare"/> of RFC 3986 <xref target="STD66"/>) is required of
any characters in unit names as required by ABNF rule "pchar" in
Section <xref target="RFC3986" section="3.3" sectionFormat="bare"/> of RFC 3986 <xref target="STD66"/>, 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 group, with the
registries defined in this Section.</t>
        <section anchor="qn">
          <name>Quality Names</name>
          <t>IANA is requested to create a "Quality Names" registry in
the "SDF Parameters" registry group, with the following template:</t>
          <dl>
            <dt>Name:</dt>
            <dd>
              <t>A quality name composed of ASCII letters, digits, and dollar signs, starting
with a lower case ASCII letter or a dollar sign (i.e., using a
pattern of "⁠<tt>[a-z$][A-Za-z$0-9]*</tt>").</t>
            </dd>
            <dt>Brief Description:</dt>
            <dd>
              <t>A brief description.</t>
            </dd>
            <dt>Reference:</dt>
            <dd>
              <t>A pointer to a specification.</t>
            </dd>
            <dt>Change Controller:</dt>
            <dd>
              <t>(see Section <xref target="RFC8126" section="2.3" sectionFormat="bare"/> of RFC 8126 <xref target="BCP26"/>)</t>
            </dd>
          </dl>
          <t>Quality Names in this registry are intended to be registered in
conjunction with RFCs and activities of the IETF.</t>
          <t>The registration policy is Specification Required as per Section <xref target="RFC8126" section="4.6" sectionFormat="bare"/> of RFC 8126 <xref target="BCP26"/>.
(Note that the policy is not "RFC Required" or "IETF Review" Sections <xref target="RFC8126" section="4.7" sectionFormat="bare"/> and <xref target="RFC8126" section="4.8" sectionFormat="bare"/> of RFC 8126 <xref target="BCP26"/> so that registrations can be made earlier
in the process, even earlier than foreseen in <xref target="BCP100"/>.)</t>
          <t>The instructions to the Experts are:
* to ascertain that the specification is available in an immutable
  reference and has achieved a good level of review in conjunction with
  RFCs or activities of the IETF, and
* to be frugal in the allocation of quality names that are suggestive
  of generally applicable semantics, keeping them in reserve for
  qualities that are likely to enjoy wide use and can make good use of
  their conciseness.</t>
          <t>The "Quality Names" registry starts out as in
<xref target="tab-quality-names"/>; all references for these initial entries are to
RFC XXXX and all change controllers are given as "IETF"".</t>
          <table anchor="tab-quality-names">
            <name>Initial Content of Quality Names Registry</name>
            <thead>
              <tr>
                <th align="left">Name</th>
                <th align="left">Brief Description</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">$comment</td>
                <td align="left">source code comments only, no semantics</td>
              </tr>
              <tr>
                <td align="left">const</td>
                <td align="left">constant value</td>
              </tr>
              <tr>
                <td align="left">contentFormat</td>
                <td align="left">content format</td>
              </tr>
              <tr>
                <td align="left">default</td>
                <td align="left">default value</td>
              </tr>
              <tr>
                <td align="left">description</td>
                <td align="left">long description text</td>
              </tr>
              <tr>
                <td align="left">enum</td>
                <td align="left">sdfChoice limited to text strings</td>
              </tr>
              <tr>
                <td align="left">exclusiveMaximum</td>
                <td align="left">exclusive maximum for a number</td>
              </tr>
              <tr>
                <td align="left">exclusiveMinimum</td>
                <td align="left">exclusive minimum for a number</td>
              </tr>
              <tr>
                <td align="left">format</td>
                <td align="left">specific format for a text string</td>
              </tr>
              <tr>
                <td align="left">items</td>
                <td align="left">items of an array</td>
              </tr>
              <tr>
                <td align="left">label</td>
                <td align="left">short text (no constraints); defaults to key</td>
              </tr>
              <tr>
                <td align="left">maxItems</td>
                <td align="left">maximum number of items in an array</td>
              </tr>
              <tr>
                <td align="left">maxLength</td>
                <td align="left">maximum length (in characters) for a text string</td>
              </tr>
              <tr>
                <td align="left">maximum</td>
                <td align="left">maximum for a number</td>
              </tr>
              <tr>
                <td align="left">minItems</td>
                <td align="left">minimum number of items in an array</td>
              </tr>
              <tr>
                <td align="left">minLength</td>
                <td align="left">minimum length (in characters) for a text string</td>
              </tr>
              <tr>
                <td align="left">minimum</td>
                <td align="left">minimum for a number</td>
              </tr>
              <tr>
                <td align="left">multipleOf</td>
                <td align="left">step size of number</td>
              </tr>
              <tr>
                <td align="left">nullable</td>
                <td align="left">boolean: can the item be left out?</td>
              </tr>
              <tr>
                <td align="left">observable</td>
                <td align="left">boolean: can the item be observed?</td>
              </tr>
              <tr>
                <td align="left">pattern</td>
                <td align="left">regular expression pattern for a text string</td>
              </tr>
              <tr>
                <td align="left">properties</td>
                <td align="left">named dataqualities for type="object"</td>
              </tr>
              <tr>
                <td align="left">readable</td>
                <td align="left">boolean: can the item be read?</td>
              </tr>
              <tr>
                <td align="left">required</td>
                <td align="left">which data items are required?</td>
              </tr>
              <tr>
                <td align="left">sdfChoice</td>
                <td align="left">named dataqualities for a choice</td>
              </tr>
              <tr>
                <td align="left">sdfData</td>
                <td align="left">named dataqualities for an independent data type definition</td>
              </tr>
              <tr>
                <td align="left">sdfInputData</td>
                <td align="left">input data to an action</td>
              </tr>
              <tr>
                <td align="left">sdfOutputData</td>
                <td align="left">output data of an action or event (sdfRequired applies here)</td>
              </tr>
              <tr>
                <td align="left">sdfRef</td>
                <td align="left">sdf-pointer to definition being referenced</td>
              </tr>
              <tr>
                <td align="left">sdfRequired</td>
                <td align="left">pointer-list to declarations of required components</td>
              </tr>
              <tr>
                <td align="left">sdfRequiredInputData</td>
                <td align="left">pointer-list to declarations of required input data for an action</td>
              </tr>
              <tr>
                <td align="left">sdfType</td>
                <td align="left">more detailed information about the type of a string</td>
              </tr>
              <tr>
                <td align="left">type</td>
                <td align="left">general category of data type</td>
              </tr>
              <tr>
                <td align="left">uniqueItems</td>
                <td align="left">boolean: do the items of the array need to be all different?</td>
              </tr>
              <tr>
                <td align="left">unit</td>
                <td align="left">engineering unit and scale (per SenML registry)</td>
              </tr>
              <tr>
                <td align="left">writable</td>
                <td align="left">boolean: can the item be written to?</td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="qnp">
          <name>Quality Name Prefixes</name>
          <t>IANA is requested to create a "Quality Name Prefixes" registry in
the "SDF Parameters" registry group, with the following template:</t>
          <dl>
            <dt>Prefix:</dt>
            <dd>
              <t>A quality name prefix 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>
            <dt>Reference:</dt>
            <dd>
              <t>A pointer to additional information, if available.</t>
            </dd>
          </dl>
          <t>Quality Name Prefixes are intended to be registered by organizations
that plan to define quality names constructed with an
organization-specifix prefix (<xref target="gnqn"/>).</t>
          <t>The registration policy is Expert Review as per Section <xref target="RFC8126" section="4.5" sectionFormat="bare"/> of RFC 8126 <xref target="BCP26"/>.
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" (Section <xref target="RFC8126" section="4.6" sectionFormat="bare"/> of RFC 8126 <xref target="BCP26"/>).</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" registry starts out empty.</t>
        </section>
        <section anchor="sdftype-values">
          <name>sdfType Values</name>
          <t>IANA is requested to create a "sdfType values" registry in
the "SDF Parameters" registry group, 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 Section <xref target="RFC8126" section="4.6" sectionFormat="bare"/> of RFC 8126 <xref target="BCP26"/>.  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="sdftype1"/>.</t>
        </section>
      </section>
    </section>
    <section anchor="seccons">
      <name>Security Considerations</name>
      <t>Some wider security considerations applicable to Things are discussed
in <xref target="RFC8576"/>.</t>
      <t><xref section="5" sectionFormat="of" target="RFC8610"/> gives an overview over security considerations
that arise when formal description techniques are used to govern
interoperability; analogs of these security considerations can apply
to SDF.</t>
      <t>The security considerations of underlying building blocks such as
those detailed in Section <xref target="RFC3629" section="10" sectionFormat="bare"/> of RFC 3629 <xref target="STD63"/> apply.</t>
      <t>SDF uses JSON as a representation language.
For a number of
cases, <xref target="STD90"/> indicates that implementation behavior for certain constructs
allowed by the JSON grammar is unpredictable.</t>
      <t>Implementations need to be robust against invalid or unpredictable
cases on input, preferably by rejecting input that is invalid or
that would lead to unpredictable behavior, and need to avoid generating
these cases on output.</t>
      <t>Implementations of model languages may also exhibit
performance-related availability issues when the attacker can control
the input, see <xref section="4.1" sectionFormat="of" target="RFC9535"/> for a brief discussion and
<xref section="8" sectionFormat="of" target="RFC9485"/> for considerations specific to the use
of <tt>pattern</tt>.</t>
      <t>SDF may be used in two processes that are often security relevant:
model-based <em>validation</em> of data that is intended to be described by SDF models, and
model-based <em>augmentation</em> of these data with information obtained from the SDF
models that apply.</t>
      <t>Implementations need to ascertain the provenance (and thus
authenticity and integrity) and applicability of
the SDF models they employ operationally in such security relevant ways.
Implementations that make use of the composition mechanisms defined in this
document need to do this for each of the components they combine
into the SDF models they employ.
Essentially, this process needs to undergo the same care and scrutiny
as any other introduction of source code into a build environment; the
possibility of supply-chain attacks on the modules imported needs to
be considered.</t>
      <t>Specifically, implementations might rely on model-based input
validation for enforcing certain properties of the data structure
ingested (which, if not validated, could lead to malfunctions such as
crashes and remote code execution).
These implementations need to be particularly careful
about the data models they apply, including their provenance and
potential changes of these properties that upgrades to the referenced
modules may (inadvertently or as part of an attack) cause.
More generally speaking, implementations should strive to be robust
against expected and unexpected limitations of the model-based input
validation mechanisms and their implementations.</t>
      <t>Similarly, implementations that rely on model-based augmentation may
generate false data from their inputs; this is an integrity violation
in any case but also can possibly be exploited for further attacks.</t>
      <t>In applications that dynamically acquire models and obtain modules
from module references in these, the security considerations of
dereferenceable identifiers apply (see <xref target="I-D.bormann-t2trg-deref-id"/> for a more extensive
discussion of dereferenceable identifiers).</t>
      <t>There may be confidentiality requirements on SDF models, both on their
content and on the fact that a specific model is used in a particular
Thing or environment.
The present specification does not discuss model discovery or define
an access control model for SDF models, nor does it define a way to
obtain selective disclosure where that may be required.
It is likely that these definitions require additional context from
underlying ecosystems and the characteristics of the protocols
employed there; this is therefore left as future work (e.g., for
documents such as <xref target="I-D.bormann-asdf-sdf-mapping"/>).</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-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>
        <referencegroup anchor="STD66" target="https://www.rfc-editor.org/info/std66">
          <reference anchor="RFC3986" target="https://www.rfc-editor.org/info/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>
        </referencegroup>
        <reference anchor="RFC9562">
          <front>
            <title>Universally Unique IDentifiers (UUIDs)</title>
            <author fullname="K. Davis" initials="K." surname="Davis"/>
            <author fullname="B. Peabody" initials="B." surname="Peabody"/>
            <author fullname="P. Leach" initials="P." surname="Leach"/>
            <date month="May" year="2024"/>
            <abstract>
              <t>This specification defines UUIDs (Universally Unique IDentifiers) --
also known as GUIDs (Globally Unique IDentifiers) -- and a Uniform
Resource Name namespace for UUIDs. A UUID is 128 bits long and is
intended to guarantee uniqueness across space and time. UUIDs were
originally used in the Apollo Network Computing System (NCS), later
in the Open Software Foundation's (OSF's) Distributed Computing
Environment (DCE), and then in Microsoft Windows platforms.</t>
              <t>This specification is derived from the OSF DCE specification with the
kind permission of the OSF (now known as "The Open Group"). Information from earlier versions of the OSF DCE specification have
been incorporated into this document. This document obsoletes RFC
4122.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9562"/>
          <seriesInfo name="DOI" value="10.17487/RFC9562"/>
        </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>
        <referencegroup anchor="STD63" target="https://www.rfc-editor.org/info/std63">
          <reference anchor="RFC3629" target="https://www.rfc-editor.org/info/rfc3629">
            <front>
              <title>UTF-8, a transformation format of ISO 10646</title>
              <author fullname="F. Yergeau" initials="F." surname="Yergeau"/>
              <date month="November" year="2003"/>
              <abstract>
                <t>ISO/IEC 10646-1 defines a large character set called the Universal Character Set (UCS) which encompasses most of the world's writing systems. The originally proposed encodings of the UCS, however, were not compatible with many current applications and protocols, and this has led to the development of UTF-8, the object of this memo. UTF-8 has the characteristic of preserving the full US-ASCII range, providing compatibility with file systems, parsers and other software that rely on US-ASCII values but are transparent to other values. This memo obsoletes and replaces RFC 2279.</t>
              </abstract>
            </front>
            <seriesInfo name="STD" value="63"/>
            <seriesInfo name="RFC" value="3629"/>
            <seriesInfo name="DOI" value="10.17487/RFC3629"/>
          </reference>
        </referencegroup>
        <referencegroup anchor="STD90" target="https://www.rfc-editor.org/info/std90">
          <reference anchor="RFC8259" target="https://www.rfc-editor.org/info/rfc8259">
            <front>
              <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
              <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
              <date month="December" year="2017"/>
              <abstract>
                <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data.</t>
                <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
              </abstract>
            </front>
            <seriesInfo name="STD" value="90"/>
            <seriesInfo name="RFC" value="8259"/>
            <seriesInfo name="DOI" value="10.17487/RFC8259"/>
          </reference>
        </referencegroup>
        <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>
        <referencegroup anchor="STD94" target="https://www.rfc-editor.org/info/std94">
          <reference anchor="RFC8949" target="https://www.rfc-editor.org/info/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>
        </referencegroup>
        <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>
        <referencegroup anchor="BCP26" target="https://www.rfc-editor.org/info/bcp26">
          <reference anchor="RFC8126" target="https://www.rfc-editor.org/info/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>
        </referencegroup>
        <referencegroup anchor="BCP73" target="https://www.rfc-editor.org/info/bcp73">
          <reference anchor="RFC3553" target="https://www.rfc-editor.org/info/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>
        </referencegroup>
        <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>
        <referencegroup anchor="STD80" target="https://www.rfc-editor.org/info/std80">
          <reference anchor="RFC0020" target="https://www.rfc-editor.org/info/rfc20">
            <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>
        </referencegroup>
        <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:.plus,.cat, and.det for the construction of constants;.abnf/.abnfb for including ABNF (RFC 5234 and RFC 7405) in CDDL specifications; and.feature 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>
        <referencegroup anchor="BCP14" target="https://www.rfc-editor.org/info/bcp14">
          <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/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" target="https://www.rfc-editor.org/info/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>
        </referencegroup>
      </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="21" month="October" year="2024"/>
            <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-15"/>
        </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"/>
          <seriesInfo name="ISBN" value="[&quot;9780750685979&quot;]"/>
          <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="6" month="December" year="2024"/>
            <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-04"/>
        </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>Hochschule Emden/Leer</organization>
            </author>
            <date day="6" month="December" year="2024"/>
            <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
   that describe Things, i.e., physical objects that are available for
   interaction over a network.  It was created as a common language for
   use in the development of the One Data Model liaison organization
   (OneDM) models.  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-05"/>
        </reference>
        <reference anchor="I-D.bormann-t2trg-deref-id">
          <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="1" month="September" year="2024"/>
            <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 revision -04 includes a few clarifications.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-bormann-t2trg-deref-id-04"/>
        </reference>
        <reference anchor="RFC9485">
          <front>
            <title>I-Regexp: An Interoperable Regular Expression Format</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="T. Bray" initials="T." surname="Bray"/>
            <date month="October" year="2023"/>
            <abstract>
              <t>This document specifies I-Regexp, a flavor of regular expression that is limited in scope with the goal of interoperation across many different regular expression libraries.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9485"/>
          <seriesInfo name="DOI" value="10.17487/RFC9485"/>
        </reference>
        <reference anchor="RFC9535">
          <front>
            <title>JSONPath: Query Expressions for JSON</title>
            <author fullname="S. Gössner" initials="S." role="editor" surname="Gössner"/>
            <author fullname="G. Normington" initials="G." role="editor" surname="Normington"/>
            <author fullname="C. Bormann" initials="C." role="editor" surname="Bormann"/>
            <date month="February" year="2024"/>
            <abstract>
              <t>JSONPath defines a string syntax for selecting and extracting JSON (RFC 8259) values from within a given JSON value.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9535"/>
          <seriesInfo name="DOI" value="10.17487/RFC9535"/>
        </reference>
        <referencegroup anchor="STD97" target="https://www.rfc-editor.org/info/std97">
          <reference anchor="RFC9110" target="https://www.rfc-editor.org/info/rfc9110">
            <front>
              <title>HTTP Semantics</title>
              <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
              <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
              <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
              <date month="June" year="2022"/>
              <abstract>
                <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
                <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
              </abstract>
            </front>
            <seriesInfo name="STD" value="97"/>
            <seriesInfo name="RFC" value="9110"/>
            <seriesInfo name="DOI" value="10.17487/RFC9110"/>
          </reference>
        </referencegroup>
        <referencegroup anchor="BCP100" target="https://www.rfc-editor.org/info/bcp100">
          <reference anchor="RFC7120" target="https://www.rfc-editor.org/info/rfc7120">
            <front>
              <title>Early IANA Allocation of Standards Track Code Points</title>
              <author fullname="M. Cotton" initials="M." surname="Cotton"/>
              <date month="January" year="2014"/>
              <abstract>
                <t>This memo describes the process for early allocation of code points by IANA from registries for which "Specification Required", "RFC Required", "IETF Review", or "Standards Action" policies apply. This process can be used to alleviate the problem where code point allocation is needed to facilitate desired or required implementation and deployment experience prior to publication of an RFC, which would normally trigger code point allocation. The procedures in this document are intended to apply only to IETF Stream documents.</t>
              </abstract>
            </front>
            <seriesInfo name="BCP" value="100"/>
            <seriesInfo name="RFC" value="7120"/>
            <seriesInfo name="DOI" value="10.17487/RFC7120"/>
          </reference>
        </referencegroup>
      </references>
    </references>
    <?line 2204?>

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

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

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

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

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

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

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

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

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

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

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

)

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

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

parameter-list = dataqualities

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

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

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

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

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

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

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

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

jsonschema = (
 ? (("type" => "number" / "string" / "boolean" / "integer" / "array")
    // compound-type
    // (type: text .feature "type-ext")             ; EXTENSION-POINT
   )
 ; if present, all other qualities apply to all choices:
 optional-choice
 ; the next three should validate against type:
 ? const: allowed-types
 ? default: allowed-types
 ; number/integer constraints
 ? minimum: number
 ? maximum: number
 ? exclusiveMinimum: number
 ? exclusiveMaximum: number
 ? multipleOf: number
 ; 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 informative 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: 2024-02-29T07:42:35Z",
+  "title": "sdf-framework.cddl -- Generated: 2024-02-29T07:42:52Z",
   "$schema": "http://json-schema.org/draft-07/schema#",
   "$ref": "#/definitions/sdf-syntax",
   "definitions": {
     "sdf-syntax": {
       "type": "object",
       "properties": {
         "info": {
           "$ref": "#/definitions/sdfinfo"
         },
         "namespace": {
           "type": "object",
           "additionalProperties": {
             "type": "string"
           }
         },
         "defaultNamespace": {
           "type": "string"
         },
         "sdfThing": {
           "type": "object",
           "additionalProperties": {
             "$ref": "#/definitions/thingqualities"
           }
         },
         "sdfObject": {
           "type": "object",
           "additionalProperties": {
             "$ref": "#/definitions/objectqualities"
           }
         },
         "sdfProperty": {
           "$ref": "#/definitions/sdfProperty-"
         },
         "sdfAction": {
           "$ref": "#/definitions/sdfAction-"
         },
         "sdfEvent": {
           "$ref": "#/definitions/sdfEvent-"
         },
         "sdfData": {
           "$ref": "#/definitions/sdfData-sdfChoice-properties-"
         }
       },
+      "patternProperties": {
+        "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {
+        }
+      },
       "additionalProperties": false
     },
     "sdfinfo": {
       "type": "object",
       "properties": {
         "title": {
           "type": "string"
         },
         "description": {
           "type": "string"
         },
         "version": {
           "type": "string"
         },
         "copyright": {
           "type": "string"
         },
         "license": {
           "type": "string"
         },
         "modified": {
           "$ref": "#/definitions/modified-date-time"
         },
         "features": {
-          "type": "array",
-          "maxItems": 0
+          "type": "array"
         },
         "$comment": {
           "type": "string"
         }
       },
+      "patternProperties": {
+        "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {
+        }
+      },
       "additionalProperties": false
     },
     "modified-date-time": {
       "type": "string"
     },
     "thingqualities": {
       "type": "object",
       "properties": {
         "description": {
           "type": "string"
         },
         "label": {
           "type": "string"
         },
         "$comment": {
           "type": "string"
         },
         "sdfRef": {
           "$ref": "#/definitions/sdf-pointer"
         },
         "sdfRequired": {
           "$ref": "#/definitions/pointer-list"
         },
         "sdfObject": {
           "type": "object",
           "additionalProperties": {
             "$ref": "#/definitions/objectqualities"
           }
         },
         "sdfThing": {
           "type": "object",
           "additionalProperties": {
             "$ref": "#/definitions/thingqualities"
           }
         },
         "sdfProperty": {
           "$ref": "#/definitions/sdfProperty-"
         },
         "sdfAction": {
           "$ref": "#/definitions/sdfAction-"
         },
         "sdfEvent": {
           "$ref": "#/definitions/sdfEvent-"
         },
         "sdfData": {
           "$ref": "#/definitions/sdfData-sdfChoice-properties-"
         },
         "minItems": {
           "$ref": "#/definitions/uint"
         },
         "maxItems": {
           "$ref": "#/definitions/uint"
         }
       },
+      "patternProperties": {
+        "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {
+        }
+      },
       "additionalProperties": false
     },
     "sdf-pointer": {
       "anyOf": [
         {
           "$ref": "#/definitions/global"
         },
         {
           "$ref": "#/definitions/same-object"
         },
         {
           "$ref": "#/definitions/true"
         }
       ]
     },
     "global": {
       "type": "string",
       "pattern": "^[^\\n\\r]*[:#][^\\n\\r]*$"
     },
     "same-object": {
       "$ref": "#/definitions/referenceable-name"
     },
     "referenceable-name": {
       "type": "string",
       "pattern": "^[^:#]*$"
     },
     "true": {
       "type": "boolean",
       "const": true
     },
     "pointer-list": {
       "type": "array",
       "items": {
         "$ref": "#/definitions/sdf-pointer"
       }
     },
     "objectqualities": {
       "type": "object",
       "properties": {
         "description": {
           "type": "string"
         },
         "label": {
           "type": "string"
         },
         "$comment": {
           "type": "string"
         },
         "sdfRef": {
           "$ref": "#/definitions/sdf-pointer"
         },
         "sdfRequired": {
           "$ref": "#/definitions/pointer-list"
         },
         "sdfProperty": {
           "$ref": "#/definitions/sdfProperty-"
         },
         "sdfAction": {
           "$ref": "#/definitions/sdfAction-"
         },
         "sdfEvent": {
           "$ref": "#/definitions/sdfEvent-"
         },
         "sdfData": {
           "$ref": "#/definitions/sdfData-sdfChoice-properties-"
         },
         "minItems": {
           "$ref": "#/definitions/uint"
         },
         "maxItems": {
           "$ref": "#/definitions/uint"
         }
       },
+      "patternProperties": {
+        "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {
+        }
+      },
       "additionalProperties": false
     },
     "propertyqualities": {
       "anyOf": [
         {
           "type": "object",
+          "patternProperties": {
+            "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {
+            }
+          },
           "properties": {
             "type": {
               "$ref": "#/definitions/type-"
             },
             "sdfChoice": {
               "$ref": "#/definitions/sdfData-sdfChoice-properties-"
             },
             "observable": {
               "type": "boolean"
             },
             "readable": {
               "type": "boolean"
             },
             "writable": {
               "type": "boolean"
             },
             "description": {
               "type": "string"
             },
             "label": {
               "type": "string"
             },
             "$comment": {
               "type": "string"
             },
             "sdfRef": {
               "$ref": "#/definitions/sdf-pointer"
             },
             "sdfRequired": {
               "$ref": "#/definitions/pointer-list"
             },
             "const": {
               "$ref": "#/definitions/allowed-types"
             },
             "default": {
               "$ref": "#/definitions/allowed-types"
             },
             "minimum": {
               "type": "number"
             },
             "maximum": {
               "type": "number"
             },
             "exclusiveMinimum": {
               "type": "number"
             },
             "exclusiveMaximum": {
               "type": "number"
             },
             "multipleOf": {
               "type": "number"
             },
             "minLength": {
               "$ref": "#/definitions/uint"
             },
             "maxLength": {
               "$ref": "#/definitions/uint"
             },
             "pattern": {
               "type": "string"
             },
             "format": {
               "$ref": "#/definitions/format-"
             },
             "minItems": {
               "$ref": "#/definitions/uint"
             },
             "maxItems": {
               "$ref": "#/definitions/uint"
             },
             "uniqueItems": {
               "type": "boolean"
             },
             "items": {
               "$ref": "#/definitions/jso-items"
             },
             "unit": {
               "type": "string"
             },
             "nullable": {
               "type": "boolean"
             },
             "sdfType": {
               "$ref": "#/definitions/sdfType-"
             },
             "contentFormat": {
               "type": "string"
             }
           },
           "additionalProperties": false
         },
         {
           "type": "object",
+          "patternProperties": {
+            "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {
+            }
+          },
+          "properties": {
+            "type": {
+              "type": "string",
+              "const": "object"
+            },
+            "required": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              },
+              "minItems": 1
+            },
+            "properties": {
+              "$ref": "#/definitions/sdfData-sdfChoice-properties-"
+            },
+            "sdfChoice": {
+              "$ref": "#/definitions/sdfData-sdfChoice-properties-"
+            },
+            "observable": {
+              "type": "boolean"
+            },
+            "readable": {
+              "type": "boolean"
+            },
+            "writable": {
+              "type": "boolean"
+            },
+            "description": {
+              "type": "string"
+            },
+            "label": {
+              "type": "string"
+            },
+            "$comment": {
+              "type": "string"
+            },
+            "sdfRef": {
+              "$ref": "#/definitions/sdf-pointer"
+            },
+            "sdfRequired": {
+              "$ref": "#/definitions/pointer-list"
+            },
+            "const": {
+              "$ref": "#/definitions/allowed-types"
+            },
+            "default": {
+              "$ref": "#/definitions/allowed-types"
+            },
+            "minimum": {
+              "type": "number"
+            },
+            "maximum": {
+              "type": "number"
+            },
+            "exclusiveMinimum": {
+              "type": "number"
+            },
+            "exclusiveMaximum": {
+              "type": "number"
+            },
+            "multipleOf": {
+              "type": "number"
+            },
+            "minLength": {
+              "$ref": "#/definitions/uint"
+            },
+            "maxLength": {
+              "$ref": "#/definitions/uint"
+            },
+            "pattern": {
+              "type": "string"
+            },
+            "format": {
+              "$ref": "#/definitions/format-"
+            },
+            "minItems": {
+              "$ref": "#/definitions/uint"
+            },
+            "maxItems": {
+              "$ref": "#/definitions/uint"
+            },
+            "uniqueItems": {
+              "type": "boolean"
+            },
+            "items": {
+              "$ref": "#/definitions/jso-items"
+            },
+            "unit": {
+              "type": "string"
+            },
+            "nullable": {
+              "type": "boolean"
+            },
+            "sdfType": {
+              "$ref": "#/definitions/sdfType-"
+            },
+            "contentFormat": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        {
+          "type": "object",
+          "patternProperties": {
+            "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {
+            }
+          },
+          "properties": {
+            "type": {
+              "type": "string"
+            },
+            "sdfChoice": {
+              "$ref": "#/definitions/sdfData-sdfChoice-properties-"
+            },
+            "observable": {
+              "type": "boolean"
+            },
+            "readable": {
+              "type": "boolean"
+            },
+            "writable": {
+              "type": "boolean"
+            },
+            "description": {
+              "type": "string"
+            },
+            "label": {
+              "type": "string"
+            },
+            "$comment": {
+              "type": "string"
+            },
+            "sdfRef": {
+              "$ref": "#/definitions/sdf-pointer"
+            },
+            "sdfRequired": {
+              "$ref": "#/definitions/pointer-list"
+            },
+            "const": {
+              "$ref": "#/definitions/allowed-types"
+            },
+            "default": {
+              "$ref": "#/definitions/allowed-types"
+            },
+            "minimum": {
+              "type": "number"
+            },
+            "maximum": {
+              "type": "number"
+            },
+            "exclusiveMinimum": {
+              "type": "number"
+            },
+            "exclusiveMaximum": {
+              "type": "number"
+            },
+            "multipleOf": {
+              "type": "number"
+            },
+            "minLength": {
+              "$ref": "#/definitions/uint"
+            },
+            "maxLength": {
+              "$ref": "#/definitions/uint"
+            },
+            "pattern": {
+              "type": "string"
+            },
+            "format": {
+              "$ref": "#/definitions/format-"
+            },
+            "minItems": {
+              "$ref": "#/definitions/uint"
+            },
+            "maxItems": {
+              "$ref": "#/definitions/uint"
+            },
+            "uniqueItems": {
+              "type": "boolean"
+            },
+            "items": {
+              "$ref": "#/definitions/jso-items"
+            },
+            "unit": {
+              "type": "string"
+            },
+            "nullable": {
+              "type": "boolean"
+            },
+            "sdfType": {
+              "$ref": "#/definitions/sdfType-"
+            },
+            "contentFormat": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        {
+          "type": "object",
+          "patternProperties": {
+            "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {
+            }
+          },
+          "properties": {
+            "type": {
+              "$ref": "#/definitions/type-"
+            },
+            "enum": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              },
+              "minItems": 1
+            },
+            "observable": {
+              "type": "boolean"
+            },
+            "readable": {
+              "type": "boolean"
+            },
+            "writable": {
+              "type": "boolean"
+            },
+            "description": {
+              "type": "string"
+            },
+            "label": {
+              "type": "string"
+            },
+            "$comment": {
+              "type": "string"
+            },
+            "sdfRef": {
+              "$ref": "#/definitions/sdf-pointer"
+            },
+            "sdfRequired": {
+              "$ref": "#/definitions/pointer-list"
+            },
+            "const": {
+              "$ref": "#/definitions/allowed-types"
+            },
+            "default": {
+              "$ref": "#/definitions/allowed-types"
+            },
+            "minimum": {
+              "type": "number"
+            },
+            "maximum": {
+              "type": "number"
+            },
+            "exclusiveMinimum": {
+              "type": "number"
+            },
+            "exclusiveMaximum": {
+              "type": "number"
+            },
+            "multipleOf": {
+              "type": "number"
+            },
+            "minLength": {
+              "$ref": "#/definitions/uint"
+            },
+            "maxLength": {
+              "$ref": "#/definitions/uint"
+            },
+            "pattern": {
+              "type": "string"
+            },
+            "format": {
+              "$ref": "#/definitions/format-"
+            },
+            "minItems": {
+              "$ref": "#/definitions/uint"
+            },
+            "maxItems": {
+              "$ref": "#/definitions/uint"
+            },
+            "uniqueItems": {
+              "type": "boolean"
+            },
+            "items": {
+              "$ref": "#/definitions/jso-items"
+            },
+            "unit": {
+              "type": "string"
+            },
+            "nullable": {
+              "type": "boolean"
+            },
+            "sdfType": {
+              "$ref": "#/definitions/sdfType-"
+            },
+            "contentFormat": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        {
+          "type": "object",
+          "patternProperties": {
+            "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {
+            }
+          },
+          "properties": {
+            "type": {
+              "type": "string",
+              "const": "object"
+            },
+            "required": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              },
+              "minItems": 1
+            },
+            "properties": {
+              "$ref": "#/definitions/sdfData-sdfChoice-properties-"
+            },
+            "enum": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              },
+              "minItems": 1
+            },
+            "observable": {
+              "type": "boolean"
+            },
+            "readable": {
+              "type": "boolean"
+            },
+            "writable": {
+              "type": "boolean"
+            },
+            "description": {
+              "type": "string"
+            },
+            "label": {
+              "type": "string"
+            },
+            "$comment": {
+              "type": "string"
+            },
+            "sdfRef": {
+              "$ref": "#/definitions/sdf-pointer"
+            },
+            "sdfRequired": {
+              "$ref": "#/definitions/pointer-list"
+            },
+            "const": {
+              "$ref": "#/definitions/allowed-types"
+            },
+            "default": {
+              "$ref": "#/definitions/allowed-types"
+            },
+            "minimum": {
+              "type": "number"
+            },
+            "maximum": {
+              "type": "number"
+            },
+            "exclusiveMinimum": {
+              "type": "number"
+            },
+            "exclusiveMaximum": {
+              "type": "number"
+            },
+            "multipleOf": {
+              "type": "number"
+            },
+            "minLength": {
+              "$ref": "#/definitions/uint"
+            },
+            "maxLength": {
+              "$ref": "#/definitions/uint"
+            },
+            "pattern": {
+              "type": "string"
+            },
+            "format": {
+              "$ref": "#/definitions/format-"
+            },
+            "minItems": {
+              "$ref": "#/definitions/uint"
+            },
+            "maxItems": {
+              "$ref": "#/definitions/uint"
+            },
+            "uniqueItems": {
+              "type": "boolean"
+            },
+            "items": {
+              "$ref": "#/definitions/jso-items"
+            },
+            "unit": {
+              "type": "string"
+            },
+            "nullable": {
+              "type": "boolean"
+            },
+            "sdfType": {
+              "$ref": "#/definitions/sdfType-"
+            },
+            "contentFormat": {
+              "type": "string"
+            }
+          },
+          "additionalProperties": false
+        },
+        {
+          "type": "object",
+          "patternProperties": {
+            "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {
+            }
+          },
           "properties": {
             "type": {
-              "type": "string",
-              "const": "object"
+              "type": "string"
             },
-            "required": {
+            "enum": {
               "type": "array",
               "items": {
                 "type": "string"
               },
               "minItems": 1
             },
-            "properties": {
-              "$ref": "#/definitions/sdfData-sdfChoice-properties-"
-            },
-            "sdfChoice": {
-              "$ref": "#/definitions/sdfData-sdfChoice-properties-"
-            },
             "observable": {
               "type": "boolean"
             },
             "readable": {
               "type": "boolean"
             },
             "writable": {
               "type": "boolean"
             },
             "description": {
               "type": "string"
             },
             "label": {
               "type": "string"
             },
             "$comment": {
               "type": "string"
             },
             "sdfRef": {
               "$ref": "#/definitions/sdf-pointer"
             },
             "sdfRequired": {
               "$ref": "#/definitions/pointer-list"
             },
             "const": {
               "$ref": "#/definitions/allowed-types"
             },
             "default": {
               "$ref": "#/definitions/allowed-types"
             },
             "minimum": {
               "type": "number"
             },
             "maximum": {
               "type": "number"
             },
             "exclusiveMinimum": {
               "type": "number"
             },
             "exclusiveMaximum": {
               "type": "number"
             },
             "multipleOf": {
               "type": "number"
             },
             "minLength": {
               "$ref": "#/definitions/uint"
             },
             "maxLength": {
               "$ref": "#/definitions/uint"
             },
             "pattern": {
               "type": "string"
             },
             "format": {
               "$ref": "#/definitions/format-"
             },
             "minItems": {
               "$ref": "#/definitions/uint"
             },
             "maxItems": {
               "$ref": "#/definitions/uint"
             },
             "uniqueItems": {
               "type": "boolean"
             },
             "items": {
               "$ref": "#/definitions/jso-items"
             },
             "unit": {
               "type": "string"
             },
             "nullable": {
               "type": "boolean"
             },
             "sdfType": {
               "$ref": "#/definitions/sdfType-"
             },
             "contentFormat": {
               "type": "string"
             }
           },
           "additionalProperties": false
-        },
+        }
+      ]
+    },
+    "dataqualities": {
+      "anyOf": [
         {
           "type": "object",
+          "patternProperties": {
+            "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {
+            }
+          },
           "properties": {
             "type": {
               "$ref": "#/definitions/type-"
             },
-            "enum": {
-              "type": "array",
-              "items": {
-                "type": "string"
-              },
-              "minItems": 1
-            },
-            "observable": {
-              "type": "boolean"
-            },
-            "readable": {
-              "type": "boolean"
-            },
-            "writable": {
-              "type": "boolean"
+            "sdfChoice": {
+              "$ref": "#/definitions/sdfData-sdfChoice-properties-"
             },
             "description": {
               "type": "string"
             },
             "label": {
               "type": "string"
             },
             "$comment": {
               "type": "string"
             },
             "sdfRef": {
               "$ref": "#/definitions/sdf-pointer"
             },
             "sdfRequired": {
               "$ref": "#/definitions/pointer-list"
             },
             "const": {
               "$ref": "#/definitions/allowed-types"
             },
             "default": {
               "$ref": "#/definitions/allowed-types"
             },
             "minimum": {
               "type": "number"
             },
             "maximum": {
               "type": "number"
             },
             "exclusiveMinimum": {
               "type": "number"
             },
             "exclusiveMaximum": {
               "type": "number"
             },
             "multipleOf": {
               "type": "number"
             },
             "minLength": {
               "$ref": "#/definitions/uint"
             },
             "maxLength": {
               "$ref": "#/definitions/uint"
             },
             "pattern": {
               "type": "string"
             },
             "format": {
               "$ref": "#/definitions/format-"
             },
             "minItems": {
               "$ref": "#/definitions/uint"
             },
             "maxItems": {
               "$ref": "#/definitions/uint"
             },
             "uniqueItems": {
               "type": "boolean"
             },
             "items": {
               "$ref": "#/definitions/jso-items"
             },
             "unit": {
               "type": "string"
             },
             "nullable": {
               "type": "boolean"
             },
             "sdfType": {
               "$ref": "#/definitions/sdfType-"
             },
             "contentFormat": {
               "type": "string"
             }
           },
           "additionalProperties": false
         },
         {
           "type": "object",
+          "patternProperties": {
+            "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {
+            }
+          },
           "properties": {
             "type": {
               "type": "string",
               "const": "object"
             },
             "required": {
               "type": "array",
               "items": {
                 "type": "string"
               },
               "minItems": 1
             },
             "properties": {
               "$ref": "#/definitions/sdfData-sdfChoice-properties-"
             },
-            "enum": {
-              "type": "array",
-              "items": {
-                "type": "string"
-              },
-              "minItems": 1
-            },
-            "observable": {
-              "type": "boolean"
-            },
-            "readable": {
-              "type": "boolean"
-            },
-            "writable": {
-              "type": "boolean"
+            "sdfChoice": {
+              "$ref": "#/definitions/sdfData-sdfChoice-properties-"
             },
             "description": {
               "type": "string"
             },
             "label": {
               "type": "string"
             },
             "$comment": {
               "type": "string"
             },
             "sdfRef": {
               "$ref": "#/definitions/sdf-pointer"
             },
             "sdfRequired": {
               "$ref": "#/definitions/pointer-list"
             },
             "const": {
               "$ref": "#/definitions/allowed-types"
             },
             "default": {
               "$ref": "#/definitions/allowed-types"
             },
             "minimum": {
               "type": "number"
             },
             "maximum": {
               "type": "number"
             },
             "exclusiveMinimum": {
               "type": "number"
             },
             "exclusiveMaximum": {
               "type": "number"
             },
             "multipleOf": {
               "type": "number"
             },
             "minLength": {
               "$ref": "#/definitions/uint"
             },
             "maxLength": {
               "$ref": "#/definitions/uint"
             },
             "pattern": {
               "type": "string"
             },
             "format": {
               "$ref": "#/definitions/format-"
             },
             "minItems": {
               "$ref": "#/definitions/uint"
             },
             "maxItems": {
               "$ref": "#/definitions/uint"
             },
             "uniqueItems": {
               "type": "boolean"
             },
             "items": {
               "$ref": "#/definitions/jso-items"
             },
             "unit": {
               "type": "string"
             },
             "nullable": {
               "type": "boolean"
             },
             "sdfType": {
               "$ref": "#/definitions/sdfType-"
             },
             "contentFormat": {
               "type": "string"
             }
           },
           "additionalProperties": false
-        }
-      ]
-    },
-    "dataqualities": {
-      "anyOf": [
+        },
         {
           "type": "object",
+          "patternProperties": {
+            "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {
+            }
+          },
           "properties": {
             "type": {
-              "$ref": "#/definitions/type-"
+              "type": "string"
             },
             "sdfChoice": {
               "$ref": "#/definitions/sdfData-sdfChoice-properties-"
             },
             "description": {
               "type": "string"
             },
             "label": {
               "type": "string"
             },
             "$comment": {
               "type": "string"
             },
             "sdfRef": {
               "$ref": "#/definitions/sdf-pointer"
             },
             "sdfRequired": {
               "$ref": "#/definitions/pointer-list"
             },
             "const": {
               "$ref": "#/definitions/allowed-types"
             },
             "default": {
               "$ref": "#/definitions/allowed-types"
             },
             "minimum": {
               "type": "number"
             },
             "maximum": {
               "type": "number"
             },
             "exclusiveMinimum": {
               "type": "number"
             },
             "exclusiveMaximum": {
               "type": "number"
             },
             "multipleOf": {
               "type": "number"
             },
             "minLength": {
               "$ref": "#/definitions/uint"
             },
             "maxLength": {
               "$ref": "#/definitions/uint"
             },
             "pattern": {
               "type": "string"
             },
             "format": {
               "$ref": "#/definitions/format-"
             },
             "minItems": {
               "$ref": "#/definitions/uint"
             },
             "maxItems": {
               "$ref": "#/definitions/uint"
             },
             "uniqueItems": {
               "type": "boolean"
             },
             "items": {
               "$ref": "#/definitions/jso-items"
             },
             "unit": {
               "type": "string"
             },
             "nullable": {
               "type": "boolean"
             },
             "sdfType": {
               "$ref": "#/definitions/sdfType-"
             },
             "contentFormat": {
               "type": "string"
             }
           },
           "additionalProperties": false
         },
         {
           "type": "object",
+          "patternProperties": {
+            "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {
+            }
+          },
           "properties": {
             "type": {
-              "type": "string",
-              "const": "object"
+              "$ref": "#/definitions/type-"
             },
-            "required": {
+            "enum": {
               "type": "array",
               "items": {
                 "type": "string"
               },
               "minItems": 1
             },
-            "properties": {
-              "$ref": "#/definitions/sdfData-sdfChoice-properties-"
-            },
-            "sdfChoice": {
-              "$ref": "#/definitions/sdfData-sdfChoice-properties-"
-            },
             "description": {
               "type": "string"
             },
             "label": {
               "type": "string"
             },
             "$comment": {
               "type": "string"
             },
             "sdfRef": {
               "$ref": "#/definitions/sdf-pointer"
             },
             "sdfRequired": {
               "$ref": "#/definitions/pointer-list"
             },
             "const": {
               "$ref": "#/definitions/allowed-types"
             },
             "default": {
               "$ref": "#/definitions/allowed-types"
             },
             "minimum": {
               "type": "number"
             },
             "maximum": {
               "type": "number"
             },
             "exclusiveMinimum": {
               "type": "number"
             },
             "exclusiveMaximum": {
               "type": "number"
             },
             "multipleOf": {
               "type": "number"
             },
             "minLength": {
               "$ref": "#/definitions/uint"
             },
             "maxLength": {
               "$ref": "#/definitions/uint"
             },
             "pattern": {
               "type": "string"
             },
             "format": {
               "$ref": "#/definitions/format-"
             },
             "minItems": {
               "$ref": "#/definitions/uint"
             },
             "maxItems": {
               "$ref": "#/definitions/uint"
             },
             "uniqueItems": {
               "type": "boolean"
             },
             "items": {
               "$ref": "#/definitions/jso-items"
             },
             "unit": {
               "type": "string"
             },
             "nullable": {
               "type": "boolean"
             },
             "sdfType": {
               "$ref": "#/definitions/sdfType-"
             },
             "contentFormat": {
               "type": "string"
             }
           },
           "additionalProperties": false
         },
         {
           "type": "object",
+          "patternProperties": {
+            "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {
+            }
+          },
           "properties": {
             "type": {
-              "$ref": "#/definitions/type-"
+              "type": "string",
+              "const": "object"
+            },
+            "required": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              },
+              "minItems": 1
+            },
+            "properties": {
+              "$ref": "#/definitions/sdfData-sdfChoice-properties-"
             },
             "enum": {
               "type": "array",
               "items": {
                 "type": "string"
               },
               "minItems": 1
             },
             "description": {
               "type": "string"
             },
             "label": {
               "type": "string"
             },
             "$comment": {
               "type": "string"
             },
             "sdfRef": {
               "$ref": "#/definitions/sdf-pointer"
             },
             "sdfRequired": {
               "$ref": "#/definitions/pointer-list"
             },
             "const": {
               "$ref": "#/definitions/allowed-types"
             },
             "default": {
               "$ref": "#/definitions/allowed-types"
             },
             "minimum": {
               "type": "number"
             },
             "maximum": {
               "type": "number"
             },
             "exclusiveMinimum": {
               "type": "number"
             },
             "exclusiveMaximum": {
               "type": "number"
             },
             "multipleOf": {
               "type": "number"
             },
             "minLength": {
               "$ref": "#/definitions/uint"
             },
             "maxLength": {
               "$ref": "#/definitions/uint"
             },
             "pattern": {
               "type": "string"
             },
             "format": {
               "$ref": "#/definitions/format-"
             },
             "minItems": {
               "$ref": "#/definitions/uint"
             },
             "maxItems": {
               "$ref": "#/definitions/uint"
             },
             "uniqueItems": {
               "type": "boolean"
             },
             "items": {
               "$ref": "#/definitions/jso-items"
             },
             "unit": {
               "type": "string"
             },
             "nullable": {
               "type": "boolean"
             },
             "sdfType": {
               "$ref": "#/definitions/sdfType-"
             },
             "contentFormat": {
               "type": "string"
             }
           },
           "additionalProperties": false
         },
         {
           "type": "object",
+          "patternProperties": {
+            "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {
+            }
+          },
           "properties": {
             "type": {
-              "type": "string",
-              "const": "object"
-            },
-            "required": {
-              "type": "array",
-              "items": {
-                "type": "string"
-              },
-              "minItems": 1
-            },
-            "properties": {
-              "$ref": "#/definitions/sdfData-sdfChoice-properties-"
+              "type": "string"
             },
             "enum": {
               "type": "array",
               "items": {
                 "type": "string"
               },
               "minItems": 1
             },
             "description": {
               "type": "string"
             },
             "label": {
               "type": "string"
             },
             "$comment": {
               "type": "string"
             },
             "sdfRef": {
               "$ref": "#/definitions/sdf-pointer"
             },
             "sdfRequired": {
               "$ref": "#/definitions/pointer-list"
             },
             "const": {
               "$ref": "#/definitions/allowed-types"
             },
             "default": {
               "$ref": "#/definitions/allowed-types"
             },
             "minimum": {
               "type": "number"
             },
             "maximum": {
               "type": "number"
             },
             "exclusiveMinimum": {
               "type": "number"
             },
             "exclusiveMaximum": {
               "type": "number"
             },
             "multipleOf": {
               "type": "number"
             },
             "minLength": {
               "$ref": "#/definitions/uint"
             },
             "maxLength": {
               "$ref": "#/definitions/uint"
             },
             "pattern": {
               "type": "string"
             },
             "format": {
               "$ref": "#/definitions/format-"
             },
             "minItems": {
               "$ref": "#/definitions/uint"
             },
             "maxItems": {
               "$ref": "#/definitions/uint"
             },
             "uniqueItems": {
               "type": "boolean"
             },
             "items": {
               "$ref": "#/definitions/jso-items"
             },
             "unit": {
               "type": "string"
             },
             "nullable": {
               "type": "boolean"
             },
             "sdfType": {
               "$ref": "#/definitions/sdfType-"
             },
             "contentFormat": {
               "type": "string"
             }
           },
           "additionalProperties": false
         }
       ]
     },
     "allowed-types": {
       "anyOf": [
         {
           "type": "number"
         },
         {
           "type": "string"
         },
         {
           "type": "boolean"
         },
         {
           "type": "null"
         },
         {
           "type": "array",
           "items": {
             "type": "number"
           }
         },
         {
           "type": "array",
           "items": {
             "type": "string"
           }
         },
         {
           "type": "array",
           "items": {
             "type": "boolean"
           }
         },
         {
           "type": "object",
           "additionalProperties": {
           }
+        },
+        {
         }
       ]
     },
     "uint": {
       "type": "integer",
       "minimum": 0
     },
     "jso-items": {
       "anyOf": [
         {
           "type": "object",
+          "patternProperties": {
+            "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {
+            }
+          },
           "properties": {
             "type": {
               "type": "string",
               "enum": [
                 "number",
                 "string",
                 "boolean",
                 "integer"
               ]
             },
             "sdfChoice": {
               "$ref": "#/definitions/sdfData-sdfChoice-properties-"
             },
             "sdfRef": {
               "$ref": "#/definitions/sdf-pointer"
             },
             "description": {
               "type": "string"
             },
             "$comment": {
               "type": "string"
             },
             "minimum": {
               "type": "number"
             },
             "maximum": {
               "type": "number"
             },
             "format": {
               "type": "string"
             },
             "minLength": {
               "$ref": "#/definitions/uint"
             },
             "maxLength": {
               "$ref": "#/definitions/uint"
             }
           },
           "additionalProperties": false
         },
         {
           "type": "object",
+          "patternProperties": {
+            "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {
+            }
+          },
           "properties": {
             "type": {
               "type": "string",
               "const": "object"
             },
             "required": {
               "type": "array",
               "items": {
                 "type": "string"
               },
               "minItems": 1
             },
             "properties": {
               "$ref": "#/definitions/sdfData-sdfChoice-properties-"
             },
             "sdfChoice": {
               "$ref": "#/definitions/sdfData-sdfChoice-properties-"
             },
             "sdfRef": {
               "$ref": "#/definitions/sdf-pointer"
             },
             "description": {
               "type": "string"
             },
             "$comment": {
               "type": "string"
             },
             "minimum": {
               "type": "number"
             },
             "maximum": {
               "type": "number"
             },
             "format": {
               "type": "string"
             },
             "minLength": {
               "$ref": "#/definitions/uint"
             },
             "maxLength": {
               "$ref": "#/definitions/uint"
             }
           },
           "additionalProperties": false
         },
         {
           "type": "object",
+          "patternProperties": {
+            "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {
+            }
+          },
+          "properties": {
+            "type": {
+              "type": "string"
+            },
+            "sdfChoice": {
+              "$ref": "#/definitions/sdfData-sdfChoice-properties-"
+            },
+            "sdfRef": {
+              "$ref": "#/definitions/sdf-pointer"
+            },
+            "description": {
+              "type": "string"
+            },
+            "$comment": {
+              "type": "string"
+            },
+            "minimum": {
+              "type": "number"
+            },
+            "maximum": {
+              "type": "number"
+            },
+            "format": {
+              "type": "string"
+            },
+            "minLength": {
+              "$ref": "#/definitions/uint"
+            },
+            "maxLength": {
+              "$ref": "#/definitions/uint"
+            }
+          },
+          "additionalProperties": false
+        },
+        {
+          "type": "object",
+          "patternProperties": {
+            "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {
+            }
+          },
           "properties": {
             "type": {
               "type": "string",
               "enum": [
                 "number",
                 "string",
                 "boolean",
                 "integer"
               ]
             },
             "enum": {
               "type": "array",
               "items": {
                 "type": "string"
               },
               "minItems": 1
             },
             "sdfRef": {
               "$ref": "#/definitions/sdf-pointer"
             },
             "description": {
               "type": "string"
             },
             "$comment": {
               "type": "string"
             },
             "minimum": {
               "type": "number"
             },
             "maximum": {
               "type": "number"
             },
             "format": {
               "type": "string"
             },
             "minLength": {
               "$ref": "#/definitions/uint"
             },
             "maxLength": {
               "$ref": "#/definitions/uint"
             }
           },
           "additionalProperties": false
         },
         {
           "type": "object",
+          "patternProperties": {
+            "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {
+            }
+          },
           "properties": {
             "type": {
               "type": "string",
               "const": "object"
             },
             "required": {
               "type": "array",
               "items": {
                 "type": "string"
               },
               "minItems": 1
             },
             "properties": {
               "$ref": "#/definitions/sdfData-sdfChoice-properties-"
             },
             "enum": {
               "type": "array",
               "items": {
                 "type": "string"
               },
               "minItems": 1
             },
             "sdfRef": {
               "$ref": "#/definitions/sdf-pointer"
             },
             "description": {
               "type": "string"
             },
             "$comment": {
               "type": "string"
             },
             "minimum": {
               "type": "number"
             },
             "maximum": {
               "type": "number"
             },
             "format": {
               "type": "string"
             },
             "minLength": {
               "$ref": "#/definitions/uint"
             },
             "maxLength": {
               "$ref": "#/definitions/uint"
             }
           },
           "additionalProperties": false
+        },
+        {
+          "type": "object",
+          "patternProperties": {
+            "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {
+            }
+          },
+          "properties": {
+            "type": {
+              "type": "string"
+            },
+            "enum": {
+              "type": "array",
+              "items": {
+                "type": "string"
+              },
+              "minItems": 1
+            },
+            "sdfRef": {
+              "$ref": "#/definitions/sdf-pointer"
+            },
+            "description": {
+              "type": "string"
+            },
+            "$comment": {
+              "type": "string"
+            },
+            "minimum": {
+              "type": "number"
+            },
+            "maximum": {
+              "type": "number"
+            },
+            "format": {
+              "type": "string"
+            },
+            "minLength": {
+              "$ref": "#/definitions/uint"
+            },
+            "maxLength": {
+              "$ref": "#/definitions/uint"
+            }
+          },
+          "additionalProperties": false
         }
       ]
     },
+    "sdftype-name": {
+      "type": "string",
+      "pattern": "^[a-z][\\-a-z0-9]*$"
+    },
     "actionqualities": {
       "type": "object",
       "properties": {
         "description": {
           "type": "string"
         },
         "label": {
           "type": "string"
         },
         "$comment": {
           "type": "string"
         },
         "sdfRef": {
           "$ref": "#/definitions/sdf-pointer"
         },
         "sdfRequired": {
           "$ref": "#/definitions/pointer-list"
         },
         "sdfInputData": {
           "$ref": "#/definitions/parameter-list"
         },
         "sdfOutputData": {
           "$ref": "#/definitions/parameter-list"
         },
         "sdfData": {
           "$ref": "#/definitions/sdfData-sdfChoice-properties-"
         }
       },
+      "patternProperties": {
+        "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {
+        }
+      },
       "additionalProperties": false
     },
     "parameter-list": {
       "$ref": "#/definitions/dataqualities"
     },
     "eventqualities": {
       "type": "object",
       "properties": {
         "description": {
           "type": "string"
         },
         "label": {
           "type": "string"
         },
         "$comment": {
           "type": "string"
         },
         "sdfRef": {
           "$ref": "#/definitions/sdf-pointer"
         },
         "sdfRequired": {
           "$ref": "#/definitions/pointer-list"
         },
         "sdfOutputData": {
           "$ref": "#/definitions/parameter-list"
         },
         "sdfData": {
           "$ref": "#/definitions/sdfData-sdfChoice-properties-"
         }
       },
+      "patternProperties": {
+        "^(?:[a-z][a-z0-9]*:)?[a-z$][A-Za-z$0-9]*$": {
+        }
+      },
       "additionalProperties": false
     },
     "format-": {
-      "type": "string",
-      "enum": [
-        "date-time",
-        "date",
-        "time",
-        "uri",
-        "uri-reference",
-        "uuid"
+      "anyOf": [
+        {
+          "type": "string",
+          "const": "date-time"
+        },
+        {
+          "type": "string",
+          "const": "date"
+        },
+        {
+          "type": "string",
+          "const": "time"
+        },
+        {
+          "type": "string",
+          "const": "uri"
+        },
+        {
+          "type": "string",
+          "const": "uri-reference"
+        },
+        {
+          "type": "string",
+          "const": "uuid"
+        },
+        {
+          "type": "string"
+        }
+      ]
+    },
+    "sdfType-": {
+      "anyOf": [
+        {
+          "type": "string",
+          "const": "byte-string"
+        },
+        {
+          "type": "string",
+          "const": "unix-time"
+        },
+        {
+          "$ref": "#/definitions/sdftype-name"
+        }
       ]
     },
     "sdfData-sdfChoice-properties-": {
       "type": "object",
       "additionalProperties": {
         "$ref": "#/definitions/dataqualities"
       }
     },
     "type-": {
       "type": "string",
       "enum": [
         "number",
         "string",
         "boolean",
         "integer",
         "array"
       ]
     },
-    "sdfAction-": {
+    "sdfEvent-": {
       "type": "object",
       "additionalProperties": {
-        "$ref": "#/definitions/actionqualities"
+        "$ref": "#/definitions/eventqualities"
       }
     },
-    "sdfProperty-": {
+    "sdfAction-": {
       "type": "object",
       "additionalProperties": {
-        "$ref": "#/definitions/propertyqualities"
+        "$ref": "#/definitions/actionqualities"
       }
     },
-    "sdfEvent-": {
+    "sdfProperty-": {
       "type": "object",
       "additionalProperties": {
-        "$ref": "#/definitions/eventqualities"
+        "$ref": "#/definitions/propertyqualities"
       }
-    },
-    "sdfType-": {
-      "type": "string",
-      "enum": [
-        "byte-string",
-        "unix-time"
-      ]
     }
   }
 }
]]></sourcecode>
    </section>
    <section anchor="jso-inspired">
      <name>Data Qualities inspired by json-schema.org</name>
      <t>This appendix is normative.</t>
      <t>Data qualities define data used in SDF affordances at an information
model level.
A popular way to describe JSON data at a data model level is proposed
by a number of drafts on json-schema.org (which collectively are
abbreviated JSO here); for reference to a popular version we will
point here to <xref target="JSO7"/> and <xref target="JSO7V"/>.
As the vocabulary used by JSO is familiar to many JSON modelers, the
present specification borrows some of the terms and ports their
semantics to the information model level needed for SDF.</t>
      <t>The main data quality imported is the "<tt>type</tt>".
In SDF, this can take one of six (text string) values, which are
discussed in the following subsections (note that the JSO type
"<tt>null</tt>" is not supported as a value of this data quality in SDF).</t>
      <t>The additional quality "<tt>const</tt>" restricts the data to one specific
value (given as the value of the <tt>const</tt> quality).</t>
      <t>Similarly, the additional quality "<tt>default</tt>" provides data that can
be used in the absence of the data (given as the value of the <tt>const</tt>
quality); this is mainly documentary and not very well-defined for SDF
as no process is defined that would add default values to an instance
of some interaction data.</t>
      <section anchor="type-number-type-integer">
        <name>type "<tt>number</tt>", type "<tt>integer</tt>"</name>
        <t>The types "<tt>number</tt>" and "<tt>integer</tt>" are associated with floating point
and integer numbers, as they are available in JSON.
A type value of <tt>integer</tt> means that only integer values of JSON
numbers can be used (note that <tt>10.0</tt> is an integer value, even if it
is in a notation that would also allow non-zero decimal fractions).</t>
        <t>The additional data qualities "<tt>minimum</tt>", "<tt>maximum</tt>",
"<tt>exclusiveMinimum</tt>", "<tt>exclusiveMaximum</tt>" provide number values that
serve as inclusive/exclusive lower/upper bounds for the number.
(Note that the Boolean form of
"<tt>exclusiveMinimum</tt>"/"<tt>exclusiveMaximum</tt>" found in earlier JSO drafts <xref target="JSO4V"/>
is not used.)</t>
        <t>The data quality "<tt>multipleOf</tt>" gives a positive number that
constrains the data value to be an integer multiple of the number
given.
(Type "<tt>integer</tt>" can also be expressed as a "<tt>multipleOf</tt>" quality of
value 1, unless another "<tt>multipleOf</tt>" quality is present.)</t>
      </section>
      <section anchor="type-string">
        <name>type "<tt>string</tt>"</name>
        <t>The type "<tt>string</tt>" is associated with Unicode text string values as
they can be represented in JSON.</t>
        <t>The length (as measured in characters) can be constrained by the
additional data qualities "<tt>minLength</tt>" and "<tt>maxLength</tt>", which are
inclusive bounds.</t>
        <t>(More specifically, Unicode text strings as defined in this
specification are sequences of Unicode scalar values, the number of
which is taken as the length of such a text string.</t>
        <t>The data quality "<tt>pattern</tt>" takes a string value that is interpreted
as an <xref target="ECMA-262"/> regular expression in Unicode mode that constrains the
string (note that these are not anchored by default, so unless <tt>^</tt> and
<tt>$</tt> anchors are employed, ECMA-262 regular expressions match any string that <em>contains</em> a match).
The JSO proposals acknowledge that regular expression support is
rather diverse in various platforms, so the suggestion is to limit
them to:</t>
        <ul spacing="compact">
          <li>
            <t>characters;</t>
          </li>
          <li>
            <t>character classes in square brackets, including ranges; their complements;</t>
          </li>
          <li>
            <t>simple quantifiers <tt>*</tt>, <tt>+</tt>, <tt>?</tt>, and range quantifiers <tt>{n}</tt>,
<tt>{n,m}</tt>, and <tt>{n,}</tt>;</t>
          </li>
          <li>
            <t>grouping parentheses;</t>
          </li>
          <li>
            <t>the choice operator <tt>|</tt>;</t>
          </li>
          <li>
            <t>and anchors (beginning-of-input <tt>^</tt> and end-of-input <tt>$</tt>).</t>
          </li>
        </ul>
        <t>Note that this subset is somewhat similar to the subset introduced by
I-Regexps <xref target="RFC9485"/>, which however are anchored
regular expressions, and which include certain backslash escapes for
characters and character classes.</t>
        <t>The additional data quality "<tt>format</tt>" can take one of the following
values.  Note that, at an information model level, the presence of
this data quality changes the type from being a simple text string to
the abstract meaning of the format given (i.e., the format "date-time"
is less about the specific syntax employed in <xref target="RFC3339"/> than about the usage
as an absolute point in civil time).</t>
        <ul spacing="compact">
          <li>
            <t>"<tt>date-time</tt>", "<tt>date</tt>", "<tt>time</tt>":
An <xref target="RFC3339"/> <tt>date-time</tt>, <tt>full-date</tt>, or <tt>full-time</tt>, respectively.</t>
          </li>
          <li>
            <t>"<tt>uri</tt>", "<tt>uri-reference</tt>":
An <xref target="STD66"/> URI or URI Reference, respectively.</t>
          </li>
          <li>
            <t>"<tt>uuid</tt>": An <xref target="RFC9562"/> 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>
        <t>For example, to include information about the type of the event in the
"overTemperatureEvent" of <xref target="example-req"/>, the sdfOutputData there could
be defined as follows:</t>
        <figure anchor="example-obj-type">
          <name>Using object type with sdfOutputData</name>
          <sourcecode type="json"><![CDATA[
    "sdfOutputData": {
      "type": "object",
      "properties": {
        "alarmType": {
          "sdfRef": "cap:#/sdfData/alarmTypes/quantityAlarms",
          "const": "OverTemperatureAlarm"
        },
        "temperature": {
"sdfRef": "#/sdfObject/temperatureWithAlarm/sdfData/temperatureData"
        }
      }
    }
]]></sourcecode>
        </figure>
      </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 informative 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">
          <name>Outlet Strip Example</name>
          <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">
          <name>Refrigerator-Freezer Example</name>
          <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 anchor="earlier">
      <name>Some Changes From Earlier Drafts</name>
      <t>This appendix is informative.</t>
      <t>The present document provides the SDF base definition.
Previous revisions of SDF have been in use for several years, and both
significant collections of older SDF models and older SDF conversion
tools are available today.
This appendix provides a brief checklist that can aid in upgrading
these to the standard.</t>
      <ul spacing="normal">
        <li>
          <t>The quality <tt>unit</tt> was previously called <tt>units</tt>.</t>
        </li>
        <li>
          <t><tt>sdfType</tt> was developed out of a concept previously called <tt>subtype</tt>.</t>
        </li>
        <li>
          <t><tt>sdfChoice</tt> is the preferred way to represent JSO <tt>enum</tt> (only a
limited form of which is retained), and also the way to represent
JSO <tt>anyOf</tt>.</t>
        </li>
        <li>
          <t>the length of text strings (as used with <tt>minLength</tt>/<tt>maxLength</tt>
constraints) was previously defined in bytes.
It now is defined as the number of characters (Unicode scalar
values, to be exact); a length in bytes is not meaningful unless
bound to a specific encoding, which might differ from UTF-8 in some
ecosystem mappings and protocol bindings.</t>
        </li>
      </ul>
    </section>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>This specification is based on work by the One Data Model group.</t>
      <!--  LocalWords:  SDF namespace defaultNamespace instantiation OMA
 -->
<!--  LocalWords:  affordances ZigBee LWM OCF sdfObject sdfThing
 -->
<!--  LocalWords:  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>Hochschule Emden/Leer</organization>
        <address>
          <postal>
            <country>Germany</country>
          </postal>
          <email>jan.romann@hs-emden-leer.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:
H4sIAAAAAAAAA+y963YbV5Ym+P88RTRcNUk6AVCkZFmibKdpSspkpS5uUe50
pduVCAABMFJgBDIiQIqmVWvmGeYF+kc/yfSb9JPMvp6zT0SApJzO6tWzRqsq
DQIR57rPPvv67dFo5C4Ok/tuVs7zYnmYbJrF6JH7JKkvlqN8PpqtsrTYrA+T
ptpkzjV5s8oOk69ckpxm52nR5LPkabbIi7zJyyJ5XlbnaZPsnD59vpssyip5
mjZpkhbz5KRosiqd4VN1Ui6St2fQW+3S6bTKoH94Ad7a2uKum5ezIj2HrudV
umhGeQbDTOv5YoT/v0qbrG7cDP6zLKurw6Ru5jChos6KelPL2OvN9Dyva2i0
uVpDQyfP3j53Lq2y9DA5Wq9XObyOo3OXZfVuWZU46SMYl3uXXcFX80OeQ5E1
o6c4BucusmKTHcJSJIk+f9Oq3GE9kh3scZeaPE/z1WGCc/waZzsuqyV3lTdn
m+lhQktwuaRV2MNxunTTnJUVDmiU8GK9zGdnabZK/ljW0B29Ds0cJn98e5wc
w0JU5So5+oa+r5sqy5rD5ODxg/3PkqPVPKvWZV40yZsyndMTs7yBpf1mVc7e
1dNNtRwmx0f8QzmHvn7z+LPP9h/8Rr7ZQOPw9Hen/Mj6rCzgmcFv90ef3/t8
9Nm9g9Fn+/cfDujHjKd6zoP9a3lWvKPxfr3EH8az8pweg8FCE9k8b8rKzPE4
reDhIvkGV7kowiS/K/KLrKrz5n/89yb5psrO4aG3fz7RB9J6lufmqTTrPKVr
8i0MZ5HOzpL79+89eHDPrga9YFbh6ejg0f3PHser8PsMh3ZlV+K3Dx6PHhzs
jw72H40e3n98sG9XYpZOy6+bn3K/51umflTlyR+z6n/89yIz835W5bO6Lgsz
zH8pq4u0tpt17+DBwb3WZj3PixXQph1JWuXjd0Co0MHXmbRLGzJD6smnmyYm
uH9JCyCYeB/+UM7O6tnZZpUlz87nWbH3IhNalE7+mhbjil76+qweZfjMaAXP
jOfZtnXU/v5UboBQkp+TC+gYSDb5Jsveha6PYZPLeZq8aOZju6P0eQSHDv5a
5NlqDoPc1Fn36xcwc7OOp9DdWXq+bnR1PZ3DUc/myR/hEM+FXGVyl2MYGoxs
CgP7esbjoRV0BbEFoD4czsnRq6Mx8KtzeGUDjdX63Tqt0nPgYfxf+PbN8+P7
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
gxda3KX9YhYpC1bOcvpH79alhW9VZhM3ayItQickvb3I32UR8TWBxLXJQBBt
IatLEtsIgnj2KwxvoBEPaESDbWyXpTd/Ppgrhk3gSAmj+lMrvYYsCj3RhpCb
H22W3oCfvMwwDiSvz9VQeb6GPzGOxUudqLN4/+1LEb1hBsGJ4WVMvK3Nvb4z
SLmverAlKmFXrwv7mjjMw/2Ap6zHOY98Qa8G/dE79nfwjuOP37CPf0CdvSrD
w/0rUUd+qCgkAe97OUnn+nhwlaemuZo2dpplhfc/ek45kEiCZJGvskEUWsAK
dzTsGzemaG+K3ktowSAPyVosd2rOUbNg7UVmepmiItiiwd3T73I9p0bSD8uv
W9cesBgg0MkKvPu7Ny+M23mYgDZLtuSTp2xrYN5EHEXCFLDddpu8J6i+zVL2
jaHhp3f7xt625v1OLS36TbYkaSh7j8y0Dnpl2w1E+i2drME6bTBkUsJkQE50
sJx0MithwtCWaMfAD3BTJYAPN9Wcew5cY8bfHYba9PRiJVVAwwKcipoTGc3k
iUQuUFQiDwi622XXE17m1AF1iOI1hngVeg2t6YZGxRiX1ZvrRdR3hv7Z8RMF
wHIPqOywYjB4+d3pWxAm6b/Jq9f0+c2z//zdyZtnT/Hz6R+OXrzwH5w8cfqH
19+9eBo+hTePX798+ezVU34Zvk2ir9zg5dG/DpjVDl5/+/bk9aujFwM/Vn9E
6OYiSSXeIhd0UvI9/ScMoHzw4QN6+988Pz7Y33+M8Rn816P9zx/gX2hc5C7J
n8h/4rXm0LyTsqdotVL1qKaQPODDl0Ui0s+nP+Dy/HiYfDGdrfcffCVf4Kyj
L3Xhoi9p4brfdF7mlez5qqcbv6TR963ljsd79K/R37r45ssvfrfCyJ7R/qPf
fUURcK8l5IX8w8/Y123DD9yfyBxYqaCPYW/8kI0EslrYgowp9Ii/ub0D7hRa
mZ0NcPeknX0O5Pn3f/93TnK5RiaMN87gMLmm2L4BhQXDnwMdn6chtazdlPw4
4HhMH8oE7Rzc2388uvdgdPBAf5yV6yvKc8Cfj/WPBB/0q3JcVutxcgRURD/W
3lEy1lYkUwXb0LBymSVFO+vP8PAH0vR8VE6YKxDottfhJ/Gj48fQCix+ulk1
r0xj1Az96LcgdCF7oH/zQ17pDF/jmiGLi76i/rx4Pzh0A2JnZDAWja6m9p9w
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

-->

</rfc>
