<?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.39 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-asdf-sdf-protocol-mapping-11" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title abbrev="sdf-protocol-mapping">SDF Protocol Mapping</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-asdf-sdf-protocol-mapping-11"/>
    <author initials="R." surname="Mohan" fullname="Rohit Mohan">
      <organization>Cisco Systems</organization>
      <address>
        <postal>
          <street>170 West Tasman Drive</street>
          <city>San Jose</city>
          <code>95134</code>
          <country>USA</country>
        </postal>
        <email>rohitmo@cisco.com</email>
      </address>
    </author>
    <author initials="B." surname="Brinckman" fullname="Bart Brinckman">
      <organization>Cisco Systems</organization>
      <address>
        <postal>
          <street>170 West Tasman Drive</street>
          <city>San Jose</city>
          <code>95134</code>
          <country>USA</country>
        </postal>
        <email>bbrinckm@cisco.com</email>
      </address>
    </author>
    <author initials="L." surname="Corneo" fullname="Lorenzo Corneo">
      <organization>Ericsson</organization>
      <address>
        <postal>
          <street>Hirsalantie 11</street>
          <city>Jorvas</city>
          <code>1296</code>
          <country>Finland</country>
        </postal>
        <email>lorenzo.corneo@ericsson.com</email>
      </address>
    </author>
    <date year="2026" month="August" day="27"/>
    <area>Applications and Real-Time</area>
    <workgroup>A Semantic Definition Format for Data and Interactions of Things</workgroup>
    <keyword>IoT</keyword>
    <abstract>
      <?line 76?>

<t>This document defines protocol mapping extensions for the Semantic Definition
Format (SDF) to enable mapping of protocol-agnostic SDF affordances to
protocol-specific operations. The protocol mapping mechanism allows SDF models
to specify how properties, actions, and events should be accessed using a
specific protocol. This document defines protocol mappings for Bluetooth Low
Energy and Zigbee, and the mechanism can be extended to other protocols such as
HTTP and CoAP. This document also describes a method to extend SCIM with an SDF
model mapping.</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-protocol-mapping/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        A Semantic Definition Format for Data and Interactions of Things 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-protocol-mapping"/>.</t>
    </note>
  </front>
  <middle>
    <?line 87?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The Semantic Definition Format (SDF) <xref target="RFC9880"/> provides a protocol-agnostic way
to describe IoT devices and their capabilities through properties, actions, and
events (collectively called affordances). A device described by an SDF model, however, is
accessed over a specific communication protocol. To interact with such a device
based on its SDF model, there needs to be a mechanism to map the
protocol-agnostic SDF definitions to the protocol-specific operations that
access the device. Moreover, such a mechanism
needs to be extensible for enabling implementers to provide novel SDF protocol
mappings to expand the SDF ecosystem. SDF protocol mappings may target a variety
of protocols spanning from non-IP protocols commonly used in IoT environments,
such as <xref target="BLE53"/> and <xref target="Zigbee30"/>, to IP-based protocols such as HTTP
<xref target="RFC9110"/> and CoAP <xref target="RFC7252"/>. This document provides the required
mechanism by defining:</t>
      <ul spacing="normal">
        <li>
          <t>The <tt>sdfProtocolMap</tt> quality, which allows SDF models to include
protocol-specific mapping information attached to the protocol-agnostic
definitions, see <xref target="sdf-pm"/>. An <tt>sdfProtocolMap</tt> <bcp14>MAY</bcp14> be applied to an SDF
affordance, be it an <tt>sdfProperty</tt>, <tt>sdfEvent</tt> or <tt>sdfAction</tt>. The mapping
enables use cases such as application gateways or multi-protocol gateways that
translate between different IoT protocols, automated generation of
protocol-specific implementations from SDF models, and interoperability across
heterogeneous device ecosystems.</t>
        </li>
        <li>
          <t>Two SDF protocol mappings for Bluetooth and Zigbee protocols, see <xref target="ble-pm"/>
and <xref target="zigbee-pm"/> respectively.</t>
        </li>
        <li>
          <t>An SDF model extension for SCIM. While SDF provides a way to describe a class
of devices, SCIM describes a device instance. The SDF model extension for SCIM
enables the inclusion of SDF models for the class of devices a device belongs
to in the SCIM object, see <xref target="scim-sdf-extension"/>.</t>
        </li>
        <li>
          <t>An IANA registry for defining additional SDF protocol mappings (in addition to
the BLE and Zigbee provided in this document), see <xref target="iana-prot-map"/>.</t>
        </li>
      </ul>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The syntax extensions to <xref target="RFC9880"/> are shown in the Concise Data Definition
Language (CDDL) <xref target="RFC8610"/>, which describes their JSON representation.</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 BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

</section>
    <section anchor="sdf-pm">
      <name>SDF Protocol Mapping Structure</name>
      <t>This section defines the structure of an <tt>sdfProtocolMap</tt>. Because each protocol
has its own addressing model, a single SDF affordance requires a distinct
mapping per protocol. For example, BLE addresses a property as a service
characteristic, while Zigbee addresses it as an attribute in a cluster of an
endpoint.</t>
      <t>The value of the <tt>sdfProtocolMap</tt> quality is a JSON object nested inside an SDF
affordance definition (<tt>sdfProperty</tt>, <tt>sdfAction</tt>, or <tt>sdfEvent</tt>).
Protocol-specific attributes are embedded within this object, keyed by a
protocol name registered in the IANA "SDF Protocol Mapping" registry
(<xref target="iana-prot-map"/>), e.g., "ble" or "zigbee".</t>
      <figure anchor="protmap">
        <name>SDF Protocol Mapping Structure</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="240" width="400" viewBox="0 0 400 240" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 24,48 L 24,64" fill="none" stroke="black"/>
              <path d="M 104,80 L 104,224" fill="none" stroke="black"/>
              <path d="M 176,112 L 176,128" fill="none" stroke="black"/>
              <path d="M 176,176 L 176,192" fill="none" stroke="black"/>
              <path d="M 24,64 L 72,64" fill="none" stroke="black"/>
              <path d="M 104,96 L 152,96" fill="none" stroke="black"/>
              <path d="M 176,128 L 200,128" fill="none" stroke="black"/>
              <path d="M 104,160 L 152,160" fill="none" stroke="black"/>
              <path d="M 176,192 L 200,192" fill="none" stroke="black"/>
              <path d="M 104,224 L 152,224" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="208,192 196,186.4 196,197.6" fill="black" transform="rotate(0,200,192)"/>
              <polygon class="arrowhead" points="208,128 196,122.4 196,133.6" fill="black" transform="rotate(0,200,128)"/>
              <polygon class="arrowhead" points="160,224 148,218.4 148,229.6" fill="black" transform="rotate(0,152,224)"/>
              <polygon class="arrowhead" points="160,160 148,154.4 148,165.6" fill="black" transform="rotate(0,152,160)"/>
              <polygon class="arrowhead" points="160,96 148,90.4 148,101.6" fill="black" transform="rotate(0,152,96)"/>
              <polygon class="arrowhead" points="80,64 68,58.4 68,69.6" fill="black" transform="rotate(0,72,64)"/>
              <g class="text">
                <text x="48" y="36">sdfProperty</text>
                <text x="104" y="36">/</text>
                <text x="152" y="36">sdfAction</text>
                <text x="200" y="36">/</text>
                <text x="244" y="36">sdfEvent</text>
                <text x="140" y="68">sdfProtocolMap</text>
                <text x="176" y="100">ble</text>
                <text x="260" y="132">BLE-specific</text>
                <text x="344" y="132">mapping</text>
                <text x="188" y="164">zigbee</text>
                <text x="272" y="196">Zigbee-specific</text>
                <text x="368" y="196">mapping</text>
                <text x="176" y="228">...</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
