<?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.24 (Ruby 3.4.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-bormann-asdf-sdf-mapping-07" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.30.0 -->
  <front>
    <title abbrev="SDF Mapping">Semantic Definition Format (SDF): Mapping files</title>
    <seriesInfo name="Internet-Draft" value="draft-bormann-asdf-sdf-mapping-07"/>
    <author initials="C." surname="Bormann" fullname="Carsten Bormann" role="editor">
      <organization>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="J." surname="Romann" fullname="Jan Romann">
      <organization>Universität Bremen</organization>
      <address>
        <postal>
          <country>Germany</country>
        </postal>
        <email>jan.romann@uni-bremen.de</email>
      </address>
    </author>
    <date year="2025" month="July" day="20"/>
    <area>Applications</area>
    <workgroup>ASDF</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 53?>

<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.</t>
      <t>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>
    <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-bormann-asdf-sdf-mapping/"/>.
      </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/cabo/sdf-mapping"/>.</t>
    </note>
  </front>
  <middle>
    <?line 73?>

<section anchor="introduction">
      <name>Introduction</name>
      <!-- Just copying the abstract, for now... -->

<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.</t>
      <t>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>
      <section anchor="terminology-and-conventions">
        <name>Terminology and Conventions</name>
        <t>The definitions of <xref target="I-D.ietf-asdf-sdf"/> apply.</t>
        <!-- XXX -->

<t>The term "byte" is used in its now-customary sense as a synonym for
"octet".</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 anchor="overview">
      <name>Overview</name>
      <t>An SDF mapping file provides augmentation information for one or more
SDF models.
Its main contents is a map from SDF name references (<xref section="4.3" sectionFormat="of" target="I-D.ietf-asdf-sdf"/>) to a set of qualities.</t>
      <t>When processing the mapping file together with one or more SDF
models, these qualities are added to the SDF model at the
referenced name, as in a merge-patch operation <xref target="RFC7396"/>.
Note that this is somewhat similar to the way <tt>sdfRef</tt> (<xref section="4.4" sectionFormat="of" target="I-D.ietf-asdf-sdf"/>) works, but in a
mapping file the arrows point in the inverse direction (from the
augmenter to the augmented).</t>
      <section anchor="example1">
        <name>Example Model 1 (ecosystem: IPSO/OMA)</name>
        <t>An example for an SDF mapping file is given in <xref target="code-example1"/>.
This mapping file is meant to attach to an SDF specification published
by OneDM, and to add qualities relevant to the IPSO/OMA ecosystem.
<cref anchor="namespace-note"><br/>
Note that this example uses namespaces to identify elements of the
referenced specification(s), but has un-namespaced quality names.
These two kinds of namespaces are unrelated in SDF, and a more
robust example may need to make use of Quality Name Prefixes
as defined in <xref section="2.3.3-3" sectionFormat="of" target="I-D.ietf-asdf-sdf"/> (independent of a potential
feature to add namespace references to definitions that are not
intended to go into the default namespace — these are SDF
definition namespaces and not quality namespaces, which are one
meta-level higher).</cref></t>
        <ul spacing="normal">
          <li>
            <t>Start of a mapping file for certain OneDM playground models:</t>
          </li>
        </ul>
        <figure anchor="code-example1">
          <name>A simple example of an SDF mapping file</name>
          <sourcecode type="sdf"><![CDATA[{
  "info": {
    "title": "IPSO ID mapping"
  },
  "namespace": {
    "onedm": "https://onedm.org/models"
  },
  "defaultNamespace": "onedm",
  "map": {
    "#/sdfObject/Digital_Input": {
      "id": 3200
    },
    "#/sdfObject/Digital_Input/sdfProperty/Digital_Input_State": {
      "id": 5500
    },
    "#/sdfObject/Digital_Input/sdfProperty/Digital_Input_Counter": {
      "id": 5501
    }
  }
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="example2">
        <name>Example Model 2 (ecosystem: W3C WoT)</name>
        <t>This example shows a translation of a hypothetical W3C WoT Thing Model
(as defined in Section 10 of <xref target="W3C.wot-thing-description11"/>)
into an SDF model plus a mapping file to catch Thing Model attributes
that don't currently have SDF qualities defined (namely, <tt>titles</tt> and
<tt>descriptions</tt> members used for internationalization).</t>
        <t>A second mapping file is more experimental in that it captures
information that is actually instance-specific,
in this case a <tt>forms</tt> member that binds the <tt>status</tt> property to an
instance-specific CoAP resource.
<cref anchor="td-note"><br/>
Namespaces are all wrong in this example.</cref></t>
        <t>The form really should be part of the class level; defining the entire
form instead of just the link in the instance information is a
symptom of not yet getting the class/instance boundary right.</t>
        <ul spacing="normal">
          <li>
            <t>The input: WoT Thing Model</t>
          </li>
        </ul>
        <figure anchor="code-wot-input">
          <name>Input: WoT Thing Model</name>
          <sourcecode type="json"><![CDATA[
{
    "@context": "https://www.w3.org/2022/wot/td/v1.1",
    "@type" : "tm:ThingModel",
    "title": "Lamp Thing Model",
    "titles": {
      "en": "Lamp Thing Model",
      "de": "Thing Model für eine Lampe"
    },
    "properties": {
        "status": {
            "description": "Current status of the lamp",
            "descriptions": {
              "en": "Current status of the lamp",
              "de": "Aktueller Status der Lampe"
            },
            "type": "string",
            "readOnly": true,
            "forms": [
              {
                "href": "coap://example.org/status"
              }
            ]
        }
    }
}
]]></sourcecode>
        </figure>
        <ul spacing="normal">
          <li>
            <t>The output: SDF model</t>
          </li>
        </ul>
        <figure anchor="code-wot-output1">
          <name>Output 1: SDF Model</name>
          <sourcecode type="sdf"><![CDATA[{
  "info": {
    "title": "Lamp Thing Model"
  },
  "namespace": {
    "wot": "http://www.w3.org/ns/td"
  },
  "defaultNamespace": "wot",
  "sdfObject": {
    "LampThingModel": {
      "label": "Lamp Thing Model",
      "sdfProperty": {
        "status": {
          "description": "Current status of the lamp",
          "writable": false,
          "type": "string"
        }
      }
    }
  }
}
]]></sourcecode>
        </figure>
        <ul spacing="normal">
          <li>
            <t>The other output: SDF mapping file for class information</t>
          </li>
        </ul>
        <figure anchor="code-wot-output2">
          <name>Output 2: SDF Mapping File</name>
          <sourcecode type="sdf"><![CDATA[{
  "info": {
    "title": "Lamp Thing Model: WoT TM mapping"
  },
  "namespace": {
    "wot": "http://www.w3.org/ns/td"
  },
  "defaultNamespace": "wot",
  "map": {
    "#/sdfObject/LampThingModel": {
      "titles": {
        "en": "Lamp Thing Model",
        "de": "Thing Model für eine Lampe"
      }
    },
    "#/sdfObject/LampThingModel/sdfProperty/status": {
      "descriptions": {
        "en": "Current status of the lamp",
        "de": "Aktueller Status der Lampe"
      }
    }
  }
}
]]></sourcecode>
        </figure>
        <ul spacing="normal">
          <li>
            <t>A third output: SDF mapping file for Protocol Bindings</t>
          </li>
        </ul>
        <figure anchor="code-wot-output3">
          <name>Output 3: SDF Mapping File for Protocol Bindings</name>
          <sourcecode type="sdf"><![CDATA[{
  "info": {
    "title": "Lamp Thing Model: WoT TM Protocol Binding"
  },
  "namespace": {
    "wot": "http://www.w3.org/ns/td"
  },
  "defaultNamespace": "wot",
  "map": {
    "#/sdfObject/LampThingModel/sdfProperty/status": {
      "forms": [
        {
          "href": "coap://example.org/status"
        }
      ]
    }
  }
}
]]></sourcecode>
        </figure>
      </section>
    </section>
    <section anchor="syntax">
      <name>Formal Syntax of SDF mapping files</name>
      <t>An SDF mapping file has three optional components that are taken
unchanged from SDF: The info block, the namespace declaration, and the
default namespace.
The mandatory fourth component, the "map", contains the mappings from
an SDF name reference (usually a namespace and a JSON pointer) to a
nested map providing a set of qualities to be merged in at the site
identified in the name reference.</t>
      <t><xref target="mapping-cddl"/> describes the syntax of SDF mapping files using CDDL <xref target="RFC8610"/>.</t>
      <figure anchor="mapping-cddl">
        <name>CDDL definition of SDF mapping file</name>
        <sourcecode type="cddl"><![CDATA[
start = sdf-mapping

sdf-mapping = {
 ; info will be required in most process policies
 ? info: sdfinfo
 ? namespace: named<text>
 ? defaultNamespace: text
 map: { * global-sdf-pointer => additionalqualities}
}

; we can't really be much more specific here:
additionalqualities = named<any>

; --------------------------------- import from SDF-base:

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]*"

; rough CURIE or JSON Pointer syntax:
global-sdf-pointer = text .regexp ".*[:#].*"

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

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>
      </figure>
      <t>The JSON pointer that is used on the left-hand side of the map can
point to a JSON map in the SDF model to be augmented by adding or
replacing map entries.
If necessary, the JSON map is created at the position indicated with
the contents of right-hand side of the map <cref anchor="example">(add examples)</cref>.
Alternatively, the JSON pointer can point to an array (also possibly
created if not existing before) and add an element to that array by
using the "<tt>‑</tt>" syntax introduced in the penultimate paragraph of
<xref section="4" sectionFormat="of" target="RFC6901"/>.</t>
    </section>
    <section anchor="augmentation-mechanism">
      <name>Augmentation Mechanism</name>
      <!-- TODO: Discuss used terminology -->
<t>An SDF model and a compatible mapping file can be combined to create
an <em>augmented</em> SDF model.
(This process can be repeated with multiple mapping files by using the
outcome of one augmentation as the input of the next one.)
As augmentation is not equal to instantiation, augmented SDF models
are still abstract in nature, but are enriched with ecosystem-specific
information.</t>
      <aside>
        <t>Note that it might be necessary to specify an augmentation mechanism for instance descriptions as well at a later point in time, once it has been decided what the instance description format might look like and whether such a format is needed.</t>
      </aside>
      <t>The augmentation mechanism is related to the resolution mechanism
defined in <xref section="4.4" sectionFormat="of" target="I-D.ietf-asdf-sdf"/>, but fundamentally different:</t>
      <t>Instead of a model file reaching out to other model files and
integrating aspects into itself via <tt>sdfRef</tt> (<em>pull</em> approach), the
mapping file <em>pushes</em> information into a new copy of a specific given
SDF model.
The original SDF model does not need to know which mapping files it
will be used with and can be used with several such mapping files
independently of each other.</t>
      <t>An augmented SDF model is produced from two inputs: An SDF model and a compatible mapping file, i.e. every JSON pointer within the keys of the mapping file's <tt>map</tt> object points to a location that already exists within the SDF model.
To perform the augmentation, a processor needs to create a copy of the original SDF model.
It then iterates over all entries within the mapping file's <tt>map</tt> object [in an order to be specified; probably lexicographical].
During each iteration, the processor first obtains a reference to the target referred to by the JSON pointer contained an entry's key.
This reference is then used as the <tt>Target</tt> argument of the JSON Merge Patch algorithm <xref target="RFC7396"/> and the entry's value as the <tt>Patch</tt> argument; the target is replaced with the result of the merge-patch.</t>
      <t>Once the iteration has finished, the processor returns the resulting augmented SDF model.
Should the resolution of a JSON pointer or an application of the JSON Merge Patch algorithm fail, an error is thrown instead.</t>
      <aside>
        <t>Note that, in contrast to an array, the entries of a JSON object are considered unordered, which means that the sequence in which the <tt>map</tt> entries are applied is implementation-dependent.
For this reason, we need to make sure that the contents of mapping
files can be applied independently of each other.
(We need to understand the onus in
ensuring this that is put on author of a mapping file.)</t>
        <t>The problem can be "avoided" by changing the data structure used by the <tt>map</tt> quality to an array of objects to ensure a deterministic application order.
This would essentially put most of the onus on the author of a mapping
file to get any order dependencies right.
More preferable would be to ensure the entries in the mapping file can
be applied independently and in any order.
More discussion and implementation experience is required.</t>
      </aside>
      <t>An example for an augmented SDF model can be seen in <xref target="code-augmented-sdf-model"/>.
This is the result of applying the WoT-specific mapping file from <xref target="code-wot-output2"/> to the SDF model shown in <xref target="code-wot-output1"/>.
This augmented SDF model is one step away from being converted to a WoT Thing Model or Thing Description,
which requires some information that cannot be provided in an SDF
model that is limited to the vocabulary defined in the SDF base specification.</t>
      <!-- TODO: Prefix WoT-specific qualities with wot:? -->
<figure anchor="code-augmented-sdf-model">
        <name>An SDF model that has been augmented with WoT-specific vocabulary.</name>
        <sourcecode type="sdf"><![CDATA[{
  "info": {
    "title": "Lamp Thing Model"
  },
  "namespace": {
    "wot": "http://www.w3.org/ns/td"
  },
  "defaultNamespace": "wot",
  "sdfObject": {
    "LampThingModel": {
      "label": "Lamp Thing Model",
      "titles": {
        "en": "Lamp Thing Model",
        "de": "Thing Model für eine Lampe"
      },
      "sdfProperty": {
        "status": {
          "description": "Current status of the lamp",
          "descriptions": {
            "en": "Current status of the lamp",
            "de": "Aktueller Status der Lampe"
          },
          "writable": false,
          "type": "string"
        }
      }
    }
  }
}
]]></sourcecode>
      </figure>
      <aside>
        <t>Since the pair of an SDF model and a mapping file is equivalent in
semantics to the augmented model created from the two, there is no
fundamental difference between specifying aspects in the SDF model or
leaving them in a mapping file.
Also, parts of an ecosystem-specific vocabulary may in fact be
mappable to the SDF base vocabulary.
Therefore, developing the mapping between SDF and an ecosystem
requires careful consideration which of the features should be available
to other ecosystems and therefore should best be part of the common
SDF model, and which are best handled in a mapping file specific to the
ecosystem.</t>
      </aside>
      <!-- TODO: Also needs to take NIPC into account somewhere -->

<section anchor="logging-augmentation">
        <name>Logging Augmentation</name>
        <t>Since an augmented model is not fundamentally different from any other
SDF model, it may be necessary to trace the provenance of the
information that flowed into it, e.g., in the info block.
For this purpose, a new quality called <tt>augmentationLog</tt> is introduced
that contains an array of URIs pointing to the mapping files that have been
used to augment the original SDF file (which can also be indicated via
the <tt>originalSdfModel</tt> quality).
These additional qualities allow for reproducing the augmentation process.</t>
        <t>For logging while performing an augmentation, the processor has to perform
the following steps:</t>
        <!-- TODO: This algorithm probably needs to be reworked or at least reformatted. -->
<ol spacing="normal" type="1"><li>
            <t>If the <tt>info</tt> block is not present in the model that is being augmented,
  the processor creates it.</t>
          </li>
          <li>
            <t>If the <tt>info</tt> block does not contain an <tt>augmentationLog</tt> quality, the processor
  performs the following steps:
            </t>
            <ol spacing="normal" type="1"><li>
                <t>If the <tt>originalSdfModel</tt> quality is not present in the <tt>info</tt>
block, the processor adds it with a URI that can be used to
access the SDF model that is currently being augmented as its
value.</t>
              </li>
              <li>
                <t>The processor creates the <tt>augmentationLog</tt> quality with an
array containing URIs that can be used to access the current
mapping file as its sole item.</t>
              </li>
            </ol>
          </li>
          <li>
            <t>Otherwise, if <tt>augmentationLog</tt> does not contain an array, stop and
throw an error.</t>
          </li>
          <li>
            <t>Otherwise, the processor adds a URI that can be used to access the
current mapping file to the array of the <tt>augmentationLog</tt> quality.</t>
          </li>
        </ol>
        <!-- [^logging] -->

<figure anchor="augmentation-log">
          <name>An augmented SDF model with an augmentation log and information regarding the original SDF model.</name>
          <sourcecode type="sdf"><![CDATA[{
  "info": {
    "title": "Augmented SDF model with augmentation log.",
    "augmentationLog": [
      "https://example.org/sdf-mapping-file-1",
      "https://example.org/sdf-mapping-file-2"
    ],
    "originalSdfModel": "https://example.org/original-sdf-model"
  }
}
]]></sourcecode>
        </figure>
      </section>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <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" anchor="new-media-types">
          <name>A media type for SDF mapping files</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-mapping+json</td>
              <td align="left">application/sdf-mapping+json</td>
              <td align="left">RFC XXXX, <xref target="media-type"/></td>
            </tr>
          </tbody>
        </table>
        <t><cref anchor="to-be-removed">RFC Editor: please replace RFC XXXX with this RFC number and remove this note.</cref></t>
        <dl spacing="compact">
          <dt>Type name:</dt>
          <dd>
            <t>application</t>
          </dd>
          <dt>Subtype name:</dt>
          <dd>
            <t>sdf-mapping+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 that describes Things, i.e.,
 physical objects that are available for interaction over a network</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>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="registries">
        <name>Registries</name>
        <t>(TBD: After any future additions, check if we need any.)</t>
      </section>
    </section>
    <section anchor="seccons">
      <name>Security Considerations</name>
      <t>Some wider issues are discussed in <xref target="RFC8576"/>.</t>
      <t>(Specifics: TBD.)</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <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="RFC8610">
          <front>
            <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="C. Vigano" initials="C." surname="Vigano"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2019"/>
            <abstract>
              <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8610"/>
          <seriesInfo name="DOI" value="10.17487/RFC8610"/>
        </reference>
        <reference anchor="RFC7396">
          <front>
            <title>JSON Merge Patch</title>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <author fullname="J. Snell" initials="J." surname="Snell"/>
            <date month="October" year="2014"/>
            <abstract>
              <t>This specification defines the JSON merge patch format and processing rules. The merge patch format is primarily intended for use with the HTTP PATCH method as a means of describing a set of modifications to a target resource's content.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7396"/>
          <seriesInfo name="DOI" value="10.17487/RFC7396"/>
        </reference>
        <reference anchor="I-D.ietf-asdf-sdf">
          <front>
            <title>Semantic Definition Format (SDF) for Data and Interactions of Things</title>
            <author fullname="Michael Koster" initials="M." surname="Koster">
              <organization>KTC Control AB</organization>
            </author>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <author fullname="Ari Keränen" initials="A." surname="Keränen">
              <organization>Ericsson</organization>
            </author>
            <date day="17" month="March" year="2025"/>
            <abstract>
              <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>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-asdf-sdf-23"/>
        </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="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="W3C.wot-thing-description11" target="https://www.w3.org/TR/wot-thing-description11/">
          <front>
            <title>Web of Things (WoT) Thing Description 1.1</title>
            <author/>
          </front>
          <seriesInfo name="W3C REC" value="wot-thing-description11"/>
          <seriesInfo name="W3C" value="wot-thing-description11"/>
        </reference>
      </references>
    </references>
    <?line 590?>

<section numbered="false" anchor="list-of-figures">
      <name>List of Figures</name>
      <dl spacing="compact" indent="11">
        <dt><xref target="code-example1"/>:</dt>
        <dd>
          <t><xref format="title" target="code-example1"/></t>
        </dd>
        <dt><xref target="code-wot-input"/>:</dt>
        <dd>
          <t><xref format="title" target="code-wot-input"/></t>
        </dd>
        <dt><xref target="code-wot-output1"/>:</dt>
        <dd>
          <t><xref format="title" target="code-wot-output1"/></t>
        </dd>
        <dt><xref target="code-wot-output2"/>:</dt>
        <dd>
          <t><xref format="title" target="code-wot-output2"/></t>
        </dd>
        <dt><xref target="code-wot-output3"/>:</dt>
        <dd>
          <t><xref format="title" target="code-wot-output3"/></t>
        </dd>
        <dt><xref target="mapping-cddl"/>:</dt>
        <dd>
          <t><xref format="title" target="mapping-cddl"/></t>
        </dd>
        <dt><xref target="code-augmented-sdf-model"/>:</dt>
        <dd>
          <t><xref format="title" target="code-augmented-sdf-model"/></t>
        </dd>
      </dl>
    </section>
    <section numbered="false" anchor="list-of-tables">
      <name>List of Tables</name>
      <dl spacing="compact" indent="11">
        <dt><xref target="new-media-types"/>:</dt>
        <dd>
          <t><xref format="title" target="new-media-types"/></t>
        </dd>
      </dl>
    </section>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>This draft is based on discussions in the Thing-to-Thing Research
Group (T2TRG) and the SDF working group.  Input for <xref target="example1"/> was provided by <contact fullname="Ari Keränen"/>.</t>
      <!--  LocalWords:  SDF namespace defaultNamespace instantiation OMA
 -->
<!--  LocalWords:  affordances ZigBee LWM OCF sdfObject sdfThing
 -->
<!--  LocalWords:  idempotency Thingness sdfProperty sdfEvent sdfRef
 -->
<!--  LocalWords:  namespaces sdfRequired Optionality sdfAction
 -->
<!--  LocalWords:  sdfProduct dereferenced dereferencing atomicity
 -->
<!--  LocalWords:  interworking
 -->

</section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