sdfProperty / sdfAction / sdfEvent
  |
  +-----> sdfProtocolMap
            |
            +-----> ble
            |        |
            |        +--> BLE-specific mapping
            |
            +-----> zigbee
            |        |
            |        +--> Zigbee-specific mapping
            |
            +-----> ...
]]></artwork>
        </artset>
      </figure>
      <section anchor="sdf-extension-points">
        <name>SDF Extension Points</name>
        <t>The <tt>sdfProtocolMap</tt> quality is introduced into SDF affordance definitions
through the extension points defined in the formal syntax of <xref section="A" sectionFormat="of" target="RFC9880"/>. For each affordance type, an <tt>sdfProtocolMap</tt> entry is added
via the corresponding CDDL group socket. The contents of the
<tt>sdfProtocolMap</tt> object are in turn extensible through a
protocol-mapping-specific group socket.</t>
        <t>A protocol <bcp14>MAY</bcp14> choose to extend only the affordance types that are applicable to
it. For example, the BLE protocol mapping defines extensions for properties and
events but not for actions.</t>
        <section anchor="property-extension">
          <name>Property Extension</name>
          <t>The <tt>$$SDF-EXTENSION-PROPERTY</tt> group socket in the <tt>propertyqualities</tt>
rule of <xref section="A" sectionFormat="of" target="RFC9880"/> is used to add protocol mapping to
<tt>sdfProperty</tt> definitions:</t>
          <figure anchor="sdf-prop-ext">
            <name>SDF Property Extension Point for Protocol Mapping</name>
            <sourcecode type="cddl"><![CDATA[
$$SDF-EXTENSION-PROPERTY //= (
  sdfProtocolMap: {
    * $$SDF-PROPERTY-PROTOCOL-MAP
  }
)

property-protocol-map<name, props, read-props, write-props> = (
  name => props /
    {
      read: read-props,
      write: write-props
    }
)
]]></sourcecode>
          </figure>
          <t>The <tt>property-protocol-map</tt> generic (<xref target="sdf-prop-ext"/>) captures the common
structure of property protocol mappings. The <tt>name</tt> parameter is the protocol
name and <tt>props</tt> is the protocol-specific map of attributes. A protocol can
provide either:</t>
          <ul spacing="normal">
            <li>
              <t>A single mapping that applies to both read and write operations, or</t>
            </li>
            <li>
              <t>Separate <tt>read</tt> and <tt>write</tt> mappings when the protocol uses different
attributes for each direction.</t>
            </li>
          </ul>
          <t>To keep these two forms unambiguous, the protocol-specific attribute map
(the <tt>props</tt> type) <bcp14>MUST NOT</bcp14> define members named <tt>read</tt> or <tt>write</tt>.</t>
          <t>To extend <tt>$$SDF-PROPERTY-PROTOCOL-MAP</tt> for a new protocol (e.g.,
"new-protocol"), implementers <bcp14>MUST</bcp14> use the <tt>property-protocol-map</tt> generic with
the protocol name and a map type defining the protocol-specific attributes.</t>
          <t>It is to be noted that the protocol <tt>name</tt> (e.g., "new-protocol") <bcp14>MUST</bcp14> be
registered in the IANA registry defined in <xref target="iana-prot-map"/>.</t>
          <t>For a fictitious "new-protocol" that uses the same attributes for both read
and write operations, the generic invocation could be defined as:</t>
          <figure anchor="prop-ext-example">
            <name>Example Property Protocol Map Extension</name>
            <sourcecode type="cddl"><![CDATA[=============== NOTE: '\' line wrapping per RFC 8792 ================

$$SDF-PROPERTY-PROTOCOL-MAP //= (
  property-protocol-map<"new-protocol", new-protocol-property, new-\
                            protocol-property, new-protocol-property>
)

new-protocol-property = {
  attributeA: text,
  attributeB: uint
}
]]></sourcecode>
          </figure>
          <t>An SDF model using a single mapping for both read and write operations
could look like:</t>
          <figure anchor="prop-ext-json-example">
            <name>Example Property Protocol Map with a Single Mapping</name>
            <sourcecode type="json"><![CDATA[{
  "sdfProperty": {
    "temperature": {
      "type": "number",
      "unit": "Cel",
      "sdfProtocolMap": {
        "new-protocol": {
          "attributeA": "temperature-service",
          "attributeB": 1
        }
      }
    }
  }
}
]]></sourcecode>
          </figure>
          <t>An SDF model using separate read and write mappings could look like:</t>
          <figure anchor="prop-ext-rw-json-example">
            <name>Example Property Protocol Map with Separate Read and Write Mappings</name>
            <sourcecode type="json"><![CDATA[{
  "sdfProperty": {
    "temperature": {
      "type": "number",
      "unit": "Cel",
      "sdfProtocolMap": {
        "new-protocol": {
          "read": {
            "attributeA": "temperature-read-service",
            "attributeB": 1
          },
          "write": {
            "attributeA": "temperature-write-service",
            "attributeB": 2
          }
        }
      }
    }
  }
}
]]></sourcecode>
          </figure>
          <t>When a protocol instead uses different attributes for read and write
operations, the <tt>read-props</tt> and <tt>write-props</tt> type parameters can be
given distinct types:</t>
          <figure anchor="prop-ext-rw-types-example">
            <name>Example Property Protocol Map Extension with Distinct Read and Write Attribute Types</name>
            <sourcecode type="cddl"><![CDATA[=============== NOTE: '\' line wrapping per RFC 8792 ================

$$SDF-PROPERTY-PROTOCOL-MAP //= (
  property-protocol-map<"new-protocol", new-protocol-property, new-\
                 protocol-property-read, new-protocol-property-write>
)

new-protocol-property-read = {
  attributeA: text
}

new-protocol-property-write = {
  attributeA: text,
  attributeB: uint
}
]]></sourcecode>
          </figure>
          <t>An SDF model using this extension could look like:</t>
          <figure anchor="prop-ext-rw-types-json-example">
            <name>Example Property Protocol Map with Distinct Read and Write Attributes</name>
            <sourcecode type="json"><![CDATA[{
  "sdfProperty": {
    "temperature": {
      "type": "number",
      "unit": "Cel",
      "sdfProtocolMap": {
        "new-protocol": {
          "read": {
            "attributeA": "temperature-read-service"
          },
          "write": {
            "attributeA": "temperature-write-service",
            "attributeB": 2
          }
        }
      }
    }
  }
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="action-extension">
          <name>Action Extension</name>
          <t>The <tt>$$SDF-EXTENSION-ACTION</tt> group socket in the <tt>actionqualities</tt>
rule of <xref section="A" sectionFormat="of" target="RFC9880"/> is used to add protocol mapping to
<tt>sdfAction</tt> definitions:</t>
          <figure anchor="sdf-action-ext">
            <name>SDF Action Extension Point for Protocol Mapping</name>
            <sourcecode type="cddl"><![CDATA[
$$SDF-EXTENSION-ACTION //= (
  sdfProtocolMap: {
    * $$SDF-ACTION-PROTOCOL-MAP
  }
)
]]></sourcecode>
          </figure>
          <t>Actions use a simpler structure than properties, as they do not require the
read/write distinction. To extend <tt>$$SDF-ACTION-PROTOCOL-MAP</tt> for a new
protocol, implementers <bcp14>MUST</bcp14> add a group entry that maps the protocol name to the
protocol-specific attributes. For example, an extension for a fictitious
"new-protocol" could be defined as:</t>
          <figure anchor="action-ext-example">
            <name>Example Action Protocol Map Extension</name>
            <sourcecode type="cddl"><![CDATA[$$SDF-ACTION-PROTOCOL-MAP //= (
  "new-protocol": new-protocol-action
)

new-protocol-action = {
  commandID: uint
}
]]></sourcecode>
          </figure>
          <t>An SDF model using this extension could look like:</t>
          <figure anchor="action-ext-json-example">
            <name>Example Action Protocol Map in JSON</name>
            <sourcecode type="json"><![CDATA[{
  "sdfAction": {
    "reset": {
      "sdfProtocolMap": {
        "new-protocol": {
          "commandID": 42
        }
      }
    }
  }
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="event-extension">
          <name>Event Extension</name>
          <t>The <tt>$$SDF-EXTENSION-EVENT</tt> group socket in the <tt>eventqualities</tt>
rule of <xref section="A" sectionFormat="of" target="RFC9880"/> is used to add protocol mapping to
<tt>sdfEvent</tt> definitions:</t>
          <figure anchor="sdf-event-ext">
            <name>SDF Event Extension Point for Protocol Mapping</name>
            <sourcecode type="cddl"><![CDATA[
$$SDF-EXTENSION-EVENT //= (
  sdfProtocolMap: {
    * $$SDF-EVENT-PROTOCOL-MAP
  }
)
]]></sourcecode>
          </figure>
          <t>Events follow the same simple pattern as actions. To extend
<tt>$$SDF-EVENT-PROTOCOL-MAP</tt> for a new protocol, implementers add a group entry
that maps the protocol name to the protocol-specific attributes. For example, an
extension for a fictitious "new-protocol" could be defined as:</t>
          <figure anchor="event-ext-example">
            <name>Example Event Protocol Map Extension</name>
            <sourcecode type="cddl"><![CDATA[$$SDF-EVENT-PROTOCOL-MAP //= (
  "new-protocol": new-protocol-event
)

new-protocol-event = {
  eventID: uint
}
]]></sourcecode>
          </figure>
          <t>An SDF model using this extension could look like:</t>
          <figure anchor="event-ext-json-example">
            <name>Example Event Protocol Map in JSON</name>
            <sourcecode type="json"><![CDATA[{
  "sdfEvent": {
    "alert": {
      "sdfProtocolMap": {
        "new-protocol": {
          "eventID": 3
        }
      }
    }
  }
}
]]></sourcecode>
          </figure>
        </section>
      </section>
    </section>
    <section anchor="registered-protocol-mappings">
      <name>Registered Protocol Mappings</name>
      <t>This section defines the protocol mappings registered by this document.</t>
      <section anchor="ble-pm">
        <name>BLE</name>
        <t>The BLE protocol mapping allows SDF models to specify how properties and events
should be accessed using Bluetooth Low Energy (BLE) protocol <xref target="BLE53"/>. The
mapping includes details such as service IDs and characteristic IDs that are
used to access the corresponding SDF affordances.</t>
        <section anchor="properties">
          <name>Properties</name>
          <t>For <tt>sdfProperty</tt>, the BLE protocol mapping structure is defined as follows:</t>
          <figure anchor="blemap1">
            <name>CDDL definition for BLE Protocol Mapping for sdfProperty</name>
            <sourcecode type="cddl"><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

$$SDF-PROPERTY-PROTOCOL-MAP //= (
  property-protocol-map<"ble", ble-property, ble-property, ble-\
                                                            property>
)

ble-property = {
  serviceID: text,
  characteristicID: text
}
]]></sourcecode>
          </figure>
          <t>Where:</t>
          <ul spacing="normal">
            <li>
              <t><tt>serviceID</tt> is the BLE service ID that corresponds to the SDF property.</t>
            </li>
            <li>
              <t><tt>characteristicID</tt> is the BLE characteristic ID that corresponds to the SDF property.</t>
            </li>
          </ul>
          <t>For example, a BLE protocol mapping for a temperature property:</t>
          <sourcecode type="json"><![CDATA[{
  "sdfProperty": {
    "temperature": {
      "sdfProtocolMap": {
        "ble": {
          "serviceID": "00001809-0000-1000-8000-00805f9b34fb",
          "characteristicID": "00002a1c-0000-1000-8000-00805f9b34fb"
        }
      }
    }
  }
}
]]></sourcecode>
          <t>For a temperature property that has different mappings for read and write operations,
here is an example of the BLE protocol mapping:</t>
          <sourcecode type="json"><![CDATA[=============== NOTE: '\' line wrapping per RFC 8792 ================

{
  "sdfProperty": {
    "temperature": {
      "sdfProtocolMap": {
        "ble": {
          "read": {
            "serviceID": "00001809-0000-1000-8000-00805f9b34fb",
            "characteristicID": "00002a1c-0000-1000-8000-\
                                                        00805f9b34fb"
          },
          "write": {
            "serviceID": "00001809-0000-1000-8000-00805f9b34fb",
            "characteristicID": "00002a51-0000-1000-8000-\
                                                        00805f9b34fb"
          }
        }
      }
    }
  }
}
]]></sourcecode>
        </section>
        <section anchor="events">
          <name>Events</name>
          <t>For <tt>sdfEvent</tt>s, the BLE protocol mapping structure is similar to
<tt>sdfProperties</tt>, but it <bcp14>MUST</bcp14> additionally include at least the <tt>type</tt> of
the event.</t>
          <figure anchor="blemap2">
            <name>BLE Protocol Mapping for sdfEvents</name>
            <sourcecode type="cddl"><![CDATA[
$$SDF-EVENT-PROTOCOL-MAP //= (
  ble: ble-event-map
)

ble-event-map = {
  type: "gatt",
  serviceID: text,
  characteristicID: text
} / { type: "advertisements" } / { type: "connection_events" }
]]></sourcecode>
          </figure>
          <t>Where:</t>
          <ul spacing="normal">
            <li>
              <t><tt>type</tt> specifies the type of BLE event, such as "gatt" for GATT events,
"advertisements" for advertisement events, or "connection_events" for
connection-related events.</t>
            </li>
            <li>
              <t><tt>serviceID</tt> and <tt>characteristicID</tt> identify the GATT service and
characteristic. They <bcp14>MUST</bcp14> be present when <tt>type</tt> is <tt>"gatt"</tt>, and <bcp14>MUST</bcp14> be
absent when <tt>type</tt> is <tt>"advertisements"</tt> or <tt>"connection_events"</tt>.</t>
            </li>
          </ul>
          <t>For example, a BLE event mapping for a heart rate measurement event:</t>
          <sourcecode type="json"><![CDATA[{
  "sdfEvent": {
    "heartRate": {
      "sdfProtocolMap": {
        "ble": {
          "type": "gatt",
          "serviceID": "0000180d-0000-1000-8000-00805f9b34fb",
          "characteristicID": "00002a37-0000-1000-8000-00805f9b34fb"
        }
      }
    }
  }
}
]]></sourcecode>
          <t>Here is an example of an <tt>isPresent</tt> event using BLE advertisements:</t>
          <sourcecode type="json"><![CDATA[{
  "sdfEvent": {
    "isPresent": {
      "sdfProtocolMap": {
        "ble": {
          "type": "advertisements"
        }
      }
    }
  }
}
]]></sourcecode>
        </section>
      </section>
      <section anchor="zigbee-pm">
        <name>Zigbee</name>
        <t>The Zigbee protocol mapping allows SDF models to specify how properties,
actions, and events should be accessed using the Zigbee protocol <xref target="Zigbee30"/>.
The mapping includes details such as cluster IDs and attribute IDs that are used
to access the corresponding SDF affordances.</t>
        <section anchor="properties-1">
          <name>Properties</name>
          <t>An <tt>sdfProperty</tt> is mapped to a Zigbee cluster attribute. The Zigbee property
protocol mapping structure is defined as follows:</t>
          <figure anchor="zigmap1">
            <name>CDDL definition for Zigbee Protocol Mapping for sdfProperty</name>
            <sourcecode type="cddl"><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

$$SDF-PROPERTY-PROTOCOL-MAP //= (
  property-protocol-map<"zigbee", zigbee-property, zigbee-property, \
                                                     zigbee-property>
)

zigbee-property = {
  endpointID: uint,
  clusterID: uint,
  attributeID: uint,
  attributeType: uint,
  ? profileID: uint,
  ? manufacturerCode: uint,
}
]]></sourcecode>
          </figure>
          <t>Where:</t>
          <ul spacing="normal">
            <li>
              <t><tt>endpointID</tt> is the Zigbee endpoint ID that corresponds to the SDF property.</t>
            </li>
            <li>
              <t><tt>clusterID</tt> is the Zigbee cluster ID that corresponds to the SDF property.</t>
            </li>
            <li>
              <t><tt>attributeID</tt> is the Zigbee attribute ID that corresponds to the SDF property.</t>
            </li>
            <li>
              <t><tt>attributeType</tt> is the Zigbee data type of the attribute, as defined by the Zigbee Cluster Library <xref target="ZCL7"/>.</t>
            </li>
            <li>
              <t><tt>profileID</tt> is the Zigbee application profile ID (optional). If not provided, it defaults to the Home Automation profile (0x0104), which is the default application profile defined in <xref target="Zigbee30"/>.</t>
            </li>
            <li>
              <t><tt>manufacturerCode</tt> is the Zigbee manufacturer code of the attribute (optional).</t>
            </li>
          </ul>
          <t>For example, a Zigbee protocol mapping for a temperature property may look as
follows:</t>
          <sourcecode type="json"><![CDATA[{
  "sdfProperty": {
    "temperature": {
      "sdfProtocolMap": {
        "zigbee": {
          "endpointID": 1,
          "clusterID": 1026,
          "attributeID": 0,
          "attributeType": 41,
          "profileID": 260
        }
      }
    }
  }
}
]]></sourcecode>
        </section>
        <section anchor="events-1">
          <name>Events</name>
          <t>An <tt>sdfEvent</tt> is mapped to a Zigbee cluster event such as attribute reporting
or a device-initiated write to an attribute on the gateway. The Zigbee event
protocol mapping structure is defined as follows. The <tt>"attribute_reporting"</tt>
and <tt>"write_event"</tt> variants reuse the <tt>zigbee-property</tt> definition from
<xref target="zigmap1"/> to identify the underlying Zigbee attribute:</t>
          <figure anchor="zigmap-event">
            <name>CDDL definition for Zigbee Protocol Mapping for sdfEvents</name>
            <sourcecode type="cddl"><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

$$SDF-EVENT-PROTOCOL-MAP //= (
  zigbee: zigbee-event-map
)

zigbee-event-map = zigbee-attribute-reporting / zigbee-write-event \
                                            / zigbee-connection-event

zigbee-attribute-reporting = {
  type: "attribute_reporting",
  ~zigbee-property,
  ? minReportingInterval: uint,
  ? maxReportingInterval: uint,
  ? reportableChange: number,
}

zigbee-write-event = {
  type: "write_event",
  ~zigbee-property,
}

zigbee-connection-event = {
  type: "connection_events",
}
]]></sourcecode>
          </figure>
          <t>Where:</t>
          <ul spacing="normal">
            <li>
              <t><tt>type</tt> is the type of Zigbee event. It <bcp14>MUST</bcp14> be one of:
              </t>
              <ul spacing="normal">
                <li>
                  <t><tt>"attribute_reporting"</tt>: the event is triggered by Zigbee attribute
reporting.</t>
                </li>
                <li>
                  <t><tt>"write_event"</tt>: the event is triggered by the device writing to an
attribute on the gateway.</t>
                </li>
                <li>
                  <t><tt>"connection_events"</tt>: the event is triggered when a Zigbee end device
joins or leaves the Zigbee network.</t>
                </li>
              </ul>
            </li>
            <li>
              <t><tt>endpointID</tt>, <tt>clusterID</tt>, <tt>attributeID</tt>, <tt>attributeType</tt>, <tt>profileID</tt>, and
<tt>manufacturerCode</tt> have the same meaning as described for <tt>sdfProperty</tt> in
<xref target="zigmap1"/>. These fields are present when <tt>type</tt> is <tt>"attribute_reporting"</tt>
or <tt>"write_event"</tt>, and <bcp14>MUST</bcp14> be absent when <tt>type</tt> is <tt>"connection_events"</tt>.</t>
            </li>
            <li>
              <t><tt>minReportingInterval</tt> is the minimum reporting interval in seconds
(optional). It is the minimum time between issued attribute reports and
only applies when <tt>type</tt> is <tt>"attribute_reporting"</tt>.</t>
            </li>
            <li>
              <t><tt>maxReportingInterval</tt> is the maximum reporting interval in seconds
(optional). It is the maximum time between issued attribute reports and
only applies when <tt>type</tt> is <tt>"attribute_reporting"</tt>.</t>
            </li>
            <li>
              <t><tt>reportableChange</tt> is the minimum change to the attribute value that triggers
a report (optional). It only applies when <tt>type</tt> is <tt>"attribute_reporting"</tt>
and to attributes whose <tt>attributeType</tt> is one of the "analog" data types
defined by the Zigbee Cluster Library <xref target="ZCL7"/> (e.g., unsigned
and signed integers, floating point numbers), as opposed to "discrete" data types
(e.g., booleans, enumerations, bitmaps), for which reporting a minimum
change is not meaningful. The value is interpreted in the same Zigbee data
type as the reported attribute's <tt>attributeType</tt>.</t>
            </li>
          </ul>
          <t>For example, a Zigbee event mapping for a temperature change report:</t>
          <sourcecode type="json"><![CDATA[{
  "sdfEvent": {
    "temperatureChange": {
      "sdfProtocolMap": {
        "zigbee": {
          "type": "attribute_reporting",
          "profileID": 260,
          "endpointID": 1,
          "clusterID": 1026,
          "attributeID": 0,
          "attributeType": 41,
          "minReportingInterval": 10,
          "maxReportingInterval": 300,
          "reportableChange": 50
        }
      }
    }
  }
}
]]></sourcecode>
          <t>Here is an example of an <tt>isPresent</tt> event using Zigbee connection events:</t>
          <sourcecode type="json"><![CDATA[{
  "sdfEvent": {
    "isPresent": {
      "sdfProtocolMap": {
        "zigbee": {
          "type": "connection_events"
        }
      }
    }
  }
}
]]></sourcecode>
        </section>
        <section anchor="actions">
          <name>Actions</name>
          <t>An <tt>sdfAction</tt> is mapped to a Zigbee cluster command. The Zigbee protocol
mapping structure for actions is defined as follows:</t>
          <figure anchor="zigmap2">
            <name>CDDL definition for Zigbee Protocol Mapping for sdfAction</name>
            <sourcecode type="cddl"><![CDATA[
$$SDF-ACTION-PROTOCOL-MAP //= (
  zigbee: zigbee-action-map
)

zigbee-action-map = {
  endpointID: uint,
  clusterID: uint,
  commandID: uint,
  ? profileID: uint,
  ? manufacturerCode: uint,
}
]]></sourcecode>
          </figure>
          <t>Where:</t>
          <ul spacing="normal">
            <li>
              <t><tt>endpointID</tt> is the Zigbee endpoint ID that corresponds to the SDF action.</t>
            </li>
            <li>
              <t><tt>clusterID</tt> is the Zigbee cluster ID that corresponds to the SDF action.</t>
            </li>
            <li>
              <t><tt>commandID</tt> is the Zigbee command ID that corresponds to the SDF action.</t>
            </li>
            <li>
              <t><tt>profileID</tt> has the same meaning and default as described for <tt>sdfProperty</tt> in
<xref target="zigmap1"/> (optional).</t>
            </li>
            <li>
              <t><tt>manufacturerCode</tt> is the Zigbee manufacturer code of the command (optional).</t>
            </li>
          </ul>
          <t>For example, a Zigbee protocol mapping to set a temperature:</t>
          <sourcecode type="json"><![CDATA[{
  "sdfAction": {
    "setTemperature": {
      "sdfProtocolMap": {
        "zigbee": {
          "profileID": 260,
          "endpointID": 1,
          "clusterID": 1026,
          "commandID": 0
        }
      }
    }
  }
}
]]></sourcecode>
        </section>
      </section>
    </section>
    <section anchor="scim-sdf-extension">
      <name>SCIM SDF Extension</name>
      <t>While SDF provides a way to describe a device class and SCIM defines a device
instance, a method is needed to associate a mapping between an instance of a
device and its associated SDF models. To accomplish so, this document defines
a SCIM extension that <bcp14>MAY</bcp14> be used in conjunction with
<xref target="RFC9944"/> in <xref target="scim-sdf-extension-schema"/>. Implementation
of this SCIM extension is <bcp14>OPTIONAL</bcp14> and independent of the protocol mapping
functionality defined in the rest of this document. The SCIM schema attributes
used here are described in Section 7 of <xref target="RFC7643"/>.</t>
      <figure anchor="scim-sdf-extension-schema">
        <name>SCIM SDF Extension Schema</name>
        <sourcecode type="json"><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

{
    "id": "urn:ietf:params:scim:schemas:extension:sdf:2.0:Device",
    "name": "SDFExtension",
    "description": "Device extension schema for SDF.",
    "attributes": [
        {
            "name": "sdf",
            "type": "string",
            "description": "SDF models supported by the device.",
            "multiValued": true,
            "required": true,
            "caseExact": true,
            "mutability": "readWrite",
            "returned": "default",
            "uniqueness": "none"
        }
    ],
    "meta": {
        "resourceType": "Schema",
        "location": "/v2/Schemas/urn:ietf:params:scim:schemas:\
                                            extension:sdf:2.0:Device"
    }
}
]]></sourcecode>
      </figure>
      <t>Here is an example SCIM device schema extension with SDF models:</t>
      <sourcecode type="json"><![CDATA[{
    "schemas": [
        "urn:ietf:params:scim:schemas:core:2.0:Device",
        "urn:ietf:params:scim:schemas:extension:sdf:2.0:Device"
    ],
    "id": "e9e30dba-f08f-4109-8486-d5c6a3316111",
    "displayName": "Heart Monitor",
    "active": true,
    "urn:ietf:params:scim:schemas:extension:sdf:2.0:Device": {
        "sdf": [
            "https://example.com/thermometer#/sdfThing/thermometer",
            "https://example.com/heartrate#/sdfObject/healthsensor"
        ]
    }
}
]]></sourcecode>
      <t>An SDF model <bcp14>MUST</bcp14> be referenced with the <tt>sdf</tt> keyword inside the SCIM device
schema as described in <xref target="RFC9944"/>.</t>
    </section>
    <section removeInRFC="true" anchor="implementation-status">
      <name>Implementation Status</name>
      <t>This section records the status of known implementations of the
protocol defined by this specification at the time of posting of
this Internet-Draft, and is based on a proposal described in
<xref target="RFC7942"/>.  The description of implementations in this section is
intended to assist the IETF in its decision processes in
progressing drafts to RFCs.  Please note that the listing of any
individual implementation here does not imply endorsement by the
IETF.  Furthermore, no effort has been spent to verify the
information presented here that was supplied by IETF contributors.
This is not intended as, and must not be construed to be, a
catalog of available implementations or their features.  Readers
are advised to note that other implementations may exist.</t>
      <t>According to <xref target="RFC7942"/>, "this will allow reviewers and working
groups to assign due consideration to documents that have the
benefit of running code, which may serve as evidence of valuable
experimentation and feedback that have made the implemented
protocols more mature.  It is up to the individual working groups
to use this information as they see fit".</t>
      <section anchor="tiedie-iot">
        <name>TieDie IoT</name>
        <t>Organization: Cisco Systems, North Carolina State University</t>
        <t>Description: Open-source implementation of a gateway and SDKs that implement the SDF Protocol Mapping for BLE.</t>
        <t>Level of maturity: Open-source prototype</t>
        <t>Coverage: All SDF Protocol Mappings for BLE</t>
        <t>Version compatibility: draft-11</t>
        <t>Licensing: Apache License, Version 2.0</t>
        <t>URL: <eref target="https://github.com/iot-onboarding/tiedie"/></t>
      </section>
      <section anchor="cisco-sensor-connect-for-iot-services">
        <name>Cisco Sensor Connect for IoT Services</name>
        <t>Organization: Cisco Systems</t>
        <t>Description: Commercial solution that delivers advanced BLE capabilities over Cisco Wireless infrastructure.</t>
        <t>Level of maturity: Production</t>
        <t>Coverage: All SDF Protocol Mappings for BLE and Zigbee</t>
        <t>Version compatibility: draft-11</t>
        <t>Licensing: Proprietary</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The security considerations of <xref target="RFC9880"/> apply to this document as well.</t>
      <t>Each protocol mapped using this mechanism has its own security model.
The protocol mapping mechanism defined in this document does not provide
additional security beyond what is offered by the underlying protocols.
Implementations <bcp14>MUST</bcp14> ensure that appropriate protocol-level security
mechanisms are employed when accessing affordances through the mapped
protocol operations.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This section provides guidance to the Internet Assigned Numbers Authority
(IANA) regarding registration of values related to this document,
in accordance with <xref target="RFC8126"/>.</t>
      <section anchor="iana-prot-map">
        <name>Protocol Mapping</name>
        <t>IANA is requested to create a new registry called "SDF Protocol Mapping" in
the "Semantic Definition Format (SDF)" registry group <xref target="IANA.sdf"/>, with the following template:</t>
        <ul spacing="normal">
          <li>
            <t>Protocol map name, as per <tt>sdfProtocolMap</tt></t>
          </li>
          <li>
            <t>Protocol name</t>
          </li>
          <li>
            <t>Description</t>
          </li>
          <li>
            <t>Reference of the specification describing the protocol mapping.</t>
          </li>
        </ul>
        <t>The registration policy for this registry is "Specification Required" as
defined in Section 4.6 of <xref target="RFC8126"/>. Protocol names used as keys in the
<tt>sdfProtocolMap</tt> object (e.g., "ble", "zigbee") are registered in this
registry.</t>
        <t>The specification describing a new SDF protocol mapping is expected to
include:</t>
        <ul spacing="normal">
          <li>
            <t>A CDDL definition that extends at least one of the group sockets
defined in this document:
<tt>$$SDF-PROPERTY-PROTOCOL-MAP</tt> (<xref target="property-extension"/>),
<tt>$$SDF-ACTION-PROTOCOL-MAP</tt> (<xref target="action-extension"/>), or
<tt>$$SDF-EVENT-PROTOCOL-MAP</tt> (<xref target="event-extension"/>).
Property mappings use the <tt>property-protocol-map</tt> generic
(<xref target="property-extension"/>) to ensure a consistent structure.</t>
          </li>
          <li>
            <t>A description of the protocol-specific attributes introduced by the
CDDL extension, including their semantics and how they relate to the
underlying protocol operations.</t>
          </li>
        </ul>
        <t>The designated expert(s) verify that the specification meets the above
requirements, and that the protocol map name is appropriately named and
unlikely to cause confusion.</t>
        <t>The registrant of an existing entry may request updates to that entry, subject to the same expert review.
They should verify that updates preserve backward compatibility with deployed implementations, or if breaking changes are necessary, consider whether a new registry entry is more appropriate.</t>
        <t>The following protocol mappings are described in this document:</t>
        <table anchor="protmap-reg">
          <name>Protocol Mapping Registry</name>
          <thead>
            <tr>
              <th align="left">Protocol Map Name</th>
              <th align="left">Protocol Name</th>
              <th align="left">Description</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">ble</td>
              <td align="left">Bluetooth Low Energy (BLE)</td>
              <td align="left">Protocol mapping for BLE devices</td>
              <td align="left">This document, <xref target="ble-pm"/></td>
            </tr>
            <tr>
              <td align="left">zigbee</td>
              <td align="left">Zigbee</td>
              <td align="left">Protocol mapping for Zigbee devices</td>
              <td align="left">This document, <xref target="zigbee-pm"/></td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="scim-device-schema-sdf-extension">
        <name>SCIM Device Schema SDF Extension</name>
        <t>IANA is requested to create the following extension in the "SCIM
Server-Related Schema URIs" registry, within the "System for Cross-domain
Identity Management (SCIM) Schema URIs" registry group <xref target="IANA.scim"/>, as
described in <xref target="scim-sdf-extension"/>:</t>
        <table anchor="iana-scim">
          <name>SCIM Device Schema SDF Extension</name>
          <thead>
            <tr>
              <th align="left">URN</th>
              <th align="left">Description</th>
              <th align="left">Resource Type</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">urn:ietf:params:scim: schemas:extension: sdf:2.0:Device</td>
              <td align="left">SDF Extension</td>
              <td align="left">Device</td>
              <td align="left">This document, <xref target="scim-sdf-extension"/></td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <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="RFC9880">
          <front>
            <title>Semantic Definition Format (SDF) for Data and Interactions of Things</title>
            <author fullname="M. Koster" initials="M." role="editor" surname="Koster"/>
            <author fullname="C. Bormann" initials="C." role="editor" surname="Bormann"/>
            <author fullname="A. Keränen" initials="A." surname="Keränen"/>
            <date month="January" year="2026"/>
            <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. An SDF specification describes definitions of SDF Objects/SDF Things and their associated interactions (Events, Actions, and 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="RFC" value="9880"/>
          <seriesInfo name="DOI" value="10.17487/RFC9880"/>
        </reference>
        <reference anchor="RFC9944">
          <front>
            <title>Device Schema Extensions to the System for Cross-Domain Identity Management (SCIM) Model</title>
            <author fullname="M. Shahzad" initials="M." surname="Shahzad"/>
            <author fullname="H. Iqbal" initials="H." surname="Iqbal"/>
            <author fullname="E. Lear" initials="E." surname="Lear"/>
            <date month="May" year="2026"/>
            <abstract>
              <t>The initial core schema for the System for Cross-domain Identity Management (SCIM) was designed for provisioning users. This memo specifies schema extensions that enable provisioning of devices using various underlying bootstrapping systems such as Wi-Fi Easy Connect, FIDO device onboarding vouchers, Bluetooth Low Energy (BLE) passcodes, and MAC Authenticated Bypass (MAB).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9944"/>
          <seriesInfo name="DOI" value="10.17487/RFC9944"/>
        </reference>
        <reference anchor="BLE53" target="https://www.bluetooth.com/specifications/specs/core-specification-5-3/">
          <front>
            <title>Bluetooth Core Specification Version 5.3</title>
            <author>
              <organization>Bluetooth SIG</organization>
            </author>
            <date year="2021" month="July" day="13"/>
          </front>
        </reference>
        <reference anchor="Zigbee30" target="https://csa-iot.org/wp-content/uploads/2024/07/docs-05-3474-23-csg-zigbee-specificationR23.1.pdf">
          <front>
            <title>Zigbee Specification</title>
            <author>
              <organization>Connectivity Standards Alliance</organization>
            </author>
            <date year="2024" month="July"/>
          </front>
          <seriesInfo name="CSA" value="Document 05-3474-23 (Revision R23.1)"/>
        </reference>
        <reference anchor="ZCL7" target="https://csa-iot.org/wp-content/uploads/2022/01/07-5123-07-zigbeeclusterlibrary_revision_7-1.pdf">
          <front>
            <title>Zigbee Cluster Library Specification</title>
            <author>
              <organization>Connectivity Standards Alliance</organization>
            </author>
            <date year="2018" month="February"/>
          </front>
          <seriesInfo name="CSA" value="Document 07-5123 (Revision 7)"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC7643">
          <front>
            <title>System for Cross-domain Identity Management: Core Schema</title>
            <author fullname="P. Hunt" initials="P." role="editor" surname="Hunt"/>
            <author fullname="K. Grizzle" initials="K." surname="Grizzle"/>
            <author fullname="E. Wahlstroem" initials="E." surname="Wahlstroem"/>
            <author fullname="C. Mortimore" initials="C." surname="Mortimore"/>
            <date month="September" year="2015"/>
            <abstract>
              <t>The System for Cross-domain Identity Management (SCIM) specifications are designed to make identity management in cloud-based applications and services easier. The specification suite builds upon experience with existing schemas and deployments, placing specific emphasis on simplicity of development and integration, while applying existing authentication, authorization, and privacy models. Its intent is to reduce the cost and complexity of user management operations by providing a common user schema and extension model as well as binding documents to provide patterns for exchanging this schema using HTTP.</t>
              <t>This document provides a platform-neutral schema and extension model for representing users and groups and other resource types in JSON format. This schema is intended for exchange and use with cloud service providers.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7643"/>
          <seriesInfo name="DOI" value="10.17487/RFC7643"/>
        </reference>
        <reference anchor="RFC8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <date month="June" year="2017"/>
            <abstract>
              <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>
        <reference anchor="IANA.sdf" target="https://www.iana.org/assignments/sdf">
          <front>
            <title>Semantic Definition Format (SDF)</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="IANA.scim" target="https://www.iana.org/assignments/scim">
          <front>
            <title>System for Cross-domain Identity Management (SCIM) Schema URIs</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="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>
        <reference anchor="RFC7252">
          <front>
            <title>The Constrained Application Protocol (CoAP)</title>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby"/>
            <author fullname="K. Hartke" initials="K." surname="Hartke"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a specialized web transfer protocol for use with constrained nodes and constrained (e.g., low-power, lossy) networks. The nodes often have 8-bit microcontrollers with small amounts of ROM and RAM, while constrained networks such as IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs) often have high packet error rates and a typical throughput of 10s of kbit/s. The protocol is designed for machine- to-machine (M2M) applications such as smart energy and building automation.</t>
              <t>CoAP provides a request/response interaction model between application endpoints, supports built-in discovery of services and resources, and includes key concepts of the Web such as URIs and Internet media types. CoAP is designed to easily interface with HTTP for integration with the Web while meeting specialized requirements such as multicast support, very low overhead, and simplicity for constrained environments.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7252"/>
          <seriesInfo name="DOI" value="10.17487/RFC7252"/>
        </reference>
        <reference anchor="RFC7942">
          <front>
            <title>Improving Awareness of Running Code: The Implementation Status Section</title>
            <author fullname="Y. Sheffer" initials="Y." surname="Sheffer"/>
            <author fullname="A. Farrel" initials="A." surname="Farrel"/>
            <date month="July" year="2016"/>
            <abstract>
              <t>This document describes a simple process that allows authors of Internet-Drafts to record the status of known implementations by including an Implementation Status section. This will allow reviewers and working groups to assign due consideration to documents that have the benefit of running code, which may serve as evidence of valuable experimentation and feedback that have made the implemented protocols more mature.</t>
              <t>This process is not mandatory. Authors of Internet-Drafts are encouraged to consider using the process for their documents, and working groups are invited to think about applying the process to all of their protocol specifications. This document obsoletes RFC 6982, advancing it to a Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="205"/>
          <seriesInfo name="RFC" value="7942"/>
          <seriesInfo name="DOI" value="10.17487/RFC7942"/>
        </reference>
      </references>
    </references>
    <?line 992?>

<section anchor="cddl-definition">
      <name>CDDL Definition</name>
      <t>This appendix contains the combined CDDL definitions for the SDF protocol mappings.</t>
      <figure anchor="sdf-protocol-map-cddl">
        <name>CDDL for SDF protocol mappings</name>
        <sourcecode type="cddl" name="sdf-protocol-map.cddl" markers="true"><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

$$SDF-EXTENSION-PROPERTY //= (
  sdfProtocolMap: {
    * $$SDF-PROPERTY-PROTOCOL-MAP
  }
)

property-protocol-map<name, props, read-props, write-props> = (
  name => props /
    {
      read: read-props,
      write: write-props
    }
)

$$SDF-EXTENSION-ACTION //= (
  sdfProtocolMap: {
    * $$SDF-ACTION-PROTOCOL-MAP
  }
)

$$SDF-EXTENSION-EVENT //= (
  sdfProtocolMap: {
    * $$SDF-EVENT-PROTOCOL-MAP
  }
)

$$SDF-PROPERTY-PROTOCOL-MAP //= (
  property-protocol-map<"ble", ble-property, ble-property, ble-\
                                                            property>
)

ble-property = {
  serviceID: text,
  characteristicID: text
}

$$SDF-EVENT-PROTOCOL-MAP //= (
  ble: ble-event-map
)

ble-event-map = {
  type: "gatt",
  serviceID: text,
  characteristicID: text
} / { type: "advertisements" } / { type: "connection_events" }

$$SDF-PROPERTY-PROTOCOL-MAP //= (
  property-protocol-map<"zigbee", zigbee-property, zigbee-property, \
                                                     zigbee-property>
)

zigbee-property = {
  endpointID: uint,
  clusterID: uint,
  attributeID: uint,
  attributeType: uint,
  ? profileID: uint,
  ? manufacturerCode: uint,
}

$$SDF-EVENT-PROTOCOL-MAP //= (
  zigbee: zigbee-event-map
)

zigbee-event-map = zigbee-attribute-reporting / zigbee-write-event \
                                            / zigbee-connection-event

zigbee-attribute-reporting = {
  type: "attribute_reporting",
  ~zigbee-property,
  ? minReportingInterval: uint,
  ? maxReportingInterval: uint,
  ? reportableChange: number,
}

zigbee-write-event = {
  type: "write_event",
  ~zigbee-property,
}

zigbee-connection-event = {
  type: "connection_events",
}

$$SDF-ACTION-PROTOCOL-MAP //= (
  zigbee: zigbee-action-map
)

zigbee-action-map = {
  endpointID: uint,
  clusterID: uint,
  commandID: uint,
  ? profileID: uint,
  ? manufacturerCode: uint,
}

]]></sourcecode>
      </figure>
    </section>
    <section anchor="openapi-definition">
      <name>OpenAPI Definition</name>
      <t>The following non-normative model is provided for convenience of the implementer.</t>
      <figure anchor="protocolmapmodel">
        <name>OpenAPI model</name>
        <sourcecode type="yaml" name="ProtocolMap.yaml" markers="true"><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

openapi: 3.0.3
info:
  title: SDF Protocol Mapping
  description: |-
    SDF Protocol Mapping. When adding a
    new protocol mapping please add a reference to the protocol map
    for all the schemas in this file.
  version: 0.10.0
externalDocs:
  description: SDF Protocol Mapping IETF draft
  url: https://datatracker.ietf.org/doc/draft-ietf-asdf-sdf-protocol\
                                                            -mapping/

paths: {}

components:
  schemas:
## Protocol Map for a property
    ProtocolMap-Property:
      type: object
      properties:
        sdfProtocolMap:
          oneOf:  
            - $ref: './ProtocolMap-BLE.yaml#/components/schemas/\
                                             ProtocolMap-BLE-Propmap'
            - $ref: './ProtocolMap-Zigbee.yaml#/components/schemas/\
                                          ProtocolMap-Zigbee-Propmap'

## Protocol Map for an event
    ProtocolMap-Event:
      type: object
      properties:
        sdfProtocolMap:
          oneOf:  
            - $ref: './ProtocolMap-BLE.yaml#/components/schemas/\
                                               ProtocolMap-BLE-Event'
            - $ref: './ProtocolMap-Zigbee.yaml#/components/schemas/\
                                            ProtocolMap-Zigbee-Event'

## Protocol Map for an action
    ProtocolMap-Action:
      type: object
      properties:
        sdfProtocolMap:
          oneOf:  
            - $ref: './ProtocolMap-Zigbee.yaml#/components/schemas/\
                                           ProtocolMap-Zigbee-Action'
 
]]></sourcecode>
      </figure>
      <section anchor="protocol-map-for-ble">
        <name>Protocol map for BLE</name>
        <figure anchor="protocolmapble">
          <name>OpenAPI model for BLE</name>
          <sourcecode type="yaml" name="ProtocolMap-BLE.yaml" markers="true"><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

openapi: 3.0.3
info:
  title: SDF Protocol Mapping for BLE
  description: |-
    SDF Protocol Mapping for BLE devices.
  version: 0.10.0
externalDocs:
  description: SDF Protocol Mapping IETF draft
  url: https://datatracker.ietf.org/doc/draft-ietf-asdf-sdf-protocol\
                                                            -mapping/

paths: {}

components:
  schemas:
## Protocol Mapping for BLE Property
    ProtocolMap-BLE-Propmap:
      required:
        - ble
      type: object
      properties:
        ble:
          oneOf:
            - $ref: '#/components/schemas/BLE-Property'
            - type: object
              required:
                - read
                - write
              properties:
                read:
                  $ref: '#/components/schemas/BLE-Property'
                write:
                  $ref: '#/components/schemas/BLE-Property'

## Reusable BLE property object
    BLE-Property:
      required:
        - serviceID
        - characteristicID
      type: object
      properties:
        serviceID:
          type: string
          format: uuid
          example: 00001809-0000-1000-8000-00805f9b34fb
        characteristicID:
          type: string
          format: uuid
          example: 00002a1c-0000-1000-8000-00805f9b34fb

## Defines different types of BLE events
    ProtocolMap-BLE-Event:
      required:
        - ble
      type: object
      properties:
        ble:
          oneOf:
            - type: object
              required:
                - type
                - serviceID
                - characteristicID
              properties:
                type:
                  type: string
                  example: gatt
                  enum:
                    - gatt
                serviceID:
                  type: string
                  example: 00001809-0000-1000-8000-00805f9b34fb
                characteristicID:
                  type: string
                  example: 00002a1c-0000-1000-8000-00805f9b34fb
            - type: object
              required:
                - type
              properties:
                type:
                  type: string
                  example: advertisements
                  enum:
                    - advertisements
            - type: object
              required:
                - type
              properties:
                type:
                  type: string
                  example: connection_events
                  enum:
                    - connection_events
]]></sourcecode>
        </figure>
      </section>
      <section anchor="protocol-map-for-zigbee">
        <name>Protocol map for Zigbee</name>
        <figure anchor="protocolmapzigbee">
          <name>OpenAPI model for Zigbee</name>
          <sourcecode type="yaml" name="ProtocolMap-Zigbee.yaml" markers="true"><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

openapi: 3.0.3
info:
  title: SDF Protocol Mapping for Zigbee
  description: |-
    SDF Protocol Mapping for Zigbee devices.
  version: 0.10.0
externalDocs:
  description: SDF Protocol Mapping IETF draft
  url: https://datatracker.ietf.org/doc/draft-ietf-asdf-sdf-protocol\
                                                            -mapping/

paths: {}

components:
  schemas:
## Protocol mapping for Zigbee property
    ProtocolMap-Zigbee-Propmap:
      required:
        - zigbee
      type: object
      properties:
        zigbee:
          oneOf:
            - $ref: '#/components/schemas/Zigbee-Property'
            - type: object
              required:
                - read
                - write
              properties:
                read:
                  $ref: '#/components/schemas/Zigbee-Property'
                write:
                  $ref: '#/components/schemas/Zigbee-Property'

## Reusable Zigbee property object
    Zigbee-Property:
      required:
        - endpointID
        - clusterID
        - attributeID
        - attributeType
      type: object
      properties:
        endpointID:
          type: integer
          format: int32
          example: 1
        clusterID:
          type: integer
          format: int32
          example: 6
        attributeID:
          type: integer
          format: int32
          example: 16
        attributeType:
          type: integer
          format: int32
          example: 32
        profileID:
          type: integer
          format: int32
          example: 260
        manufacturerCode:
          type: integer
          format: int32
          example: 4174

    ProtocolMap-Zigbee-Event:
      required:
        - zigbee
      type: object
      properties:
        zigbee:
          oneOf:
            - type: object
              required:
                - type
                - endpointID
                - clusterID
                - attributeID
                - attributeType
              properties:
                type:
                  type: string
                  example: attribute_reporting
                  enum:
                    - attribute_reporting
                endpointID:
                  type: integer
                  format: int32
                  example: 1
                clusterID:
                  type: integer
                  format: int32
                  example: 6
                attributeID:
                  type: integer
                  format: int32
                  example: 16
                attributeType:
                  type: integer
                  format: int32
                  example: 41
                profileID:
                  type: integer
                  format: int32
                  example: 260
                manufacturerCode:
                  type: integer
                  format: int32
                minReportingInterval:
                  type: integer
                  format: int32
                  example: 10
                maxReportingInterval:
                  type: integer
                  format: int32
                  example: 300
                reportableChange:
                  type: number
                  example: 50
            - type: object
              required:
                - type
                - endpointID
                - clusterID
                - attributeID
                - attributeType
              properties:
                type:
                  type: string
                  example: write_event
                  enum:
                    - write_event
                endpointID:
                  type: integer
                  format: int32
                  example: 1
                clusterID:
                  type: integer
                  format: int32
                  example: 6
                attributeID:
                  type: integer
                  format: int32
                  example: 16
                attributeType:
                  type: integer
                  format: int32
                  example: 41
                profileID:
                  type: integer
                  format: int32
                  example: 260
                manufacturerCode:
                  type: integer
                  format: int32
            - type: object
              required:
                - type
              properties:
                type:
                  type: string
                  example: connection_events
                  enum:
                    - connection_events

## Protocol mapping for Zigbee action
    ProtocolMap-Zigbee-Action:
      required:
        - zigbee
      type: object
      properties:
        zigbee:
          required:
            - endpointID
            - clusterID
            - commandID
          type: object
          properties:
            endpointID:
              type: integer
              format: int32
              example: 1
            clusterID:
              type: integer
              format: int32
              example: 6
            commandID:
              type: integer
              format: int32
              example: 0
            profileID:
              type: integer
              format: int32
              example: 260
            manufacturerCode:
              type: integer
              format: int32
              example: 4174
]]></sourcecode>
        </figure>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>This document relies on SDF models described in <xref target="RFC9880"/>, as such, we are grateful to the authors of this document for putting their time and effort into defining SDF in depth, allowing us to make use of it.
The authors are grateful to Carsten Bormann, Jan Romann, Ari Keränen, and Eliot Lear
for their reviews and contributions to this document,
in particular Jan Romann for his help with the CDDL definitions (<xref target="sdf-protocol-map-cddl"/>)
and Eliot Lear for his contributions to <xref target="scim-sdf-extension"/>.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
7KwAAA==

-->

</rfc>
